| ! { 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 |