15 SUBROUTINE zsqrt(AR, AI, BR, BI)
23 DOUBLE PRECISION ar, ai, br, bi, zm, dtheta, dpi, drt
24 DATA drt , dpi / 7.071067811865475244008443621d-1, &
25 3.141592653589793238462643383d+0/
28 IF (ar.EQ.0.0d+0)
GO TO 10
29 IF (ai.EQ.0.0d+0)
GO TO 20
31 IF (dtheta.LE.0.0d+0)
GO TO 40
32 IF (ar.LT.0.0d+0) dtheta = dtheta - dpi
34 10
IF (ai.GT.0.0d+0)
GO TO 60
35 IF (ai.LT.0.0d+0)
GO TO 70
39 20
IF (ar.GT.0.0d+0)
GO TO 30
46 40
IF (ar.LT.0.0d+0) dtheta = dtheta + dpi
47 50 dtheta = dtheta*0.5d+0
59 SUBROUTINE zexp(AR, AI, BR, BI)
67 DOUBLE PRECISION ar, ai, br, bi, zm, ca, cb
76 SUBROUTINE zmlt(AR, AI, BR, BI, CR, CI)
84 DOUBLE PRECISION ar, ai, br, bi, cr, ci, ca, cb
92 SUBROUTINE zdiv(AR, AI, BR, BI, CR, CI)
100 DOUBLE PRECISION ar, ai, br, bi, cr, ci, bm, ca, cb, cc, cd
101 bm = 1.0d0/zabs(br,bi)
104 ca = (ar*cc+ai*cd)*bm
105 cb = (ai*cc-ar*cd)*bm
111 SUBROUTINE zlog(AR, AI, BR, BI, IERR)
119 DOUBLE PRECISION ar, ai, br, bi, zm, dtheta, dpi, dhpi
120 DATA dpi , dhpi / 3.141592653589793238462643383d+0, &
121 1.570796326794896619231321696d+0/
124 IF (ar.EQ.0.0d+0)
GO TO 10
125 IF (ai.EQ.0.0d+0)
GO TO 20
126 dtheta = datan(ai/ar)
127 IF (dtheta.LE.0.0d+0)
GO TO 40
128 IF (ar.LT.0.0d+0) dtheta = dtheta - dpi
130 10
IF (ai.EQ.0.0d+0)
GO TO 60
133 IF (ai.LT.0.0d+0) bi = -bi
135 20
IF (ar.GT.0.0d+0)
GO TO 30
142 40
IF (ar.LT.0.0d+0) dtheta = dtheta + dpi
152 DOUBLE PRECISION FUNCTION zabs(ZR, ZI)
161 DOUBLE PRECISION zr, zi, u, v, q, s
170 IF (s.EQ.0.0d+0)
GO TO 20
173 zabs = v*dsqrt(1.d+0+q*q)
176 zabs = u*dsqrt(1.d+0+q*q)