SUBROUTINE VISDO (Z1,S1,S2,Z2,NX,MX,NY,MY,US,VS,L,IS,PL) C [DOUBLE SURFACE] C S1,S2 ARRAYS CONTAINING THE TWO SURFACES C Z1,Z2 SPAN OF SURFACE VALUES C MX,MY COMMON DIMENSION OF THE ARRAYS S1 AND S2 C NX,NY SECTIONS OF S1 AND S2 ACTUALLY USED C US,VS TOTAL SHEARS IN U AND V DIRECTIONS C L DIRECTION OF VIEW (1=WEST, -1=EAST) C IS SEPARATION OPTION (1=YES , -1=NO) C PL PEN MOVEMENT SUBROUTINE C [15-MAY-74] EXTERNAL PL LOGICAL*1 P,Q DIMENSION S1(1),S2(1) VIRTUAL X1(351),T1(351),B1(351) VIRTUAL X2(351),T2(351),B2(351) VIRTUAL D(351),E(351),G(351),H(351) VIRTUAL A(351),B(351) VIRTUAL U(201),V1(201),V2(201) DATA M,MK,MA/1,201,351/ IX(J,I)=(I-1)*MX+J SC(Z)=ZS*(Z-Z1) N1=0 N2=0 N=L*M EF=1.0-VS EL=FLOAT(L) EM=FLOAT(M) ZS=EF/(Z2-Z1) TE=0.5*(EL+1.0) DUI=-(EL*US)/FLOAT(MY-1) DUJ=(1.0-US)/FLOAT(MX-1) DVI=VS/FLOAT(MY-1) I0=(NY+1-M*(NY-3))/2 J0=(NX+1-L*(NX-1))/2 K0=((MK+1)*(1-N))/2 10 K=K0 I=MAX0(MIN0(I0,NY+1),0) J=J0 EU=TE*US+DUI*FLOAT(I-1)+DUJ*FLOAT(J-1) VE= DVI*FLOAT(I-1) 20 IF ((I.LT.1).OR.(I.GT.NY)) GO TO 22 K=MAX0(MIN0(K+N,MK),1) U(K)=EU V1(K)=VE+SC(S1(IX(J,I))) V2(K)=VE+SC(S2(IX(J,I))) 22 I=I-M EU=EU-DUI VE=VE-EM*DVI IF ((I.LT.1).OR.(I.GT.NY)) GO TO 30 K=MAX0(MIN0(K+N,MK),1) U(K)=EU V1(K)=VE+SC(S1(IX(J,I))) V2(K)=VE+SC(S2(IX(J,I))) J=J+L EU=EU+EL*DUJ IF ((J.GE.1).AND.(J.LE.NX)) GO TO 20 30 P=L.LT.0 Q=L.GT.0 IF (P) KK=MK-K+1 IF (Q) CALL VISRB (A,B,NA,MA,U,V1,K,U,V2,K,1.0) IF (P) CALL VISRB (A,B,NA,MA,U(K),V1(K),KK,U(K),V2(K),KK,1.0) IF (Q) CALL VISRB (G,H,NG,MA,U,V1,K,U,V2,K,-1.0) IF (P) CALL VISRB (G,H,NG,MA,U(K),V1(K),KK,U(K),V2(K),KK,-1.0) IF (IS.LT.0) GO TO 40 DO 36 II=1,NA 36 B(II)=EF*B(II)+VS DO 38 II=1,NG 38 H(II)=EF*H(II) 40 CALL VISRB (D,E,ND,MA,A,B,NA,X1,T1,N1,1.0) CALL VISHH (X2,T2,B2,N2,D,E,ND,1,PL) CALL VISRB (D,E,ND,MA,G,H,NG,X2,B2,N2,-1.0) CALL VISHH (X1,T1,B1,N1,D,E,ND,-1,PL) I0=I0+M IF ((I0.GE.0).AND.(I0.LE.NY+1)) GO TO 10 J0=J0+L IF ((J0.GE.1).AND.(J0.LE.NX)) GO TO 10 RETURN END