SUBROUTINE VISRB (X,Y,J,M,X1,Y1,N1,X2,Y2,N2,S) C [RESTRICTED BOUND] C THE BOUND IS RESTRICTED TO THE INTERVAL WHERE THE FIRST C FUNCTION IS DEFINED. C X(M),Y(M) ARRAYS FOR THE BOUND OF TWO FUNCTIONS C J,M ACTUAL DIMENSION, MAXIMUM DIMENSION OF X,Y C X1(N1),Y1(N1) FIRST FUNCTION C X2(N2),Y2(N2) SECOND FUNCTION C S TYPE OF BOUND (S=1.0,UPPER; S=-1.0,LOWER) C [15-MAY-74] LOGICAL*1 EQ,VISSL VIRTUAL X(1),Y(1),X1(1),Y1(1),X2(1),Y2(1) EQ(X,Y)=ABS(Y-X).LE.1.0E-5 L=.TRUE. J=0 J1=1 J2=1 Z1=X1(J1) Z2=X2(J2) IF (N1.LE.1) RETURN IF (N2.LE.1) GO TO 60 IF (EQ(Z1,Z2)) GO TO 32 IF (Z1-Z2) 10,32,20 10 J=MIN0(J+1,M) X(J)=Z1 Y(J)=Y1(J1) J1=J1+1 Z1=X1(J1) IF (EQ(Z1,Z2)) GO TO 32 IF (Z1-Z2) 10,32,32 20 J2=J2+1 Z2=X2(J2) IF (EQ(Z1,Z2)) GO TO 32 IF (Z1-Z2) 32,32,20 30 IF (J1.GT.N1) RETURN IF (J2.GT.N2) GO TO 60 Z1=X1(J1) Z2=X2(J2) 32 Z=AMIN1(Z1,Z2) W1=VISLI(Z,X1,Y1,MAX0(J1,2)) W2=VISLI(Z,X2,Y2,MAX0(J2,2)) IF (EQ(Z,Z1)) J1=J1+1 IF (EQ(Z,Z2)) J2=J2+1 W=S*AMAX1(S*W1,S*W2) D=W1-W2 IF (L.OR.(J.LE.1)) GO TO 42 IF ((EQ(D,0.0)).OR.(EQ(E,0.0))) GO TO 41 IF (SIGN(1.0,D).EQ.SIGN(1.0,E)) GO TO 41 J=MIN0(J+1,M) X(J)=U-E*((Z-U)/(D-E)) Y(J)=WW+(X(J)-U)*((W1-WW)/(Z-U)) 41 IF (VISSL(Z,W,X,Y,J)) GO TO 43 42 J=MIN0(J+1,M) 43 X(J)=Z Y(J)=W L=.FALSE. E=D U=Z WW=W1 GO TO 30 60 IF (J1.GT.N1) RETURN J=MIN0(J+1,M) X(J)=X1(J1) Y(J)=Y1(J1) J1=J1+1 GO TO 60 END