PROGRAM D16R2 C Driver for routine SHOOTF PARAMETER(NVAR=3,N1=2,N2=1,DELTA=1.0E-3,EPS=1.0E-6,DXX=1.0E-4) DIMENSION V1(N2),DELV1(N2),V2(N1),DELV2(N1), * DV1(N2),DV2(N1),F(NVAR) COMMON C2,M,N,FACTR,DX 1 WRITE(*,*) 'INPUT M,N,C-SQUARED (999 TO STOP)' READ(*,*) M,N,C2 IF (C2.EQ.999.) STOP IF ((N.LT.M).OR.(M.LT.0)) THEN WRITE(*,*) 'Improper arguments' GOTO 1 ENDIF FACTR=1.0 IF (M.NE.0) THEN Q1=N DO 11 I=1,M FACTR=-0.5*FACTR*(N+I)*(Q1/I) Q1=Q1-1.0 11 CONTINUE ENDIF DX=DXX V1(1)=N*(N+1)-M*(M+1)+C2/2.0 IF (MOD(N-M,2).EQ.0) THEN V2(1)=SIGN(1.0,FACTR) ELSE V2(1)=-SIGN(1.0,FACTR) ENDIF V2(2)=V1(1)+1.0 DELV1(1)=DELTA*V1(1) DELV2(1)=DELTA*FACTR DELV2(2)=DELV1(1) H1=0.1 HMIN=0.0 X1=-1.0+DX X2=1.0-DX XF=0.0 WRITE(*,'(/1X,T20,A,T40,A,T60,A)') 'Mu(-1)','Y(1-dx)','Mu(+1)' 2 CALL SHOOTF(NVAR,V1,V2,DELV1,DELV2,N1,N2,X1,X2, * XF,EPS,H1,HMIN,F,DV1,DV2) WRITE(*,'(/4X,A,3F20.6)') 'V ',V1(1),V2(1),V2(2) WRITE(*,'(4X,A,3F20.6)') 'DV',DV1(1),DV2(1),DV2(2) IF (ABS(DV1(1)).GT.ABS(EPS*V1(1))) GOTO 2 END SUBROUTINE LOAD1(X1,V1,Y) COMMON C2,M,N,FACTR,DX DIMENSION V1(1),Y(3) Y(3)=V1(1) Y(2)=-(Y(3)-C2)*FACTR/2.0/(M+1.0) Y(1)=FACTR+Y(2)*DX RETURN END SUBROUTINE LOAD2(X2,V2,Y) COMMON C2,M,N DIMENSION V2(2),Y(3) Y(3)=V2(2) Y(1)=V2(1) Y(2)=(Y(3)-C2)*Y(1)/2.0/(M+1.0) RETURN END SUBROUTINE SCORE(XF,Y,F) COMMON C2,M,N DIMENSION Y(3),F(3) DO 11 I=1,3 F(I)=Y(I) 11 CONTINUE RETURN END SUBROUTINE DERIVS(X,Y,DYDX) COMMON C2,M,N DIMENSION Y(3),DYDX(3) DYDX(1)=Y(2) DYDX(3)=0.0 DYDX(2)=(2.0*X*(M+1.0)*Y(2)-(Y(3)-C2*X*X)*Y(1))/(1.0-X*X) RETURN END