-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsncndn.f
59 lines (59 loc) · 1.08 KB
/
sncndn.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
57
58
59
SUBROUTINE SNCNDN(UU,EMMC,SN,CN,DN)
PARAMETER (CA=.0003)
LOGICAL BO
DIMENSION EM(13),EN(13)
EMC=EMMC
U=UU
IF(EMC.NE.0.)THEN
BO=(EMC.LT.0.)
IF(BO)THEN
D=1.-EMC
EMC=-EMC/D
D=SQRT(D)
U=D*U
ENDIF
A=1.
DN=1.
DO 11 I=1,13
L=I
EM(I)=A
EMC=SQRT(EMC)
EN(I)=EMC
C=0.5*(A+EMC)
IF(ABS(A-EMC).LE.CA*A)GO TO 1
EMC=A*EMC
A=C
11 CONTINUE
1 U=C*U
SN=SIN(U)
CN=COS(U)
IF(SN.EQ.0.)GO TO 2
A=CN/SN
C=A*C
DO 12 II=L,1,-1
B=EM(II)
A=C*A
C=DN*C
DN=(EN(II)+A)/(B+A)
A=C/B
12 CONTINUE
A=1./SQRT(C**2+1.)
IF(SN.LT.0.)THEN
SN=-A
ELSE
SN=A
ENDIF
CN=C*SN
2 IF(BO)THEN
A=DN
DN=CN
CN=A
SN=SN/D
ENDIF
ELSE
CN=1./COSH(U)
DN=CN
SN=TANH(U)
ENDIF
RETURN
END