-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsfroid.f
56 lines (56 loc) · 1.5 KB
/
sfroid.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
PROGRAM SFROID
PARAMETER(NE=3,M=41,NB=1,NCI=NE,NCJ=NE-NB+1,NCK=M+1,NSI=NE,
* NSJ=2*NE+1,NYJ=NE,NYK=M)
COMMON X(M),H,MM,N,C2,ANORM
DIMENSION SCALV(NE),INDEXV(NE),Y(NE,M),C(NCI,NCJ,NCK),S(NSI,NSJ)
ITMAX=100
CONV=5.E-6
SLOWC=1.
H=1./(M-1)
C2=0.
WRITE(*,*)'ENTER M,N'
READ(*,*)MM,N
IF(MOD(N+MM,2).EQ.1)THEN
INDEXV(1)=1
INDEXV(2)=2
INDEXV(3)=3
ELSE
INDEXV(1)=2
INDEXV(2)=1
INDEXV(3)=3
ENDIF
ANORM=1.
IF(MM.NE.0)THEN
Q1=N
DO 11 I=1,MM
ANORM=-.5*ANORM*(N+I)*(Q1/I)
Q1=Q1-1.
11 CONTINUE
ENDIF
DO 12 K=1,M-1
X(K)=(K-1)*H
FAC1=1.-X(K)**2
FAC2=FAC1**(-MM/2.)
Y(1,K)=PLGNDR(N,MM,X(K))*FAC2
DERIV=-((N-MM+1)*PLGNDR(N+1,MM,X(K))-(N+1)*
* X(K)*PLGNDR(N,MM,X(K)))/FAC1
Y(2,K)=MM*X(K)*Y(1,K)/FAC1+DERIV*FAC2
Y(3,K)=N*(N+1)-MM*(MM+1)
12 CONTINUE
X(M)=1.
Y(1,M)=ANORM
Y(3,M)=N*(N+1)-MM*(MM+1)
Y(2,M)=(Y(3,M)-C2)*Y(1,M)/(2.*(MM+1.))
SCALV(1)=ABS(ANORM)
SCALV(2)=MAX(ABS(ANORM),Y(2,M))
SCALV(3)=MAX(1.,Y(3,M))
1 CONTINUE
WRITE (*,*) 'ENTER C**2 OR 999 TO END'
READ (*,*) C2
IF(C2.EQ.999.)STOP
CALL SOLVDE(ITMAX,CONV,SLOWC,SCALV,INDEXV,NE,NB,M,Y,NYJ,NYK,
* C,NCI,NCJ,NCK,S,NSI,NSJ)
WRITE (*,*) ' M = ',MM,' N = ',N,
* ' C**2 = ',C2,' LAMBDA = ',Y(3,1)+MM*(MM+1)
GO TO 1
END