changeset 3117:f735f3ea1ee7

[project @ 1997-11-29 19:43:23 by jwe]
author jwe
date Sat, 29 Nov 1997 19:43:24 +0000
parents 8f31cbbcf555
children 74cc8e2fe2c0
files libcruft/specfun/ribesl.f libcruft/specfun/rjbesl.f libcruft/specfun/rkbesl.f libcruft/specfun/rybesl.f
diffstat 4 files changed, 79 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/libcruft/specfun/ribesl.f
+++ b/libcruft/specfun/ribesl.f
@@ -167,8 +167,9 @@
 C               Argonne, IL  60439
 C
 C-------------------------------------------------------------------
+      LOGICAL FIRST
       INTEGER IZE,K,L,MAGX,N,NB,NBMX,NCALC,NEND,NSIG,NSTART
-      DOUBLE PRECISION DGAMMA,             
+      DOUBLE PRECISION DGAMMA, D1MACH
      1 ALPHA,B,CONST,CONV,EM,EMPAL,EMP2AL,EN,ENMTEN,ENSIG,
      2 ENTEN,EXPARG,FUNC,HALF,HALFX,ONE,P,PLAST,POLD,PSAVE,PSAVEL,
      3 RTNSIG,SUM,TEMPA,TEMPB,TEMPC,TEST,TOVER,TWO,X,XLARGE,ZERO
@@ -176,13 +177,25 @@
 C-------------------------------------------------------------------
 C  Mathematical constants
 C-------------------------------------------------------------------
-      DATA ONE,TWO,ZERO,HALF,CONST/1.0D0,2.0D0,0.0D0,0.5D0,1.585D0/
+      PARAMETER (ONE = 1.0D0, TWO = 2.0D0, ZERO = 0.0D0)
+      PARAMETER (HALF = 0.5D0, CONST = 1.585D0)
 C-------------------------------------------------------------------
 C  Machine-dependent parameters
 C-------------------------------------------------------------------
       DATA NSIG,XLARGE,EXPARG /16,1.0D4,709.0D0/
       DATA ENTEN,ENSIG,RTNSIG/1.0D308,1.0D16,1.0D-4/
       DATA ENMTEN/8.9D-308/
+      DATA FIRST /.TRUE./
+      IF (FIRST) THEN
+        NSIG = NINT (-LOG (D1MACH (1)))
+        ENTEN = 1.0D1 ** (INT (LOG10 (D1MACH (2)))
+        ENSIG = 1.0D1 ** NSIG
+        RTNSIG = 1.0D1 ** (-NINT (NSIG / 4.0))
+        ENMTEN = 4.0D0 * D1MACH (1)
+        EXPARG = LOG (D1MACH (2))
+        XLARGE = 1.0D4
+        FIRST = .FALSE.
+      ENDIF
 C-------------------------------------------------------------------
 C  Statement functions for conversion
 C-------------------------------------------------------------------
--- a/libcruft/specfun/rjbesl.f
+++ b/libcruft/specfun/rjbesl.f
@@ -137,8 +137,9 @@
 C          Argonne, IL  60439
 C
 C---------------------------------------------------------------------
-      INTEGER I,J,K,L,M,MAGX,N,NB,NBMX,NCALC,NEND,NSTART
-      DOUBLE PRECISION  DGAMMA,
+      LOGICAL FIRST
+      INTEGER I,J,K,L,M,MAGX,N,NB,NBMX,NCALC,NEND,NSIG,NSTART
+      DOUBLE PRECISION  DGAMMA, D1MACH
      1 ALPHA,ALPEM,ALP2EM,B,CAPP,CAPQ,CONV,EIGHTH,EM,EN,ENMTEN,ENSIG,
      2 ENTEN,FACT,FOUR,FUNC,GNU,HALF,HALFX,ONE,ONE30,P,PI2,PLAST,
      3 POLD,PSAVE,PSAVEL,RTNSIG,S,SUM,T,T1,TEMPA,TEMPB,TEMPC,TEST,
@@ -153,16 +154,13 @@
 C   TWOPI2 - (2*PI - TWOPI) to working precision, i.e.,
 C            TWOPI1 + TWOPI2 = 2 * PI to extra precision.
 C---------------------------------------------------------------------
-      DATA PI2, TWOPI1, TWOPI2 /0.636619772367581343075535D0,6.28125D0,
-     1 1.935307179586476925286767D-3/
-      DATA ZERO, EIGHTH, HALF, ONE /0.0D0,0.125D0,0.5D0,1.0D0/
-      DATA TWO, THREE, FOUR, TWOFIV /2.0D0,3.0D0,4.0D0,25.0D0/
-      DATA ONE30, THREE5 /130.0D0,35.0D0/
-C---------------------------------------------------------------------
-C  Machine-dependent parameters
-C---------------------------------------------------------------------
-      DATA ENTEN, ENSIG, RTNSIG /1.0D38,1.0D17,1.0D-4/
-      DATA ENMTEN, XLARGE /1.2D-37,1.0D4/
+      PARAMETER (PI2 = 0.636619772367581343075535D0)
+      PARAMETER (TWOPI1 = 6.28125D0,
+      PARAMETER (TWOPI2 = 1.935307179586476925286767D-3)
+      PARAMETER (ZERO = 0.0D0, EIGHTH = 0.125D0, HALF = 0.5D0)
+      PARAMETER (ONE = 1.0D0, TWO = 2.0D0, THREE = 3.0D0)
+      PARAMETER (FOUR = 4.0D0, TWOFIV = 2.5D1, ONE30 = 1.3D2)
+      PARAMETER (THREE5 = 3.5D1)
 C---------------------------------------------------------------------
 C     Factorial(N)
 C---------------------------------------------------------------------
@@ -173,6 +171,19 @@
      4 5.109094217170944D19,1.12400072777760768D21,
      5 2.585201673888497664D22,6.2044840173323943936D23/
 C---------------------------------------------------------------------
+C  Machine-dependent parameters
+C---------------------------------------------------------------------
+      DATA FIRST /.TRUE./
+      IF (FIRST) THEN
+        NSIG = NINT (-LOG (D1MACH (1)))
+        ENTEN = 1.0D1 ** (INT (LOG10 (D1MACH (2)))
+        ENSIG = 1.0D1 ** NSIG
+        RTNSIG = 1.0D1 ** (-NINT (NSIG / 4.0))
+        ENMTEN = 4.0D0 * D1MACH (1)
+        XLARGE = 1.0D4
+        FIRST = .FALSE.
+      ENDIF
+C---------------------------------------------------------------------
 C Statement functions for conversion and the gamma function.
 C---------------------------------------------------------------------
       CONV(I) = DBLE(I)
--- a/libcruft/specfun/rkbesl.f
+++ b/libcruft/specfun/rkbesl.f
@@ -141,7 +141,9 @@
 C               Argonne, IL  60439
 C
 C-------------------------------------------------------------------
+      LOGICAL FIRST
       INTEGER I,IEND,ITEMP,IZE,J,K,M,MPLUS1,NB,NCALC
+      DOUBLE PRECISION D1MACH
       DOUBLE PRECISION  
      1    A,ALPHA,BLPHA,BK,BK1,BK2,C,D,DM,D1,D2,D3,ENU,EPS,ESTF,ESTM,
      2    EX,FOUR,F0,F1,F2,HALF,ONE,P,P0,Q,Q0,R,RATIO,S,SQXMIN,T,TINYX,
@@ -152,14 +154,10 @@
 C    A = LOG(2.D0) - Euler's constant
 C    D = SQRT(2.D0/PI)
 C---------------------------------------------------------------------
-      DATA HALF,ONE,TWO,ZERO/0.5D0,1.0D0,2.0D0,0.0D0/
-      DATA FOUR,TINYX/4.0D0,1.0D-10/
-      DATA A/ 0.11593151565841244881D0/,D/0.797884560802865364D0/
-C---------------------------------------------------------------------
-C  Machine dependent parameters
-C---------------------------------------------------------------------
-      DATA EPS/2.22D-16/,SQXMIN/1.49D-154/,XINF/1.79D+308/
-      DATA XMIN/2.23D-308/,XMAX/705.342D0/
+      PARAMETER (HALF = 0.5D0, ONE = 1.0D0, TWO = 2.0D0, ZERO = 0.0D0)
+      PARAMETER (FOUR = 4.0D0, TINYX = 1.0D-10)
+      PARAMETER (A = 0.11593151565841244881D0)
+      PARAMETER (D = 0.797884560802865364D0)
 C---------------------------------------------------------------------
 C  P, Q - Approximation for LOG(GAMMA(1+ALPHA))/ALPHA
 C                                         + Euler's constant
@@ -189,6 +187,18 @@
       DATA ESTF/4.18341D1, 7.1075D0, 6.4306D0, 4.25110D1, 1.35633D0,
      1          8.45096D1, 2.0D1/
 C---------------------------------------------------------------------
+C  Machine dependent parameters
+C---------------------------------------------------------------------
+      DATA FIRST /.TRUE./
+      IF (FIRST) THEN
+        EPS = D1MACH (4)
+        XINF = D1MACH (2)
+        XMIN = D1MACH (1)
+        SQXMIN = SQRT (XMIN)
+        XMAX = 0.99D0 * LOG (XINF)
+        FIRST = .FALSE.
+      ENDIF
+C---------------------------------------------------------------------
       EX = X
       ENU = ALPHA
       NCALC = MIN(NB,0)-2
--- a/libcruft/specfun/rybesl.f
+++ b/libcruft/specfun/rybesl.f
@@ -134,7 +134,9 @@
 C               Argonne, IL  60439
 C
 C----------------------------------------------------------------------
+      LOGICAL FIRST
       INTEGER I,K,NA,NB,NCALC
+      DOUBLE PRECISION D1MACH
       DOUBLE PRECISION
      1  ALFA,ALPHA,AYE,B,BY,C,CH,COSMU,D,DEL,DEN,DDIV,DIV,DMU,D1,D2,
      2  E,EIGHT,EN,ENU,EN1,EPS,EVEN,EX,F,FIVPI,G,GAMMA,H,HALF,ODD,
@@ -150,16 +152,14 @@
 C    PIBY2 = PI/2
 C    SQ2BPI = SQUARE ROOT OF 2/PI
 C----------------------------------------------------------------------
-      DATA ZERO,HALF,ONE,TWO,THREE/0.0D0,0.5D0,1.0D0,2.0D0,3.0D0/
-      DATA EIGHT,ONE5,TEN9/8.0D0,15.0D0,1.9D1/
-      DATA FIVPI,PIBY2/1.5707963267948966192D1,1.5707963267948966192D0/
-      DATA PI,SQ2BPI/3.1415926535897932385D0,7.9788456080286535588D-1/
-      DATA PIM5,ONBPI/7.0796326794896619231D-1,3.1830988618379067154D-1/
-C----------------------------------------------------------------------
-C  Machine-dependent constants
-C----------------------------------------------------------------------
-      DATA DEL,XMIN,XINF,EPS/1.0D-8,4.46D-308,1.79D308,1.11D-16/
-      DATA THRESH,XLARGE/16.0D0,1.0D8/
+      PARAMETER (ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0, TWO = 2.0D0)
+      PARAMETER (THREE = 3.0D0, EIGHT = 8.0D0, ONE5 = 1.5D1)
+      PARAMETER (TEN9 = 1.9D1, FIVPI = 1.5707963267948966192D1)
+      PARAMETER (PIBY2 = 1.5707963267948966192D0)
+      PARAMETER (PI = 3.1415926535897932385D0)
+      PARAMETER (SQ2BPI = 7.9788456080286535588D-1)
+      PARAMETER (PIM5 = /7.0796326794896619231D-1)
+      PARAMETER (ONBPI = 3.1830988618379067154D-1)
 C----------------------------------------------------------------------
 C  Coefficients for Chebyshev polynomial expansion of 
 C         1/gamma(1-x), abs(x) .le. .5
@@ -176,6 +176,19 @@
      9        -0.76852840844786673690D-01,-0.28387654227602353814D+00,
      A         0.92187029365045265648D+00/
 C----------------------------------------------------------------------
+C  Machine-dependent constants
+C----------------------------------------------------------------------
+      DATA FIRST /.TRUE./
+      IF (FIRST) THEN
+        EPS = D1MACH (4)
+        XINF = D1MACH (2)
+        XMIN = D1MACH (1)
+        DEL = SQRT (EPS)
+        XLARGE = ONE / DEL
+        THRESH = DINT (-LOG10 (EPS / TWO)) + ONE
+        FIRST = .FALSE.
+      ENDIF
+C----------------------------------------------------------------------
       EX = X
       ENU = ALPHA
       IF ((NB .GT. 0) .AND. (X .GE. XMIN) .AND. (EX .LT. XLARGE)