Google
 

Trailing-Edge - PDP-10 Archives - decus_20tap1_198111 - decus/20-0025/ampbx.for
There is 1 other file named ampbx.for in the archive. Click here to see a list.
C	THE PROGRAM AMPBD.F4 IS A SAMPLE PROGRAM, WHEN USED IN
C	CONJUNCTION AMPBX(LOADED AND SAVED AS AMPBD.SAV) WILL
C	PRODUCE A RUNNING EXAMPLE OF THE USE OF AMPBX.
      SUBROUTINE AMPB2(IND,TEMP,X,DX,Y,F,N,ICOUNT,NITER,MTST)
      DIMENSION TEMP(500),Y(500),F(500),AK(2)
C  INTEGRATE TO NEXT POINT
401   M=N+1
      IF (ICOUNT-1)  5001, 406, 411
406   N1=NITER+1
      AK(1)=.92962963
      AK(2)=-.070370370
C  RESTORE PREVIOUS VALUES
411   X=TEMP(2*M+1)
      DO 421 I=2,M
      IP2M=I+2*M
      Y(I-1)=TEMP(IP2M)
      IP3M=IP2M+M
421   F(I-1)=TEMP(IP3M)
      IF (IND)  431, 5001, 501
431   IF (ICOUNT-4)  601, 701, 701
C  REDUCE DX
501   DX=DX/2.0
      ICOUNT=1
C  INTEGRATION BY RUNGE KUTTA
601   CALL RKPB2(TEMP,X,DX,Y,F,N)
      GO TO 1001
C  INTEGRATION BY ADAMS-MOULTON
C  INDEPENDENT VARIABLE
701   X=X+DX
      TEMP(M+1)=X
C  PREDICTOR VALUES
801   DO 821 I=2,M
      IPM=I+M
      IP2M=IPM+M
      IP3M=IP2M+M
      IP4M=IP3M+M
      IP5M=IP4M+M
      IP6M=IP5M+M
      Y(I-1)=TEMP(IP2M)+DX*(55.*TEMP(IP3M)-59.*TEMP(IP4M)+
     +     37.*TEMP(IP5M)-9.*TEMP(IP6M))/24.
      TEMP(IPM)=Y(I-1)
      IF (MTST)  811, 821,811
811	IF(ICOUNT-4) 5001,901,821
821     Y(I-1)=Y(I-1)+AK(1)/AK(2)*TEMP(1)
C  CORRECTOR VALUES
901   DO 991 J1=1,N1
 	CALL DERIV
      DO 921 I=2,M
	IPM=I+M
	IP2M=IPM+M
	IP3M=IP2M+M
	IP4M=IP3M+M
	IP5M=IP4M+M
      N=I-1
      Y(N)=TEMP(IP2M)+DX*(9.*F(I-1)+19.*TEMP(IP3M)-5.*TEMP(IP4M)
     +    +TEMP(IP5M))/24.
      TEMP(I)=AK(2)*(Y(N)-TEMP(IPM))
      IF (MTST)  911, 921,911
911   Y(N)=Y(N)+TEMP(I)
921	CONTINUE
991	CONTINUE
C  RESTORE NORMAL MODE
1001	IND=-1
5001	RETURN
	END
C     AMPB1************ADAMS-MOULTON INTEGRATION-1**********
      SUBROUTINE AMPB1(IND,TEMP,X,DX,Y,F,N,ICOUNT,NITER,MTST)
      DIMENSION TEMP(500),Y(500),F(500)
1     IF (IND)  101, 11, 101
11    ICOUNT=0
      GO TO 301
101   M=N+1
      DO 191 I=1,M
      DO 121 J1=1,ICOUNT
      I1=I+(ICOUNT+3-J1)*M
      I2=I1+M
121   TEMP(I2)=TEMP(I1)
191	CONTINUE
201	IF (IND) 301,301,302
302     IF (ICOUNT-6)  301, 211, 5001
211   DX=2.*DX
      DO 261 J1=1,3
      DO 241 I=1,M
      I1=I+(J1+3)*M
	IF (I-1) 5001,221,222
222     I2=I+(2*J1+3)*M
      TEMP(I1)=TEMP(I2)
      GO TO 241
221   TEMP(I1)=TEMP(I1)*2.
241	CONTINUE
261	CONTINUE
      ICOUNT=3
301   ICOUNT=  MIN0(ICOUNT+1,6)
      CALL RKPB1(TEMP,X,DX,Y,F,N)
1001  IND=-1
5001	RETURN
	END