blob: 271ce858d75eeb65736577f7c8af8c9968bb3840 [file] [log] [blame]
! { dg-do compile }
! { dg-options "-O3 -fno-automatic -std=legacy" }
FUNCTION WWERF(Z)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
COMPLEX*16 WWERF
COMPLEX*16 Z,ZH,R(37),S,T,V,W
PARAMETER (Z1 = 1, HF = Z1/2, Z10 = 10)
PARAMETER (C1 = 74/Z10, C2 = 83/Z10, C3 = Z10/32, C4 = 16/Z10)
PARAMETER (C = 1.12837 91670 95512 57D0, P = (2*C4)**33)
DOUBLE PRECISION GREAL,GIMAG,XARG,YARG
COMPLEX*16 ZARG,GCONJG,GCMPLX
GREAL( ZARG)=DREAL( ZARG)
GIMAG( ZARG)=DIMAG( ZARG)
GCONJG(ZARG)=DCONJG(ZARG)
GCMPLX(XARG,YARG)=DCMPLX(XARG,YARG)
X=Z
Y=GIMAG(Z)
XA=ABS(X)
YA=ABS(Y)
IF(YA .LT. C1 .AND. XA .LT. C2) THEN
ZH=GCMPLX(YA+C4,XA)
R(37)=0
DO 1 N = 36,1,-1
T=ZH+N*GCONJG(R(N+1))
1 R(N)=HF*T/(GREAL(T)**2+GIMAG(T)**2)
XL=P
S=0
DO 2 N = 33,1,-1
XL=C3*XL
2 S=R(N)*(S+XL)
V=C*S
ELSE
ZH=GCMPLX(YA,XA)
R(1)=0
DO 3 N = 9,1,-1
T=ZH+N*GCONJG(R(1))
3 R(1)=HF*T/(GREAL(T)**2+GIMAG(T)**2)
V=C*R(1)
END IF
IF(YA .EQ. 0) V=GCMPLX(EXP(-XA**2),GIMAG(V))
IF(Y .LT. 0) THEN
V=2*EXP(-GCMPLX(XA,YA)**2)-V
IF(X .GT. 0) V=GCONJG(V)
ELSE
IF(X .LT. 0) V=GCONJG(V)
END IF
WWERF=V
RETURN
END