Using Silverfrost ftn95 for reactivating older Fortran programs which run in the 80s on an IBM 3032 Mainframe generally works fine, when replacing IBM specific commands/conventions. Currently, however, I'm stuck with a program calculating matrix elements. What puzzles me is the fact, that the 32Bit-Version delivers different results compared with the results of the 64Bit-Version (I'm using Plato for compilation and SDBG version 8.70.00). Whereas the 32Bit-version produces correct results, the ones calculated with the 64Bit version are obvioulsy wrong. Trying to isolate the problem, kept me busy the last days, but is not so easy due to 20 subroutines and many function calls. Since I didn't succeed to isolate the root cause of the differences between the results of the 32- and 64-Bit versions up to now, I would like to ask the following questions: Did anybody experience similar deviations between results of 32- and 64-Bit versions? Can certain compiler options help to isolate the problem? Please note, that I have no experience with command line use of SDBG, but use the Plato environment. @mecej4: Thank you for the response and information contained therein concerning possible reasons for the different results. As suggested I add the part of source code here, which yields the different results. Update: Meanwhile I could isolate the problem to origin from the subroutine wavefun. When calling the Whittaker function, variable GAMBA differs (as result from calling GAMCAR (Gamma function). The input used for WAVEFUN is as follows: -1.500D+00 -1 1.840D+02 3.286D-01 3.002D-01 5.000D+03 0 0.000D+0 3.2858593764968097D-01 3.0015179886716270D-01
The subroutine WAVEFUN (with many writes to file 14 for test purposes) is listed below:
C ******************************************************************
C ******************************************************************
C SUBROUTINE WAVFUN(E,KAPPA,Z,U1,U2,R0,ITEST,DELTA)
C ******************************************************************
C ******************************************************************
C THIS PROGRAM COMPUTES THE RADIAL KONTINUUM WAVEFUNCTIONS OF THE
C DIRAC EQUATION FOR EACH Z WITH RESPECT OF AN EXTENDED NUCLEUS.
C U1 AND U2 ARE THE RADIAL KONTINUUMWAVEFUNCTIONS.
C SEE FOR EXAMPLE EQ. 5.4' OF REF 2.
C THE RADIUS OF THE NUCLEUS IS GIVEN BY R=R0*A**(1./3.)
C UNITS ARE H/(2.*PI) = C = M = 1.
C RF IS R IN FM.
C REF 1. B. MUELLER, J. RAFELSKI AND W. GREINER
C INSTITUT FUER THEORETISCHE PHYSIK - FRANKFURT
C PREPRINT (1973)
C REF 2. E. M. ROSE, RELATIVISTISCHE ELEKTRONENTHEORIE.
C REF 3. B. MUELLER, J. RAFELSKI, AND W. GREINER
C Z. PHYSIK 257,183 (1972)
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 PHI1,PHI2,FAK3,FAK4,GAM,CDSQRT,ABC,FAK1,FAK2,DCONJG
COMMON /ZELLE/A1,A2
OPEN (5,file='D:\FORTRAN\MEDDAT\TST\FT05WF.DAT',status='READONLY')
OPEN (6,file='D:\FORTRAN\MEDDAT\TST\FT06WF.DAT',status='OLD')
OPEN (14,file='D:\FORTRAN\MEDDAT\TST\FT14WF.DAT',status='OLD')
READ (5,*) E,KAPPA,Z,U1,U2,R0,ITEST,DELTA,A1,A2
WRITE (14,1680) E,KAPPA,Z,U1,U2,R0,ITEST,DELTA
1680 FORMAT (1X,'Entering WAVEFUN, E,KAPPA,Z,U1,U2,R0,ITEST,DELTA',
&1X,1PD10.3,I3/1X,1P4D15.3,I6,1PD10.3)
COMWAV=386.1592D0
ALPHA=1./137.03602D0
PI=3.1415926535897D0
ETA=0.D0
ZA=Z*ALPHA
S=DFLOAT(IABS(KAPPA))
ABC=DCMPLX(S*S-ZA*ZA,0.D0)
GAM=CDSQRT(ABC)
C 2021 April 20, Write for test purpose only
Write (14,1670) GAM,S,Z
1670 Format (1x,'Wavef GAM,S,Z',1P4D20.10)
P=DSQRT(E*E-1.)
Y=ZA*E/P
IF (E.LT.0) GO TO 20
C SEE EQ. 4.1 AND 4.2 OF REF1
FAK1=DCMPLX(DSQRT(E+1.),0.D0)
FAK2=FAK1
FAK3=DCMPLX(0.D0,DSQRT(E-1.D0))
FAK4=-FAK3
GO TO 30
20 CONTINUE
FAK1=DCMPLX(DSQRT(-E-1.),0.D0)
FAK2=FAK1
FAK3=-DCMPLX(0.D0,DSQRT(-E+1.D0))
FAK4=-FAK3
30 CONTINUE
C DETERMINATION OF THE NORMALIZATION INSIDE THE NUCLEUS.
R=R0/COMWAV
RS=R
C 2021, April 20 - Write only for test purposes
WRITE (14,1660) Kappa,ETA,Delta
1660 FORMAT (1x,'In Wavefun before Phi: ',1X,I3,1P2D20.10)
C ------------------------------------------------------------------
CALL PHI(R,Y,P,Z,R0,E,GAM,KAPPA,K,M,PHI1,ETA,DELTA)
C ------------------------------------------------------------------
C 2021, April 20 - Write only for test purposes
WRITE (14,1661) Kappa,ETA,Delta
1661 FORMAT (1x,'In Wavefun after Phi: ',1X,I3,1P2D20.10)
PHI2=DCONJG(PHI1)
U1=DREAL(FAK1*PHI1+FAK2*PHI2)
U2=DREAL(FAK3*PHI1+FAK4*PHI2)
C THE WAVEFUNCTIONS ARE READY.
C POSSIBLE TEST OF THE RIGHT ASYMPTOTIC.
C SEE EQ. 3.7A AND 3.7B OF REF 3.
C T HAS TO BE 1 FOR LARGE R.
IF (ITEST.EQ.0) STOP 111
T=0.
WRITE (6,501) Z,E,KAPPA
501 FORMAT (' Z =',F7.1,' E =',E16.8,' KAPPA =',I5/)
T1=U1
T2=U2
IF (E.LT.0.) GO TO 60
T1=T1/DSQRT((E+1.)/PI/P)
T2=T2/DSQRT((E-1.)/PI/P)
GO TO 70
60 CONTINUE
T1=T1/DSQRT((-E-1.)/PI/P)
T2=T2/DSQRT((-E+1.)/PI/P)
70 CONTINUE
T1=T1*T1
T2=T2*T2
T=T1+T2
RF=R*COMWAV
WRITE(6,500) RF,U1,U2,T,DELTA
500 FORMAT (' ASYMPTOTIK ', 4D16.7, 5X,D16.7)
STOP
END
C ******************************************************************
C ******************************************************************
SUBROUTINE PHI (R,Y,P,Z,R0,E,GAM,KAPPA,K,M,PHI1,ETA,DELTA)
C ******************************************************************
C ******************************************************************
C THIS PROGRAM EVALUATES THE FUNCTION PHI1.
C SEE EQU. 5.5 AND 6.5 OF REF 1.
IMPLICIT REAL*8 (A-H,O-Z)
C 2021, April 20, WHITT removed in next line
COMPLEX*16 EPLUS,EMIN,PHI1,ALP,X,A,B,C,D,XI,XM
COMPLEX*16 CDEXP,GAM,F1,F2,F3,CDSQRT,WI1,WI2,S1,S2
C 2021-04-20 Common /Witz/ extended by S1,S2
COMMON /WITZ/WI1,WI2,S1,S2
PI=3.1415926535897D0
EPLUS = 0.D0
EMIN = 0.D0
C 2021, April 20 - Write only for test purposes
WRITE (14,1662) Kappa,ETA,Delta
1662 FORMAT (1x,'In Wavefun, in Phi(begin): ',1X,I3,1P2D20.10)
IF (DABS(DIMAG(GAM)).GT.1.D-6) GO TO 40
I=1
C ..................................................................
EPLUS=CDSQRT(ALP(I,GAM,Y,E,KAPPA))
C ..................................................................
I=-1
C ..................................................................
EMIN=CDSQRT(ALP(I,GAM,Y,E,KAPPA))
C ..................................................................
40 CONTINUE
IF (DABS(ETA).GT.1.D-30) GO TO 50
C ------------------------------------------------------------------
CALL TANETA(R0,E,GAM,KAPPA,Y,Z,ETA,EPLUS,EMIN,SINETA,COSETA)
C ------------------------------------------------------------------
50 CONTINUE
C 2021, April 20 - Write only for test purposes
WRITE (14,1663) Kappa,ETA,Delta
1663 FORMAT (1x,'In Wavefun, Phi before Norm',1X,I3,1P2D20.10)
C ------------------------------------------------------------------
CALL NORM(P,GAM,Y,ETA,EPLUS,EMIN,ANORM,E,KAPPA,Z,SINETA,
&COSETA,DELTA)
C ------------------------------------------------------------------
C 2021, April 20 - Write only for test purposes
WRITE (14,1664) Kappa,ETA,Delta
1664 FORMAT (1x,'In Wavfun, Phi after Norm: ',1X,I3,1P2D20.10)
XI=0.5+DCMPLX(0.D0,Y)
XI=-XI
XM=GAM
A=COSETA*EPLUS
B=SINETA*EMIN
IF (DABS(DIMAG(GAM)).LT.1.D-6) GO TO 30
ALPHA=1.D0/137.03602D0
ZA=Z*ALPHA
GS=DABS(DFLOAT(KAPPA))
GG=DSQRT(ZA*ZA-GS*GS)
F1=CDEXP(DCMPLX(0.D0,ETA))
F2=CDEXP(DCMPLX(0.D0,-ETA)-PI*GG)
F3=(GAM-DCMPLX(0.D0,Y))/(DFLOAT(KAPPA)+DCMPLX(0.D0,Y)/E)
30 CONTINUE
X=DCMPLX(0.D0,2.*P*R)
C=WI1
D=WI2
IF (DABS(DIMAG(GAM)).GT.1.D-6) GO TO 20
PHI1=(C*A+D*B)*ANORM/CDSQRT(X)
RETURN
20 CONTINUE
PHI1=(F1*C+F2*F3*D)*ANORM/CDSQRT(X)
RETURN
END
C ******************************************************************
C ******************************************************************
SUBROUTINE NORM (P,GAM,Y,ETA,EPLUS,EMIN,ANORM,E,KAPPA,Z,SINETA,
&COSETA,DELTA)
C ******************************************************************
C ******************************************************************
C THIS PROGRAM EVALUATES THE NORMALISATION FACTOR OF THE
C WAVEFUNCTIONS.
C SEE EQ. 5.9 AND 6.7 OF REF 1.
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 GAMCAR,EPLUS,EMIN,A,B,C,D,CDEXP,AA,BB,CC,GAM
COMMON /TEST/A
PI=3.1415926535897D0
F=DEXP(0.5*PI*Y)
G=2.*DSQRT(PI*P)
IF (DABS(DIMAG(GAM)).GT.1.D-6) GO TO 10
A=2.*GAM+1.
C ..................................................................
A=GAMCAR(A)
C ..................................................................
B=GAM+1.+DCMPLX(0.D0,Y)
C ..................................................................
B=GAMCAR(B)
C ..................................................................
C=-2.*GAM+1.
C ..................................................................
C=GAMCAR(C)
C ..................................................................
D=-GAM+1.+DCMPLX(0.D0,Y)
C ..................................................................
D=GAMCAR(D)
C ..................................................................
A=COSETA*EPLUS*A/B+SINETA*EMIN*C/D
C ..................................................................
H=CDABS(A)
C ..................................................................
H=1./H
ANORM=F/G*H
GOTO 11
10 CONTINUE
A=2.*GAM+1.
C ..................................................................
A=GAMCAR(A)
C ..................................................................
B=GAM+1.+DCMPLX(0.D0,Y)
C ..................................................................
B=GAMCAR(B)
C ..................................................................
C=-2.*GAM+1.
C ..................................................................
C=GAMCAR(C)
C ..................................................................
D=-GAM+1.+DCMPLX(0.D0,Y)
C ..................................................................
D=GAMCAR(D)
C ..................................................................
AA=DCMPLX(0.D0,ETA)
AA=CDEXP(AA)
ALPHA=1.D0/137.03602D0
ZA=Z*ALPHA
GS=DABS(DFLOAT(KAPPA))
GG=DSQRT(ZA*ZA-GS*GS)
BB=DCMPLX(0.D0,-ETA)-PI*GG
BB=CDEXP(BB)
CC=(GAM-DCMPLX(0.D0,Y))/(DFLOAT(KAPPA)+DCMPLX(0.D0,Y)/E)
A=AA*A/B+BB*CC*C/D
H=1.D0/CDABS(A)
ANORM=F/G*H
11 AIM=DIMAG(A)
ARE=DREAL(A)
DELTA=DATAN(AIM/ARE)+Y*(DLOG(DABS(Y))-1.)-PI/4.
IF(AIM.LT.0.AND.ARE.LT.0) DELTA=DELTA-PI
IF(AIM.GT.0.AND.ARE.LT.0) DELTA=DELTA+PI
RETURN
END
C ******************************************************************
C ******************************************************************
SUBROUTINE TANETA(R0,E,GAM,KAPPA,Y,Z,ETA,EPLUS,EMIN,SINETA,COSETA)
C ******************************************************************
C ******************************************************************
C THIS PROGRAM EVALUATES THE MATCHING PHASE ETA WHICH DESCRIBES
C THE EFFECT OF THE EXTENDED NUCLEUS.
C SEE EQ 5.11 AND 6.9 OF REF 1.
C REF 10. BRONSTEIN- SEMENDJAJEW, TASCHENBUCH DER MATHEMATIK,
C VERLAG HARRI DEUTSCH, FRANKFURT AM MAIN 1968
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 A,BBB,X,EPLUS,EMIN,GAM,WI1,WI2,S1,S2
COMMON /ZELLE/A1,A2
C 2021-04-20 Common /Witz/ added
COMMON /WITZ/WI1,WI2,S1,S2
C PI=3.1415926535897D0
COMWAV=386.1592D0
N=1
P=DSQRT(E*E-1.)
RS=R0/COMWAV
A=DCMPLX(0.D0,2.*P*RS)
C=1.D0
IF (E.LT.0.) C=-C
I=1
T=DSQRT((E-1.)/(E+1.))
C ..................................................................
X=BBB(I,GAM,Y,E,KAPPA,EPLUS,EMIN,A,Z)
C ..................................................................
C 2021 April 20, Write for test purpose only
Write (14,1613) I,KAPPA,GAM,Y,E,EPLUS,EMIN,A,X,Z
1613 Format (1x,'I,KAPPA,GAM,Y,E,EPLUS,EMIN,A,,X,Z',2I3,1P4D20.10/
&2(15x,1P5D20.10/))
F1=DREAL(X)
F2=DIMAG(X)
WRITE (14,6120) F1,F2
6120 FORMAT (1x,'F1 and F2/TANETA:',1P2D20.10)
I=-1
C ..................................................................
X=BBB(I,GAM,Y,E,KAPPA,EPLUS,EMIN,A,Z)
C ..................................................................
C 2021 April 20, Write for test purpose only
Write (14,1614) I,KAPPA,GAM,Y,E,EPLUS,EMIN,A,X,Z
1614 Format (1x,'I,KAPPA,GAM,Y,E,EPLUS,EMIN,A,X,Z',2I3,1P4D20.10/
&2(15x,1P5D20.10/))
F3=DREAL(X)
F4=DIMAG(X)
C 2021, April 20: In next line 1.D-6 changed to 1.D-10
IF (DABS(DIMAG(GAM)).GT.1.D-6) GO TO 10
TEN=-(A2*F1+C*T*A1*F2)/(A2*F3+C*T*A1*F4)
C IF (DABS(TEN).GT.1.D10) GO TO 20
ETA=DATAN(TEN)
SINETA=DSIN(ETA)
COSETA=DCOS(ETA)
C SEE FOR EXAMPLE P. 156 OF REF 10.
Write (14,1612) ETA,A1,A2,F1,F2,F3,F4,C,T,TEN
RETURN
10 CONTINUE
TEN=(A2*F1+C*T*A1*F2)/(A2*F4-C*T*A1*F3)
IF (DABS(TEN).GT.1.D10) GO TO 20
ETA=DATAN(TEN)
SINETA=DSIN(ETA)
COSETA=DCOS(ETA)
Write (14,1611) ETA,A1,A2,F1,F2,F3,F4,C,T
WRITE (14,1621) ETA,A1,A2,F1,F2,F3,F4,C,T
1621 FORMAT (3(1X,1P3D30.20))
RETURN
20 CONTINUE
C 2021 April 20, Write for test purpose only
Write (14,1610) ETA,A1,A2,F1,F2,F3,F4,C,T,TEN
1610 Format (1x,'A20:ETA A1 A2 F1-4 C T TEN',1P5D20.10/15x,1P5D20.10)
1611 Format (1x,'B20:ETA A1 A2 F1-4 C T TEN',1P5D20.10/15x,1P5D20.10)
1612 Format (1x,'B10:ETA A1 A2 F1-4 C T TEN',1P5D20.10/15x,1P5D20.10)
F=TEN/DABS(TEN)
COSETA=0.D0
SINETA=F
RETURN
END
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
FUNCTION BBB(I,GAM,Y,E,KAPPA,EPLUS,EMIN,X,Z)
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
C SEE EQ 5.12 AND 6.9 OF REF 1
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 WHITT,XI,XM,X,BBB,S,EPLUS,EMIN,CDSQRT,S1,S2,GAM,S4
COMPLEX*16 WI1,WI2
C 2021-04-20 Common /Witz/ extended by S1,S2
COMMON /WITZ/WI1,WI2,S1,S2
PI=3.1415926535897D0
XI=DCMPLX(0.D0,Y)+0.5
XI=-XI
IF (DABS(DIMAG(GAM)).GT.1.D-6) GO TO 10
XM=DFLOAT(I)*GAM
C ..................................................................
S=WHITT(XI,XM,X)
C ..................................................................
IF (I.EQ.1) WI1=S
IF (I.EQ.-1) WI2=S
XI=EPLUS
IF (I.LT.0) XI=EMIN
BBB=XI*S/CDSQRT(X)
C 2021, April 20 Next 2 lines only for test purposes
WRITE (14,1600) XI,S,X,BBB
1600 FORMAT (1x,'In BBB bef.10,XI,S,X,BBB:',2X,1p4d20.10/17X,1p4d20.10)
GO TO 40
10 CONTINUE
IF (I.EQ.-1) GOTO 15
XM=GAM
C 2021, April 20 Next 2 lines only for test purposes
WRITE (14,1602) I,XI,XM,X
1602 FORMAT (1x,'In BBB WHIT-S1,I,XI,XM,X:',2X,I3,1p4d22.14/2(31X,
&1p4d22.14/))
C ..................................................................
S1=WHITT(XI,XM,X)
C ..................................................................
WRITE (14,*) S1
XM=-XM
C 2021, April 20 Next 2 lines only for test purposes
WRITE (14,1603) I,XI,XM,X
1603 FORMAT (1x,'In BBB WHIT-S2,I,XI,XM,X:',2X,I3,1p4d22.14/2(31X,
&1p4d22.14/))
C ..................................................................
S2=WHITT(XI,XM,X)
C ..................................................................
WRITE (14,*) S2
WI1=S1
WI2=S2
15 CONTINUE
ALPHA=1.D0/137.03602D0
ZA=Z*ALPHA
GS=DABS(DFLOAT(KAPPA))
GG=DSQRT(ZA*ZA-GS*GS)
S3=DFLOAT(I)*DEXP(-PI*GG)
S4=(GAM-DCMPLX(0.D0,Y))/(DFLOAT(KAPPA)+DCMPLX(0.D0,Y)/E)
BBB=(S1+S3*S4*S2)/CDSQRT(X)
C 2021, April 20 Next 2 lines only for test purposes
WRITE (14,1601) X,S1,S2,S3,S4,BBB
1601 FORMAT (1x,'In BBB bef.40,X,S1-4,BBB:',2X,1p4d20.10/2(17X,
&1p4d20.10/))
40 RETURN
END
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
FUNCTION ALP(I,GAM,Y,E,KAPPA)
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
C SEE EQU. 5.4A AND 5.4B OF REF1.
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 ALP,A,B,C,D,CDEXP,GAM
PI=3.1415926535897D0
A=DCMPLX(DFLOAT(KAPPA),0.D0)+DCMPLX(0.D0,Y)/E
A=1./A
G=-PI*DREAL(GAM)
IF (I.LT.0) G=-G
B=DCMPLX(0.D0,G)
C=CDEXP(B)
D=-(GAM+DCMPLX(0.D0,Y))
IF (I.LT.0) D=GAM-DCMPLX(0.D0,Y)
ALP=D*A*C
RETURN
END
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
FUNCTION WHITT(XI,XM,RM)
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
C THIS PROGRAM EVALUATES THE WHITTAKER FUNCTION FOR
C COMPLEX ARGUMENTS.
C SEE EQ. 3.11 OF REF 1.
C THIS PROGRAMM HAS BEEN TESTED WITH THE HELP OF THE RECURRENCE
C RELATIONS (13.4.28) AND (13.4.29) OF REF. 6
C THE ACCURACY IS BETTER THAN 7 PLACES FOR ABS (Z) LE 20.
C REF 6 ABRAMOWITZ, SEGUN - HANDBOOK OF MATHEMATICAL FUNCTIONS.
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 CHYPX,GAMCAR,WHITT
COMPLEX*16 S,A,B,RM,XI,XM,CDLOG,CDEXP
COMPLEX*16 GAMBA,GAMB,GAMA
COMMON/ADLER/GAMBA,GAMB,GAMA
A=0.5-XI+XM
B=1.+2.*XM
IF (CDABS(RM).LT.20.D0) GO TO 10
GAMBA=0.D0
IF (CDABS(GAMBA).GT.1.D-35) GO TO 10
WRITE (14,1630)A,B
1630 FORMAT (1X,'WHITT: A,B before call',1X,1P4D22.14)
C ..................................................................
GAMBA=GAMCAR(B-A)
GAMB=GAMCAR(B)
GAMA=GAMCAR(A)
WRITE (14,1620)GAMBA,GAMB,GAMA,A,B
1620 FORMAT (1X,'WHITT: GAMBA,GAMB,GAMA,A,B',1X,1P4D22.14/
&2(16X,1P4D22.14/))
C ..................................................................
10 CONTINUE
C ..................................................................
S=CHYPX(A,B,RM)
C ..................................................................
A=(XM+0.5)*CDLOG(RM)-0.5*RM
WRITE (14,1600) XM,RM,A,S
1600 FORMAT (1X,'In WHITT: XM,RM,A,S ',1X,1P4D22.14/22X,1P4D22.14)
WHITT=CDEXP(A)*S
RETURN
END
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
FUNCTION GAMCAR(CMX)
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
C THIS SUBPROGRAM EVALUATES THE GAMMA FUNCTION FOR ANY
C COMPLEX ARGUMENT BY USE OF AN ASYMPTOTIC EXPANSION.
C THIS PROGRAM HAS BEEN CHECKED FOR 1. LE RE(Z) LE 2. AND
C 0.1 LE IM(Z) LE 10.0.
C ERROR IS LESS THAN 10**-6
IMPLICIT REAL*8 (A-H,O-Z)
COMPLEX*16 GAMCAR
COMPLEX*16 CMX,COMX,GAMX,E1,E11,TX,GAM1,CDLOG,CDEXP,SUMME,FAK
C PI=3.1415926535897D0
SUMME=CMX
FAK=(1.,0.)
IF (DREAL(CMX).LE.0.) GO TO 5
12 CONTINUE
COMX=CMX-1.
E1=COMX+.5
TX=COMX+5.5
E11=E1*CDLOG(TX)
GAM1=CDEXP(E11-TX)*2.50662827465D0
GAMX=GAM1*(1.+76.18009173D0/(COMX+1.)-86.50532033D0/(COMX+2.)
&+24.01409822D0/(COMX+3.)-1.231739516D0/(COMX+4.)+.12085003D-2/(COM
&X+5.)-.536382D-5/(COMX+6.))
GAMCAR=GAMX
GAMCAR=GAMCAR*FAK
GO TO 2
5 CONTINUE
J=0
6 CMX=CMX+1.
J=J+1
T=DREAL(CMX)
IF (T.LE.0) GO TO 6
DO 11 K=1,J
FAK=FAK*1./(SUMME+DFLOAT(K)-1.)
11 CONTINUE
GO TO 12
2 CMX=SUMME
RETURN
END
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
FUNCTION CHYPX(A,B,Z)
C +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
C THIS SUBPROGRAM EVALUATES THE CONFUENT HYPERGEOMETRIC FUNCTION
C FOR A COMPLEX ARGUMENT AND COMPLEX PARAMETERS.
C NUP IS THE NUMBER OF TERMS.
C EPS DETERMINES THE ACCURACY.
C EPS IS THE PART OF THE LAST TERM ON THE WHOLE SUM.
C THIS PROGRAM HAS BEEN TESTED FOR -0.9 LE RE(A) LE 0.9 AND FOR
C 0.1 LE RE(B) LE 0.9 AND FOR 0.1 LE RE(Z) LE 10.
C THE ACCURACY IS BETTER THAN 6 PLACES.
C THIS PROGRAM NEEDS OVER COMMON THE INFORMATION WHAT IS GAMMA(B-A),
C GAMMA(B) AND GAMMA(A).
C FOR THE SAKE OF ACCURACY THE POWER SERIES EXPANSION IS CALCULATED
C IN DOUBLE PRECISION ACCURACY FOR SPECIAL VALUES OF Z.
C THE ACCURACY OF THE ASYMPTOTIC IS ONLY BETTER THAN 2 PLACES.
C THE ASYMPTOTIC HAS TO BE CHANGED TO DOUBLE PRECISION ACCURACY.
C NEW VERSION MAI 1976.
C FOR A = (3,1.5) AND B = (2,0.5) THE ACCURACY WAS FOUND TO BE
C BETTER THAN 12 PLACES FOR CDABS(Z).LT.20 AND 8 PLACES FOR
C 20.LT.CDABS(Z).LT.50.
C THE ACCURACY IN THE ASYMPTOTIC REGION IS DETERMINED BY THE
C GAMMA FUNCTION.
IMPLICIT REAL*8 (A-H,O-Z)
C 2021, April 20, GAMCAR removed in next line
COMPLEX*16 CHYPX
COMPLEX*16 A,B,Z,S,TRM,AT,BT,ONE,EN,S1,S2,T1,T2,CT,DT,CDLOG,CDEXP
COMPLEX*16 GAMBA,GAMA,GAMB
COMPLEX*16 G1,G2,G3,G4
COMMON/ADLER/GAMBA,GAMB,GAMA
DATA EPS,ONE/1.D-12,(1.,0.)/
WRITE (14,1600) A,B,Z,GAMBA,GAMB,GAMA
1600 FORMAT (1X,'In Chypx, A,B,Z,GAMBA,GAMB,GAMA ',1X,
&1P4D22.14/2(18X,1P4D22.14/))
IF (CDABS(Z).GE.20.) GO TO 50
C EVALUATION OF A POWER SERIES EXPANSION FOR ABS(Z) .LE. 20.
NUP=100
S=ONE
TRM=ONE
AT=A-ONE
BT=B-ONE
EN=(0.,0.)
DO 10 N=1,NUP
AT=AT+ONE
BT=BT+ONE
EN=EN+ONE
TRM=TRM/EN*AT/BT*Z
S=S+TRM
IF (CDABS(TRM).LE.EPS*CDABS(S)) GO TO 20
10 CONTINUE
WRITE (6,100) A,B,Z
100 FORMAT(1H1,'CHYPX DOES NOT CONVERGE '/,1H0,3(2D15.6,5X))
20 CHYPX=S
WRITE (14,1610) S
1610 FORMAT (1X,'In CHYPX, S: ',1PD24.16)
RETURN
C EVALUATION OF AN ASYMPTOTIC EXPANSION FOR ABS(Z) .GT. 20.
50 CONTINUE
EPSA=1.D-6
II=1
S1=ONE
S2=ONE
AT=A-ONE
BT=1.+A-B-ONE
CT=B-A-ONE
DT=1.-A-ONE
G1=A
G2=1.+A-B
G3=B-A
G4=1.-A
IMAX=15
DO 70 I=1,IMAX
IF (I.EQ.1) GO TO 40
AT=AT*(G1+I-1)
BT=BT*(G2+I-1)
CT=CT*(G3+I-1)
DT=DT*(G4+I-1)
40 CONTINUE
IF (I.GT.1) GO TO 30
AT=AT+ONE
BT=BT+ONE
CT=CT+ONE
DT=DT+ONE
30 CONTINUE
T1=AT*BT*(-Z)**(-I)
T2=CT*DT*Z**(-I)
II=I*II
T1=T1/DFLOAT(II)
T2=T2/DFLOAT(II)
S1=S1+T1
S2=S2+T2
C W=CDABS(T1)+CDABS(T2)
C WW=CDABS(S1)+CDABS(S2)
C IF (W.LE.EPS*WW.AND.I.GT.3) GO TO 7
IF(CDABS(T1).LE.EPSA*CDABS(S1).AND.CDABS(T2).LE.EPSA*CDABS(S2)
& .AND. I.GT.4) GOTO 7
70 CONTINUE
WRITE (6,110) T1,S1,T2,S2
110 FORMAT (' NO CONVERGENCE IN CHYPX ',1P4D16.8/,1P4D16.8)
WRITE (6,111) A,B,Z
111 FORMAT (1P6D16.8)
7 CONTINUE
S=CDLOG(Z)
E=DIMAG(Z)
IF((DABS(E)-0.D0).LT.1.D-20) GO TO 90
E=E/DABS(E)*3.1415926535897D0
GO TO 80
90 E=3.1415926535897D0
80 CONTINUE
T1=CDEXP(A*(DCMPLX(0.D00,E)-S))/GAMBA
T2=CDEXP(Z+(A-B)*S)/GAMA
S=(S1*T1+S2*T2)*GAMB
GO TO 20
END
Probably there is a simple reason for the different results, but I don't recognize it yet.
Best regards Theo