Skip to content

Commit 9477a01

Browse files
committed
initial commit
adding files from https://space.mit.edu/home//gsg/doc/Voyager/src/nrf/ with additional files removed 189 .f source code files 189 .dem demonstration files 10 .dat data files 2 .doc readme files
0 parents  commit 9477a01

File tree

390 files changed

+13445
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

390 files changed

+13445
-0
lines changed

adi.dem

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
PROGRAM D17R2
2+
C Driver for routine ADI
3+
IMPLICIT REAL*8(A-H,O-Z)
4+
PARAMETER(JMAX=11,PI=3.1415926)
5+
DIMENSION A(JMAX,JMAX),B(JMAX,JMAX),C(JMAX,JMAX),D(JMAX,JMAX),
6+
* E(JMAX,JMAX),F(JMAX,JMAX),G(JMAX,JMAX),U(JMAX,JMAX)
7+
DO 12 I=1,JMAX
8+
DO 11 J=1,JMAX
9+
A(I,J)=-1.0
10+
B(I,J)=2.0
11+
C(I,J)=-1.0
12+
D(I,J)=-1.0
13+
E(I,J)=2.0
14+
F(I,J)=-1.0
15+
G(I,J)=0.0
16+
U(I,J)=0.0
17+
11 CONTINUE
18+
12 CONTINUE
19+
MID=JMAX/2+1
20+
G(MID,MID)=2.0
21+
ALPHA=2.0*(1.0-COS(PI/JMAX))
22+
BETA=2.0*(1.0-COS((JMAX-1)*PI/JMAX))
23+
ALIM=LOG(4.0*JMAX/PI)
24+
K=0
25+
1 K=K+1
26+
IF (2**K .LT. ALIM) GOTO 1
27+
EPS=1.0E-4
28+
CALL ADI(A,B,C,D,E,F,G,U,JMAX,K,ALPHA,BETA,EPS)
29+
WRITE(*, '(1X,A)') 'ADI Solution:'
30+
DO 13 I=1,JMAX
31+
WRITE(*,'(1X,11F7.2)') (U(I,J),J=1,JMAX)
32+
13 CONTINUE
33+
WRITE(*,'(/1X,A)') 'Test that solution satisfies Difference Eqns:'
34+
DO 15 I=2,JMAX-1
35+
DO 14 J=2,JMAX-1
36+
G(I,J)=-4.0*U(I,J)+U(I+1,J)
37+
* +U(I-1,J)+U(I,J-1)+U(I,J+1)
38+
14 CONTINUE
39+
WRITE(*,'(8X,9F7.2)') (G(I,J),J=2,JMAX-1)
40+
15 CONTINUE
41+
END
42+
43+
SUBROUTINE TRIDAG(A,B,C,R,U,N)
44+
C This is a double precision version for use with ADI
45+
IMPLICIT REAL*8(A-H,O-Z)
46+
PARAMETER (NMAX=100)
47+
DIMENSION GAM(NMAX),A(N),B(N),C(N),R(N),U(N)
48+
IF(B(1).EQ.0.)PAUSE
49+
BET=B(1)
50+
U(1)=R(1)/BET
51+
DO 11 J=2,N
52+
GAM(J)=C(J-1)/BET
53+
BET=B(J)-A(J)*GAM(J)
54+
IF(BET.EQ.0.)PAUSE
55+
U(J)=(R(J)-A(J)*U(J-1))/BET
56+
11 CONTINUE
57+
DO 12 J=N-1,1,-1
58+
U(J)=U(J)-GAM(J+1)*U(J+1)
59+
12 CONTINUE
60+
RETURN
61+
END

adi.f

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
SUBROUTINE ADI(A,B,C,D,E,F,G,U,JMAX,K,ALPHA,BETA,EPS)
2+
IMPLICIT REAL*8(A-H,O-Z)
3+
PARAMETER(JJ=100,KK=6,NRR=32,MAXITS=100,ZERO=0.D0,TWO=2.D0,HALF=.5
4+
*D0)
5+
DIMENSION A(JMAX,JMAX),B(JMAX,JMAX),C(JMAX,JMAX),D(JMAX,JMAX),
6+
* E(JMAX,JMAX),F(JMAX,JMAX),G(JMAX,JMAX),U(JMAX,JMAX),
7+
* AA(JJ),BB(JJ),CC(JJ),RR(JJ),UU(JJ),PSI(JJ,JJ),
8+
* ALPH(KK),BET(KK),R(NRR),S(NRR,KK)
9+
IF(JMAX.GT.JJ)PAUSE 'Increase JJ'
10+
IF(K.GT.KK-1)PAUSE 'Increase KK'
11+
K1=K+1
12+
NR=2**K
13+
ALPH(1)=ALPHA
14+
BET(1)=BETA
15+
DO 11 J=1,K
16+
ALPH(J+1)=SQRT(ALPH(J)*BET(J))
17+
BET(J+1)=HALF*(ALPH(J)+BET(J))
18+
11 CONTINUE
19+
S(1,1)=SQRT(ALPH(K1)*BET(K1))
20+
DO 13 J=1,K
21+
AB=ALPH(K1-J)*BET(K1-J)
22+
DO 12 N=1,2**(J-1)
23+
DISC=SQRT(S(N,J)**2-AB)
24+
S(2*N,J+1)=S(N,J)+DISC
25+
S(2*N-1,J+1)=AB/S(2*N,J+1)
26+
12 CONTINUE
27+
13 CONTINUE
28+
DO 14 N=1,NR
29+
R(N)=S(N,K1)
30+
14 CONTINUE
31+
ANORMG=ZERO
32+
DO 16 J=2,JMAX-1
33+
DO 15 L=2,JMAX-1
34+
ANORMG=ANORMG+ABS(G(J,L))
35+
PSI(J,L)=-D(J,L)*U(J,L-1)+(R(1)-E(J,L))*U(J,L)
36+
* -F(J,L)*U(J,L+1)
37+
15 CONTINUE
38+
16 CONTINUE
39+
NITS=MAXITS/NR
40+
DO 27 KITS=1,NITS
41+
DO 24 N=1,NR
42+
IF(N.EQ.NR)THEN
43+
NEXT=1
44+
ELSE
45+
NEXT=N+1
46+
ENDIF
47+
RFACT=R(N)+R(NEXT)
48+
DO 19 L=2,JMAX-1
49+
DO 17 J=2,JMAX-1
50+
AA(J-1)=A(J,L)
51+
BB(J-1)=B(J,L)+R(N)
52+
CC(J-1)=C(J,L)
53+
RR(J-1)=PSI(J,L)-G(J,L)
54+
17 CONTINUE
55+
CALL TRIDAG(AA,BB,CC,RR,UU,JMAX-2)
56+
DO 18 J=2,JMAX-1
57+
PSI(J,L)=-PSI(J,L)+TWO*R(N)*UU(J-1)
58+
18 CONTINUE
59+
19 CONTINUE
60+
DO 23 J=2,JMAX-1
61+
DO 21 L=2,JMAX-1
62+
AA(L-1)=D(J,L)
63+
BB(L-1)=E(J,L)+R(N)
64+
CC(L-1)=F(J,L)
65+
RR(L-1)=PSI(J,L)
66+
21 CONTINUE
67+
CALL TRIDAG(AA,BB,CC,RR,UU,JMAX-2)
68+
DO 22 L=2,JMAX-1
69+
U(J,L)=UU(L-1)
70+
PSI(J,L)=-PSI(J,L)+RFACT*UU(L-1)
71+
22 CONTINUE
72+
23 CONTINUE
73+
24 CONTINUE
74+
ANORM=ZERO
75+
DO 26 J=2,JMAX-1
76+
DO 25 L=2,JMAX-1
77+
RESID=A(J,L)*U(J-1,L)+(B(J,L)+E(J,L))*U(J,L)
78+
* +C(J,L)*U(J+1,L)+D(J,L)*U(J,L-1)
79+
* +F(J,L)*U(J,L+1)+G(J,L)
80+
ANORM=ANORM+ABS(RESID)
81+
25 CONTINUE
82+
26 CONTINUE
83+
IF(ANORM.LT.EPS*ANORMG)RETURN
84+
27 CONTINUE
85+
PAUSE 'MAXITS exceeded'
86+
END

amoeba.dem

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
PROGRAM D10R5
2+
C Driver for routine AMOEBA
3+
EXTERNAL FAMOEB
4+
PARAMETER(NP=3,MP=4,FTOL=1.0E-6)
5+
DIMENSION P(MP,NP),X(NP),Y(MP)
6+
DATA P/0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0/
7+
NDIM=NP
8+
DO 12 I=1,MP
9+
DO 11 J=1,NP
10+
X(J)=P(I,J)
11+
11 CONTINUE
12+
Y(I)=FAMOEB(X)
13+
12 CONTINUE
14+
CALL AMOEBA(P,Y,MP,NP,NDIM,FTOL,FAMOEB,ITER)
15+
WRITE(*,'(/1X,A,I3)') 'Iterations: ',ITER
16+
WRITE(*,'(/1X,A)') 'Vertices of final 3-D simplex and'
17+
WRITE(*,'(1X,A)') 'function values at the vertices:'
18+
WRITE(*,'(/3X,A,T11,A,T23,A,T35,A,T45,A/)') 'I',
19+
* 'X(I)','Y(I)','Z(I)','FUNCTION'
20+
DO 13 I=1,MP
21+
WRITE(*,'(1X,I3,4F12.6)') I,(P(I,J),J=1,NP),Y(I)
22+
13 CONTINUE
23+
WRITE(*,'(/1X,A)') 'True minimum is at (0.5,0.6,0.7)'
24+
END
25+
26+
FUNCTION FAMOEB(X)
27+
DIMENSION X(3)
28+
FAMOEB=0.6-BESSJ0((X(1)-0.5)**2+(X(2)-0.6)**2+(X(3)-0.7)**2)
29+
END

amoeba.f

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
SUBROUTINE AMOEBA(P,Y,MP,NP,NDIM,FTOL,FUNK,ITER)
2+
PARAMETER (NMAX=20,ALPHA=1.0,BETA=0.5,GAMMA=2.0,ITMAX=500)
3+
DIMENSION P(MP,NP),Y(MP),PR(NMAX),PRR(NMAX),PBAR(NMAX)
4+
MPTS=NDIM+1
5+
ITER=0
6+
1 ILO=1
7+
IF(Y(1).GT.Y(2))THEN
8+
IHI=1
9+
INHI=2
10+
ELSE
11+
IHI=2
12+
INHI=1
13+
ENDIF
14+
DO 11 I=1,MPTS
15+
IF(Y(I).LT.Y(ILO)) ILO=I
16+
IF(Y(I).GT.Y(IHI))THEN
17+
INHI=IHI
18+
IHI=I
19+
ELSE IF(Y(I).GT.Y(INHI))THEN
20+
IF(I.NE.IHI) INHI=I
21+
ENDIF
22+
11 CONTINUE
23+
RTOL=2.*ABS(Y(IHI)-Y(ILO))/(ABS(Y(IHI))+ABS(Y(ILO)))
24+
IF(RTOL.LT.FTOL)RETURN
25+
IF(ITER.EQ.ITMAX) PAUSE 'Amoeba exceeding maximum iterations.'
26+
ITER=ITER+1
27+
DO 12 J=1,NDIM
28+
PBAR(J)=0.
29+
12 CONTINUE
30+
DO 14 I=1,MPTS
31+
IF(I.NE.IHI)THEN
32+
DO 13 J=1,NDIM
33+
PBAR(J)=PBAR(J)+P(I,J)
34+
13 CONTINUE
35+
ENDIF
36+
14 CONTINUE
37+
DO 15 J=1,NDIM
38+
PBAR(J)=PBAR(J)/NDIM
39+
PR(J)=(1.+ALPHA)*PBAR(J)-ALPHA*P(IHI,J)
40+
15 CONTINUE
41+
YPR=FUNK(PR)
42+
IF(YPR.LE.Y(ILO))THEN
43+
DO 16 J=1,NDIM
44+
PRR(J)=GAMMA*PR(J)+(1.-GAMMA)*PBAR(J)
45+
16 CONTINUE
46+
YPRR=FUNK(PRR)
47+
IF(YPRR.LT.Y(ILO))THEN
48+
DO 17 J=1,NDIM
49+
P(IHI,J)=PRR(J)
50+
17 CONTINUE
51+
Y(IHI)=YPRR
52+
ELSE
53+
DO 18 J=1,NDIM
54+
P(IHI,J)=PR(J)
55+
18 CONTINUE
56+
Y(IHI)=YPR
57+
ENDIF
58+
ELSE IF(YPR.GE.Y(INHI))THEN
59+
IF(YPR.LT.Y(IHI))THEN
60+
DO 19 J=1,NDIM
61+
P(IHI,J)=PR(J)
62+
19 CONTINUE
63+
Y(IHI)=YPR
64+
ENDIF
65+
DO 21 J=1,NDIM
66+
PRR(J)=BETA*P(IHI,J)+(1.-BETA)*PBAR(J)
67+
21 CONTINUE
68+
YPRR=FUNK(PRR)
69+
IF(YPRR.LT.Y(IHI))THEN
70+
DO 22 J=1,NDIM
71+
P(IHI,J)=PRR(J)
72+
22 CONTINUE
73+
Y(IHI)=YPRR
74+
ELSE
75+
DO 24 I=1,MPTS
76+
IF(I.NE.ILO)THEN
77+
DO 23 J=1,NDIM
78+
PR(J)=0.5*(P(I,J)+P(ILO,J))
79+
P(I,J)=PR(J)
80+
23 CONTINUE
81+
Y(I)=FUNK(PR)
82+
ENDIF
83+
24 CONTINUE
84+
ENDIF
85+
ELSE
86+
DO 25 J=1,NDIM
87+
P(IHI,J)=PR(J)
88+
25 CONTINUE
89+
Y(IHI)=YPR
90+
ENDIF
91+
GO TO 1
92+
END

anneal.dem

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
PROGRAM D10R13
2+
PARAMETER (NCITY=10)
3+
DIMENSION X(NCITY),Y(NCITY),IORDER(NCITY)
4+
C Create points of sale
5+
IDUM=-111
6+
DO 11 I=1,NCITY
7+
X(I)=RAN3(IDUM)
8+
Y(I)=RAN3(IDUM)
9+
IORDER(I)=I
10+
11 CONTINUE
11+
CALL ANNEAL(X,Y,IORDER,NCITY)
12+
WRITE(*,*) '*** System Frozen ***'
13+
WRITE(*,*) 'Final path:'
14+
WRITE(*,'(1X,T3,A,T13,A,T23,A)') 'city','x','y'
15+
DO 12 I=1,NCITY
16+
II=IORDER(I)
17+
WRITE(*,'(1X,I4,2F10.4)') II,X(II),Y(II)
18+
12 CONTINUE
19+
END

anneal.f

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
SUBROUTINE ANNEAL(X,Y,IORDER,NCITY)
2+
C Rev. 12/13/85
3+
DIMENSION X(NCITY),Y(NCITY),IORDER(NCITY),N(6)
4+
LOGICAL ANS
5+
ALEN(X1,X2,Y1,Y2)=SQRT((X2-X1)**2+(Y2-Y1)**2)
6+
NOVER=100*NCITY
7+
NLIMIT=10*NCITY
8+
TFACTR=0.9
9+
PATH=0.0
10+
T=0.5
11+
DO 11 I=1,NCITY-1
12+
I1=IORDER(I)
13+
I2=IORDER(I+1)
14+
PATH=PATH+ALEN(X(I1),X(I2),Y(I1),Y(I2))
15+
11 CONTINUE
16+
I1=IORDER(NCITY)
17+
I2=IORDER(1)
18+
PATH=PATH+ALEN(X(I1),X(I2),Y(I1),Y(I2))
19+
IDUM=-1
20+
ISEED=111
21+
DO 15 J=1,100
22+
NSUCC=0
23+
DO 13 K=1,NOVER
24+
12 N(1)=1+INT(NCITY*RAN3(IDUM))
25+
N(2)=1+INT((NCITY-1)*RAN3(IDUM))
26+
IF (N(2).GE.N(1)) N(2)=N(2)+1
27+
IDEC=IRBIT1(ISEED)
28+
NN=1+MOD((N(1)-N(2)+NCITY-1),NCITY)
29+
IF (NN.LT.3) GOTO 12
30+
IF (IDEC.EQ.0) THEN
31+
N(3)=N(2)+INT(ABS(NN-2)*RAN3(IDUM))+1
32+
N(3)=1+MOD(N(3)-1,NCITY)
33+
CALL TRNCST(X,Y,IORDER,NCITY,N,DE)
34+
CALL METROP(DE,T,ANS)
35+
IF (ANS) THEN
36+
NSUCC=NSUCC+1
37+
PATH=PATH+DE
38+
CALL TRNSPT(IORDER,NCITY,N)
39+
ENDIF
40+
ELSE
41+
CALL REVCST(X,Y,IORDER,NCITY,N,DE)
42+
CALL METROP(DE,T,ANS)
43+
IF (ANS) THEN
44+
NSUCC=NSUCC+1
45+
PATH=PATH+DE
46+
CALL REVERS(IORDER,NCITY,N)
47+
ENDIF
48+
ENDIF
49+
IF (NSUCC.GE.NLIMIT) GOTO 14
50+
13 CONTINUE
51+
14 WRITE(*,*)
52+
WRITE(*,'(1X,A,F10.6,A,F10.6)') 'T =',T,
53+
* ' Path Length =',PATH
54+
WRITE(*,'(1X,A,I6)') 'Successful Moves: ',NSUCC
55+
T=T*TFACTR
56+
IF (NSUCC.EQ.0) RETURN
57+
15 CONTINUE
58+
RETURN
59+
END

avevar.dem

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
PROGRAM D13R5
2+
C Driver for routine AVEVAR
3+
PARAMETER(NPTS=1000, EPS=0.1)
4+
DIMENSION DATA(NPTS)
5+
C Generate Gaussian distributed data
6+
IDUM=-5
7+
WRITE(*,'(1X,T4,A,T14,A,T26,A)') 'Shift','Average','Variance'
8+
DO 12 I=1,11
9+
SHIFT=(I-1)*EPS
10+
DO 11 J=1,NPTS
11+
DATA(J)=SHIFT+I*GASDEV(IDUM)
12+
11 CONTINUE
13+
CALL AVEVAR(DATA,NPTS,AVE,VAR)
14+
WRITE(*,'(1X,F6.2,2F12.2)') SHIFT,AVE,VAR
15+
12 CONTINUE
16+
END

avevar.f

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
SUBROUTINE AVEVAR(DATA,N,AVE,VAR)
2+
DIMENSION DATA(N)
3+
AVE=0.0
4+
VAR=0.0
5+
DO 11 J=1,N
6+
AVE=AVE+DATA(J)
7+
11 CONTINUE
8+
AVE=AVE/N
9+
DO 12 J=1,N
10+
S=DATA(J)-AVE
11+
VAR=VAR+S*S
12+
12 CONTINUE
13+
VAR=VAR/(N-1)
14+
RETURN
15+
END

0 commit comments

Comments
 (0)