1      SUBROUTINE GALCDF(X,AK,TAU,IADEDF,CDF)
2C
3C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
4C              FUNCTION VALUE FOR THE GENERALIZED ASYMMETRIC LAPLACE
5C              DISTRIBUTION WITH SHAPE PARAMETERS AK AND LAMBDA.
6C              THIS DISTRIBUTION IS DEFINED FOR ALL X AND HAS
7C              THE PROBABILITY DENSITY FUNCTION
8C                 GALPDF(X,K,TAU) = C1*C2*C3        X <> 0
9C              WITH
10C                 C1 = SQRT(2/PI)*EXP((SQRT(2)/2)*((1/K)-K)*X)/
11C                      GAMMA(TAU)
12C                 C2 = ((SQRT(2)*ABS(X)/(K+(1/K))**(TAU-0.5)
13C                 C3 = K(TAU-0.5)((SQRT(2)/2)*((1/K)+K)*ABS(X))
14C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
15C              OF THE THIRD KIND.
16C              THE CUMULATIVE DISTRIBUTION IS COMPUTED BY
17C              NUMERICALLY INTEGRATING THE PDF FUNCTION.
18C     INPUT  ARGUMENTS--X      = THE DOUBLE PRECISION VALUE AT
19C                                WHICH THE CUMULATIVE DISTRIBUTION
20C                                FUNCTION IS TO BE EVALUATED.
21C                     --AK     = THE FIRST SHAPE PARAMETER
22C                     --TAU    = THE SECOND SHAPE PARAMETER
23C     OUTPUT ARGUMENTS--CDF    = THE DOUBLE PRECISION CUMULATIVE
24C                                DISTRIBUTION FUNCTION VALUE.
25C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
26C             FUNCTION VALUE CDF FOR THE GENERALIZED ASYMMETRIC
27C             LAPLACE DISTRIBUTION WITH SHAPE PARAMETERS DAK AND DTAU.
28C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
29C     RESTRICTIONS--NONE.
30C     OTHER DATAPAC   SUBROUTINES NEEDED--DQAGI.
31C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
32C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
33C     LANGUAGE--ANSI FORTRAN (1977)
34C     REFERENCES--KOTZ, KOZUBOWSKI, AND PODGORSKI, "THE LAPLACE
35C                 DISTRIBUTION AND GENERALIZATIONS: A REVISIT WITH
36C                 APPLICATIONS TO COMMUNICATIONS, ECONOMICS,
37C                 ENGINEERING, AND FINANCE", BIRKHAUSER, 2001,
38C                 PP. 189.
39C     WRITTEN BY--ALAN HECKERT
40C                 STATISTICAL ENGINEERING DIVISION
41C                 INFORMATION TECHNOLOGY LABORATORY
42C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
43C                 GAITHERSBURG, MD 20899-8980
44C                 PHONE--301-975-2899
45C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
46C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
47C     LANGUAGE--ANSI FORTRAN (1977)
48C     VERSION NUMBER--2004.8
49C     ORIGINAL VERSION--AUGUST    2004.
50C
51C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
52C
53C---------------------------------------------------------------------
54C
55      INTEGER LIMIT
56      INTEGER LENW
57      PARAMETER(LIMIT=100)
58      PARAMETER(LENW=4*LIMIT)
59      INTEGER INF
60      INTEGER NEVAL
61      INTEGER IER
62      INTEGER LAST
63      INTEGER IWORK(LIMIT)
64C
65      DOUBLE PRECISION AK
66      DOUBLE PRECISION TAU
67      DOUBLE PRECISION X
68      DOUBLE PRECISION CDF
69      DOUBLE PRECISION EPSABS
70      DOUBLE PRECISION EPSREL
71      DOUBLE PRECISION DCDF
72      DOUBLE PRECISION DX
73      DOUBLE PRECISION ABSERR
74      DOUBLE PRECISION WORK(LENW)
75C
76      DOUBLE PRECISION GALFUN
77      EXTERNAL GALFUN
78C
79      CHARACTER*4 IADEDF
80      CHARACTER*4 IADED2
81C
82      DOUBLE PRECISION DAK
83      DOUBLE PRECISION DTAU
84      COMMON/GALCOM/DAK,DTAU
85C
86C-----COMMON----------------------------------------------------------
87C
88      INCLUDE 'DPCOP2.INC'
89C
90C-----DATA STATEMENTS-------------------------------------------------
91C
92C-----START POINT-----------------------------------------------------
93C
94C               ********************************************
95C               **  STEP 1--                              **
96C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
97C               ********************************************
98C
99      CDF=0.0
100      IADED2=IADEDF
101C
102      IF(IADEDF.EQ.'K')THEN
103        IF(AK.LE.0.0)THEN
104          WRITE(ICOUT,5)
105    5     FORMAT('***** ERROR: VALUE OF FIRST SHAPE PARAMETER (K) ',
106     1           'IN THE GALCDF ROUTINE IS NON-POSITIVE.')
107          CALL DPWRST('XXX','WRIT')
108          WRITE(ICOUT,48)AK
109   48     FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,',')
110          CALL DPWRST('XXX','WRIT')
111          GOTO9000
112        ENDIF
113      ELSE
114        AK=SQRT(2.0)/(AK + SQRT(2.0 + AK*AK))
115      ENDIF
116C
117      IF(TAU.LE.0.0)THEN
118        WRITE(ICOUT,15)
119   15   FORMAT('***** ERROR--THE SECOND SHAPE PARAMETER (TAU) IN ',
120     1         'THE GALCDF ROUTINE IS NON-POSITIVE.')
121        CALL DPWRST('XXX','BUG ')
122        WRITE(ICOUT,48)TAU
123        CALL DPWRST('XXX','BUG ')
124        GOTO9000
125      ENDIF
126C
127C               ************************************
128C               **  STEP 1--                      **
129C               **  COMPUTE THE DENSITY FUNCTION  **
130C               ************************************
131C
132      IADEDF='K'
133      INF=-1
134      EPSABS=0.0D0
135      EPSREL=1.0D-7
136      IER=0
137      CDF=0.0D0
138C
139      DX=DBLE(X)
140      DTAU=DBLE(TAU)
141      DAK=DBLE(AK)
142C
143      IFLAG=0
144      IF(DX.LT.0.0D0)THEN
145        IFLAG=1
146        INF=1
147      ENDIF
148C
149      CALL DQAGI(GALFUN,DX,INF,EPSABS,EPSREL,DCDF,ABSERR,NEVAL,
150     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
151C
152      IF(IFLAG.EQ.1)THEN
153        CDF=1.0D0 - DCDF
154      ELSE
155        CDF=DCDF
156      ENDIF
157C
158      IF(IER.EQ.1)THEN
159        WRITE(ICOUT,999)
160  999   FORMAT(1X)
161        CALL DPWRST('XXX','BUG ')
162        WRITE(ICOUT,111)
163  111   FORMAT('***** ERROR FROM GALCDF--')
164        CALL DPWRST('XXX','BUG ')
165        WRITE(ICOUT,113)
166  113   FORMAT('      MAXIMUM AKMBER OF SUBDIVISIONS EXCEEDED.')
167        CALL DPWRST('XXX','BUG ')
168      ELSEIF(IER.EQ.2)THEN
169        WRITE(ICOUT,999)
170        CALL DPWRST('XXX','BUG ')
171        WRITE(ICOUT,121)
172  121   FORMAT('***** ERROR FROM GALCDF--')
173        CALL DPWRST('XXX','BUG ')
174        WRITE(ICOUT,123)
175  123   FORMAT('      ROUNDOFF ERROR PREVENTS REQUESTED TOLERANCE ',
176     1         'FROM BEING ACHIEVED.')
177        CALL DPWRST('XXX','BUG ')
178      ELSEIF(IER.EQ.3)THEN
179        WRITE(ICOUT,999)
180        CALL DPWRST('XXX','BUG ')
181        WRITE(ICOUT,131)
182  131   FORMAT('***** ERROR FROM GALCDF--')
183        CALL DPWRST('XXX','BUG ')
184        WRITE(ICOUT,133)
185  133   FORMAT('      BAD INTEGRAND BEHAVIOUR DETECTED.')
186        CALL DPWRST('XXX','BUG ')
187      ELSEIF(IER.EQ.4)THEN
188        WRITE(ICOUT,999)
189        CALL DPWRST('XXX','BUG ')
190        WRITE(ICOUT,141)
191  141   FORMAT('***** ERROR FROM GALCDF--')
192        CALL DPWRST('XXX','BUG ')
193        WRITE(ICOUT,143)
194  143   FORMAT('      INTEGRATION DID NOT CONVERGE.')
195        CALL DPWRST('XXX','BUG ')
196      ELSEIF(IER.EQ.5)THEN
197        WRITE(ICOUT,999)
198        CALL DPWRST('XXX','BUG ')
199        WRITE(ICOUT,151)
200  151   FORMAT('***** ERROR FROM GALCDF--')
201        CALL DPWRST('XXX','BUG ')
202        WRITE(ICOUT,153)
203  153   FORMAT('      THE INTEGRATION IS PROBABLY DIVERGENT.')
204        CALL DPWRST('XXX','BUG ')
205      ELSEIF(IER.EQ.6)THEN
206        WRITE(ICOUT,999)
207        CALL DPWRST('XXX','BUG ')
208        WRITE(ICOUT,161)
209  161   FORMAT('***** ERROR FROM GALCDF--')
210        CALL DPWRST('XXX','BUG ')
211        WRITE(ICOUT,163)
212  163   FORMAT('      INVALID INPUT TO THE INTEGRATION ROUTINE.')
213        CALL DPWRST('XXX','BUG ')
214      ENDIF
215C
216 9000 CONTINUE
217      IADEDF=IADED2
218      RETURN
219      END
220      DOUBLE PRECISION FUNCTION GALFUN(DX)
221C
222C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
223C              FUNCTION VALUE FOR THE GENERALIZED ASYMMETRIC LAPLACE
224C              DISTRIBUTION WITH SHAPE PARAMETERS AK AND TAU.
225C              THIS DISTRIBUTION IS DEFINED
226C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
227C                 GALPDF(X,K,TAU) = C1*C2*C3        X <> 0
228C              WITH
229C                 C1 = SQRT(2/PI)*EXP((SQRT(2)/2)*((1/K)-K)*X)/
230C                      GAMMA(TAU)
231C                 C2 = ((SQRT(2)*ABS(X)/(K+(1/K))**(TAU-0.5)
232C                 C3 = K(TAU-0.5)((SQRT(2)/2)*((1/K)+K)*ABS(X))
233C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
234C              OF THE THIRD KIND.
235C              BUT DEFINE AS FUNCTION TO BE USED FOR INTEGRATION
236C              CODE CALLED BY GALCDF.  ALSO, THIS ROUTINE USES
237C              DOUBLE PRECISION ARITHMETIC.
238C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
239C                                WHICH THE PROBABILITY DENSITY
240C                                FUNCTION IS TO BE EVALUATED.
241C     OUTPUT ARGUMENTS--GALFUN  = THE DOUBLE PRECISION PROBABILITY
242C                                DENSITY FUNCTION VALUE.
243C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
244C             FUNCTION VALUE PDF FOR THE GENERALIZED ASYMMETRIC
245C             LAPLACE DISTRIBUTION WITH SHAPE PARAMETERS AK AND TAU.
246C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
247C     RESTRICTIONS--NONE.
248C     OTHER DATAPAC   SUBROUTINES NEEDED--GALPDF.
249C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
250C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
251C     LANGUAGE--ANSI FORTRAN (1977)
252C     REFERENCES--KOTZ, KOZUBOWSKI, AND PODGORSKI, "THE LAPLACE
253C                 DISTRIBUTION AND GENERALIZATIONS: A REVISIT WITH
254C                 APPLICATIONS TO COMMUNICATIONS, ECONOMICS,
255C                 ENGINEERING, AND FINANCE", BIRKHAUSER, 2001,
256C                 PP. 189.
257C     WRITTEN BY--ALAN HECKERT
258C                 STATISTICAL ENGINEERING DIVISION
259C                 INFORMATION TECHNOLOGY LABORATORY
260C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
261C                 GAITHERSBURG, MD 20899-8980
262C                 PHONE--301-975-2899
263C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
264C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
265C     LANGUAGE--ANSI FORTRAN (1977)
266C     VERSION NUMBER--2004.7
267C     ORIGINAL VERSION--JULY      2004.
268C
269C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
270C
271C---------------------------------------------------------------------
272C
273      DOUBLE PRECISION DTERM2
274C
275      DOUBLE PRECISION DX
276      DOUBLE PRECISION DAK
277      DOUBLE PRECISION DTAU
278      COMMON/GALCOM/DAK,DTAU
279C
280C-----COMMON----------------------------------------------------------
281C
282      INCLUDE 'DPCOST.INC'
283      INCLUDE 'DPCOP2.INC'
284C
285C-----DATA STATEMENTS-------------------------------------------------
286C
287C-----START POINT-----------------------------------------------------
288C
289C               ************************************
290C               **  STEP 1--                      **
291C               **  COMPUTE THE DENSITY FUNCTION  **
292C               ************************************
293C
294      CALL GALPDF(DX,DAK,DTAU,IADEDF,DTERM2)
295      GALFUN=DTERM2
296C
297      RETURN
298      END
299      DOUBLE PRECISION FUNCTION GALFU2(DX)
300C
301C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
302C              FUNCTION VALUE FOR THE GENERALIZED ASYMMETRIC LAPLACE
303C              DISTRIBUTION WITH SHAPE PARAMETERS K AND TAU.
304C              THIS DISTRIBUTION IS DEFINED FOR ALL REAL X.
305C     INPUT  ARGUMENTS--DX      = THE DOUBLE PRECISION VALUE AT
306C                                 WHICH THE CUMULATIVE DISTRIBUTION
307C                                 FUNCTION IS TO BE EVALUATED.
308C     OUTPUT ARGUMENTS--GALFU2  = THE DOUBLE PRECISION CUMULATIVE
309C                                 DISTRIBUTION FUNCTION VALUE.
310C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
311C             FUNCTION VALUE FOR THE GENERALIZED ASYMMETRIC LAPLACE
312C             DISTRIBUTION WITH SHAPE PARAMETERS K AND TAU.
313C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
314C     RESTRICTIONS--NONE.
315C     OTHER DATAPAC   SUBROUTINES NEEDED--GALCDF.
316C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
317C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
318C     LANGUAGE--ANSI FORTRAN (1977)
319C     REFERENCES--KOTZ, KOZUBOWSKI, AND PODGORSKI, "THE LAPLACE
320C                 DISTRIBUTION AND GENERALIZATIONS: A REVISIT WITH
321C                 APPLICATIONS TO COMMUNICATIONS, ECONOMICS,
322C                 ENGINEERING, AND FINANCE", BIRKHAUSER, 2001,
323C                 PP. 189.
324C     WRITTEN BY--ALAN HECKERT
325C                 STATISTICAL ENGINEERING DIVISION
326C                 INFORMATION TECHNOLOGY LABORATORY
327C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
328C                 GAITHERSBURG, MD 20899-8980
329C                 PHONE--301-975-2899
330C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
331C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
332C     LANGUAGE--ANSI FORTRAN (1977)
333C     VERSION NUMBER--2004.8
334C     ORIGINAL VERSION--AUGUST    2004.
335C
336C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
337C
338C---------------------------------------------------------------------
339C
340      INCLUDE 'DPCOST.INC'
341C
342      DOUBLE PRECISION DX
343      DOUBLE PRECISION DCDF
344C
345      DOUBLE PRECISION DP
346      COMMON/GA2COM/DP
347C
348      DOUBLE PRECISION DK
349      DOUBLE PRECISION DTAU
350      COMMON/GALCOM/DK,DTAU
351C
352C-----COMMON----------------------------------------------------------
353C
354      INCLUDE 'DPCOP2.INC'
355C
356C-----DATA STATEMENTS-------------------------------------------------
357C
358C-----START POINT-----------------------------------------------------
359C
360C               ************************************
361C               **  STEP 1--                      **
362C               **  COMPUTE THE CDF     FUNCTION  **
363C               ************************************
364C
365      CALL GALCDF(DX,DK,DTAU,IADEDF,DCDF)
366      GALFU2=DP - DCDF
367C
368      RETURN
369      END
370      SUBROUTINE GALPDF(X,AK,TAU,IADEDF,PDF)
371C
372C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
373C              FUNCTION VALUE FOR THE GENERALIZED ASYMMETRIC LAPLACE
374C              DISTRIBUTION.  THIS IS ALSO KNOWN AS THE BESSEL
375C              K-FUNCTION DISTRIBUTION.  IT HAS SHAPE PARAMETERS
376C              K AND TAU (IF TAU = 1, THIS REDUCES TO THE ASYMMETRIC
377C              LAPLACE DISTRIBUTION, IF K = 1, THIS IS A SYMMETRIC
378C              DISTRIBUTIONS).  THIS DISTRIBUTION IS DEFINED
379C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
380C                 GALPDF(X,K,TAU) = C1*C2*C3        X <> 0
381C              WITH
382C                 C1 = SQRT(2/PI)*EXP((SQRT(2)/2)*((1/K)-K)*X)/
383C                      GAMMA(TAU)
384C                 C2 = ((SQRT(2)*ABS(X)/(K+(1/K))**(TAU-0.5)
385C                 C3 = K(TAU-0.5)((SQRT(2)/2)*((1/K)+K)*ABS(X))
386C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
387C              OF THE THIRD KIND.
388C
389C     NOTE--ARGUMENTS TO THIS ROUTINE ARE IN DOUBLE PRECISION.
390C     INPUT  ARGUMENTS--X     = THE DOUBLE PRECISION VALUE AT
391C                               WHICH THE PROBABILITY DENSITY
392C                               FUNCTION IS TO BE EVALUATED.
393C                               X SHOULD BE NON-NEGATIVE.
394C                     --AK    = THE FIRST SHAPE PARAMETER
395C                     --TAU   = THE SECOND SHAPE PARAMETER
396C     OUTPUT ARGUMENTS--PDF   = THE DOUBLE PRECISION PROBABILITY
397C                               DENSITY FUNCTION VALUE.
398C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
399C             VALUE PDF FOR THE ASYMMETRIC LAPLACE DISTRIBUTION
400C             WITH SHAPE PARAMETER = K.
401C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
402C     RESTRICTIONS--NONE.
403C     OTHER DATAPAC   SUBROUTINES NEEDED--DBESK.
404C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG.
405C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
406C     LANGUAGE--ANSI FORTRAN (1977)
407C     REFERENCES--KOTZ, KOZUBOWSKI, AND PODGORSKI, "THE LAPLACE
408C                 DISTRIBUTION AND GENERALIZATIONS: A REVISIT WITH
409C                 APPLICATIONS TO COMMUNICATIONS, ECONOMICS,
410C                 ENGINEERING, AND FINANCE", BIRKHAUSER, 2001,
411C                 PP. 189.
412C     WRITTEN BY--ALAN HECKERT
413C                 STATISTICAL ENGINEERING DIVISION
414C                 INFORMATION TECHNOLOGY LABORATORY
415C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
416C                 GAITHERSBURG, MD 20899-8980
417C                 PHONE--301-975-2899
418C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
419C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
420C     LANGUAGE--ANSI FORTRAN (1977)
421C     VERSION NUMBER--2004.6
422C     ORIGINAL VERSION--JUNE      2004.
423C
424C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
425C
426C---------------------------------------------------------------------
427C
428      DOUBLE PRECISION X
429      DOUBLE PRECISION AK
430      DOUBLE PRECISION TAU
431      DOUBLE PRECISION DX
432      DOUBLE PRECISION DK
433      DOUBLE PRECISION DTAU
434      DOUBLE PRECISION PDF
435      DOUBLE PRECISION DTERM1
436      DOUBLE PRECISION DTERM2
437      DOUBLE PRECISION DTERM3
438      DOUBLE PRECISION DTERM4
439      DOUBLE PRECISION DC1
440      DOUBLE PRECISION DC2
441      DOUBLE PRECISION DC3
442      DOUBLE PRECISION DC4
443      DOUBLE PRECISION DC5
444      DOUBLE PRECISION DC6
445      DOUBLE PRECISION DPI
446      DOUBLE PRECISION DEPS
447      DOUBLE PRECISION DSAVE
448      DOUBLE PRECISION DGAMMA
449      EXTERNAL DGAMMA
450C
451      DOUBLE PRECISION DTEMP1(10)
452C
453      CHARACTER*4 IADEDF
454C
455C-----COMMON----------------------------------------------------------
456C
457      INCLUDE 'DPCOP2.INC'
458C
459C-----DATA STATEMENTS-------------------------------------------------
460C
461      DATA DPI / 3.14159265358979D+00/
462      DATA DEPS /0.00000001D0/
463C
464C-----START POINT-----------------------------------------------------
465C
466C               *****************************************
467C               **  STEP 1--                           **
468C               **  CHECK FOR VALID PARAMETERS         **
469C               *****************************************
470C
471      PDF=0.0
472      DSAVE=0.0D0
473      IF(IADEDF.EQ.'K')THEN
474        IF(AK.LE.0.0)THEN
475          WRITE(ICOUT,5)
476    5     FORMAT('***** ERROR: VALUE OF FIRST SHAPE PARAMETER (K) ',
477     1           'IN GALPDF ROUTINE IS NON-POSITIVE.')
478          CALL DPWRST('XXX','WRIT')
479          WRITE(ICOUT,48)AK
480   48     FORMAT('      VALUE OF ARGUMENT IS: ',G15.7,'.')
481          CALL DPWRST('XXX','WRIT')
482          GOTO9000
483        ENDIF
484      ELSE
485        AK=SQRT(2.0)/(AK + SQRT(2.0 + AK*AK))
486      ENDIF
487C
488      IF(TAU.LE.0.0D0)THEN
489        WRITE(ICOUT,6)
490    6   FORMAT('***** ERROR: VALUE OF SHAPE PARAMETER (TAU) IN ',
491     1         'GALPDF ROUTINE IS NEGATIVE.')
492        CALL DPWRST('XXX','WRIT')
493        WRITE(ICOUT,48)TAU
494        CALL DPWRST('XXX','WRIT')
495        PDF=0.0D0
496        GOTO9000
497      ENDIF
498C
499      DX=X
500      DK=AK
501      DTAU=TAU
502C
503C               *****************************************
504C               **  STEP 2--                           **
505C               **  COMPUTE THE DENSITY FUNCTION.  FOR **
506C               **  BETTER NUMERICAL STABILITY,        **
507C               **  COMPUTE LOGARIGHMS.                **
508C               *****************************************
509C
510C
511      IF(X.EQ.0.0D0)THEN
512        DX=DEPS
513        IPASS=1
514      ENDIF
515C
516 1000 CONTINUE
517C
518C  COMPUTE BESSEL FUNCTION FIRST.  IF THIS IS 0, SET PDF TO
519C  0 AND RETURN.
520C
521      DC5=(DSQRT(2.0D0)/2.0D0)*(DK + (1.0D0/DK))
522      DC6=DTAU - 0.5D0
523      IF(DC6.LT.0.0D0)DC6=-DC6
524      IARG1=1
525      ISCALE=1
526      CALL DBESK(DC5*DABS(DX),DC6,ISCALE,IARG1,DTEMP1,NZERO)
527      DTERM3=DTEMP1(IARG1)
528      IF(DTERM3.LE.0.0D0)THEN
529        PDF=0.0D0
530        GOTO9000
531      ENDIF
532      DTERM3=DLOG(DTEMP1(IARG1))
533C
534      DC1=DSQRT(2.0D0/DPI)/DGAMMA(DTAU)
535      DC2=(DSQRT(2.0D0)/2.0D0)*((1.0D0/DK) - DK)
536      DTERM1=DLOG(DC1) + DC2*DX
537      DC3=DSQRT(2.0D0)/(DK + (1.0D0/DK))
538      DC4=DTAU - 0.5D0
539      DTERM2=DC4*DLOG(DC3*DABS(DX))
540C
541      DTERM4=DTERM1+DTERM2+DTERM3
542      PDF=DEXP(DTERM4)
543C
544      IF(X.EQ.0.0D0)THEN
545        IF(IPASS.EQ.1)THEN
546          DSAVE=PDF
547          IPASS=2
548          DX=-DEPS
549          GOTO1000
550        ELSEIF(IPASS.EQ.2)THEN
551          PDF=(PDF+DSAVE)/2.0D0
552        ENDIF
553      ENDIF
554C
555 9000 CONTINUE
556      RETURN
557      END
558      SUBROUTINE GALPPF(P,AK,TAU,IADEDF,PPF)
559C
560C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
561C              FUNCTION VALUE FOR THE GENERALIZED ASYMMETRIC LAPLACE
562C              DISTRIBUTION.  IT HAS SHAPE PARAMETERS AK AND TAU.
563C              THIS DISTRIBUTION IS DEFINED FOR ALL REAL
564C              X AND HAS THE PROBABILITY DENSITY FUNCTION
565C
566C                 GALPDF(X,K,TAU) = C1*C2*C3        X <> 0
567C              WITH
568C                 C1 = SQRT(2/PI)*EXP((SQRT(2)/2)*((1/K)-K)*X)/
569C                      GAMMA(TAU)
570C                 C2 = ((SQRT(2)*ABS(X)/(K+(1/K))**(TAU-0.5)
571C                 C3 = K(TAU-0.5)((SQRT(2)/2)*((1/K)+K)*ABS(X))
572C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
573C              OF THE THIRD KIND.
574C              THE PERCENT POINT FUNCTION IS COMPUTED BY NUMERICALLY
575C              INVERTING THE GENERALIZED ASYMMETRIC LAPLACE CUMULATIVE
576C              DISTRIBUTION FUNCTION (WHICH IN TURN IS COMPUTED BY
577C              NUMERICAL INTEGRATION OF THE PROBABILITYT DENSITY.
578C
579C     INPUT  ARGUMENTS--P       = THE DOUBLE PRECISION VALUE AT
580C                                 WHICH THE PERCENT POINT
581C                                 FUNCTION IS TO BE EVALUATED.
582C                                 0 < P < 1
583C                     --AK      = THE FIRST SHAPE PARAMETER
584C                     --TAU     = THE SECOND SHAPE PARAMETER
585C     OUTPUT ARGUMENTS--PPF     = THE DOUBLE PRECISION PERCENT POINT
586C                                 FUNCTION VALUE.
587C     OUTPUT--THE DOUBEL PRECISION PERCENT POINT FUNCTION
588C             VALUE PPF FOR THE GENERALIZED ASYMMETRIC LAPLACE
589C             DISTRIBUTION WITH SHAPE PARAMETERS = AK AND TAU.
590C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
591C     RESTRICTIONS--NONE.
592C     OTHER DATAPAC   SUBROUTINES NEEDED--DFZERO.
593C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE
594C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
595C     LANGUAGE--ANSI FORTRAN (1977)
596C     REFERENCES--KOTZ, KOZUBOWSKI, AND PODGORSKI, "THE LAPLACE
597C                 DISTRIBUTION AND GENERALIZATIONS: A REVISIT WITH
598C                 APPLICATIONS TO COMMUNICATIONS, ECONOMICS,
599C                 ENGINEERING, AND FINANCE", BIRKHAUSER, 2001,
600C                 PP. 189.
601C     WRITTEN BY--ALAN HECKERT
602C                 STATISTICAL ENGINEERING DIVISION
603C                 INFORMATION TECHNOLOGY LABORATORY
604C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
605C                 GAITHERSBURG, MD 20899-8980
606C                 PHONE--301-975-2899
607C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
608C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
609C     LANGUAGE--ANSI FORTRAN (1977)
610C     VERSION NUMBER--2004.8
611C     ORIGINAL VERSION--AUGUST    2004.
612C
613C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
614C
615C---------------------------------------------------------------------
616C
617      DOUBLE PRECISION P
618      DOUBLE PRECISION AK
619      DOUBLE PRECISION TAU
620      DOUBLE PRECISION PPF
621C
622      DOUBLE PRECISION DMEAN
623      DOUBLE PRECISION DSD
624      DOUBLE PRECISION DU
625      DOUBLE PRECISION PTEMPL
626      DOUBLE PRECISION PTEMPU
627C
628      DOUBLE PRECISION XUP
629      DOUBLE PRECISION XUP2
630      DOUBLE PRECISION XLOW
631      DOUBLE PRECISION RE
632      DOUBLE PRECISION AE
633C
634      DOUBLE PRECISION GALFU2
635      EXTERNAL GALFU2
636C
637      DOUBLE PRECISION DP
638      COMMON/GA2COM/DP
639C
640      DOUBLE PRECISION DAK
641      DOUBLE PRECISION DTAU
642      COMMON/GALCOM/DAK,DTAU
643C
644      CHARACTER*4 IADEDF
645      CHARACTER*4 IADED2
646C
647C-----COMMON----------------------------------------------------------
648C
649      INCLUDE 'DPCOP2.INC'
650C
651C-----START POINT-----------------------------------------------------
652C
653C               *****************************************
654C               **  STEP 1--                           **
655C               **  CHECK FOR VALID PARAMETERS         **
656C               *****************************************
657C
658      PPF=0.0D0
659      IADED2=IADEDF
660C
661      IF(IADEDF.EQ.'K')THEN
662        IF(AK.LE.0.0)THEN
663          WRITE(ICOUT,5)
664    5     FORMAT('***** ERROR: VALUE OF FIRST SHAPE PARAMETER (K) ',
665     1           'IN GALPPF ROUTINE IS NON-POSITIVE.')
666          CALL DPWRST('XXX','WRIT')
667          WRITE(ICOUT,48)AK
668   48     FORMAT('      VALUE OF ARGUMENT IS: ',G15.7,'.')
669          CALL DPWRST('XXX','WRIT')
670          GOTO9000
671        ENDIF
672      ELSE
673        AK=SQRT(2.0)/(AK + SQRT(2.0 + AK*AK))
674      ENDIF
675C
676      IF(P.LE.0.0D0 .OR. P.GE.1.0D0)THEN
677        WRITE(ICOUT,4)
678    4   FORMAT('***** ERROR: VALUE OF INPUT ARGUMENT (P) IN ',
679     1         'GALPPF ROUTINE')
680        CALL DPWRST('XXX','WRIT')
681        WRITE(ICOUT,14)
682   14   FORMAT('      IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
683        WRITE(ICOUT,48)P
684        CALL DPWRST('XXX','WRIT')
685        CALL DPWRST('XXX','WRIT')
686        GOTO9000
687      ELSEIF(TAU.LE.0.0)THEN
688        WRITE(ICOUT,6)
689    6   FORMAT('***** ERROR: VALUE OF SHAPE PARAMETER (TAU) IN ',
690     1         'GALPPF ROUTINE IS NON-POSITIVE.')
691        CALL DPWRST('XXX','WRIT')
692        WRITE(ICOUT,48)TAU
693        CALL DPWRST('XXX','WRIT')
694        GOTO9000
695      ENDIF
696C
697C               *****************************************
698C               **  STEP 2--                           **
699C               **  COMPUTE THE PERCENT POINT FUNCTION.**
700C               *****************************************
701C
702C  STEP 1: FIND BRACKETING INTERVAL.  THIS DISTRIBUTION IS UNBOUNDED
703C          IN BOTH DIRECTIONS.  BASIC ALGORITHM IS:
704C
705C          1) MEAN = TAU*(1/SQRT(2))*((1/K) - K)
706C             SD   = SQRT(TAU*(U**2 + 1))
707C
708C             WHERE U = (1/SQRT(2))*((1/K) - K)
709C
710C          2) START WITH -MEAN AND +MEAN AS THE STARTING LOWER AND
711C             UPPER BRACKETS.
712C
713C          3) INCREMENT IN INTERVALS OF 1 STANDARD DEVIATION.
714C
715      IADED2=IADEDF
716      IADEDF='K'
717C
718      DAK=AK
719      DTAU=TAU
720      DU=(1.0D0/SQRT(2.0D0))*((1.0D0/DAK) - DAK)
721      DMEAN=DTAU*DU
722      DSD=DSQRT(DTAU*(DU**2 + 1.0D0))
723C
724      XLOW=-REAL(DMEAN)
725      XUP2=REAL(DMEAN)
726      CALL GALCDF(XLOW,AK,TAU,IADEDF,PTEMPL)
727      CALL GALCDF(XUP2,AK,TAU,IADEDF,PTEMPU)
728C
729      MAXIT=1000
730      NIT=0
731C
732  200 CONTINUE
733        IF(NIT.GT.MAXIT)THEN
734          PPF=0.0
735          WRITE(ICOUT,999)
736          CALL DPWRST('XXX','BUG ')
737          WRITE(ICOUT,131)
738          CALL DPWRST('XXX','BUG ')
739          WRITE(ICOUT,133)
740          CALL DPWRST('XXX','BUG ')
741          GOTO9000
742        ENDIF
743        CALL GALCDF(XLOW,AK,TAU,IADEDF,PTEMPL)
744        CALL GALCDF(XUP2,AK,TAU,IADEDF,PTEMPU)
745        IF(PTEMPL.LE.P .AND. P.LE.PTEMPU)THEN
746          XUP=XUP2
747          GOTO300
748        ELSEIF(P.GT.PTEMPU)THEN
749          XLOW=XUP2
750          XUP2=XUP2 + REAL(DSD)
751          NIT=NIT+1
752          GOTO200
753        ELSEIF(P.LT.PTEMPL)THEN
754          XUP2=XLOW
755          XLOW=XLOW - REAL(DSD)
756          NIT=NIT+1
757          GOTO200
758        ENDIF
759C
760  300 CONTINUE
761      AE=1.D-7
762      RE=1.D-7
763      DP=P
764      CALL DFZERO(GALFU2,XLOW,XUP,XUP,RE,AE,IFLAG)
765C
766      PPF=XLOW
767C
768      IF(IFLAG.EQ.2)THEN
769C
770C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
771CCCCC   WRITE(ICOUT,999)
772  999   FORMAT(1X)
773CCCCC   CALL DPWRST('XXX','BUG ')
774CCCCC   WRITE(ICOUT,111)
775CC111   FORMAT('***** WARNING FROM GALPPF--')
776CCCCC   CALL DPWRST('XXX','BUG ')
777CCCCC   WRITE(ICOUT,113)
778CC113   FORMAT('      PPF VALUE MAY NOT BE COMPUTED TO DESIRED ',
779CCCCC1         'TOLERANCE.')
780CCCCC   CALL DPWRST('XXX','BUG ')
781      ELSEIF(IFLAG.EQ.3)THEN
782        WRITE(ICOUT,999)
783        CALL DPWRST('XXX','BUG ')
784        WRITE(ICOUT,121)
785  121   FORMAT('***** WARNING FROM GALPPF--')
786        CALL DPWRST('XXX','BUG ')
787        WRITE(ICOUT,123)
788  123   FORMAT('      PPF VALUE MAY BE NEAR A SINGULAR POINT.')
789        CALL DPWRST('XXX','BUG ')
790      ELSEIF(IFLAG.EQ.4)THEN
791        WRITE(ICOUT,999)
792        CALL DPWRST('XXX','BUG ')
793        WRITE(ICOUT,131)
794  131   FORMAT('***** ERROR FROM GALPPF--')
795        CALL DPWRST('XXX','BUG ')
796        WRITE(ICOUT,133)
797  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
798        CALL DPWRST('XXX','BUG ')
799      ELSEIF(IFLAG.EQ.5)THEN
800        WRITE(ICOUT,999)
801        CALL DPWRST('XXX','BUG ')
802        WRITE(ICOUT,141)
803  141   FORMAT('***** WARNING FROM GALPPF--')
804        CALL DPWRST('XXX','BUG ')
805        WRITE(ICOUT,143)
806  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
807        CALL DPWRST('XXX','BUG ')
808      ENDIF
809C
810 9000 CONTINUE
811      IADEDF=IADED2
812      RETURN
813      END
814      SUBROUTINE GALRAN(N,AK,TAU,IADEDF,ISEED,X)
815C
816C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
817C              FROM THE GENERALIZED ASYMMETRIC DOUBLE EXPONENTIAL
818C              (LAPLACE) DISTRIBUTION WITH SHAPE PARAMETERS = AK AND
819C              TAU.  THIS DISTRIBUTION IS DEFINED
820C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
821C                 GALPDF(X,K,TAU) = C1*C2*C3        X <> 0
822C              WITH
823C                 C1 = SQRT(2/PI)*EXP((SQRT(2)/2)*((1/K)-K)*X)/
824C                      GAMMA(TAU)
825C                 C2 = ((SQRT(2)*ABS(X)/(K+(1/K))**(TAU-0.5)
826C                 C3 = K(TAU-0.5)((SQRT(2)/2)*((1/K)+K)*ABS(X))
827C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
828C              OF THE THIRD KIND.
829C
830C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
831C                                OF RANDOM NUMBERS TO BE
832C                                GENERATED.
833C                     --AK     = THE FIRST SHAPE (PARAMETER) FOR THE
834C                                GENERALIZED ASYMMETRIC DOUBLE
835C                                EXPONENTIAL DISTRIBUTION.
836C                     --TAU    = THE SECOND SHAPE (PARAMETER) FOR THE
837C                                GENERALIZED ASYMMETRIC DOUBLE
838C                                EXPONENTIAL DISTRIBUTION.
839C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
840C                                (OF DIMENSION AT LEAST N)
841C                                INTO WHICH THE GENERATED
842C                                RANDOM SAMPLE WILL BE PLACED.
843C     OUTPUT--A RANDOM SAMPLE OF SIZE N
844C             FROM THE GENERALIZED ASYMMETRIC DOUBLE EXPONENTIAL
845C             DISTRIBUTION WITH SHAPE PARAMETERS = AK AND TAU.
846C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
847C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
848C                   OF N FOR THIS SUBROUTINE.
849C                 --AK AND TAU MUST BE POSITIVE.
850C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, NORRAN, GAMRAN.
851C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
852C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
853C     LANGUAGE--ANSI FORTRAN (1977)
854C     REFERENCES--KOTZ, KOZUBOWSKI, AND PODGORSKI, "THE LAPLACE
855C                 DISTRIBUTION AND GENERALIZATIONS: A REVISIT WITH
856C                 APPLICATIONS TO COMMUNICATIONS, ECONOMICS,
857C                 ENGINEERING, AND FINANCE", BIRKHAUSR, 2001,
858C                 PP. 179-192.
859C     WRITTEN BY--ALAN HECKERT
860C                 STATISTICAL ENGINEERING DIVISION
861C                 INFORMATION TECHNOLOGY LABORATORY
862C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
863C                 GAITHERSBURG, MD 20899-8980
864C                 PHONE--301-975-2855
865C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
866C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
867C     LANGUAGE--ANSI FORTRAN (1977)
868C     VERSION NUMBER--2004.6
869C     ORIGINAL VERSION--JUNE      2004.
870C
871C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
872C
873C---------------------------------------------------------------------
874C
875      DIMENSION X(*)
876      DIMENSION Y(2)
877C
878      CHARACTER*4 IADEDF
879C
880C-----COMMON----------------------------------------------------------
881C
882      INCLUDE 'DPCOP2.INC'
883C
884C-----DATA STATEMENTS-------------------------------------------------
885C
886C-----START POINT-----------------------------------------------------
887C
888C     CHECK THE INPUT ARGUMENTS FOR ERRORS
889C
890      IF(N.LT.1)THEN
891        WRITE(ICOUT,5)
892        CALL DPWRST('XXX','BUG ')
893        WRITE(ICOUT,6)
894        CALL DPWRST('XXX','BUG ')
895        WRITE(ICOUT,47)N
896        CALL DPWRST('XXX','BUG ')
897        GOTO9999
898      ENDIF
899      IF(IADEDF.EQ.'K')THEN
900        IF(AK.LE.0.0)THEN
901          WRITE(ICOUT,15)
902          CALL DPWRST('XXX','WRIT')
903          WRITE(ICOUT,48)AK
904          CALL DPWRST('XXX','WRIT')
905          GOTO9999
906        ENDIF
907      ELSE
908        AK=SQRT(2.0)/(AK + SQRT(2.0 + AK*AK))
909      ENDIF
910      IF(AK.LE.0.0)THEN
911        WRITE(ICOUT,25)
912        CALL DPWRST('XXX','WRIT')
913        WRITE(ICOUT,48)TAU
914        CALL DPWRST('XXX','WRIT')
915        GOTO9999
916      ENDIF
917   15 FORMAT('***** ERROR: VALUE OF SHAPE PARAMETER (K) IS ',
918     1       'NON-POSITIVE.')
919   25 FORMAT('***** ERROR: VALUE OF SHAPE PARAMETER (TAU) IS ',
920     1       'NON-POSITIVE.')
921C
922    5 FORMAT('***** ERROR--FOR THE GENERALIZED ASYMMETRIC DOUBLE ',
923     1       'EXPONENTIAL DISTRIBUTION,')
924    6 FORMAT('       THE REQUESTED NUMBER OF RANDOM NUMBERS WAS ',
925     1      'NON-POSITIVE.')
926   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
927   48 FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
928C
929C     ALGORITHM FROM PAGE 183 OF KOTZ, ET. AL.:
930C
931C        Y =  (1/SQRT(2))*((1/K)*G1 - K*G2)
932C
933C     WHERE G1 AND G2 ARE INDEPENDENT GAMMA RANDOM VARIABLES WITH
934C     SHAPE PARAMETER TAU.
935C
936      NTEMP=2
937      C=(1.0/SQRT(2.0))
938      DO100I=1,N
939        CALL GAMRAN(NTEMP,TAU,ISEED,Y)
940        G1=Y(1)
941        G2=Y(2)
942        APPF=C*((1.0/AK)*G1 - AK*G2)
943        X(I)=APPF
944  100 CONTINUE
945C
946 9999 CONTINUE
947      RETURN
948      END
949      DOUBLE PRECISION FUNCTION gam1(a)
950C     ------------------------------------------------------------------
951C     COMPUTATION OF 1/GAMMA(A+1) - 1  FOR -0.5 .LE. A .LE. 1.5
952C     ------------------------------------------------------------------
953C     .. Scalar Arguments ..
954      DOUBLE PRECISION a
955C     ..
956C     .. Local Scalars ..
957      DOUBLE PRECISION bot,d,s1,s2,t,top,w
958C     ..
959C     .. Local Arrays ..
960      DOUBLE PRECISION p(7),q(5),r(9)
961C     ..
962C     .. Data statements ..
963C     -------------------
964C     -------------------
965C     -------------------
966C     -------------------
967      DATA p(1)/.577215664901533D+00/,p(2)/-.409078193005776D+00/,
968     +     p(3)/-.230975380857675D+00/,p(4)/.597275330452234D-01/,
969     +     p(5)/.766968181649490D-02/,p(6)/-.514889771323592D-02/,
970     +     p(7)/.589597428611429D-03/
971      DATA q(1)/.100000000000000D+01/,q(2)/.427569613095214D+00/,
972     +     q(3)/.158451672430138D+00/,q(4)/.261132021441447D-01/,
973     +     q(5)/.423244297896961D-02/
974      DATA r(1)/-.422784335098468D+00/,r(2)/-.771330383816272D+00/,
975     +     r(3)/-.244757765222226D+00/,r(4)/.118378989872749D+00/,
976     +     r(5)/.930357293360349D-03/,r(6)/-.118290993445146D-01/,
977     +     r(7)/.223047661158249D-02/,r(8)/.266505979058923D-03/,
978     +     r(9)/-.132674909766242D-03/
979      DATA s1/.273076135303957D+00/,s2/.559398236957378D-01/
980C     ..
981C     .. Executable Statements ..
982C     -------------------
983      t = a
984      d = a - 0.5D0
985      IF (d.GT.0.0D0) t = d - 0.5D0
986CCCCC IF (t) 40,10,20
987      IF(t.lt.0.0d0)THEN
988        top = (((((((r(9)*t+r(8))*t+r(7))*t+r(6))*t+r(5))*t+
989     1        r(4))*t+r(3))*t+r(2))*t + r(1)
990        bot = (s2*t+s1)*t + 1.0D0
991        w = top/bot
992        IF (d.GT.0.0D0) THEN
993           gam1 = t*w/a
994        ELSE
995          gam1 = a* ((w+0.5D0)+0.5D0)
996        ENDIF
997      ELSEIF(t.gt.0.0d0)THEN
998        top = (((((p(7)*t+p(6))*t+p(5))*t+p(4))*t+p(3))*t+p(2))*t
999     1        + p(1)
1000        bot = (((q(5)*t+q(4))*t+q(3))*t+q(2))*t + 1.0D0
1001        w = top/bot
1002        IF (d.GT.0.0D0) THEN
1003           gam1 = (t/a)* ((w-0.5D0)-0.5D0)
1004        ELSE
1005          gam1 = a*w
1006        ENDIF
1007      ELSE
1008        gam1 = 0.0D0
1009      ENDIF
1010C
1011      RETURN
1012      END
1013      SUBROUTINE GAMEST(X,NOBS,SCALE,GAMMA,IERROR)
1014C
1015C  COMPUTE MLES FOR SHAPE PARAMETER (GAMMA) AND SCALE
1016C  PARAMETER (SCALE).
1017C
1018      DIMENSION X(*)
1019C
1020      DOUBLE PRECISION GAMFUN
1021      EXTERNAL GAMFUN
1022C
1023      DOUBLE PRECISION DLOGGM
1024      COMMON/GAMCOM/DLOGGM
1025C
1026      DOUBLE PRECISION AE
1027      DOUBLE PRECISION RE
1028      DOUBLE PRECISION DXSTRT
1029      DOUBLE PRECISION DXLOW
1030      DOUBLE PRECISION DXUP
1031      DOUBLE PRECISION XLOWSV
1032      DOUBLE PRECISION XUPSV
1033C
1034      CHARACTER*4 IBUGA3
1035      CHARACTER*4 IWRITE
1036      CHARACTER*4 IERROR
1037C
1038      INCLUDE 'DPCOP2.INC'
1039C
1040C  FOR STARTING VALUE, USE THE METHOD OF MOMENT ESTIMATORS
1041C
1042C    GAMMAHAT = (XBAR/XSD)**2
1043C    SCALE    = XSD**2/XBAR
1044C
1045      IERROR='NO'
1046      IBUGA3='OFF'
1047      IWRITE='OFF'
1048      CALL MEAN(X,NOBS,IWRITE,XMEAN,IBUGA3,IERROR)
1049      CALL SD(X,NOBS,IWRITE,XSD,IBUGA3,IERROR)
1050      GAMMMO=(XMEAN/XSD)**2
1051      SCALMO=XSD**2/XMEAN
1052      CALL GEOMEA(X,NOBS,IWRITE,XGEOM,IBUGA3,IERROR)
1053C
1054      IERROR='NO'
1055      AN=REAL(NOBS)
1056C
1057C  ESTIMATES FOR 2-PARAMETER MODEL.  USE DFZER2 TO FIND ROOT OF
1058C  THE LIKELIHOOD EQUATION.
1059C
1060      DLOGGM=DLOG(DBLE(XMEAN)/DBLE(XGEOM))
1061      DXSTRT=DBLE(GAMMMO)
1062      AE=2.0*0.000001D0*DXSTRT
1063      RE=AE
1064      IFLAG=0
1065      DXLOW=DXSTRT/2.0D0
1066      DXUP=2.0D0*DXSTRT
1067      ITBRAC=0
1068 4105 CONTINUE
1069      XLOWSV=DXLOW
1070      XUPSV=DXUP
1071      CALL DFZERO(GAMFUN,DXLOW,DXUP,DXSTRT,RE,AE,IFLAG)
1072C
1073      IF(IFLAG.EQ.4 .AND. ITBRAC.LE.100)THEN
1074        DXLOW=XLOWSV/2.0D0
1075        DXUP=2.0D0*XUPSV
1076        ITBRAC=ITBRAC+1
1077        GOTO4105
1078      ENDIF
1079C
1080  999 FORMAT(1X)
1081      IF(IFLAG.EQ.2)THEN
1082C
1083C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
1084CCCCC   WRITE(ICOUT,999)
1085CCCCC   CALL DPWRST('XXX','BUG ')
1086CCCCC   WRITE(ICOUT,111)
1087CC111   FORMAT('***** WARNING FROM GAMMA MAXIMUM ',
1088CCCCC1         'LIKELIHOOD--')
1089CCCCC   CALL DPWRST('XXX','BUG ')
1090CCCCC   WRITE(ICOUT,113)
1091CC113   FORMAT('      ESTIMATE OF GAMMA MAY NOT BE COMPUTED TO ',
1092CCCCC1         'DESIRED TOLERANCE.')
1093CCCCC   CALL DPWRST('XXX','BUG ')
1094      ELSEIF(IFLAG.EQ.3)THEN
1095        WRITE(ICOUT,999)
1096        CALL DPWRST('XXX','BUG ')
1097        WRITE(ICOUT,121)
1098  121   FORMAT('***** WARNING FROM GAMMA MAXIMUM LIKELIHOOD--')
1099        CALL DPWRST('XXX','BUG ')
1100        WRITE(ICOUT,123)
1101  123   FORMAT('      ESTIMATE OF GAMMA MAY BE NEAR A SINGULAR POINT.')
1102        CALL DPWRST('XXX','BUG ')
1103      ELSEIF(IFLAG.EQ.4)THEN
1104        WRITE(ICOUT,999)
1105        CALL DPWRST('XXX','BUG ')
1106        WRITE(ICOUT,131)
1107  131   FORMAT('***** ERROR FROM GAMMA MAXIMUM LIKELIHOOD--')
1108        CALL DPWRST('XXX','BUG ')
1109        WRITE(ICOUT,133)
1110  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
1111        CALL DPWRST('XXX','BUG ')
1112      ELSEIF(IFLAG.EQ.5)THEN
1113        WRITE(ICOUT,999)
1114        CALL DPWRST('XXX','BUG ')
1115        WRITE(ICOUT,141)
1116  141   FORMAT('***** WARNING FROM GAMMA MAXIMUM LIKELIHOOD--')
1117        CALL DPWRST('XXX','BUG ')
1118        WRITE(ICOUT,143)
1119  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
1120        CALL DPWRST('XXX','BUG ')
1121      ENDIF
1122C
1123      GAMMA=REAL(DXLOW)
1124      SCALE=XMEAN/GAMMA
1125C
1126      RETURN
1127      END
1128      DOUBLE PRECISION FUNCTION gamln(a)
1129C-----------------------------------------------------------------------
1130C            EVALUATION OF LN(GAMMA(A)) FOR POSITIVE A
1131C-----------------------------------------------------------------------
1132C     WRITTEN BY ALFRED H. MORRIS
1133C          NAVAL SURFACE WARFARE CENTER
1134C          DAHLGREN, VIRGINIA
1135C--------------------------
1136C     D = 0.5*(LN(2*PI) - 1)
1137C--------------------------
1138C     .. Scalar Arguments ..
1139      DOUBLE PRECISION a
1140C     ..
1141C     .. Local Scalars ..
1142      DOUBLE PRECISION c0,c1,c2,c3,c4,c5,d,t,w
1143      INTEGER i,n
1144C     ..
1145C     .. External Functions ..
1146      DOUBLE PRECISION gamln1
1147      EXTERNAL gamln1
1148C     ..
1149C     .. Intrinsic Functions ..
1150      INTRINSIC dlog
1151C     ..
1152C     .. Data statements ..
1153C--------------------------
1154      DATA d/.418938533204673D0/
1155      DATA c0/.833333333333333D-01/,c1/-.277777777760991D-02/,
1156     +     c2/.793650666825390D-03/,c3/-.595202931351870D-03/,
1157     +     c4/.837308034031215D-03/,c5/-.165322962780713D-02/
1158C     ..
1159C     .. Executable Statements ..
1160C-----------------------------------------------------------------------
1161      IF (a.GT.0.8D0) GO TO 10
1162      gamln = gamln1(a) - dlog(a)
1163      RETURN
1164
1165   10 IF (a.GT.2.25D0) GO TO 20
1166      t = (a-0.5D0) - 0.5D0
1167      gamln = gamln1(t)
1168      RETURN
1169C
1170   20 IF (a.GE.10.0D0) GO TO 40
1171      n = int(a - 1.25D0)
1172      t = a
1173      w = 1.0D0
1174      DO 30 i = 1,n
1175          t = t - 1.0D0
1176          w = t*w
1177   30 CONTINUE
1178      gamln = gamln1(t-1.0D0) + dlog(w)
1179      RETURN
1180C
1181   40 t = (1.0D0/a)**2
1182      w = (((((c5*t+c4)*t+c3)*t+c2)*t+c1)*t+c0)/a
1183      gamln = (d+w) + (a-0.5D0)* (dlog(a)-1.0D0)
1184      END
1185      DOUBLE PRECISION FUNCTION gamln1(a)
1186C-----------------------------------------------------------------------
1187C     EVALUATION OF LN(GAMMA(1 + A)) FOR -0.2 .LE. A .LE. 1.25
1188C-----------------------------------------------------------------------
1189C     .. Scalar Arguments ..
1190      DOUBLE PRECISION a
1191C     ..
1192C     .. Local Scalars ..
1193      DOUBLE PRECISION p0,p1,p2,p3,p4,p5,p6,q1,q2,q3,q4,q5,q6,r0,r1,r2,
1194     +                 r3,r4,r5,s1,s2,s3,s4,s5,w,x
1195C     ..
1196C     .. Data statements ..
1197C----------------------
1198      DATA p0/.577215664901533D+00/,p1/.844203922187225D+00/,
1199     +     p2/-.168860593646662D+00/,p3/-.780427615533591D+00/,
1200     +     p4/-.402055799310489D+00/,p5/-.673562214325671D-01/,
1201     +     p6/-.271935708322958D-02/
1202      DATA q1/.288743195473681D+01/,q2/.312755088914843D+01/,
1203     +     q3/.156875193295039D+01/,q4/.361951990101499D+00/,
1204     +     q5/.325038868253937D-01/,q6/.667465618796164D-03/
1205      DATA r0/.422784335098467D+00/,r1/.848044614534529D+00/,
1206     +     r2/.565221050691933D+00/,r3/.156513060486551D+00/,
1207     +     r4/.170502484022650D-01/,r5/.497958207639485D-03/
1208      DATA s1/.124313399877507D+01/,s2/.548042109832463D+00/,
1209     +     s3/.101552187439830D+00/,s4/.713309612391000D-02/,
1210     +     s5/.116165475989616D-03/
1211C     ..
1212C     .. Executable Statements ..
1213C----------------------
1214      IF (a.GE.0.6D0) GO TO 10
1215      w = ((((((p6*a+p5)*a+p4)*a+p3)*a+p2)*a+p1)*a+p0)/
1216     +    ((((((q6*a+q5)*a+q4)*a+q3)*a+q2)*a+q1)*a+1.0D0)
1217      gamln1 = -a*w
1218      RETURN
1219C
1220   10 x = (a-0.5D0) - 0.5D0
1221      w = (((((r5*x+r4)*x+r3)*x+r2)*x+r1)*x+r0)/
1222     +    (((((s5*x+s4)*x+s3)*x+s2)*x+s1)*x+1.0D0)
1223      gamln1 = x*w
1224      RETURN
1225
1226      END
1227      double precision function gammds (y, p, ifault)
1228c-----------------------------------------------------------------------
1229c  Name:       GAMMDS
1230c
1231c  Purpose:    Cumulative distribution for the gamma distribution.
1232c
1233c  Usage:      PGAMMA (Q, ALPHA,IFAULT)
1234c
1235c  Arguments:
1236c     Q      - Value at which the distribution is desired.  (Input)
1237c     ALPHA  - Parameter in the gamma distribution.  (Input)
1238c     IFAULT - Error indicator.  (Output)
1239c               IFAULT  DEFINITION
1240c                 0     No error
1241c                 1     An argument is misspecified.
1242c                 2     A numerical error has occurred.
1243c     PGAMMA - The cdf for the gamma distribution with parameter alpha
1244c              evaluated at Q.  (Output)
1245c-----------------------------------------------------------------------
1246c
1247c       Algorithm AS 147 APPL. Statist. (1980) VOL. 29, P. 113
1248c
1249c       Computes the incomplete gamma integral for positive
1250c       parameters Y, P using and infinite series.
1251c
1252c                                  SPECIFICATIONS FOR ARGUMENTS
1253      integer    ifault
1254      double precision y, p
1255c                                  SPECIFICATIONS FOR LOCAL VARIABLES
1256      integer    ifail
1257      double precision a, c, f
1258c                                  SPECIFICATIONS FOR SAVE VARIABLES
1259      double precision e, one, zero
1260      save       e, one, zero
1261c                                  SPECIFICATIONS FOR INTRINSICS
1262      intrinsic  dlog, dexp
1263ccccc double precision dlog, dexp
1264c                                  SPECIFICATIONS FOR FUNCTIONS
1265      external   alogam
1266      double precision alogam
1267      double precision zexp, zlog
1268c
1269      data e, zero, one/1.0d-6, 0.0d0, 1.0d0/
1270c
1271      zexp(a) = dexp(a)
1272      zlog(a) = dlog(a)
1273c
1274c       Checks for the admissibility of arguments and value of F
1275c
1276      ifault = 1
1277      gammds = zero
1278      if (y.le.zero .or. p.le.zero) return
1279      ifault = 2
1280c
1281c       ALOGAM is natural log of gamma function
1282c       no need to test ifail as an error is impossible
1283c
1284      f = zexp(p*zlog(y)-alogam(p+one,ifail)-y)
1285      if (f .eq. zero) return
1286      ifault = 0
1287c
1288c       Series begins
1289c
1290      c      = one
1291      gammds = one
1292      a      = p
1293   10 a = a + one
1294      c      = c*y/a
1295      gammds = gammds + c
1296      if (c/gammds .gt. e) go to 10
1297      gammds = gammds*f
1298      return
1299      end
1300      SUBROUTINE GAMLIM(XMIN,XMAX)
1301C***BEGIN PROLOGUE  GAMLIM
1302C***DATE WRITTEN   770401   (YYMMDD)
1303C***REVISION DATE  820801   (YYMMDD)
1304C***CATEGORY NO.  C7A,R2
1305C***KEYWORDS  GAMMA FUNCTION,LIMITS,SPECIAL FUNCTION
1306C***AUTHOR  FULLERTON, W., (LANL)
1307C***PURPOSE  Computes the minimum and maximum bounds for X in GAMMA(X).
1308C***DESCRIPTION
1309C
1310C Calculate the minimum and maximum legal bounds for X in GAMMA(X).
1311C XMIN and XMAX are not the only bounds, but they are the only non-
1312C trivial ones to calculate.
1313C
1314C             Output Arguments --
1315C XMIN   minimum legal value of X in GAMMA(X).  Any smaller value of
1316C        X might result in underflow.
1317C XMAX   maximum legal value of X in GAMMA(X).  Any larger value will
1318C        cause overflow.
1319C***REFERENCES  (NONE)
1320C***ROUTINES CALLED  R1MACH,XERROR
1321C***END PROLOGUE  GAMLIM
1322C***FIRST EXECUTABLE STATEMENT  GAMLIM
1323C
1324      INCLUDE 'DPCOMC.INC'
1325      INCLUDE 'DPCOP2.INC'
1326C
1327      ALNSML = LOG(R1MACH(1))
1328      XMIN = -ALNSML
1329      DO 10 I=1,10
1330        XOLD = XMIN
1331        XLN = LOG(XMIN)
1332        XMIN = XMIN - XMIN*((XMIN+0.5)*XLN - XMIN - 0.2258 + ALNSML)
1333     1    / (XMIN*XLN + 0.5)
1334        IF (ABS(XMIN-XOLD).LT.0.005) GO TO 20
1335 10   CONTINUE
1336CCCCC CALL XERROR ( 'GAMLIM  UNABLE TO FIND XMIN', 27, 1, 2)
1337      WRITE(ICOUT,11)
1338      CALL DPWRST('XXX','BUG ')
1339   11 FORMAT('***** ERROR FROM GAMLIM: UNABLE TO FIND ',
1340     1       'XMIN')
1341C
1342 20   XMIN = -XMIN + 0.01
1343C
1344      ALNBIG = LOG(R1MACH(2))
1345      XMAX = ALNBIG
1346      DO 30 I=1,10
1347        XOLD = XMAX
1348        XLN = LOG(XMAX)
1349        XMAX = XMAX - XMAX*((XMAX-0.5)*XLN - XMAX + 0.9189 - ALNBIG)
1350     1    / (XMAX*XLN - 0.5)
1351        IF (ABS(XMAX-XOLD).LT.0.005) GO TO 40
1352 30   CONTINUE
1353CCCCC CALL XERROR ( 'GAMLIM  UNABLE TO FIND XMAX', 27, 2, 2)
1354      WRITE(ICOUT,31)
1355      CALL DPWRST('XXX','BUG ')
1356   31 FORMAT('***** ERROR FROM GAMLIM: UNABLE TO FIND ',
1357     1       'XMAX')
1358C
1359 40   XMAX = XMAX - 0.01
1360      XMIN = AMAX1 (XMIN, -XMAX+1.)
1361C
1362      RETURN
1363      END
1364      SUBROUTINE GAMMAF(X,G)
1365C
1366C     THIS PROGRAM CALCULATES THE GAMMA FUNCTION
1367C     THE INPUT IS SINGLE PRECISION X
1368C     THE OUTPUT IS SINGLE PRECISION G
1369C     ALL INTERNAL OPERATIONS ARE DONE IN DOUBLE PRECISION
1370C     THE ALGORITHM IS TO USE THE RECURSION FORMULA G(X)=G(X+1)/X
1371C     UNTIL X IS LARGE ENOUGH TO USE AN ASYMPTOTIC FORMULA FOR G(X)--THE CUT-OFF
1372C     POINT USED WAS X = 10
1373C     THE ASYMPTOTIC FORMULA USED IS IN AMS 55, PAGE 257, 6.1.41 (THE FIRST 9
1374C     TERMS OF THE SERIES WERE USED--I.E., OUT TO X**-17)
1375C     ALTHOUGH THE DATA STATEMENT DEFINES 10 COEFFICIENTS, THE PROGRAM MAKES USE
1376C     OF ONLY 9 COEFFICIENTS (THE ERROR BEING BOUNDED BY THE TENTH COEFFICIENT
1377C     DIVIDED BY X**19
1378C     SUBROUTINES NEEDED--NONE
1379C     PRINTING--NONE UNLESS AN ERROR CONDITION EXISTS
1380C     WRITTEN BY--JAMES J. FILLIBEN
1381C                 STATISTICAL ENGINEERING DIVISION
1382C                 INFORMATION TECHNOLOGY LABORATORY
1383C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
1384C                 GAITHERSBURG, MD 20899-8980
1385C                 PHONE--301-921-3651
1386C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
1387C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
1388C     LANGUAGE--ANSI FORTRAN (1977)
1389C     VERSION NUMBER--82/7
1390C     ORIGINAL VERSION--JUNE      1972.
1391C     UPDATED         --FEBRUARY  1981.
1392C     UPDATED         --FEBRUARY  1982.
1393C     UPDATED         --MAY       1982.
1394C
1395C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
1396C
1397C---------------------------------------------------------------------
1398C
1399      DOUBLE PRECISION Y,Y2,Y3,Y4,Y5,DEN,A,B,C,D
1400C
1401      DIMENSION D(10)
1402C
1403C-----COMMON----------------------------------------------------------
1404C
1405      INCLUDE 'DPCOP2.INC'
1406C
1407C-----DATA STATEMENTS-------------------------------------------------
1408C
1409      DATA C/ .918938533204672741D0/
1410      DATA D(1),D(2),D(3),D(4),D(5)
1411     1                 /+.833333333333333333D-1,-.277777777777777778D-2,
1412     1+.793650793650793651D-3,-.595238095238095238D-3,+.8417508417508417
1413     151D-3/
1414      DATA D(6),D(7),D(8),D(9),D(10)
1415     1     /-.191752691752691753D-2,+.641025641025641025D-2,-.2955065359
1416     147712418D-1,+.179644372368830573D0,-.139243221690590111D1/
1417C
1418C-----START POINT-----------------------------------------------------
1419C
1420C     CHECK THE INPUT ARGUMENTS FOR ERRORS
1421C
1422      IF(X.LE.0.0D0)GOTO50
1423      GOTO90
1424   50 WRITE(ICOUT,5)
1425      CALL DPWRST('XXX','BUG ')
1426      WRITE(ICOUT,45)X
1427      CALL DPWRST('XXX','BUG ')
1428      RETURN
1429   90 CONTINUE
1430    5 FORMAT('***** FATAL ERROR--THE FIRST  INPUT ARGUMENT ',
1431     1'TO THE GAMMAF SUBROUTINE IS NON-POSITIVE *****')
1432   45 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',D22.15,' *****')
1433C
1434      Y=X
1435      DEN=1.0D0
1436  100 IF(Y.GE.10.0D0)GOTO200
1437      DEN=DEN*Y
1438      Y=Y+1
1439      GOTO100
1440  200 Y2=Y*Y
1441      Y3=Y*Y2
1442      Y4=Y2*Y2
1443      Y5=Y2*Y3
1444      A=(Y-0.5D0)*DLOG(Y)-Y+C
1445      B=D(1)/Y+D(2)/Y3+D(3)/Y5+D(4)/(Y2*Y5)+D(5)/(Y4*Y5)+
1446     1D(6)/(Y*Y5*Y5)+D(7)/(Y3*Y5*Y5)+D(8)/(Y5*Y5*Y5)+D(9)/(Y2*Y5*Y5*Y5)
1447      G=DEXP(A+B)/DEN
1448C
1449      RETURN
1450      END
1451      SUBROUTINE GAMCDF(X,GAMMA,CDF)
1452C
1453C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
1454C              FUNCTION VALUE FOR THE GAMMA
1455C              DISTRIBUTION WITH SINGLE PRECISION
1456C              TAIL LENGTH PARAMETER = GAMMA.
1457C              THE GAMMA DISTRIBUTION USED
1458C              HEREIN HAS MEAN = GAMMA
1459C              AND STANDARD DEVIATION = SQRT(GAMMA).
1460C              THIS DISTRIBUTION IS DEFINED FOR ALL POSITIVE X,
1461C              AND HAS THE PROBABILITY DENSITY FUNCTION
1462C              F(X) = (1/CONSTANT) * (X**(GAMMA-1)) * EXP(-X)
1463C              WHERE THE CONSTANT = THE GAMMA FUNCTION EVALUATED
1464C              AT THE VALUE GAMMA.
1465C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
1466C                                AT WHICH THE CUMULATIVE DISTRIBUTION
1467C                                FUNCTION IS TO BE EVALUATED.
1468C                                X SHOULD BE POSITIVE.
1469C                     --GAMMA  = THE SINGLE PRECISION VALUE
1470C                                OF THE TAIL LENGTH PARAMETER.
1471C                                GAMMA SHOULD BE POSITIVE.
1472C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
1473C                                DISTRIBUTION FUNCTION VALUE.
1474C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
1475C             FUNCTION VALUE CDF FOR THE GAMMA DISTRIBUTION
1476C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
1477C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
1478C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
1479C                 --X SHOULD BE POSITIVE.
1480C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
1481C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG.
1482C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
1483C     LANGUAGE--ANSI FORTRAN.
1484C     ACCURACY--(ON THE UNIVAC 1108, EXEC 8 SYSTEM AT NBS)
1485C               COMPARED TO THE KNOWN GAMMA = 1 (EXPONENTIAL)
1486C               RESULTS, AGREEMENT WAS HAD OUT TO 7 SIGNIFICANT
1487C               DIGITS FOR ALL TESTED X.
1488C               THE TESTED X VALUES COVERED THE ENTIRE
1489C               RANGE OF THE DISTRIBUTION--FROM THE 0.00001
1490C               PERCENT POINT UP TO THE 99.99999 PERCENT POINT
1491C               OF THE DISTRIBUTION.
1492C     REFERENCES--WILK, GNANADESIKAN, AND HUYETT, 'PROBABILITY
1493C                 PLOTS FOR THE GAMMA DISTRIBUTION',
1494C                 TECHNOMETRICS, 1962, PAGES 1-15,
1495C                 ESPECIALLY PAGES 3-5.
1496C               --NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY APPLIED MATHEMATICS
1497C                 SERIES 55, 1964, PAGE 257, FORMULA 6.1.41.
1498C               --JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
1499C                 DISTRIBUTIONS--1, 1970, PAGES 166-206.
1500C               --HASTINGS AND PEACOCK, STATISTICAL
1501C                 DISTRIBUTIONS--A HANDBOOK FOR
1502C                 STUDENTS AND PRACTITIONERS, 1975,
1503C                 PAGES 68-73.
1504C     WRITTEN BY--JAMES J. FILLIBEN
1505C                 STATISTICAL ENGINEERING LABORATORY (205.03)
1506C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
1507C                 GAITHERSBURG, MD 20899-8980
1508C                 PHONE:  301-975-2855
1509C     ORIGINAL VERSION--APRIL     1994.
1510C
1511C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
1512C
1513C---------------------------------------------------------------------
1514C
1515      INCLUDE 'DPCOP2.INC'
1516C
1517C---------------------------------------------------------------------
1518C
1519      DOUBLE PRECISION DX,DGAMMA,AI,TERM,SUM,CUT1,CUT2,CUTOFF,T
1520      DOUBLE PRECISION Z,Z2,Z3,Z4,Z5,DEN,A,B,C,D,G
1521      DOUBLE PRECISION DEXP,DLOG
1522      DIMENSION D(10)
1523      DATA C/ .918938533204672741D0/
1524      DATA D(1),D(2),D(3),D(4),D(5)
1525     1                 /+.833333333333333333D-1,-.277777777777777778D-2,
1526     1+.793650793650793651D-3,-.595238095238095238D-3,+.8417508417508417
1527     151D-3/
1528      DATA D(6),D(7),D(8),D(9),D(10)
1529     1     /-.191752691752691753D-2,+.641025641025641025D-2,-.2955065359
1530     147712418D-1,+.179644372368830573D0,-.139243221690590111D1/
1531C
1532C
1533C     CHECK THE INPUT ARGUMENTS FOR ERRORS
1534C
1535      CDF=0.0
1536      IF(X.LE.0.0)THEN
1537CCCCC   WRITE(ICOUT,4)
1538CCCC4   FORMAT('***** WARNING--THE FIRST ARGUMENT TO GAMCDF IS ',
1539CCCCC1         'NON-POSITIVE.')
1540CCCCC   CALL DPWRST('XXX','BUG ')
1541CCCCC   WRITE(ICOUT,46)X
1542CCCCC   CALL DPWRST('XXX','BUG ')
1543        GOTO9000
1544      ELSEIF(GAMMA.LE.0.0)THEN
1545        WRITE(ICOUT,15)
1546   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GAMCDF IS ',
1547     1         'NON-POSITIVE.')
1548        CALL DPWRST('XXX','BUG ')
1549        WRITE(ICOUT,46)GAMMA
1550        CALL DPWRST('XXX','BUG ')
1551        GOTO9000
1552      ENDIF
1553   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
1554C
1555C-----START POINT-----------------------------------------------------
1556C
1557      DX=X
1558      DGAMMA=GAMMA
1559      MAXIT=10000
1560C
1561C     COMPUTE THE GAMMA FUNCTION USING THE ALGORITHM IN THE
1562C     NBS APPLIED MATHEMATICS SERIES REFERENCE.
1563C
1564      Z=DGAMMA
1565      DEN=1.0D0
1566  300 IF(Z.GE.10.0D0)GOTO400
1567      DEN=DEN*Z
1568      Z=Z+1
1569      GOTO300
1570  400 Z2=Z*Z
1571      Z3=Z*Z2
1572      Z4=Z2*Z2
1573      Z5=Z2*Z3
1574      A=(Z-0.5D0)*DLOG(Z)-Z+C
1575      B=D(1)/Z+D(2)/Z3+D(3)/Z5+D(4)/(Z2*Z5)+D(5)/(Z4*Z5)+
1576     1D(6)/(Z*Z5*Z5)+D(7)/(Z3*Z5*Z5)+D(8)/(Z5*Z5*Z5)+D(9)/(Z2*Z5*Z5*Z5)
1577      G=DEXP(A+B)/DEN
1578C
1579C     COMPUTE T-SUB-Q AS DEFINED ON PAGE 4 OF THE WILK, GNANADESIKAN,
1580C     AND HUYETT REFERENCE
1581C
1582      SUM=1.0D0/DGAMMA
1583      TERM=1.0D0/DGAMMA
1584      CUT1=DX-DGAMMA
1585      CUT2=DX*10000000000.0D0
1586      DO200I=1,MAXIT
1587      AI=I
1588      TERM=DX*TERM/(DGAMMA+AI)
1589      SUM=SUM+TERM
1590      CUTOFF=CUT1+(CUT2*TERM/SUM)
1591      IF(AI.GT.CUTOFF)GOTO250
1592  200 CONTINUE
1593      WRITE(ICOUT,205)MAXIT
1594      CALL DPWRST('XXX','BUG ')
1595      WRITE(ICOUT,206)X
1596      CALL DPWRST('XXX','BUG ')
1597      WRITE(ICOUT,207)GAMMA
1598      CALL DPWRST('XXX','BUG ')
1599      WRITE(ICOUT,208)
1600      CALL DPWRST('XXX','BUG ')
1601      CDF=1.0
1602      GOTO9000
1603C
1604  250 T=SUM
1605      CDF=(DX**DGAMMA)*(DEXP(-DX))*T/G
1606C
1607CC204 FORMAT('*****ERROR IN INTERNAL OPERATIONS IN THE GAMCDF ,')
1608  205 FORMAT('     SUBROUTINE--THE NUMBER OF ITERATIONS EXCEEDS ',I7)
1609  206 FORMAT('     THE INPUT VALUE OF X     IS ',G15.7)
1610  207 FORMAT('     THE INPUT VALUE OF GAMMA IS ',G15.7)
1611  208 FORMAT('     THE OUTPUT VALUE OF CDF HAS BEEN SET TO 1.0')
1612C
1613 9000 CONTINUE
1614      RETURN
1615      END
1616      DOUBLE PRECISION FUNCTION GAMFUN (GHAT)
1617C
1618C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE MAXIMUM LIKELIHOOD
1619C              ESTIMATE OF GAMMA FOR THE 2-PARAMETER GAMMA
1620C              MODEL FOR FULL SAMPLE DATA (NO CENSORING).  THIS
1621C              FUNCTION FINDS THE ROOT OF THE EQUATION:
1622C
1623C                 LOG(GHAT) - DIGAMMA(GHAT) - LOG(G)
1624C
1625C              WITH
1626C
1627C                 G        = GEOMETRIC MEAN OF THE DATA
1628C                 GHAT     = POINT ESTIMATE OF GAMMA (THIS IS THE
1629C                            PARAMETER WE ARE ITERATING OVER)
1630C
1631C              NOTE THAT THE LOG(G) TERM DOES NOT DEPEND ON GHAT,
1632C              SO THIS IS A CONSTANT.  FOR EFFICIENCY, SAVE THIS AS
1633C              A CONSTANT IN A COMMON BLOCK.
1634C
1635C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF A
1636C              FUNCTION.
1637C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y
1638C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN
1639C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
1640C                1999, CHAPTER 13.
1641C              --JOHNSON, KOTZ, AND BALAKRISNAN, "CONTINUOUS
1642C                UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
1643C                WILEY, 1994, CHAPTER 17.
1644C     WRITTEN BY--JAMES J. FILLIBEN
1645C                 STATISTICAL ENGINEERING DIVISION
1646C                 INFORMATION TECHNOLOGY LABORATORY
1647C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
1648C                 GAITHERSBUG, MD 20899-8980
1649C                 PHONE--301-975-2855
1650C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
1651C           OF THE NATIONAL BUREAU OF STANDARDS.
1652C     LANGUAGE--ANSI FORTRAN (1977)
1653C     VERSION NUMBER--2004/11
1654C     ORIGINAL VERSION--NOVEMBER   2004.
1655C
1656C---------------------------------------------------------------------
1657C
1658      DOUBLE PRECISION GHAT
1659C
1660      DOUBLE PRECISION DLOGGM
1661      COMMON/GAMCOM/DLOGGM
1662C
1663      DOUBLE PRECISION DPSI
1664      EXTERNAL DPSI
1665C
1666C---------------------------------------------------------------------
1667C
1668      DOUBLE PRECISION DTERM1
1669      DOUBLE PRECISION DTERM2
1670C
1671      INCLUDE 'DPCOP2.INC'
1672C
1673C-----START POINT-----------------------------------------------------
1674C
1675C  COMPUTE SOME SUMS
1676C
1677      DTERM1=DLOG(GHAT)
1678      DTERM2=DPSI(GHAT)
1679C
1680      GAMFUN=DTERM1 - DTERM2 - DLOGGM
1681C
1682      RETURN
1683      END
1684      DOUBLE PRECISION FUNCTION GAMFU2 (DA)
1685C
1686C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE LIKELIHOOD RATIO
1687C              BASED CONFIDECE INTERVAL FOR THE 2-PARAMETER GAMMA
1688C              MODEL (FULL SAMPLE).  THIS FUNCTION FINDS THE ROOT
1689C              OF THE EQUATION:
1690C
1691C                 2*LL(S,G) - 2*LL(xbar/a,a) - CHSPPF(alpha,1)
1692C
1693C              WITH
1694C
1695C                 LL(S,G) = -N*LN(GAMMA(G)) - N*G*LN(S) +
1696C                          N*(G-1)*LN(G) - N*XBAR/S
1697C                 S        = POINT ESTIMATE OF SCALE PARAMETER
1698C                 G        = POINT ESTIMATE OF SHAPE PARAMETER
1699C                 GAMMA    = GAMMA FUNCTION
1700C                 A        = PARAMETER WE ARE FINDING ROOT FOR
1701C
1702C              NOTE THAT QUANTITIES THAT DO NOT DEPEND ON A ARE
1703C              COMPUTED ONCE IN DPMLG1 AND PASSED VIA COMMON BLOCK.
1704C
1705C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF A
1706C              FUNCTION.
1707C
1708C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y
1709C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN ENGINEERING",
1710C                CAMBRIDGE UNIVERSITY PRESS, 1999, CHAPTER 13 (SEE
1711C                EXAMPLE 13.3).
1712C     WRITTEN BY--JAMES J. FILLIBEN
1713C                 STATISTICAL ENGINEERING DIVISION
1714C                 INFORMATION TECHNOLOGY LABORATORY
1715C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
1716C                 GAITHERSBUG, MD 20899-8980
1717C                 PHONE--301-975-2855
1718C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
1719C           OF THE NATIONAL BUREAU OF STANDARDS.
1720C     LANGUAGE--ANSI FORTRAN (1977)
1721C     VERSION NUMBER--2004/11
1722C     ORIGINAL VERSION--NOVEMBER   2004.
1723C
1724C---------------------------------------------------------------------
1725C
1726      DOUBLE PRECISION DA
1727C
1728      DOUBLE PRECISION DK
1729      DOUBLE PRECISION DXBAR
1730      DOUBLE PRECISION DGMEAN
1731      DOUBLE PRECISION DSCALE
1732      DOUBLE PRECISION DG
1733      COMMON/GAMCO2/DK,DXBAR,DGMEAN,DSCALE,DG,N
1734C
1735      DOUBLE PRECISION DLNGAM
1736      EXTERNAL DLNGAM
1737C
1738      DOUBLE PRECISION DN
1739      DOUBLE PRECISION DTERM1
1740      DOUBLE PRECISION DTERM2
1741C
1742C-----COMMON----------------------------------------------------------
1743C
1744      INCLUDE 'DPCOP2.INC'
1745C
1746C-----START POINT-----------------------------------------------------
1747C
1748C
1749C  COMPUTE LL(S,G)
1750C
1751      DN=DBLE(N)
1752      DTERM1=-DN*DLNGAM(DG) - DN*DG*DLOG(DSCALE) +
1753     1       DN*(DG-1.0D0)*DLOG(DGMEAN) - DN*DXBAR/DSCALE
1754C
1755C  COMPUTE LL(XBAR/A,A)
1756C
1757      DTERM2=-DN*DLNGAM(DA) - DN*DA*DLOG(DXBAR/DA) +
1758     1       DN*(DA-1.0D0)*DLOG(DGMEAN) - DN*DXBAR/(DXBAR/DA)
1759C
1760      GAMFU2=2.0*DTERM1 - 2.0D0*DTERM2 - DK
1761C
1762      RETURN
1763      END
1764      DOUBLE PRECISION FUNCTION GAMFU3 (DB,DX)
1765C
1766C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE LIKELIHOOD RATIO
1767C              BASED CONFIDENCE INTERVAL FOR THE SCALE PARAMETER OF A
1768C              2-PARAMETER GAMMA MODEL (FULL SAMPLE).  THIS FUNCTION
1769C              FINDS THE ROOT OF THE EQUATION:
1770C
1771C                 2*LL(S,G) - 2*LL(b,G(b)) - CHSPPF(alpha,1)
1772C
1773C              WITH
1774C
1775C                 LL(S,G) = -N*LN(GAMMA(G)) - N*G*LN(S) +
1776C                          N*(G-1)*LN(G) - N*XBAR/S
1777C                 S        = POINT ESTIMATE OF SCALE PARAMETER
1778C                 G        = POINT ESTIMATE OF SHAPE PARAMETER
1779C                 B        = CURRENT GUESS FOR SCALE PARAMETER
1780C                 G(B)     = ML ESTIMATE OF GAMMA GIVEN VALUE OF
1781C                            SCALE
1782C
1783C              NOTE THAT QUANTITIES THAT DO NOT DEPEND ON B ARE
1784C              COMPUTED ONCE IN DPMLG1 AND PASSED VIA COMMON BLOCK.
1785C
1786C              GIVEN A VALUE FOR THE SCALE PARAMETER (DB), WE NEED
1787C              TO CALL A ROOT FINDING ROUTINE TO DETERMINE THE VALUE
1788C              OF THE SHAPE PARAMETER (A).  THIS IS THE ROOT OF THE
1789C              EQUATION:
1790C
1791C                 LN(SCALEHAT) + DIGAMMA(GHAT) - LN(GEOMETRIC MEAN)
1792C
1793C              CALLED BY DFZER2 ROUTINE FOR FINDING THE ROOT OF A
1794C              FUNCTION.  DFZER2 IS MODIFIED VERSION OF DFZERO THAT
1795C              PASSES ALONG THE DATA ARRAY.
1796C
1797C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y
1798C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN ENGINEERING",
1799C                CAMBRIDGE UNIVERSITY PRESS, 1999, CHAPTER 13 (SEE
1800C                EXAMPLE 13.3).
1801C     WRITTEN BY--JAMES J. FILLIBEN
1802C                 STATISTICAL ENGINEERING DIVISION
1803C                 INFORMATION TECHNOLOGY LABORATORY
1804C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
1805C                 GAITHERSBUG, MD 20899-8980
1806C                 PHONE--301-975-2855
1807C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
1808C           OF THE NATIONAL BUREAU OF STANDARDS.
1809C     LANGUAGE--ANSI FORTRAN (1977)
1810C     VERSION NUMBER--2004/11
1811C     ORIGINAL VERSION--NOVEMBER   2004.
1812C
1813C---------------------------------------------------------------------
1814C
1815      DOUBLE PRECISION DB
1816      DOUBLE PRECISION DX(*)
1817C
1818      INTEGER N
1819      DOUBLE PRECISION DK
1820      DOUBLE PRECISION DXBAR
1821      DOUBLE PRECISION DGMEAN
1822      DOUBLE PRECISION DSCALE
1823      DOUBLE PRECISION DG
1824      COMMON/GAMCO2/DK,DXBAR,DGMEAN,DSCALE,DG,N
1825C
1826      DOUBLE PRECISION DBTEMP
1827      DOUBLE PRECISION DGMEA2
1828      COMMON/GAMCO4/DBTEMP,DGMEA2,N2
1829C
1830      DOUBLE PRECISION AE
1831      DOUBLE PRECISION RE
1832      DOUBLE PRECISION XLOW
1833      DOUBLE PRECISION XUP
1834      DOUBLE PRECISION XSTRT
1835      DOUBLE PRECISION DA
1836      DOUBLE PRECISION DN
1837      DOUBLE PRECISION DTERM1
1838      DOUBLE PRECISION DTERM2
1839C
1840      DOUBLE PRECISION DLNGAM
1841      EXTERNAL DLNGAM
1842      DOUBLE PRECISION GAMFU4
1843      EXTERNAL GAMFU4
1844C
1845C-----COMMON----------------------------------------------------------
1846C
1847      INCLUDE 'DPCOP2.INC'
1848C
1849C-----START POINT-----------------------------------------------------
1850C
1851C  STEP 1: GIVEN VALUE OF SCALE PARAMETER (DB), NEED TO COMPUTE
1852C          THE SHAPE PARAMETER (WHICH IN TURN INVOLVES FINDING A
1853C          ROOT).
1854
1855      N2=N
1856      DBTEMP=DB
1857      DGMEA2=DGMEAN
1858      AE=1.D-7
1859      RE=1.D-7
1860      XSTRT=DG
1861      XLOW=XSTRT/5.0D0
1862      XUP=XSTRT*5.0D0
1863      CALL DFZER3(GAMFU4,XLOW,XUP,XSTRT,RE,AE,IFLAG,DX)
1864      DA=XLOW
1865C
1866C  COMPUTE LL(S,G)
1867C
1868      DN=DBLE(N)
1869      DTERM1=-DN*DLNGAM(DG) - DN*DG*DLOG(DSCALE) +
1870     1       DN*(DG-1.0D0)*DLOG(DGMEAN) - DN*DXBAR/DSCALE
1871C
1872C  COMPUTE LL(B,A)
1873C
1874      DTERM2=-DN*DLNGAM(DA) - DN*DA*DLOG(DB) +
1875     1       DN*(DA-1.0D0)*DLOG(DGMEAN) - DN*DXBAR/DB
1876C
1877      GAMFU3=2.0*DTERM1 - 2.0D0*DTERM2 - DK
1878C
1879      RETURN
1880      END
1881      DOUBLE PRECISION FUNCTION GAMFU4 (DA,DX)
1882C
1883C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE LIKELIHOOD RATIO
1884C              BASED CONFIDENCE INTERVAL FOR THE SCALE PARAMETER OF
1885C              THE 2-PARAMETER GAMMA MODEL (FULL SAMPLE).
1886C              SPECIFICALLY, IT IS USED TO DETERMINE AN ESTIMATE
1887C              OF THE SHAPE PARAMETER GIVEN A VALUE OF THE SCALE
1888C              PARAMETER.  IT FINDS THE ROOT OF THE FOLLOWING
1889C              EQUATION:
1890C
1891C                 LN(BHAT) + DIGAMMA(AHAT) - LN(GEOMETRIC MEAN)
1892C
1893C              WITH A DENOTING THE SHAPE PARAMETER, B THE SCALE
1894C              PARAMETER, AND THE ROOT IS WITH RESPECT TO A.
1895C
1896C              CALLED BY DFZER3 ROUTINE FOR FINDING THE ROOT OF A
1897C              FUNCTION.  DFZER3 IS MODIFIED VERSION OF DFZERO THAT
1898C              PASSES ALONG THE DATA ARRAY.
1899C
1900C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y
1901C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN ENGINEERING",
1902C                CAMBRIDGE UNIVERSITY PRESS, 1999, CHAPTER 13 (SEE
1903C                EXAMPLE 13.3).
1904C     WRITTEN BY--ALAN HECKERT
1905C                 STATISTICAL ENGINEERING DIVISION
1906C                 INFORMATION TECHNOLOGY LABORATORY
1907C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
1908C                 GAITHERSBUG, MD 20899-8980
1909C                 PHONE--301-975-2899
1910C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
1911C           OF THE NATIONAL BUREAU OF STANDARDS.
1912C     LANGUAGE--ANSI FORTRAN (1977)
1913C     VERSION NUMBER--2004/11
1914C     ORIGINAL VERSION--NOVEMBER   2004.
1915C
1916C---------------------------------------------------------------------
1917C
1918      DOUBLE PRECISION DA
1919      DOUBLE PRECISION DX(*)
1920C
1921      DOUBLE PRECISION DGMEAN
1922      DOUBLE PRECISION DB
1923      COMMON/GAMCO4/DB,DGMEAN,N
1924C
1925      DOUBLE PRECISION DPSI
1926      EXTERNAL DPSI
1927C
1928C-----COMMON----------------------------------------------------------
1929C
1930      INCLUDE 'DPCOBE.INC'
1931      INCLUDE 'DPCOP2.INC'
1932C
1933C-----START POINT-----------------------------------------------------
1934C
1935      IF(ISUBG4.EQ.'MFU4')THEN
1936        WRITE(ICOUT,52)DA,DX(1)
1937   52   FORMAT('DA,DX(1) = ',2G15.7)
1938        CALL DPWRST('XXX','BUG ')
1939      ENDIF
1940C
1941      GAMFU4=DLOG(DB) + DPSI(DA) - DLOG(DGMEAN)
1942C
1943      RETURN
1944      END
1945      DOUBLE PRECISION FUNCTION GAMFU5(UHAT,DX)
1946C
1947C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE MAXIMUM LIKELIHOOD
1948C              ESTIMATE FOR THE LOCATION PARAMETER FOR THE
1949C              3-PARAMETER GAMMA MODEL (FULL SAMPLE).  IT FINDS THE
1950C              ROOT OF THE FOLLOWING EQUATION:
1951C
1952C                 DIGAMMA({1 - 1/((XBAR - UHAT)*S1(UHAT))}**(-1)) +
1953C                 LOG(XBAR - UHAT - 1/S1(UHAT)) - S2(UAT) = 0
1954C
1955C              WHERE
1956C
1957C                 UHAT     = ESTIMATE OF LOCATION PARAMETER
1958C                 S1(UHAT) = SUM[i=1 to N][1/(X(i) - UHAT)]/N
1959C                 S2(UHAT) = SUM[i=1 to N][LOG(X(i) - UHAT)]/N
1960C                 XBAR     = MEAN OF X
1961C
1962C              CALLED BY DFZER2 ROUTINE FOR FINDING THE ROOT OF A
1963C              FUNCTION.
1964C
1965C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y
1966C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN ENGINEERING",
1967C                CAMBRIDGE UNIVERSITY PRESS, 1999, CHAPTER 13.
1968C     WRITTEN BY--ALAN HECKERT
1969C                 STATISTICAL ENGINEERING DIVISION
1970C                 INFORMATION TECHNOLOGY LABORATORY
1971C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
1972C                 GAITHERSBUG, MD 20899-8980
1973C                 PHONE--301-975-2899
1974C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
1975C           OF THE NATIONAL BUREAU OF STANDARDS.
1976C     LANGUAGE--ANSI FORTRAN (1977)
1977C     VERSION NUMBER--2014/04
1978C     ORIGINAL VERSION--APRIL      2014.
1979C
1980C---------------------------------------------------------------------
1981C
1982      DOUBLE PRECISION UHAT
1983      DOUBLE PRECISION DX(*)
1984C
1985      DOUBLE PRECISION DMEAN
1986      DOUBLE PRECISION DSUM1
1987      COMMON/GAMCO3/DMEAN,DSUM1,N
1988C
1989      DOUBLE PRECISION DPSI
1990      EXTERNAL DPSI
1991C
1992      DOUBLE PRECISION DN
1993      DOUBLE PRECISION DSUM2
1994      DOUBLE PRECISION DTERM1
1995      DOUBLE PRECISION DTERM2
1996      DOUBLE PRECISION DTERM3
1997C
1998C-----COMMON----------------------------------------------------------
1999C
2000      INCLUDE 'DPCOP2.INC'
2001C
2002C-----START POINT-----------------------------------------------------
2003C
2004      DN=DBLE(N)
2005      DSUM1=0.0D0
2006      DSUM2=0.0D0
2007      DO100I=1,N
2008        DTERM1=DX(I) - UHAT
2009        DSUM1=DSUM1 + (1.0D0/DTERM1)
2010        DSUM2=DSUM2 + DLOG(DTERM1)
2011  100 CONTINUE
2012      DSUM1=DSUM1/DN
2013      DSUM2=DSUM2/DN
2014      DTERM1=1.0D0 - 1.0D0/((DMEAN - UHAT)*DSUM1)
2015      DTERM2=DPSI(1.0D0/DTERM1)
2016      DTERM3=DLOG(DMEAN - UHAT - (1.0D0/DSUM1))
2017C
2018      GAMFU5=DTERM2 + DTERM3 - DSUM2
2019C
2020      RETURN
2021      END
2022      SUBROUTINE GAMFU7(X,DLOC,DMEAN,N,
2023     1                  RHO,DB,FOUT,
2024     1                  ISUBRO,IBUGA3,IERROR)
2025C
2026C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE MAXIMUM LIKELIHOOD
2027C              ESTIMATE OF THE LOCATION PARAMETER FOR THE 3-PARAMETER
2028C              GAMMA MODEL FOR FULL SAMPLE DATA (NO CENSORING).
2029C     REFERENCE-COHEN AND WHITTEN (1988), "PARAMETER ESTIMATION IN
2030C               RELIABILITY AND LIFE SPAN MODELS", MARCEL DEKKER, INC.,
2031C               PP. 365-367.
2032C     WRITTEN BY--ALAN HECKERT
2033C                 STATISTICAL ENGINEERING DIVISION
2034C                 INFORMATION TECHNOLOGY LABORATORY
2035C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
2036C                 GAITHERSBUG, MD 20899-8980
2037C                 PHONE--301-975-2899
2038C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
2039C           OF THE NATIONAL BUREAU OF STANDARDS.
2040C     LANGUAGE--ANSI FORTRAN (1977)
2041C     VERSION NUMBER--2014/04
2042C     ORIGINAL VERSION--APRIL      2014.
2043C
2044C---------------------------------------------------------------------
2045C
2046      DOUBLE PRECISION X(*)
2047      DOUBLE PRECISION DLOC
2048      DOUBLE PRECISION DMEAN
2049      DOUBLE PRECISION RHO
2050      DOUBLE PRECISION DB
2051      DOUBLE PRECISION FOUT
2052C
2053      CHARACTER*4 ISUBRO
2054      CHARACTER*4 IBUGA3
2055      CHARACTER*4 IERROR
2056C
2057C---------------------------------------------------------------------
2058C
2059      DOUBLE PRECISION DSUM1
2060      DOUBLE PRECISION DSUM2
2061      DOUBLE PRECISION DX
2062      DOUBLE PRECISION DA
2063      DOUBLE PRECISION DN
2064C
2065      DOUBLE PRECISION DPSI
2066      EXTERNAL DPSI
2067C
2068      INCLUDE 'DPCOP2.INC'
2069C
2070C-----START POINT-----------------------------------------------------
2071C
2072C  COMPUTE SOME SUMS
2073C
2074      IERROR='NO'
2075C
2076      DSUM1=0.0D0
2077      DSUM2=0.0D0
2078      DN=DBLE(N)
2079C
2080      DO100I=1,N
2081        DX=X(I) - DLOC
2082        DSUM1=DSUM1 + 1.0D0/DX
2083        DSUM2=DLOG(DX) + DSUM2
2084  100 CONTINUE
2085C
2086      DA=(DMEAN-DLOC)*DSUM1
2087      RHO=-DA/(DN-DA)
2088      DB=(DMEAN-DLOC)/RHO
2089      FOUT=DPSI(RHO) + DLOG(DB) - (DSUM2/DN)
2090C
2091      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'MFU7')THEN
2092        WRITE(ICOUT,115)DN,DSUM1,DSUM2,DA,RHO,DB,FOUT
2093  115   FORMAT('DN,DSUM1,DSUM2,DA,RHO,DB,FOUT = ',7G15.7)
2094        CALL DPWRST('XXX','BUG ')
2095      ENDIF
2096C
2097      RETURN
2098      END
2099      REAL FUNCTION GAMFU8(GHAT)
2100C
2101C     PURPOSE--THIS ROUTINE IS USED IN FINDING CONFIDENCE LIMITS
2102C              FOR PERCENTILES OF THE GAMMA DISTRIBUTION (BASED ON
2103C              MAXIMUM LIKELIHOOD ESTIMATION).  THIS FUNCTION
2104C              COMPUTES THE DERIVATIVE OF THE GAMMA PERCENT POINT
2105C              FUNCTION WITH RESPECT TO THE SHAPE PARAMETER.
2106C
2107C              CALLED BY DIFF ROUTINE FOR FINDING THE DERIVATIVE
2108C              OF A FUNCTION.
2109C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y
2110C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN
2111C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
2112C                1999, CHAPTER 13.
2113C     WRITTEN BY--JAMES J. FILLIBEN
2114C                 STATISTICAL ENGINEERING DIVISION
2115C                 INFORMATION TECHNOLOGY LABORATORY
2116C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
2117C                 GAITHERSBUG, MD 20899-8980
2118C                 PHONE--301-975-2855
2119C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
2120C           OF THE NATIONAL BUREAU OF STANDARDS.
2121C     LANGUAGE--ANSI FORTRAN (1977)
2122C     VERSION NUMBER--2004/11
2123C     ORIGINAL VERSION--NOVEMBER   2004.
2124C
2125C---------------------------------------------------------------------
2126C
2127      REAL GHAT
2128C
2129      COMMON/GAMCO8/P,SCALE
2130C
2131C-----COMMON----------------------------------------------------------
2132C
2133      INCLUDE 'DPCOP2.INC'
2134C
2135C-----START POINT-----------------------------------------------------
2136C
2137      CALL GAMPPF(P,GHAT,APPF)
2138      GAMFU8=SCALE*APPF
2139C
2140      RETURN
2141      END
2142      REAL FUNCTION GAMFU9(SCALE)
2143C
2144C     PURPOSE--THIS ROUTINE IS USED IN FINDING CONFIDENCE LIMITS
2145C              FOR PERCENTILES OF THE GAMMA DISTRIBUTION (BASED ON
2146C              MAXIMUM LIKELIHOOD ESTIMATION).  THIS FUNCTION
2147C              COMPUTES THE DERIVATIVE OF THE GAMMA PERCENT POINT
2148C              FUNCTION WITH RESPECT TO THE SCALE PARAMETER.
2149C
2150C              CALLED BY DIFF ROUTINE FOR FINDING THE DERIVATIVE
2151C              OF A FUNCTION.
2152C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y
2153C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN
2154C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
2155C                1999, CHAPTER 13.
2156C     WRITTEN BY--JAMES J. FILLIBEN
2157C                 STATISTICAL ENGINEERING DIVISION
2158C                 INFORMATION TECHNOLOGY LABORATORY
2159C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
2160C                 GAITHERSBUG, MD 20899-8980
2161C                 PHONE--301-975-2855
2162C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
2163C           OF THE NATIONAL BUREAU OF STANDARDS.
2164C     LANGUAGE--ANSI FORTRAN (1977)
2165C     VERSION NUMBER--2004/11
2166C     ORIGINAL VERSION--NOVEMBER   2004.
2167C
2168C---------------------------------------------------------------------
2169C
2170      COMMON/GAMCO9/P,GHAT
2171C
2172C-----COMMON----------------------------------------------------------
2173C
2174      INCLUDE 'DPCOP2.INC'
2175C
2176C-----START POINT-----------------------------------------------------
2177C
2178      CALL GAMPPF(P,GHAT,APPF)
2179      GAMFU9=SCALE*APPF
2180C
2181      RETURN
2182      END
2183C===================================================== GAMIND.FOR
2184      DOUBLE PRECISION FUNCTION GAMIND(X,ALPHA,G)
2185C***********************************************************************
2186C*                                                                     *
2187C*  FORTRAN CODE WRITTEN FOR INCLUSION IN IBM RESEARCH REPORT RC20525, *
2188C*  'FORTRAN ROUTINES FOR USE WITH THE METHOD OF L-MOMENTS, VERSION 3' *
2189C*                                                                     *
2190C*  J. R. M. HOSKING                                                   *
2191C*  IBM RESEARCH DIVISION                                              *
2192C*  T. J. WATSON RESEARCH CENTER                                       *
2193C*  YORKTOWN HEIGHTS                                                   *
2194C*  NEW YORK 10598, U.S.A.                                             *
2195C*                                                                     *
2196C*  VERSION 3     AUGUST 1996                                          *
2197C*                                                                     *
2198C***********************************************************************
2199C
2200C  THE INCOMPLETE GAMMA INTEGRAL
2201C
2202C  BASED ON ALGORITHM AS239, APPL. STATIST. (1988) VOL.37 NO.3
2203C
2204C  PARAMETERS OF ROUTINE:
2205C  X      * INPUT* ARGUMENT OF FUNCTION (UPPER LIMIT OF INTEGRATION)
2206C  ALPHA  * INPUT* SHAPE PARAMETER
2207C  G      * INPUT* LOG(GAMMA(ALPHA)). MUST BE SUPPLIED BY THE PROGRAM,
2208C                  E.G. AS DLGAMA(ALPHA).
2209C
2210C  OTHER ROUTINES USED: DERF
2211C
2212      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
2213C
2214      INCLUDE 'DPCOP2.INC'
2215C
2216      DATA ZERO/0D0/,HALF/0.5D0/,ONE/1D0/,TWO/2D0/,THREE/3D0/,X13/13D0/,
2217     *  X36/36D0/,X42/42D0/,X119/119D0/,X1620/1620D0/,X38880/38880D0/,
2218     *  RTHALF/0.70710 67811 86547 524D0/
2219C
2220C         EPS,MAXIT CONTROL THE TEST FOR CONVERGENCE OF THE SERIES AND
2221C           CONTINUED-FRACTION EXPANSIONS.
2222C         OFL IS A LARGE NUMBER, USED TO RESCALE THE CONTINUED FRACTION.
2223C         UFL IS SUCH THAT EXP(UFL) IS JUST .GT. ZERO.
2224C         AHILL CONTROLS THE SWITCH TO HILL'S APPROXIMATION.
2225C
2226      DATA EPS/1D-12/,MAXIT/100000/,OFL/1D30/,UFL/-180D0/,AHILL/1D4/
2227C
2228      GAMIND=ZERO
2229      IF(ALPHA.LE.ZERO)THEN
2230        WRITE(ICOUT,7000)
2231 7000   FORMAT('***** ERROR FROM ROUTINE GAMIND:',
2232     *         ' SHAPE PARAMETER IS NON-POSITIVE.')
2233        CALL DPWRST('XXX','BUG ')
2234        WRITE(ICOUT,7002)ALPHA
2235 7002   FORMAT('      THE VALUE OF THE ARGUMENT IS ',G15.7)
2236        CALL DPWRST('XXX','BUG ')
2237        GOTO 9000
2238      ENDIF
2239C
2240      IF(X.LT.ZERO)THEN
2241        WRITE(ICOUT,7010)
2242 7010   FORMAT('***** ERROR FROM ROUTINE GAMIND:',
2243     *         ' ARGUMENT OF FUNCTION IS NEGATIVE.')
2244        CALL DPWRST('XXX','BUG ')
2245        WRITE(ICOUT,7002)X
2246        CALL DPWRST('XXX','BUG ')
2247        GOTO 9000
2248      ENDIF
2249C
2250      IF(X.EQ.ZERO)GOTO9000
2251C
2252      IF(ALPHA.GT.AHILL)GOTO 100
2253      IF(X.GT.ONE.AND.X.GE.ALPHA)GOTO 50
2254C
2255C         SERIES EXPANSION
2256C
2257      SUM=ONE
2258      TERM=ONE
2259      A=ALPHA
2260      DO 10 IT=1,MAXIT
2261      A=A+ONE
2262      TERM=TERM*X/A
2263      SUM=SUM+TERM
2264      IF(TERM.LE.EPS)GOTO 20
2265   10 CONTINUE
2266C
2267      WRITE(ICOUT,7020)
2268 7020 FORMAT('**** WARNING FROM ROUTINE GAMIND:',
2269     *       ' ITERATION HAS NOT CONVERGED. RESULT MAY BE UNRELIABLE.')
2270      CALL DPWRST('XXX','BUG ')
2271C
2272   20 ARG=ALPHA*DLOG(X)-X-G+DLOG(SUM/ALPHA)
2273      GAMIND=ZERO
2274      IF(ARG.GE.UFL)GAMIND=DEXP(ARG)
2275      GOTO9000
2276C
2277C         CONTINUED-FRACTION EXPANSION
2278C
2279   50 CONTINUE
2280      A=ONE-ALPHA
2281      B=A+X+ONE
2282      TERM=ZERO
2283      PN1=ONE
2284      PN2=X
2285      PN3=X+ONE
2286      PN4=X*B
2287      RATIO=PN3/PN4
2288      DO 70 IT=1,MAXIT
2289      A=A+ONE
2290      B=B+TWO
2291      TERM=TERM+ONE
2292      AN=A*TERM
2293      PN5=B*PN3-AN*PN1
2294      PN6=B*PN4-AN*PN2
2295      IF(PN6.EQ.ZERO)GOTO 60
2296      RN=PN5/PN6
2297      DIFF=DABS(RATIO-RN)
2298      IF(DIFF.LE.EPS.AND.DIFF.LE.EPS*RN)GOTO 80
2299      RATIO=RN
2300   60 PN1=PN3
2301      PN2=PN4
2302      PN3=PN5
2303      PN4=PN6
2304      IF(DABS(PN5).LT.OFL)GOTO 70
2305      PN1=PN1/OFL
2306      PN2=PN2/OFL
2307      PN3=PN3/OFL
2308      PN4=PN4/OFL
2309   70 CONTINUE
2310C
2311      WRITE(ICOUT,7020)
2312      CALL DPWRST('XXX','BUG ')
2313C
2314   80 ARG=ALPHA*DLOG(X)-X-G+DLOG(RATIO)
2315      GAMIND=ONE
2316      IF(ARG.GE.UFL)GAMIND=ONE-DEXP(ARG)
2317      GOTO9000
2318C
2319C         ALPHA IS LARGE: USE HILL'S APPROXIMATION (N.L. JOHNSON AND
2320C         S. KOTZ, 1970, 'CONTINUOUS UNIVARIATE DISTRIBUTIONS 1', P.180)
2321C
2322C         THE 'DO 110' LOOP CALCULATES 2*(X-ALPHA-ALPHA*DLOG(X/ALPHA)),
2323C         USING POWER-SERIES EXPANSION TO AVOID ROUNDING ERROR
2324C
2325  100 CONTINUE
2326      R=ONE/DSQRT(ALPHA)
2327      Z=(X-ALPHA)*R
2328      TERM=Z*Z
2329      SUM=HALF*TERM
2330      DO 110 I=1,12
2331      TERM=-TERM*Z*R
2332      SUM=SUM+TERM/(I+TWO)
2333      IF(DABS(TERM).LT.EPS)GOTO 120
2334  110 CONTINUE
2335  120 WW=TWO*SUM
2336      W=DSQRT(WW)
2337      IF(X.LT.ALPHA)W=-W
2338      H1=ONE/THREE
2339      H2=-W/X36
2340      H3=(-WW+X13)/X1620
2341      H4=(X42*WW+X119)*W/X38880
2342      Z=(((H4*R+H3)*R+H2)*R+H1)*R+W
2343      GAMIND=HALF+HALF*DERFDP(Z*RTHALF)
2344      GOTO9000
2345C
2346 9000 CONTINUE
2347      RETURN
2348      END
2349      SUBROUTINE GAMLI1(Y,N,ICASPL,IGAMFL,ALOC,SCALE,SHAPE,
2350     1                  ALIK,AIC,AICC,BIC,
2351     1                  ISUBRO,IBUGA3,IERROR)
2352C
2353C     PURPOSE--THIS ROUTINE COMPUTES THE LIKELIHOOD FUNCTION FOR
2354C              THE GAMMA (OR INVERTED GAMMA) DISTRIBUTION.  THIS IS
2355C              FOR THE RAW DATA CASE (I.E., NO GROUPING AND NO CENSORING).
2356C
2357C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
2358C              PERFORMED.
2359C
2360C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN ENGINEERING",
2361C                CAMBRIDGE UNIVERSITY PRESS, 1999, CHAPTER 13.
2362C     WRITTEN BY--ALAN HECKERT
2363C                 STATISTICAL ENGINEERING DIVISION
2364C                 INFORMATION TECHNOLOGY LABORATORY
2365C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
2366C                 GAITHERSBURG, MD 20899-8980
2367C                 PHONE--301-975-2899
2368C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
2369C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
2370C     LANGUAGE--ANSI FORTRAN (1977)
2371C     VERSION NUMBER--2014/4
2372C     ORIGINAL VERSION--APRIL     2014.
2373C
2374C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
2375C
2376      CHARACTER*4 ICASPL
2377      CHARACTER*4 IGAMFL
2378      CHARACTER*4 ISUBRO
2379      CHARACTER*4 IBUGA3
2380      CHARACTER*4 IERROR
2381C
2382      CHARACTER*4 IWRITE
2383      CHARACTER*4 ISUBN1
2384      CHARACTER*4 ISUBN2
2385      CHARACTER*4 ISTEPN
2386C
2387      DOUBLE PRECISION DX
2388      DOUBLE PRECISION DS
2389      DOUBLE PRECISION DU
2390      DOUBLE PRECISION DG
2391      DOUBLE PRECISION DN
2392      DOUBLE PRECISION DNP
2393      DOUBLE PRECISION DLIK
2394      DOUBLE PRECISION DSUM1
2395      DOUBLE PRECISION DSUM2
2396      DOUBLE PRECISION DTERM1
2397      DOUBLE PRECISION DTERM3
2398      DOUBLE PRECISION DLGADP
2399C
2400      EXTERNAL DLGADP
2401C
2402C---------------------------------------------------------------------
2403C
2404      DIMENSION Y(*)
2405C
2406C-----COMMON----------------------------------------------------------
2407C
2408      INCLUDE 'DPCOP2.INC'
2409C
2410C-----START POINT-----------------------------------------------------
2411C
2412      ISUBN1='GAML'
2413      ISUBN2='I1  '
2414      IERROR='NO'
2415C
2416      ALIK=-99.0
2417      AIC=-99.0
2418      AICC=-99.0
2419      BIC=-99.0
2420C
2421      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MLI1')THEN
2422        WRITE(ICOUT,999)
2423  999   FORMAT(1X)
2424        CALL DPWRST('XXX','WRIT')
2425        WRITE(ICOUT,51)
2426   51   FORMAT('**** AT THE BEGINNING OF GAMLI1--')
2427        CALL DPWRST('XXX','WRIT')
2428        WRITE(ICOUT,52)IBUGA3,ISUBRO,IGAMFL
2429   52   FORMAT('IBUGA3,ISUBRO,IGAMFL = ',2(A4,2X),A4)
2430        CALL DPWRST('XXX','WRIT')
2431        WRITE(ICOUT,55)N,ALOC,SCALE,SHAPE
2432   55   FORMAT('N,ALOC,SCALE,SHAPE = ',I8,3G15.7)
2433        CALL DPWRST('XXX','WRIT')
2434        DO56I=1,MIN(N,100)
2435          WRITE(ICOUT,57)I,Y(I)
2436   57     FORMAT('I,Y(I) = ',I8,G15.7)
2437          CALL DPWRST('XXX','WRIT')
2438   56   CONTINUE
2439      ENDIF
2440C
2441C               ******************************************
2442C               **  STEP 1--                            **
2443C               **  COMPUTE LIKELIHOOD FUNCTION         **
2444C               ******************************************
2445C
2446      ISTEPN='1'
2447      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MLI1')
2448     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
2449C
2450      IERFLG=0
2451      IERROR='NO'
2452      IWRITE='OFF'
2453      IF(ICASPL.NE.'3GAM')ALOC=0.0
2454C
2455C     LOG-LIKELIHOOD FUNCTION IS:
2456C
2457C     -N*(LOGGAMMA(SHAPE) - N*SHAPE*LOG(SCALE)) +
2458C     (SHAPE-1)*SUM[i=1 to n][LOG(X(i) - LOC] -
2459C     SUM[i=1 to n][X(i) - LOC]/SCALE
2460C
2461      DN=DBLE(N)
2462      DS=DBLE(SCALE)
2463      DU=DBLE(ALOC)
2464      DG=DBLE(SHAPE)
2465C
2466      DTERM1=-DN*DLGADP(DG) - DN*DG*DLOG(DS)
2467      DSUM1=0.0D0
2468      DSUM2=0.0D0
2469C
2470      DO1010I=1,N
2471        DX=DBLE(Y(I)) - DU
2472        DSUM1=DSUM1 + DLOG(DX)
2473        DSUM2=DSUM2 + DX
2474 1010 CONTINUE
2475C
2476      DLIK=DTERM1 + (DG-1.0D0)*DSUM1 - DSUM2/DS
2477      ALIK=REAL(DLIK)
2478      DNP=2.0D0
2479      IF(ICASPL.EQ.'3GAM')DNP=3.0
2480      AIC=REAL(-2.0D0*DLIK + 2.0D0*DNP)
2481      DTERM3=(2.0D0*DNP*(DNP+1.0D0))/(DN-DNP-1.0D0)
2482      AICC=REAL(-2.0D0*DLIK + 2.0D0*DNP + DTERM3)
2483      BIC=REAL(-2.0D0*DLIK + DNP*LOG(DN))
2484C
2485      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MLI1')THEN
2486        WRITE(ICOUT,999)
2487        CALL DPWRST('XXX','WRIT')
2488        WRITE(ICOUT,9011)
2489 9011   FORMAT('**** AT THE END OF GAMLI1--')
2490        CALL DPWRST('XXX','WRIT')
2491        WRITE(ICOUT,9013)DSUM1,DSUM2,DTERM1
2492 9013   FORMAT('DSUM1,DSUM2,DTERM1 = ',3G15.7)
2493        CALL DPWRST('XXX','WRIT')
2494        WRITE(ICOUT,9014)ALIK,AIC,AICC,BIC
2495 9014   FORMAT('ALIK,AIC,AICC,BIC = ',4G15.7)
2496        CALL DPWRST('XXX','WRIT')
2497      ENDIF
2498C
2499      RETURN
2500      END
2501      SUBROUTINE GAMML1(Y,N,IGAMFL,
2502     1                  TEMP1,DTEMP1,
2503     1                  XMEAN,XSD,XVAR,XMIN,XMAX,XGEOM,
2504     1                  ZMEAN,ZSD,ZGEOM,
2505     1                  SCALML,SCALSE,SHAPML,SHAPSE,COVSE,
2506     1                  SCALMO,SHAPMO,
2507     1                  SCALYE,SHAPYE,SCYEBC,SHYEBC,
2508     1                  ISUBRO,IBUGA3,IERROR)
2509C
2510C     PURPOSE--THIS ROUTINE COMPUTES THE MAXIMUM LIKELIHOOD ESTIMATES
2511C              FOR THE 2-PARAMETER GAMMA DISTRIBUTION FOR THE RAW DATA
2512C              CASE (I.E., NO CENSORING AND NO GROUPING).  THIS ROUTINE
2513C              RETURNS ONLY THE POINT ESTIMATES (CONFIDENCE INTERVALS
2514C              WILL BE COMPUTED IN A SEPARATE ROUTINE).
2515C
2516C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
2517C              PERFORMED.
2518C
2519C              PUT THIS IN A SEPARATE ROUTINE AS IT MAY BE CALLED
2520C              FROM MULTIPLE PLACES (DPMLG1 WILL GENERATE THE OUTPUT
2521C              FOR THE GAMMA MLE COMMAND).
2522C
2523C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN
2524C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
2525C                1999, CHAPTER 13.
2526C              --JOHNSON, KOTZ, AND BALAKRISNAN, "CONTINUOUS
2527C                UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
2528C                WILEY, 1994, CHAPTER xx.
2529C              --YE AND CHEN (2017), "CLOSED-FORM ESTIMATORS FOR THE
2530C                GAMMA DISTRIBUTION DERIVED FROM LIKELIHOOD
2531C                EQUATIONS", THE AMERICAN STATISTICIAN, VOL. 71,
2532C                NO. 2, PP. 177-181.
2533C     WRITTEN BY--ALAN HECKERT
2534C                 STATISTICAL ENGINEERING DIVISION
2535C                 INFORMATION TECHNOLOGY LABORATORY
2536C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
2537C                 GAITHERSBURG, MD 20899-8980
2538C                 PHONE--301-975-2899
2539C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
2540C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
2541C     LANGUAGE--ANSI FORTRAN (1977)
2542C     VERSION NUMBER--2010/2
2543C     ORIGINAL VERSION--FEBRUARY  2010. EXTRACTED AS A SEPARATE
2544C                                       SUBROUTINE (FROM DPMLE1)
2545C
2546C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
2547C
2548      DIMENSION Y(*)
2549      DIMENSION TEMP1(*)
2550      DOUBLE PRECISION DTEMP1(*)
2551C
2552      CHARACTER*4 ICASE
2553      CHARACTER*4 IGAMFL
2554      CHARACTER*4 ISUBRO
2555      CHARACTER*4 IBUGA3
2556      CHARACTER*4 IERROR
2557C
2558      DOUBLE PRECISION DN
2559      DOUBLE PRECISION DG
2560      DOUBLE PRECISION DS
2561      DOUBLE PRECISION DX
2562      DOUBLE PRECISION DXLOG
2563      DOUBLE PRECISION DXSTRT
2564      DOUBLE PRECISION DXLOW
2565      DOUBLE PRECISION DXUP
2566      DOUBLE PRECISION XLOWSV
2567      DOUBLE PRECISION XUPSV
2568      DOUBLE PRECISION AE
2569      DOUBLE PRECISION RE
2570      DOUBLE PRECISION DANS(10)
2571      DOUBLE PRECISION TRIGAM
2572      DOUBLE PRECISION DTRM11
2573      DOUBLE PRECISION DTRM12
2574      DOUBLE PRECISION DSUM1
2575      DOUBLE PRECISION DSUM2
2576      DOUBLE PRECISION DSUM3
2577      DOUBLE PRECISION DNUM
2578      DOUBLE PRECISION DENOM
2579      DOUBLE PRECISION DSCALE
2580      DOUBLE PRECISION DSHAPE
2581C
2582      DOUBLE PRECISION GAMFUN
2583      EXTERNAL GAMFUN
2584      DOUBLE PRECISION DLOGGM
2585      COMMON/GAMCOM/DLOGGM
2586C
2587      CHARACTER*4 IWRITE
2588      CHARACTER*40 IDIST
2589C
2590      CHARACTER*4 ISUBN1
2591      CHARACTER*4 ISUBN2
2592      CHARACTER*4 ISTEPN
2593C
2594C-----COMMON----------------------------------------------------------
2595C
2596      INCLUDE 'DPCOP2.INC'
2597C
2598C-----START POINT-----------------------------------------------------
2599C
2600      ISUBN1='GAMM'
2601      ISUBN2='L1  '
2602      IERROR='NO'
2603      IWRITE='OFF'
2604C
2605      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML1')THEN
2606        WRITE(ICOUT,999)
2607  999   FORMAT(1X)
2608        CALL DPWRST('XXX','WRIT')
2609        WRITE(ICOUT,51)
2610   51   FORMAT('**** AT THE BEGINNING OF GAMML1--')
2611        CALL DPWRST('XXX','WRIT')
2612        WRITE(ICOUT,52)IBUGA3,ISUBRO,ICASE,IGAMFL
2613   52   FORMAT('IBUGA3,ISUBRO,ICASE,IGAMFL = ',3(A4,2X),A4)
2614        CALL DPWRST('XXX','WRIT')
2615        DO56I=1,MIN(N,100)
2616          WRITE(ICOUT,57)I,Y(I),TEMP1(I),DTEMP1(I)
2617   57     FORMAT('I,Y(I),TEMP1(I),DTEMP1(I) = ',I8,3G15.7)
2618          CALL DPWRST('XXX','WRIT')
2619   56   CONTINUE
2620      ENDIF
2621C
2622C               ******************************************
2623C               **  STEP 1--                            **
2624C               **  CARRY OUT CALCULATIONS              **
2625C               **  FOR GAMMA MLE ESTIMATE              **
2626C               ******************************************
2627C
2628      ISTEPN='1'
2629      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML1')
2630     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
2631C
2632      IDIST='GAMMA'
2633      IF(IGAMFL.EQ.'IGAM')IDIST='INVERTED GAMMA'
2634C
2635      IFLAG=2
2636      CALL SUMRAW(Y,N,IDIST,IFLAG,
2637     1            ZMEAN,ZVAR,ZSD,ZMIN,ZMAX,
2638     1            ISUBRO,IBUGA3,IERROR)
2639      CALL GEOMEA(Y,N,IWRITE,ZGEOM,IBUGA3,IERROR)
2640C
2641      IF(IGAMFL.EQ.'IGAM')THEN
2642        DO1118I=1,N
2643          Y(I)=1.0/Y(I)
2644 1118   CONTINUE
2645        CALL MEAN(Y,N,IWRITE,ZMEAN,IBUGA3,IERROR)
2646        CALL SD(Y,N,IWRITE,ZSD,IBUGA3,IERROR)
2647        CALL GEOMEA(Y,N,IWRITE,ZGEOM,IBUGA3,IERROR)
2648      ENDIF
2649      XMEAN=ZMEAN
2650      XSD=ZSD
2651      XGEOM=ZGEOM
2652C
2653      SHAPML=CPUMIN
2654      SHAPMO=CPUMIN
2655      SHAPSE=CPUMIN
2656      SHAMSE=CPUMIN
2657      SCALML=CPUMIN
2658      SCALSE=CPUMIN
2659      COVSE=CPUMIN
2660C
2661C     FOR THE SHAPE PARAMETER, SOLVE THE EQUATION:
2662C
2663C         LOG(GAMMAHAT) - PHI(GAMMAHAT) - LOG(XBAR/G) = 0
2664C
2665C     WITH G DENOTING THE GEOMETRIC MEAN (PRODUCT[i=1 to n][X(i)**(1/N)]
2666C
2667C     THEN
2668C
2669C        SCALE = XBAR/GAMMAHAT
2670C
2671C     FOR STARTING VALUE, USE THE METHOD OF MOMENT ESTIMATORS
2672C
2673C        GAMMAHAT = (XBAR/XSD)**2
2674C        SCALE    = XSD**2/XBAR
2675C
2676C     THE YE AND CHEN ESTIMATES ARE:
2677C
2678C        SHAPE = N*SUM[X(i)]/
2679C                N*SUM[X(i)*LOG(X(i)) - SUM[LOG(X(i)*SUM[X(i)]
2680C        SCALE = (1/N**2)*(N*SUM[X(i)*LOG(X(i)) -
2681C                SUM[LOG(X(i))*SUM[X(i)])
2682C
2683C     THE BIAS CORRECTION TERMS ARE
2684C
2685C         SHAPE' = ((N-1)/(N+2))*SHAPE
2686C         SCALE' = ((N-1)/(N+2))*SHAPE
2687C
2688      AN=REAL(N)
2689      SHAPMO=(XMEAN/XSD)**2
2690      SCALMO=XSD**2/XMEAN
2691C
2692C     YE AND CHEN METHOD
2693C
2694      DSUM1=0.0D0
2695      DSUM2=0.0D0
2696      DSUM3=0.0D0
2697      DN=DBLE(N)
2698      DO100I=1,N
2699        DX=DBLE(Y(I))
2700        DXLOG=DBLE(DLOG(DX))
2701        DSUM1=DSUM1 + DX
2702        DSUM2=DSUM2 + DXLOG
2703        DSUM3=DSUM3 + DX*DXLOG
2704  100 CONTINUE
2705      DNUM=DN*DSUM1
2706      DENOM=DN*DSUM3 - DSUM2*DSUM1
2707      DSHAPE=DNUM/DENOM
2708      DSCALE=(1.0D0/DN**2)*(DN*DSUM3 - DSUM2*DSUM1)
2709      SCALYE=REAL(DSCALE)
2710      SCYEBC=REAL((DN-1.0D0)*DSCALE/(DN+2.0D0))
2711      SHAPYE=REAL(DSHAPE)
2712      SHYEBC=REAL((DN/(DN-1.0D0))*DSHAPE)
2713C
2714C     ESTIMATES FOR 2-PARAMETER MODEL.  USE DFZER2 TO FIND ROOT OF
2715C     THE LIKELIHOOD EQUATION.
2716C
2717      DLOGGM=DLOG(DBLE(XMEAN)/DBLE(XGEOM))
2718      DXSTRT=DBLE(SHAPMO)
2719      AE=2.0*0.000001D0*DXSTRT
2720      RE=AE
2721      IFLAG=0
2722      DXLOW=DXSTRT/2.0D0
2723      DXUP=2.0D0*DXSTRT
2724      ITBRAC=0
2725 2205 CONTINUE
2726      XLOWSV=DXLOW
2727      XUPSV=DXUP
2728      CALL DFZERO(GAMFUN,DXLOW,DXUP,DXSTRT,RE,AE,IFLAG)
2729C
2730      IF(IFLAG.EQ.4 .AND. ITBRAC.LE.100)THEN
2731        DXLOW=XLOWSV/2.0D0
2732        DXUP=2.0D0*XUPSV
2733        ITBRAC=ITBRAC+1
2734        GOTO2205
2735      ENDIF
2736C
2737C
2738      IF(IFLAG.EQ.2)THEN
2739C
2740C       NOTE: SUPPRESS THIS MESSAGE FOR NOW.
2741CCCCC   WRITE(ICOUT,999)
2742CCCCC   CALL DPWRST('XXX','BUG ')
2743CCCCC   WRITE(ICOUT,2111)
2744C2111   FORMAT('***** WARNING FROM GAMMA MAXIMUM LIKELIHOOD--')
2745CCCCC   CALL DPWRST('XXX','BUG ')
2746CCCCC   WRITE(ICOUT,2113)
2747C2113   FORMAT('      ESTIMATE OF SIGMA MAY NOT BE COMPUTED TO ',
2748CCCCC1         'DESIRED TOLERANCE.')
2749CCCCC   CALL DPWRST('XXX','BUG ')
2750      ELSEIF(IFLAG.EQ.3)THEN
2751        WRITE(ICOUT,999)
2752        CALL DPWRST('XXX','BUG ')
2753        WRITE(ICOUT,2121)
2754 2121   FORMAT('***** WARNING FROM GAMMA MAXIMUM LIKELIHOOD--')
2755        CALL DPWRST('XXX','BUG ')
2756        WRITE(ICOUT,2123)
2757 2123   FORMAT('      ESTIMATE OF SHAPE PARAMETER MAY BE NEAR ',
2758     1         'A SINGULAR POINT.')
2759        CALL DPWRST('XXX','BUG ')
2760      ELSEIF(IFLAG.EQ.4)THEN
2761        WRITE(ICOUT,999)
2762        CALL DPWRST('XXX','BUG ')
2763        WRITE(ICOUT,2131)
2764 2131   FORMAT('***** ERROR FROM GAMMA MAXIMUM LIKELIHOOD--')
2765        CALL DPWRST('XXX','BUG ')
2766        WRITE(ICOUT,2133)
2767 2133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
2768        CALL DPWRST('XXX','BUG ')
2769      ELSEIF(IFLAG.EQ.5)THEN
2770        WRITE(ICOUT,999)
2771        CALL DPWRST('XXX','BUG ')
2772        WRITE(ICOUT,2141)
2773 2141   FORMAT('***** WARNING FROM GAMMA MAXIMUM LIKELIHOOD--')
2774        CALL DPWRST('XXX','BUG ')
2775        WRITE(ICOUT,2143)
2776 2143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
2777        CALL DPWRST('XXX','BUG ')
2778      ENDIF
2779C
2780      SHAPML=REAL(DXLOW)
2781      SCALML=XMEAN/SHAPML
2782      IF(IGAMFL.EQ.'IGAM')SCALML=1.0/SCALML
2783C
2784C     COMPUTE STANDARD ERRORS (CAN BASE ON EITHER THE NORMAL BIASED
2785C     ESTIMATORS OR THE BIAS CORRECTED ESTIMATORS)
2786C
2787C     NOTE THAT DPSIFN COMPUTES THE SCALED PSI DERIVATIVE FUNCTION:
2788C
2789C        (-1)**(K+1)/GAMMA(K+1)
2790C
2791C     FOR TRIGAMMA, K=1 AND THE SCALING FACTOR REDUCES TO 1.
2792C
2793      SHAPML=REAL(DXLOW)
2794      SCALML=XMEAN/SHAPML
2795      IF(IGAMFL.EQ.'IGAM')THEN
2796        SCALML=1.0/SCALML
2797      ENDIF
2798C
2799      DN=DBLE(N)
2800      DG=DBLE(SHAPML)
2801      DS=DBLE(SCALML)
2802      KODE=1
2803      NTEMP=1
2804      M=1
2805      NZ=0
2806      CALL DPSIFN(DG,NTEMP,KODE,M,DANS,NZ,IERR)
2807      TRIGAM=DANS(1)
2808      IF(IERR.EQ.1)THEN
2809        WRITE(ICOUT,999)
2810        CALL DPWRST('XXX','WRIT')
2811        WRITE(ICOUT,3101)IDIST
2812 3101   FORMAT('***** ERROR FROM ',A14,' MAXIMUM LIKELIHOOD--')
2813        CALL DPWRST('XXX','WRIT')
2814        WRITE(ICOUT,3103)
2815 3103   FORMAT('      UNABLE TO COMPUTE TRIGAMMA FUNCTION.')
2816        CALL DPWRST('XXX','WRIT')
2817        IERROR='YES'
2818        GOTO9000
2819      ELSEIF(IERR.EQ.2)THEN
2820        WRITE(ICOUT,999)
2821        CALL DPWRST('XXX','WRIT')
2822        WRITE(ICOUT,3101)IDIST
2823        CALL DPWRST('XXX','WRIT')
2824        WRITE(ICOUT,3105)
2825 3105   FORMAT('      OVERFLOW IN COMPUTING THE TRIGAMMA FUNCTION.')
2826        CALL DPWRST('XXX','WRIT')
2827        IERROR='YES'
2828        GOTO9000
2829      ELSEIF(IERR.EQ.3)THEN
2830        WRITE(ICOUT,999)
2831        CALL DPWRST('XXX','WRIT')
2832        WRITE(ICOUT,3101)IDIST
2833        CALL DPWRST('XXX','WRIT')
2834        WRITE(ICOUT,3107)
2835 3107   FORMAT('      OVERFLOW IN COMPUTING THE TRIGAMMA FUNCTION.')
2836        CALL DPWRST('XXX','WRIT')
2837        IERROR='YES'
2838        GOTO9000
2839      ENDIF
2840C
2841      DTRM11=DN*(DG*TRIGAM-1.0D0)
2842      DTRM12=DS**2*TRIGAM
2843      SCALSE=REAL(DSQRT(DTRM12/DTRM11))
2844      SHAPSE=REAL(DSQRT(DG/DTRM11))
2845      COVSE=REAL(-DS/DTRM11)
2846C
2847 9000 CONTINUE
2848C
2849      XMEAN=ZMEAN
2850      XSD=ZSD
2851      XVAR=ZVAR
2852      XMIN=ZMIN
2853      XMAX=ZMAX
2854      XGEOM=ZGEOM
2855C
2856      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML1')THEN
2857        WRITE(ICOUT,999)
2858        CALL DPWRST('XXX','WRIT')
2859        WRITE(ICOUT,9011)
2860 9011   FORMAT('**** AT THE END OF GAMML1--')
2861        CALL DPWRST('XXX','WRIT')
2862        WRITE(ICOUT,9013)N,XMEAN,XSD,XMIN,XMAX
2863 9013   FORMAT('N,XMEAN,XSD,XMIN,XMAX = ',I8,4G15.7)
2864        CALL DPWRST('XXX','WRIT')
2865        WRITE(ICOUT,9015)N,XMEAN,XSD,XMIN,XMAX
2866 9015   FORMAT('N,XMEAN,XSD,XMIN,XMAX = ',I8,4G15.7)
2867        CALL DPWRST('XXX','WRIT')
2868        WRITE(ICOUT,9017)SHAPML,SCALML,SHAPSE,SCALSE
2869 9017   FORMAT('SHAPML,SCALML,SHAPSE,SCALSE =  ',4G15.7)
2870        CALL DPWRST('XXX','WRIT')
2871        WRITE(ICOUT,9018)SHAPMO,SCALMO,SHAPYE,SCALYE
2872 9018   FORMAT('SHAPMO,SCALMO,SHAPYE,SCALYE =  ',4G15.7)
2873        CALL DPWRST('XXX','WRIT')
2874        WRITE(ICOUT,9019)SHAPBC,SHABSE,COVSE,COVBSE
2875 9019   FORMAT('SHAPBC,SHABSE,COVSE,COVBSE =  ',4G15.7)
2876        CALL DPWRST('XXX','WRIT')
2877      ENDIF
2878C
2879      RETURN
2880      END
2881      SUBROUTINE GAMML2(Y,TAG,N,IGAMFL,MAXNXT,
2882     1                  ICASE,IDIST,
2883     1                  TEMP1,XTEMP,YSAVE,DTEMP1,ITEMP,
2884     1                  XMEANF,XSDF,XVARF,XMINF,XMAXF,XGEOMF,
2885     1                  XMEANC,XSDC,XVARC,XMINC,XMAXC,XGEOMC,
2886     1                  SCALMO,SHAPMO,
2887     1                  SCALML,SCALSE,SHAPML,SHAPSE,COVSE,
2888     1                  IRSAV,ISE,
2889     1                  ISUBRO,IBUGA3,IERROR)
2890C
2891C     PURPOSE--THIS ROUTINE COMPUTES THE MAXIMUM LIKELIHOOD ESTIMATES
2892C              FOR THE 2-PARAMETER GAMMA DISTRIBUTION FOR THE RAW DATA
2893C              CASE WITH CENSORING (BUT NO GROUPING).  THIS ROUTINE
2894C              RETURNS ONLY THE POINT ESTIMATES (CONFIDENCE INTERVALS
2895C              WILL BE COMPUTED IN A SEPARATE ROUTINE).
2896C
2897C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
2898C              PERFORMED.
2899C
2900C              PUT THIS IN A SEPARATE ROUTINE AS IT MAY BE CALLED
2901C              FROM MULTIPLE PLACES (DPMLG2 WILL GENERATE THE OUTPUT
2902C              FOR THE GAMMA MLE COMMAND).
2903C
2904C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN
2905C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
2906C                1999, CHAPTER 13.
2907C              --JOHNSON, KOTZ, AND BALAKRISNAN, "CONTINUOUS
2908C                UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
2909C                WILEY, 1994, CHAPTER xx.
2910C     WRITTEN BY--ALAN HECKERT
2911C                 STATISTICAL ENGINEERING DIVISION
2912C                 INFORMATION TECHNOLOGY LABORATORY
2913C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
2914C                 GAITHERSBURG, MD 20899-8980
2915C                 PHONE--301-975-2899
2916C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
2917C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
2918C     LANGUAGE--ANSI FORTRAN (1977)
2919C     VERSION NUMBER--2010/7
2920C     ORIGINAL VERSION--JULY      2010. EXTRACTED AS A SEPARATE
2921C                                       SUBROUTINE (FROM DPMLG2)
2922C
2923C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
2924C
2925      DIMENSION Y(*)
2926      DIMENSION TAG(*)
2927      DIMENSION TEMP1(*)
2928      DIMENSION XTEMP(*)
2929      DIMENSION YSAVE(*)
2930      DOUBLE PRECISION DTEMP1(*)
2931      INTEGER ITEMP(*)
2932C
2933      CHARACTER*4 ICASE
2934      CHARACTER*40 IDIST
2935      CHARACTER*4 IGAMFL
2936      CHARACTER*4 ISUBRO
2937      CHARACTER*4 IBUGA3
2938      CHARACTER*4 IERROR
2939      CHARACTER*4 IWRITE
2940C
2941      EXTERNAL GC1FUN
2942      DOUBLE PRECISION J1FUN
2943      DOUBLE PRECISION J2FUN
2944      DOUBLE PRECISION DGAMMA
2945      DOUBLE PRECISION DGAMI
2946      DOUBLE PRECISION DPSI
2947      EXTERNAL J1FUN
2948      EXTERNAL J2FUN
2949      EXTERNAL DGAMMA
2950      EXTERNAL DGAMI
2951      EXTERNAL DPSI
2952C
2953      DOUBLE PRECISION XBAR
2954      DOUBLE PRECISION DGEOME
2955      INTEGER IN
2956      INTEGER IR
2957      COMMON/GC1COM/XBAR,DGEOME,IN,IR
2958C
2959      INTEGER LIMIT
2960      INTEGER LENW
2961      PARAMETER(LIMIT=200)
2962      PARAMETER(LENW=4*LIMIT)
2963      INTEGER NEVAL
2964      INTEGER IER
2965      INTEGER LAST
2966      INTEGER IWORK(LIMIT)
2967      DOUBLE PRECISION EPSABS
2968      DOUBLE PRECISION EPSREL
2969      DOUBLE PRECISION DLOW
2970      DOUBLE PRECISION ABSERR
2971      DOUBLE PRECISION WORK(LENW)
2972C
2973      DOUBLE PRECISION DA
2974      COMMON/J1COM/DA
2975C
2976      DOUBLE PRECISION TOL
2977      DOUBLE PRECISION XPAR(2)
2978      DOUBLE PRECISION FVEC(2)
2979C
2980      DIMENSION FISH(2,2)
2981      DIMENSION COV(2,2)
2982C
2983      DOUBLE PRECISION DN
2984      DOUBLE PRECISION DR
2985      DOUBLE PRECISION DX
2986      DOUBLE PRECISION DG
2987      DOUBLE PRECISION DGAM
2988      DOUBLE PRECISION DS
2989      DOUBLE PRECISION DP
2990      DOUBLE PRECISION DTJ
2991      DOUBLE PRECISION DJ1
2992      DOUBLE PRECISION DJ2
2993      DOUBLE PRECISION DSUM1
2994      DOUBLE PRECISION DSUM2
2995      DOUBLE PRECISION DSUM3
2996      DOUBLE PRECISION DSUM4
2997      DOUBLE PRECISION DSUM5
2998      DOUBLE PRECISION DANS(10)
2999      DOUBLE PRECISION TRIGAM
3000      DOUBLE PRECISION DTERM1
3001C
3002      CHARACTER*4 ISUBN1
3003      CHARACTER*4 ISUBN2
3004      CHARACTER*4 ISTEPN
3005C
3006C-----COMMON----------------------------------------------------------
3007C
3008      INCLUDE 'DPCOP2.INC'
3009C
3010C-----START POINT-----------------------------------------------------
3011C
3012      ISUBN1='GAMM'
3013      ISUBN2='L2  '
3014      IERROR='NO'
3015C
3016      TRIGAM=0.0D0
3017C
3018      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML2')THEN
3019        WRITE(ICOUT,999)
3020  999   FORMAT(1X)
3021        CALL DPWRST('XXX','WRIT')
3022        WRITE(ICOUT,51)
3023   51   FORMAT('**** AT THE BEGINNING OF GAMML2--')
3024        CALL DPWRST('XXX','WRIT')
3025        WRITE(ICOUT,52)IBUGA3,ISUBRO,ICASE,N,MAXNXT
3026   52   FORMAT('IBUGA3,ISUBRO,N,MAXNXT = ',3(A4,2X),2I8)
3027        CALL DPWRST('XXX','WRIT')
3028        DO56I=1,MIN(N,100)
3029          WRITE(ICOUT,57)I,Y(I),TAG(I)
3030   57     FORMAT('I,Y(I),TAG(I) = ',I8,2G15.7)
3031          CALL DPWRST('XXX','WRIT')
3032   56   CONTINUE
3033      ENDIF
3034C
3035C               ******************************************
3036C               **  STEP 1--                            **
3037C               **  CARRY OUT CALCULATIONS              **
3038C               **  FOR GAMMA MLE ESTIMATE              **
3039C               ******************************************
3040C
3041      ISTEPN='1'
3042      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML2')
3043     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
3044C
3045      IDIST='GAMMA'
3046      IF(IGAMFL.EQ.'ON')IDIST='INVERTED GAMMA'
3047C
3048      CALL CKCENS(TAG,TEMP1,N,IDIST,
3049     1            ISUBRO,IBUGA3,IERROR)
3050      IF(IERROR.EQ.'YES')GOTO9000
3051C
3052      IFLAG=1
3053      CALL SUMRAW(Y,N,IDIST,IFLAG,
3054     1            XMEANF,XVARF,XSDF,XMINF,XMAXF,
3055     1            ISUBRO,IBUGA3,IERROR)
3056      IF(IERROR.EQ.'YES')GOTO9000
3057      CALL GEOMEA(Y,IR,IWRITE,XGEOMF,IBUGA3,IERROR)
3058C
3059      IF(IGAMFL.EQ.'IGAM')THEN
3060        DO1118I=1,N
3061          Y(I)=1.0/Y(I)
3062 1118   CONTINUE
3063        CALL MEAN(Y,N,IWRITE,ZMEANF,IBUGA3,IERROR)
3064        CALL SD(Y,N,IWRITE,ZSDF,IBUGA3,IERROR)
3065      ENDIF
3066C
3067      CALL SORTC(Y,TAG,N,Y,TAG)
3068      IR=0
3069      DO2120I=1,N
3070        IF(TAG(I).EQ.1.0)IR=IR+1
3071 2120 CONTINUE
3072      IRSAV=IR
3073C
3074      ICNT=0
3075      DO2122I=1,N
3076        IF(TAG(I).EQ.1.0)THEN
3077          ICNT=ICNT+1
3078          XTEMP(ICNT)=Y(I)
3079        ENDIF
3080 2122 CONTINUE
3081      DO2124I=1,N
3082        IF(TAG(I).EQ.0.0)THEN
3083          ICNT=ICNT+1
3084          XTEMP(ICNT)=Y(I)
3085        ENDIF
3086 2124 CONTINUE
3087      DO2126I=1,N
3088        Y(I)=XTEMP(I)
3089        IF(I.LE.IR)THEN
3090          TAG(I)=1.0
3091        ELSE
3092          TAG(I)=0.0
3093        ENDIF
3094        IF(IGAMFL.EQ.'IGAM')THEN
3095          YSAVE(I)=1.0/Y(I)
3096        ELSE
3097          YSAVE(I)=Y(I)
3098        ENDIF
3099 2126 CONTINUE
3100      IM=N-IR
3101C
3102      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'MML2')THEN
3103        WRITE(ICOUT,2127)N,IR,IM
3104 2127   FORMAT(1X,'N,IR,IM = ',3I8)
3105        CALL DPWRST('XXX','BUG ')
3106        DO2128I=1,MIN(100,N)
3107          WRITE(ICOUT,2129)I,Y(I),TAG(I)
3108 2129     FORMAT(1X,'I,Y(I),TAG(I)=',I8,2G15.7)
3109          CALL DPWRST('XXX','BUG ')
3110 2128   CONTINUE
3111      ENDIF
3112C
3113      IR1=IR
3114      IR2=IR
3115      IR3=IR
3116C
3117      AR=REAL(IR)
3118      DR=DBLE(IR)
3119      AN=REAL(N)
3120      AM=REAL(IM)
3121C
3122      IF(IM.EQ.0)THEN
3123        ICASE='NONE'
3124        WRITE(ICOUT,999)
3125        CALL DPWRST('XXX','WRIT')
3126        WRITE(ICOUT,2131)IDIST(1:14)
3127 2131   FORMAT('***** WARNING FROM ',A14,' MAXIMUM LIKELIHOOD--')
3128        CALL DPWRST('XXX','WRIT')
3129        WRITE(ICOUT,2133)
3130 2133   FORMAT('      NO CENSORING TIMES DETECTED.  IT IS RECOMMENDED')
3131        CALL DPWRST('XXX','WRIT')
3132        WRITE(ICOUT,2135)
3133 2135   FORMAT('      THAT THE FULL SAMPLE SYNTAX BE USED:')
3134        CALL DPWRST('XXX','WRIT')
3135        WRITE(ICOUT,999)
3136        CALL DPWRST('XXX','WRIT')
3137        WRITE(ICOUT,2137)IDIST(1:14)
3138 2137   FORMAT('      ',A14,' MAXIMUM LIKELIHOOD  Y')
3139        CALL DPWRST('XXX','WRIT')
3140        WRITE(ICOUT,999)
3141        CALL DPWRST('XXX','WRIT')
3142      ELSE
3143        ICASE='SING'
3144        AHOLD=Y(IR+1)
3145        DO2140I=IR+1,N
3146          IF(Y(I).NE.AHOLD)THEN
3147            ICASE='MULT'
3148            GOTO2149
3149          ENDIF
3150 2140   CONTINUE
3151 2149   CONTINUE
3152      ENDIF
3153C
3154C               ************************************
3155C               **  STEP 41--                     **
3156C               **  CARRY OUT CALCULATIONS        **
3157C               **  FOR GAMMA MLE                 **
3158C               **  ESTIMATE (TIME CENSORED CASE) **
3159C               ************************************
3160C
3161C  THE MAXIMUM LIKELIHOOD EQUATIONS FOR THE CENSORED CASE ARE:
3162C
3163C      R*XBAR/SHAT - R*GHAT + SUM[i=1 to M]
3164C        [Z(j)**GHAT*EXP(Z(j)/(GAMMA(GHAT) - G(Z(j),GHAT))] = 0
3165C
3166C      R*LOG(GEOMEAN/SHAT)  - N*DIGAMMA(GHAT) + SUM[i=1 to M]
3167C        [(GAMMA(GHAT)*DIGAMMA(GHAT) J(Z(j),GHAT))/
3168C        (GAMMA(GHAT) - G(Z(j),GHAT))] = 0
3169C
3170C      WHERE
3171C
3172C
3173C         XBAR = MEAN OF FAILURE DATA
3174C         GEOMEAN  = GEOMETRIC MEAN OF FAILURE DATA
3175C         R        = NUMBER OF FAILURES
3176C         M        = NUMBER OF CENSORING TIMES
3177C         SHAT     = FVEC(1) = CURRENT ESTIMATE OF SCALE PARAMETER
3178C         GHAT     = FVEC(2) = CURRENT ESTIMATE OF SHAPE PARAMETER
3179C         Z(j)     = jth CENSORING TIME
3180C         GAMMA    = GAMMA FUNCTION
3181C         DIGAMMA  = DIGAMMA FUNCTION
3182C         G(x,a)   = INCOMPLETE GAMMA FUNCTION
3183C         J(X,a)   = INTEGRAL[0 to x][t**(A-1)*LOG(t)*EXP(-t)]dt
3184C
3185C  THESE ARE SOLVED USING THE DNSQE ROUTINE.
3186C
3187C
3188      ISTEPN='41'
3189      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML2')
3190     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
3191C
3192      IERROR='NO'
3193      IWRITE='OFF'
3194      AN=REAL(N)
3195C
3196C  COMPUTE STATISTICS FOR FAILURE ONLY DATA
3197C
3198      IF(IGAMFL.EQ.'IGAM')THEN
3199        CALL MEAN(Y,IR,IWRITE,ZMEAN,IBUGA3,IERROR)
3200        CALL SD(Y,IR,IWRITE,ZSD,IBUGA3,IERROR)
3201        CALL MINIM(Y,IR,IWRITE,ZMIN,IBUGA3,IERROR)
3202        CALL MAXIM(Y,IR,IWRITE,ZMAX,IBUGA3,IERROR)
3203        CALL GEOMEA(Y,IR,IWRITE,ZGEOM,IBUGA3,IERROR)
3204        XMEANC=ZMEAN
3205        XSDC=ZSD
3206        XVARC=SQRT(XSDC)
3207        XMINC=ZMIN
3208        XMAXC=ZMAX
3209        XGEOMC=ZGEOM
3210        ZCOEFV=ZSD/ZMEAN
3211        CALL MEAN(YSAVE,IR,IWRITE,XMEAN,IBUGA3,IERROR)
3212        CALL SD(YSAVE,IR,IWRITE,XSD,IBUGA3,IERROR)
3213        CALL MINIM(YSAVE,IR,IWRITE,XMIN,IBUGA3,IERROR)
3214        CALL GEOMEA(YSAVE,IR,IWRITE,XGEOM,IBUGA3,IERROR)
3215        XCOEFV=XSD/XMEAN
3216      ELSE
3217        CALL MEAN(Y,IR,IWRITE,XMEAN,IBUGA3,IERROR)
3218        CALL SD(Y,IR,IWRITE,XSD,IBUGA3,IERROR)
3219        CALL MINIM(Y,IR,IWRITE,XMIN,IBUGA3,IERROR)
3220        CALL MAXIM(Y,IR,IWRITE,XMAX,IBUGA3,IERROR)
3221        CALL GEOMEA(Y,IR,IWRITE,XGEOM,IBUGA3,IERROR)
3222        XCOEFV=XSD/XMEAN
3223        XMEANC=XMEAN
3224        XSDC=XSD
3225        XVARC=SQRT(XSDC)
3226        XMINC=XMIN
3227        XMAXC=XMAX
3228        XGEOMC=XGEOM
3229      ENDIF
3230C
3231C  USE MOMENT ESTIMATES OF FAILURE DATA AS STARTING VALUES FOR
3232C  EQUATION SOLVER.
3233C
3234      IF(IGAMFL.EQ.'IGAM')THEN
3235        SHAPMO=(ZMEAN/ZSD)**2
3236        SCALMO=ZSD**2/ZMEAN
3237        XPAR(2)=DBLE(SCALMO)
3238        SCALMO=1.0/SCALMO
3239        XBAR=DBLE(ZMEAN)
3240        DGEOME=DBLE(ZGEOM)
3241      ELSE
3242        SHAPMO=(XMEAN/XSD)**2
3243        SCALMO=XSD**2/XMEAN
3244        XBAR=DBLE(XMEAN)
3245        DGEOME=DBLE(XGEOM)
3246        XPAR(2)=DBLE(SCALMO)
3247      ENDIF
3248C
3249      XPAR(1)=DBLE(SHAPMO)
3250C
3251      IN=N
3252      JAC=0
3253      IOPT=2
3254      TOL=1.0D-6
3255      NVAR=2
3256      NPRINT=-1
3257      INFO=0
3258      LWA=MAXNXT
3259      FVEC(1)=0.0D0
3260      FVEC(2)=0.0D0
3261      CALL DNSQE(GC1FUN,JAC,IOPT,NVAR,XPAR,FVEC,TOL,NPRINT,INFO,
3262     1           DTEMP1,MAXNXT,Y(IR+1),IM)
3263C
3264      SHAPML=REAL(XPAR(1))
3265      SCALML=REAL(XPAR(2))
3266      IF(IGAMFL.EQ.'IGAM')THEN
3267        SCALML=1.0/SCALML
3268      ENDIF
3269C
3270C  COMPUTE STANDARD ERRORS.
3271C
3272C  NOTE THAT DPSIFN COMPUTES THE SCALED PSI DERIVATIVE FUNCTION:
3273C
3274C     (-1)**(K+1)/GAMMA(K+1)
3275C
3276C  FOR TRIGAMMA, K=1 AND THE SCALING FACTOR REDUCES TO 1.
3277C
3278      ISE=1
3279      DN=DBLE(N)
3280      DG=DBLE(SHAPML)
3281      DS=DBLE(SCALML)
3282      DSUM1=0.0D0
3283      DSUM2=0.0D0
3284      DSUM3=0.0D0
3285      DSUM4=0.0D0
3286      DSUM5=0.0D0
3287      IF(IM.GT.0)THEN
3288        KODE=1
3289        NTEMP=1
3290        MTEMP=1
3291        NZ=0
3292C
3293        EPSABS=1.0D-7
3294        EPSREL=1.0D-7
3295        IER=0
3296        IKEY=3
3297        DLOW=0.0D0
3298        DA=DBLE(SHAPML)
3299        DGAM=DGAMMA(DG)
3300        DP=DPSI(DG)
3301        CALL DPSIFN(DG,NTEMP,KODE,MTEMP,DANS,NZ,IERR)
3302        TRIGAM=DANS(1)
3303        IF(IERR.EQ.1)THEN
3304          WRITE(ICOUT,999)
3305          CALL DPWRST('XXX','WRIT')
3306          WRITE(ICOUT,4201)IDIST(1:14)
3307 4201     FORMAT('***** ERROR FROM ',A14,' (CENSORED CASE) MAXIMUM ',
3308     1           'LIKELIHOOD--')
3309          CALL DPWRST('XXX','WRIT')
3310          WRITE(ICOUT,4203)
3311 4203     FORMAT('      UNABLE TO COMPUTE TRIGAMMA FUNCTION.')
3312          CALL DPWRST('XXX','WRIT')
3313          WRITE(ICOUT,4209)
3314 4209     FORMAT('      PARAMETER STANDARD ERRORS AND CONFIDENCE ',
3315     1           'WILL NOT BE COMPUTED.')
3316          CALL DPWRST('XXX','WRIT')
3317          ISE=0
3318          GOTO4999
3319        ELSEIF(IERR.EQ.2)THEN
3320          WRITE(ICOUT,999)
3321          CALL DPWRST('XXX','WRIT')
3322          WRITE(ICOUT,4201)IDIST
3323          CALL DPWRST('XXX','WRIT')
3324          WRITE(ICOUT,4205)
3325 4205     FORMAT('      OVERFLOW IN COMPUTING THE TRIGAMMA ',
3326     1           'FUNCTION.')
3327          CALL DPWRST('XXX','WRIT')
3328          WRITE(ICOUT,4209)
3329          CALL DPWRST('XXX','WRIT')
3330          ISE=0
3331          GOTO4999
3332        ELSEIF(IERR.EQ.3)THEN
3333          WRITE(ICOUT,999)
3334          CALL DPWRST('XXX','WRIT')
3335          WRITE(ICOUT,4201)IDIST
3336          CALL DPWRST('XXX','WRIT')
3337          WRITE(ICOUT,4207)
3338 4207     FORMAT('      OVERFLOW IN COMPUTING THE TRIGAMMA ',
3339     1           'FUNCTION.')
3340          CALL DPWRST('XXX','WRIT')
3341          WRITE(ICOUT,4209)
3342          CALL DPWRST('XXX','WRIT')
3343          ISE=0
3344          GOTO4999
3345        ENDIF
3346C
3347        DO4310I=IR+1,N
3348C
3349          DX=DBLE(Y(I)/SCALML)
3350          DTERM1=DGAM - DGAMI(DG,DX)
3351          DTJ=DX**DG*DEXP(-DX)/DTERM1
3352C
3353          DJ1=0.0D0
3354          CALL DQAG(J1FUN,DLOW,DX,EPSABS,EPSREL,IKEY,DJ1,
3355     1              ABSERR,NEVAL,
3356     1              IER,LIMIT,LENW,LAST,IWORK,WORK)
3357          DJ2=0.0D0
3358          CALL DQAG(J2FUN,DLOW,DX,EPSABS,EPSREL,IKEY,DJ2,
3359     1              ABSERR,NEVAL,
3360     1              IER,LIMIT,LENW,LAST,IWORK,WORK)
3361C
3362          DSUM1=DSUM1 + DTJ*(DX-DTJ)
3363          DSUM2=DSUM2 + DTJ*DLOG(DX)
3364          DSUM3=DSUM3 + DTJ*(DGAM*DP - DJ1)/DTERM1
3365          DSUM4=DSUM4 + (DGAM*(DP**2 + TRIGAM) - DJ2)/DTERM1
3366          DSUM5=DSUM5 + ((DGAM*DP - DJ1)/DTERM1)**2
3367C
3368 4310   CONTINUE
3369      ENDIF
3370      IF(ISE.EQ.0)GOTO4999
3371C
3372      DTERM1=(-DR/DS**2)*((XBAR/DS)*(DG-1.0D0) - DG**2) - DSUM1/(DS**2)
3373      FISH(1,1)=REAL(DTERM1)
3374      DTERM1=DN*TRIGAM - DSUM4 + DSUM5
3375      FISH(2,2)=REAL(DTERM1)
3376      DTERM1=(1.0D0/DS)*(DR - DSUM2 + DSUM3)
3377      FISH(2,1)=REAL(DTERM1)
3378      FISH(1,2)=FISH(2,1)
3379C
3380      NDIM=2
3381      CALL SGECO(FISH,NDIM,NDIM,ITEMP,RCOND,XTEMP)
3382      IJOB=1
3383      CALL SGEDI(FISH,NDIM,NDIM,ITEMP,XTEMP,XTEMP(MAXNXT/2),IJOB)
3384      DO4410J=1,NDIM
3385        DO4415I=1,NDIM
3386          COV(I,J)=FISH(I,J)
3387 4415   CONTINUE
3388 4410 CONTINUE
3389C
3390      SCALSE=0.0
3391      SHAPSE=0.0
3392      IF(COV(1,1).GE.0.0)SCALSE=SQRT(COV(1,1))
3393      IF(COV(2,2).GE.0.0)SHAPSE=SQRT(COV(2,2))
3394      COVSE=COV(2,1)
3395C
3396 4999 CONTINUE
3397C
3398 9000 CONTINUE
3399      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML2')THEN
3400        WRITE(ICOUT,999)
3401        CALL DPWRST('XXX','WRIT')
3402        WRITE(ICOUT,9011)
3403 9011   FORMAT('**** AT THE END OF GAMML2--')
3404        CALL DPWRST('XXX','WRIT')
3405        WRITE(ICOUT,9013)N,XMEAN,XSD,XMIN,XMAX
3406 9013   FORMAT('N,XMEAN,XSD,XMIN,XMAX = ',I8,4G15.7)
3407        CALL DPWRST('XXX','WRIT')
3408        WRITE(ICOUT,9017)SHAPML,SCALML,SHAPSE,SCALSE
3409 9017   FORMAT('SHAPML,SCALML,SHAPSE,SCALSE =  ',4G15.7)
3410        CALL DPWRST('XXX','WRIT')
3411      ENDIF
3412C
3413      RETURN
3414      END
3415      SUBROUTINE GAMML3(Y,N,DTEMP1,
3416     1                  XMEAN,XSD,XVAR,XMIN,XMAX,XSKEW,
3417     1                  ALOCML,SCALML,SHAPML,
3418     1                  ISUBRO,IBUGA3,IERROR)
3419C
3420C     PURPOSE--THIS ROUTINE COMPUTES THE MAXIMUM LIKELIHOOD ESTIMATES
3421C              FOR THE 3-PARAMETER GAMMA DISTRIBUTION FOR THE RAW DATA
3422C              CASE (I.E., NO CENSORING AND NO GROUPING).
3423C
3424C              THIS METHOD IS BASED ON THE CODE GIVEN ON PP. 365-367 OF
3425C              COHEN AND WHITTEN.
3426C
3427C              PUT THIS IN A SEPARATE ROUTINE AS IT MAY BE CALLED
3428C              FROM MULTIPLE PLACES (DPMLL3 WILL GENERATE THE OUTPUT
3429C              FOR THE 3-PARAMATER GAMMA MLE COMMAND).
3430C
3431C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN
3432C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
3433C                1999, CHAPTER 13.
3434C              --COHEN AND WHITTEN (1988), "PARAMETER ESTIMATION IN
3435C                RELIABILITY AND LIFE SPAN MODELS", MARCEL DEKKER, INC.,
3436C                CHAPTER 6, APPENDIX.
3437C     WRITTEN BY--ALAN HECKERT
3438C                 STATISTICAL ENGINEERING DIVISION
3439C                 INFORMATION TECHNOLOGY LABORATORY
3440C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
3441C                 GAITHERSBURG, MD 20899-8980
3442C                 PHONE--301-975-2899
3443C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
3444C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
3445C     LANGUAGE--ANSI FORTRAN (1977)
3446C     VERSION NUMBER--2014/04
3447C     ORIGINAL VERSION--APRIL     2014
3448C
3449C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
3450C
3451      DIMENSION Y(*)
3452      DOUBLE PRECISION DTEMP1(*)
3453C
3454C
3455      CHARACTER*4 ISUBRO
3456      CHARACTER*4 IBUGA3
3457      CHARACTER*4 IERROR
3458C
3459      DOUBLE PRECISION TL
3460      DOUBLE PRECISION TU
3461      DOUBLE PRECISION T
3462      DOUBLE PRECISION FL
3463      DOUBLE PRECISION FU
3464      DOUBLE PRECISION F
3465      DOUBLE PRECISION BOUND
3466      DOUBLE PRECISION STEP
3467      DOUBLE PRECISION EPS
3468      DOUBLE PRECISION DB
3469      DOUBLE PRECISION RHO
3470C
3471      DOUBLE PRECISION V(6)
3472C
3473      CHARACTER*4 IWRITE
3474      CHARACTER*40 IDIST
3475      CHARACTER*4 ISUBN1
3476      CHARACTER*4 ISUBN2
3477      CHARACTER*4 ISTEPN
3478      CHARACTER*4 IMETH
3479C
3480      DOUBLE PRECISION DMEAN
3481      DOUBLE PRECISION DSUM1
3482      COMMON/GAMCO3/DMEAN,DSUM1,IN
3483      DOUBLE PRECISION GAMFU5
3484      EXTERNAL GAMFU5
3485C
3486      DOUBLE PRECISION DXSTRT
3487      DOUBLE PRECISION DAE
3488      DOUBLE PRECISION DRE
3489      DOUBLE PRECISION DXLOW
3490      DOUBLE PRECISION DXUP
3491      DOUBLE PRECISION DTERM1
3492C
3493C-----COMMON----------------------------------------------------------
3494C
3495      INCLUDE 'DPCOP2.INC'
3496C
3497C-----START POINT-----------------------------------------------------
3498C
3499C     TWO METHODS CODED:
3500C
3501C         1. METHOD GIVEN BY COHEN AND WHITTEN
3502C
3503C         2. METHOD GIVEN BY BURY
3504C
3505      ISUBN1='GAMM'
3506      ISUBN2='L3  '
3507      IDIST='GAMMA'
3508      IWRITE='OFF'
3509      IERROR='NO'
3510      IMETH='BURY'
3511C
3512      ALOCML=CPUMIN
3513      SCALML=CPUMIN
3514      SHAPML=CPUMIN
3515      V(1)=CPUMIN
3516      V(2)=CPUMIN
3517      V(3)=CPUMIN
3518C
3519      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML3')THEN
3520        WRITE(ICOUT,999)
3521  999   FORMAT(1X)
3522        CALL DPWRST('XXX','WRIT')
3523        WRITE(ICOUT,51)
3524   51   FORMAT('**** AT THE BEGINNING OF GAMML3--')
3525        CALL DPWRST('XXX','WRIT')
3526        WRITE(ICOUT,52)IBUGA3,ISUBRO,N
3527   52   FORMAT('IBUGA3,ISUBRO,N = ',2(A4,2X),I8)
3528        CALL DPWRST('XXX','WRIT')
3529        DO56I=1,MIN(N,100)
3530          WRITE(ICOUT,57)I,Y(I)
3531   57     FORMAT('I,Y(I) = ',I8,G15.7)
3532          CALL DPWRST('XXX','WRIT')
3533   56   CONTINUE
3534      ENDIF
3535C
3536C               ******************************************
3537C               **  STEP 1--                            **
3538C               **  CARRY OUT CALCULATIONS              **
3539C               **  FOR GAMMA MLE ESTIMATE              **
3540C               ******************************************
3541C
3542      ISTEPN='1'
3543      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML3')
3544     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
3545C
3546      IF(N.LE.4)THEN
3547        WRITE(ICOUT,999)
3548        CALL DPWRST('XXX','WRIT')
3549        WRITE(ICOUT,111)
3550  111   FORMAT('***** ERROR IN 3-PARAMETER GAMMA MAXIMUM LIKELIHOOD--')
3551        CALL DPWRST('XXX','WRIT')
3552        WRITE(ICOUT,112)
3553  112   FORMAT('      THE NUMBER OF OBSERVATIONS FOR THE RESPONSE ',
3554     1         'VARIABLE IS LESS THAN 5.')
3555        CALL DPWRST('XXX','WRIT')
3556        WRITE(ICOUT,113)N
3557  113   FORMAT('      SAMPLE SIZE = ',I8)
3558        CALL DPWRST('XXX','WRIT')
3559        IERROR='YES'
3560        GOTO9000
3561      ENDIF
3562C
3563      IFLAG=1
3564      CALL SUMRAW(Y,N,IDIST,IFLAG,
3565     1            XMEAN,XVAR,XSD,XMIN,XMAX,
3566     1            ISUBRO,IBUGA3,IERROR)
3567      IF(IERROR.EQ.'YES')GOTO9000
3568      CALL STMOM3(Y,N,IWRITE,XSKEW,IBUGA3,IERROR)
3569C
3570      DO210I=1,N
3571        DTEMP1(I)=DBLE(Y(I))
3572  210 CONTINUE
3573C
3574      IN=N
3575      DMEAN=DBLE(XMEAN)
3576C
3577C     STEP 1: SOLVE EQUATION IN GAMFU7 TO ESTIMATE THE LOCATION
3578C             PARAMETER.
3579C
3580C             FIRST NEED TO FIND A BRACKETING INTERVAL.  USE
3581C             MINIMUM VALUE AS UPPER LIMIT.  DESCEND IN SMALL
3582C             INCREMENTS UNTIL "MEAN - 60*SD".  IF NO BRACKETING
3583C             INTERVAL FOUND AT THAT POINT, THEN NO ML SOLUTION.
3584C
3585      IF(IMETH.EQ.'COHE')THEN
3586        EPS=0.1D-08
3587        BOUND=DBLE(XMEAN) - 25.0D0*DBLE(XSD)
3588        STEP=DBLE(XSD)/100.0D0
3589        TU=DBLE(XMIN) - EPS
3590        CALL GAMFU7(DTEMP1,TU,DBLE(XMEAN),N,
3591     1              RHO,DB,FU,
3592     1              ISUBRO,IBUGA3,IERROR)
3593C
3594        IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML3')THEN
3595          WRITE(ICOUT,211)TU,RHO,DB,FU
3596  211     FORMAT('INITIAL GAMFU7: TU,RHO,DB,FU = ',4G15.7)
3597          CALL DPWRST('XXX','WRIT')
3598        ENDIF
3599C
3600C     LOCATE A LOWER BOUND FOR THE LOCATION
3601C
3602        TL=TU
3603        FL=FU
3604C
3605 300    CONTINUE
3606        IF(FL/FU.GT.0.0D0)THEN
3607          TL=TL-STEP
3608          IF(TL.GT.BOUND)THEN
3609            CALL GAMFU7(DTEMP1,TL,DBLE(XMEAN),N,
3610     1                  RHO,DB,FL,
3611     1                  ISUBRO,IBUGA3,IERROR)
3612C
3613            IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML3')THEN
3614              WRITE(ICOUT,301)TL,RHO,DB,FL
3615  301         FORMAT('BRACKETING GAMFU7: TL,RHO,DB,FL = ',4G15.7)
3616              CALL DPWRST('XXX','WRIT')
3617           ENDIF
3618C
3619          ELSE
3620            WRITE(ICOUT,999)
3621            CALL DPWRST('XXX','WRIT')
3622            WRITE(ICOUT,111)
3623            CALL DPWRST('XXX','WRIT')
3624            WRITE(ICOUT,292)
3625  292       FORMAT('      UNABLE TO FIND A BRACKETING INTERVAL FOR ',
3626     1             'THE LOCATION PARAMETER.')
3627            CALL DPWRST('XXX','WRIT')
3628            IERROR='YES'
3629            GOTO9000
3630          ENDIF
3631C
3632          GOTO300
3633        ELSE
3634          IF(TL.LT.BOUND)THEN
3635            WRITE(ICOUT,999)
3636            CALL DPWRST('XXX','WRIT')
3637            WRITE(ICOUT,111)
3638            CALL DPWRST('XXX','WRIT')
3639            WRITE(ICOUT,292)
3640            CALL DPWRST('XXX','WRIT')
3641            IERROR='YES'
3642          ELSE
3643C
3644C         USE BINARY SEARCH TO FIND ESTIMATE OF LOCATION PARAMETER
3645C
3646            T=(TL+TU)/2.0D0
3647  400       CONTINUE
3648            CALL GAMFU7(DTEMP1,T,DBLE(XMEAN),N,
3649     1                  RHO,DB,F,
3650     1                  ISUBRO,IBUGA3,IERROR)
3651C
3652            IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML3')THEN
3653              WRITE(ICOUT,401)T,RHO,DB,F
3654  401         FORMAT('BINARY SEARCH GAMFU7: T,RHO,DB,F = ',4G15.7)
3655              CALL DPWRST('XXX','WRIT')
3656            ENDIF
3657C
3658            V(1)=T
3659            V(2)=DB
3660            V(3)=RHO
3661            V(4)=V(3)*V(2) + T
3662            V(5)=V(2)*DSQRT(V(3))
3663            V(6)=2.0D0/DSQRT(RHO)
3664            IF(DABS(TL-T).GT.EPS)THEN
3665              IF(F*FL.LT.0.0D0)THEN
3666                TU=T
3667              ELSE
3668                TL=T
3669                FL=F
3670              ENDIF
3671              T=(TL+TU)/2.0D0
3672              GOTO400
3673            ENDIF
3674          ENDIF
3675        ENDIF
3676C
3677        ALOCML=REAL(V(1))
3678        SCALML=REAL(V(2))
3679        SHAPML=REAL(V(3))
3680C
3681      ELSEIF(IMETH.EQ.'BURY')THEN
3682C
3683C       METHOD GIVEN ON PAGES 220-221 OF BURY.
3684C
3685C       STEP 1: USE DFZER2 TO SOLVE FOR LOCATION PARAMETER.
3686C               STARTING VALUE PASSED IN (DPMLG3 WILL USE THE
3687C               MODIFIED MOMENTS ESTIMATOR AS THE STARTING
3688C               VALUE).
3689C
3690CCCCC   DXSTRT=DBLE(ALOCSV)
3691        STEP=DBLE(XSD)/100.0D0
3692        BOUND=DBLE(XMEAN) - 25.0D0*DBLE(XSD)
3693C
3694C       FIND BRACKETING INTERVAL FIRST
3695C
3696        DXUP=DBLE(XMIN) - STEP
3697        FU=GAMFU5(DXUP,DTEMP1)
3698        DXLOW=DXUP - STEP
3699        FL=GAMFU5(DXLOW,DTEMP1)
37002105    CONTINUE
3701        IF(FU*FL.GT.0.0D0)THEN
3702          DXLOW=DXLOW - STEP
3703          IF(DXLOW.LT.BOUND)THEN
3704            WRITE(ICOUT,999)
3705            CALL DPWRST('XXX','BUG ')
3706            WRITE(ICOUT,2131)
3707            CALL DPWRST('XXX','BUG ')
3708            WRITE(ICOUT,2133)
3709            CALL DPWRST('XXX','BUG ')
3710            GOTO9000
3711          ENDIF
3712          FL=GAMFU5(DXLOW,DTEMP1)
3713          GOTO2105
3714        ENDIF
3715C
3716        IFLAG=0
3717        DXSTRT=(DXLOW + DXUP)/2.0D0
3718        DAE=2.0*0.000001D0*DXSTRT
3719        DRE=DAE
3720C
3721        CALL DFZER2(GAMFU5,DXLOW,DXUP,DXSTRT,DRE,DAE,IFLAG,DTEMP1)
3722C
3723        IF(IFLAG.EQ.2)THEN
3724C
3725C         NOTE: SUPPRESS THIS MESSAGE FOR NOW.
3726CCCCC     WRITE(ICOUT,999)
3727CCCCC     CALL DPWRST('XXX','BUG ')
3728CCCCC     WRITE(ICOUT,2111)
3729C2111     FORMAT('***** WARNING FROM GAMMA MAXIMUM LIKELIHOOD--')
3730CCCCC     CALL DPWRST('XXX','BUG ')
3731CCCCC     WRITE(ICOUT,2113)
3732C2113     FORMAT('      ESTIMATE OF LOCATION MAY NOT BE COMPUTED TO ',
3733CCCCC1           'DESIRED TOLERANCE.')
3734CCCCC     CALL DPWRST('XXX','BUG ')
3735        ELSEIF(IFLAG.EQ.3)THEN
3736          WRITE(ICOUT,999)
3737          CALL DPWRST('XXX','BUG ')
3738          WRITE(ICOUT,2121)
3739 2121     FORMAT('***** WARNING FROM GAMMA MAXIMUM LIKELIHOOD--')
3740          CALL DPWRST('XXX','BUG ')
3741          WRITE(ICOUT,2123)
3742 2123     FORMAT('      ESTIMATE OF SHAPE PARAMETER MAY BE NEAR ',
3743     1           'A SINGULAR POINT.')
3744          CALL DPWRST('XXX','BUG ')
3745        ELSEIF(IFLAG.EQ.4)THEN
3746          WRITE(ICOUT,999)
3747          CALL DPWRST('XXX','BUG ')
3748          WRITE(ICOUT,2131)
3749 2131     FORMAT('***** ERROR FROM GAMMA MAXIMUM LIKELIHOOD--')
3750          CALL DPWRST('XXX','BUG ')
3751          WRITE(ICOUT,2133)
3752 2133     FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
3753          CALL DPWRST('XXX','BUG ')
3754        ELSEIF(IFLAG.EQ.5)THEN
3755          WRITE(ICOUT,999)
3756          CALL DPWRST('XXX','BUG ')
3757          WRITE(ICOUT,2121)
3758          CALL DPWRST('XXX','BUG ')
3759          WRITE(ICOUT,2143)
3760 2143     FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
3761          CALL DPWRST('XXX','BUG ')
3762        ENDIF
3763C
3764        ALOCML=REAL(DXLOW)
3765C
3766C       STEP 2: COMPUTE ESTIMATES FOR SHAPE AND SCALE
3767C
3768        DTERM1=1.0D0 - (1.0D0/((DMEAN - DXLOW)*DSUM1))
3769        SHAPML=REAL(1.0D0/DTERM1)
3770        SCALML=(XMEAN-ALOCML)/SHAPML
3771C
3772      ENDIF
3773C
3774 9000 CONTINUE
3775      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML3')THEN
3776        WRITE(ICOUT,999)
3777        CALL DPWRST('XXX','WRIT')
3778        WRITE(ICOUT,9011)
3779 9011   FORMAT('**** AT THE END OF GAMML3--')
3780        CALL DPWRST('XXX','WRIT')
3781        WRITE(ICOUT,9013)ALOCML,SCALML,SHAPML
3782 9013   FORMAT('ALOCML,SCALML,SHAPML = ',3G15.7)
3783        CALL DPWRST('XXX','WRIT')
3784      ENDIF
3785C
3786      RETURN
3787      END
3788      SUBROUTINE GAMML5(ALOC,SCALE,SHAPE,X,N,COV,
3789     1                  XTEMP,ITEMP,MAXNXT,
3790     1                  ISUBRO,IBUGA3,IERROR)
3791C
3792C     PURPOSE--THIS ROUTINE COMPUTES THE PARAMETER VARIANCE-COVARIANCE
3793C              MATRIX FOR THE 3-PARAMETER GAMMA DISTRIBUTION.
3794C
3795C              IF SHAPE > 2, THE EXPECTED INFORMATION MATRIX IS
3796C              OBTAINED FROM THE FOLLOWING QUANTITIES:
3797C
3798C                 I(1,1) = N/(SCALE**2*(SHAPE-2)
3799C                 I(1,2) = n/SCALE**2
3800C                 I(1,3) = n/(SCALE*(SHAPE-1))
3801C                 I(2,2) = N*SHAPE/SCALE**2
3802C                 I(2,3) = N/SCALE
3803C                 I(3,3) = N*TRIGAMMA(SHAPE)
3804C
3805C              IF 1 < SHAPE <= 2, THEN THE LOCAL INFORMATION MATRIX
3806C              CAN BE USED.  FOR THIS CASE, USE
3807C
3808C                 I(1,1) = (SHAPE-1)*SUM[i=1 to N][1/(X(i) - LOC)**2]
3809C
3810C              THE PARAMETER VARIANCE-COVARIANCE MATRIX IS THE
3811C              INVERSE OF THE INFORMATION MATRIX.
3812C
3813C     REFERENCE--KARL BURY, "STATISTICAL DISTRIBUTIONS IN
3814C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
3815C                1999, CHAPTER 13, P. 212.
3816C              --COHEN AND WHITTEN (1988), "PARAMETER ESTIMATION IN
3817C                RELIABILITY AND LIFE SPAN MODELS", MARCEL DEKKER, INC.,
3818C                CHAPTER 4.
3819C     WRITTEN BY--ALAN HECKERT
3820C                 STATISTICAL ENGINEERING DIVISION
3821C                 INFORMATION TECHNOLOGY LABORATORY
3822C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
3823C                 GAITHERSBURG, MD 20899-8980
3824C                 PHONE--301-975-2899
3825C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
3826C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
3827C     LANGUAGE--ANSI FORTRAN (1977)
3828C     VERSION NUMBER--2014/4
3829C     ORIGINAL VERSION--APRIL     2014
3830C
3831      REAL X(*)
3832      REAL XTEMP(*)
3833      REAL FISH(3,3)
3834      REAL COV(3,3)
3835C
3836      INTEGER ITEMP(*)
3837C
3838      CHARACTER*4 ISUBRO
3839      CHARACTER*4 IBUGA3
3840      CHARACTER*4 IERROR
3841C
3842      DOUBLE PRECISION DN
3843      DOUBLE PRECISION DLOC
3844      DOUBLE PRECISION DSCALE
3845      DOUBLE PRECISION DSHAPE
3846      DOUBLE PRECISION DSUM1
3847      DOUBLE PRECISION DX
3848C
3849      DOUBLE PRECISION TRIGAM
3850      EXTERNAL TRIGAM
3851C
3852      CHARACTER*4 IWRITE
3853      CHARACTER*4 ISUBN1
3854      CHARACTER*4 ISUBN2
3855      CHARACTER*4 ISTEPN
3856C
3857C-----COMMON----------------------------------------------------------
3858C
3859      INCLUDE 'DPCOP2.INC'
3860C
3861C-----START POINT-----------------------------------------------------
3862C
3863      ISUBN1='GAMM'
3864      ISUBN2='L5  '
3865      IWRITE='OFF'
3866      IERROR='NO'
3867C
3868      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'IML5')THEN
3869        WRITE(ICOUT,999)
3870  999   FORMAT(1X)
3871        CALL DPWRST('XXX','WRIT')
3872        WRITE(ICOUT,51)
3873   51   FORMAT('**** AT THE BEGINNING OF GAMML5--')
3874        CALL DPWRST('XXX','WRIT')
3875        WRITE(ICOUT,52)IBUGA3,ISUBRO,N
3876   52   FORMAT('IBUGA3,ISUBRO,N = ',2(A4,2X),I8)
3877        CALL DPWRST('XXX','WRIT')
3878        WRITE(ICOUT,54)ALOC,SCALE,SHAPE
3879   54   FORMAT('ALOC,SCALE,SHAPE = ',3G15.7)
3880        CALL DPWRST('XXX','WRIT')
3881      ENDIF
3882C
3883C               ******************************************
3884C               **  STEP 1--                            **
3885C               **  CARRY OUT CALCULATIONS              **
3886C               **  FOR VARIANCE-COVARIANCE MATRIX      **
3887C               ******************************************
3888C
3889      ISTEPN='1'
3890      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'IML5')
3891     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
3892C
3893      DO101J=1,3
3894        DO103I=1,3
3895          FISH(I,J)=CPUMIN
3896          COV(I,J)=CPUMIN
3897  103   CONTINUE
3898  101 CONTINUE
3899C
3900      DN=REAL(N)
3901      DLOC=DBLE(ALOC)
3902      DSCALE=DBLE(SCALE)
3903      DSHAPE=DBLE(SHAPE)
3904C
3905      IF(SHAPE.GT.2.0)THEN
3906        FISH(1,1)=DN/(DSCALE**2*(DSHAPE-2.0D0))
3907      ELSEIF(SHAPE.GT.1.0)THEN
3908        DSUM1=0.0D0
3909        DO110I=1,N
3910          DX=(DBLE(X(I)) - DLOC)**2
3911          DSUM1=DSUM1 + 1.0D0/DX
3912  110   CONTINUE
3913        FISH(1,1)=(DSHAPE - 1.0D0)*DSUM1
3914      ELSE
3915        GOTO9000
3916      ENDIF
3917      FISH(1,2)=REAL(DN/DSCALE**2)
3918      FISH(1,3)=REAL(DN/(DSCALE*(DSHAPE - 1.0D0)))
3919      FISH(2,2)=REAL(DN*DSHAPE/DSCALE**2)
3920      FISH(2,3)=REAL(DN/DSCALE)
3921      FISH(2,3)=REAL(DN/DSCALE)
3922      FISH(3,3)=REAL(DN*TRIGAM(DSHAPE,IFAULT))
3923      FISH(2,1)=FISH(1,2)
3924      FISH(3,1)=FISH(1,3)
3925      FISH(3,2)=FISH(2,3)
3926C
3927      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'IML5')THEN
3928        DO120I=1,3
3929          WRITE(ICOUT,121)FISH(I,1),FISH(I,2),FISH(I,3)
3930  121     FORMAT('FISH(I,1),FISH(I,2),FISH(I,3) = ',3G15.7)
3931          CALL DPWRST('XXX','WRIT')
3932  120   CONTINUE
3933      ENDIF
3934C
3935      CALL SGECO(FISH,3,3,ITEMP,RCOND,XTEMP)
3936      IJOB=1
3937      CALL SGEDI(FISH,3,3,ITEMP,XTEMP,XTEMP(MAXNXT/2),IJOB)
3938      DO130J=1,3
3939        DO135I=1,3
3940          COV(I,J)=FISH(I,J)
3941  135   CONTINUE
3942  130 CONTINUE
3943C
3944 9000 CONTINUE
3945      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'AML5')THEN
3946        WRITE(ICOUT,999)
3947        CALL DPWRST('XXX','WRIT')
3948        WRITE(ICOUT,9011)
3949 9011   FORMAT('**** AT THE END OF GAMML5--')
3950        CALL DPWRST('XXX','WRIT')
3951        WRITE(ICOUT,9012)RCOND
3952 9012   FORMAT('RCOND = ',G15.7)
3953        CALL DPWRST('XXX','WRIT')
3954        DO9020I=1,3
3955          WRITE(ICOUT,9021)COV(I,1),COV(I,2),COV(I,3)
3956 9021     FORMAT('COV(I,1),COV(I,2),COV(I,3) = ',3G15.7)
3957          CALL DPWRST('XXX','WRIT')
3958 9020   CONTINUE
3959      ENDIF
3960C
3961      RETURN
3962      END
3963      SUBROUTINE GAMML8(Y,N,IGAMFL,P3GAMI,IOPFLG,
3964     1                  TEMP1,DTEMP1,Y2,
3965     1                  ALOCML,SCALML,SHAPML,
3966     1                  ISUBRO,IBUGA3,IERROR)
3967C
3968C     PURPOSE--USE THE LAWLESS "PROFILE LIKELIHOOD" METHOD (THIS WAS
3969C              DEVELOPED FOR THE 3-PARAMETER WEIBULL DISTRIBUTION, BUT
3970C              THE SAME IDEA CAN BE APPLIED TO THE 3-PARAMETER GAMMA
3971C              DISTRIBUTION.  THIS CAN BE USEFUL AS THE STANDARD
3972C              MAXIMUM LIKELIHOOD ALGORITHM CAN SOMETIMES FAIL.
3973C
3974C     PURPOSE--THIS SUBROUTINE IMPLEMENTS THE PROFILE LOG-LIKELIHOOD
3975C              METHOD ORIGINALLY PROPOSED BY LAWLESS FOR THE 3-PARAMETER
3976C              WEIBULL.  THIS METHOD DOES THE FOLLOWING:
3977C
3978C                1. CREATE A GRID FOR THE LOCATION PARAMETER FROM 0 TO
3979C                   THE DATA MINIMUM (MINUS AN EPSILON) VALUE.
3980C
3981C                2. ITERATE THROUGH THE GRID AND DO THE FOLLOWING:
3982C
3983C                    A. SET THE LOCATION PARAMETER TO THE GRID VALUE.
3984C                       CALL THIS VALUE A0.
3985C
3986C                    B. LET Y2 = Y - A0.
3987C
3988C                    C. ESTIMATE THE SCALE AND SHAPE PARAMETER USING
3989C                       STANDARD 2-PARAMETER GAMMA ML METHODS.
3990C
3991C                    D. COMPUTE THE LOG-LIKELIHOOD OF THE 3-PARAMETER
3992C                       GAMMA BASED ON THESE PARAMETER ESTIMATES.
3993C
3994C              THE PARAMETER ESTIMATES THAT GENERATE THE MAXIMUM
3995C              LIKELIHOOD VALUE ARE THE ESTIMATES USED.
3996C
3997C     REFERENCES--LAWLESS (2003), "STATISTICAL MODELS AND METHODS FOR
3998C                 LIFETIME DATA", SECOND EDITION, WILEY, PP. 187-190.
3999C              --COHEN AND WHITTEN, "PARAMETER ESTIMATION IN RELIABILITY
4000C                AND LIFE SPAN MODELS", MARCEL DEKKER, INC.
4001C     WRITTEN BY--ALAN HECKERT
4002C                 STATISTICAL ENGINEERING DIVISION
4003C                 INFORMATION TECHNOLOGY LABORATORY
4004C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
4005C                 GAITHERSBURG, MD 20899-8980
4006C                 PHONE--301-975-2899
4007C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
4008C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
4009C     LANGUAGE--ANSI FORTRAN (1977)
4010C     VERSION NUMBER--2014/4
4011C     ORIGINAL VERSION--APRIL     2014
4012C
4013C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
4014C
4015      DIMENSION Y(*)
4016      DIMENSION Y2(*)
4017      DIMENSION TEMP1(*)
4018      DOUBLE PRECISION DTEMP1(*)
4019C
4020      CHARACTER*4 ICASAN
4021      CHARACTER*4 IGAMFL
4022      CHARACTER*4 IOPFLG
4023      CHARACTER*4 ISUBRO
4024      CHARACTER*4 IBUGA3
4025      CHARACTER*4 IERROR
4026C
4027      CHARACTER*4 IWRITE
4028      CHARACTER*4 IOP
4029      CHARACTER*40 IDIST
4030      CHARACTER*4 ISUBN1
4031      CHARACTER*4 ISUBN2
4032      CHARACTER*4 ISTEPN
4033C
4034C-----COMMON----------------------------------------------------------
4035C
4036      INCLUDE 'DPCOP2.INC'
4037C
4038C-----START POINT-----------------------------------------------------
4039C
4040      ISUBN1='GAMM'
4041      ISUBN2='L8  '
4042      IWRITE='OFF'
4043      IERROR='NO'
4044C
4045      EPS=0.1E-5
4046C
4047      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML8')THEN
4048        WRITE(ICOUT,999)
4049  999   FORMAT(1X)
4050        CALL DPWRST('XXX','WRIT')
4051        WRITE(ICOUT,51)
4052   51   FORMAT('**** AT THE BEGINNING OF GAMML8--')
4053        CALL DPWRST('XXX','WRIT')
4054        WRITE(ICOUT,52)IBUGA3,ISUBRO,IGAMFL,N
4055   52   FORMAT('IBUGA3,ISUBRO,IGAMFL,N = ',3(A4,2X),I8)
4056        CALL DPWRST('XXX','WRIT')
4057        DO56I=1,MIN(N,100)
4058          WRITE(ICOUT,57)I,Y(I)
4059   57     FORMAT('I,Y(I) = ',I8,G15.7)
4060          CALL DPWRST('XXX','WRIT')
4061   56   CONTINUE
4062      ENDIF
4063C
4064C
4065C               **************************************************
4066C               **  STEP 0--OPEN THE STORAGE FILES              **
4067C               **************************************************
4068C
4069      ISTEPN='1.1'
4070      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML8')
4071     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
4072C
4073      IF(IOPFLG.EQ.'ON' .OR. IOPFLG.EQ.'YES')THEN
4074        IOP='OPEN'
4075        IFLAG1=0
4076        IFLAG2=1
4077        IFLAG3=0
4078        IFLAG4=0
4079        IFLAG5=0
4080        CALL DPAUFI(IOP,IFLAG1,IFLAG2,IFLAG3,IFLAG4,IFLAG5,
4081     1              IOUNI1,IOUNI2,IOUNI3,IOUNI4,IOUNI5,
4082     1              IBUGA3,ISUBRO,IERROR)
4083        IF(IERROR.EQ.'YES')GOTO9000
4084      ENDIF
4085C
4086C               ******************************************
4087C               **  STEP 1--                            **
4088C               **  CARRY OUT CALCULATIONS              **
4089C               **  FOR LOGNORMAL MLE ESTIMATE          **
4090C               ******************************************
4091C
4092      ISTEPN='1'
4093      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML8')
4094     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
4095C
4096      IDIST='GAMMA'
4097      ICASAN='GAMM'
4098      IGAMFL='GAMM'
4099C
4100      IF(N.LE.4)THEN
4101        WRITE(ICOUT,999)
4102        CALL DPWRST('XXX','WRIT')
4103        WRITE(ICOUT,111)
4104  111   FORMAT('***** ERROR IN GAMMA MAXIMUM LIKELIHOOD--')
4105        CALL DPWRST('XXX','WRIT')
4106        WRITE(ICOUT,112)
4107  112   FORMAT('      THE NUMBER OF OBSERVATIONS FOR THE RESPONSE ',
4108     1         'VARIABLE IS LESS THAN 5.')
4109        CALL DPWRST('XXX','WRIT')
4110        WRITE(ICOUT,113)N
4111  113   FORMAT('      SAMPLE SIZE = ',I8)
4112        CALL DPWRST('XXX','WRIT')
4113        IERROR='YES'
4114        GOTO9000
4115      ENDIF
4116C
4117C     THIS METHOD ASSUMES LOCATION IS NON-NEGATIVE (IT CAN BE EXTENDED
4118C     TO A NEGATIVE LOWER LIMITS, BUT DEFER ON IMPLEMENTING THAT FOR
4119C     NOW).
4120C
4121      DO120I=1,N
4122        IF(Y(I).LE.0.0)THEN
4123          WRITE(ICOUT,999)
4124          CALL DPWRST('XXX','WRIT')
4125          WRITE(ICOUT,111)
4126          CALL DPWRST('XXX','WRIT')
4127          WRITE(ICOUT,127)I,Y(I)
4128  127     FORMAT('      ROW ',I8,' IS NON-POSITIVE (',G15.7,')')
4129          CALL DPWRST('XXX','WRIT')
4130          IERROR='YES'
4131          GOTO9000
4132        ENDIF
4133  120 CONTINUE
4134C
4135C     STEP 1: COMPUTE 2-PARAMETER ML ESTIMATES FOR ORIGINAL DATA SET
4136C
4137      CALL GAMML1(Y,N,IGAMFL,
4138     1            TEMP1,DTEMP1,
4139     1            XMEAN,XSD,XVAR,XMIN,XMAX,XGEOM,
4140     1            ZMEAN,ZSD,ZGEOM,
4141     1            SCALML,SCALSE,SHAPML,SHAPSE,COVSE,
4142     1            SCALMO,SHAPMO,
4143     1            SCALYE,SHAPYE,SCYEBC,SHYEBC,
4144     1            ISUBRO,IBUGA3,IERROR)
4145      YMIN=P3GAMI
4146      IF(YMIN.GE.XMIN)YMIN=0.0
4147      ALOCML=YMIN
4148      CALL GAMLI1(Y,N,ICASAN,IGAMFL,ALOCML,SCALML,SHAPML,
4149     1            ALIK,AIC,AICC,BIC,
4150     1            ISUBRO,IBUGA3,IERROR)
4151C
4152      IF(IOPFLG.EQ.'ON' .OR. IOPFLG.EQ.'YES')THEN
4153        WRITE(IOUNI2,151)ALOCML,ALIK,SCALML,SHAPML
4154  151   FORMAT(4E15.7)
4155      ENDIF
4156C
4157      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML8')THEN
4158        WRITE(ICOUT,131)SCALML,SHAPML,ALIK
4159  131   FORMAT('ZERO CASE: SCALML,SHAPML,ALIK = ',3G15.7)
4160        CALL DPWRST('XXX','WRIT')
4161      ENDIF
4162C
4163C     STEP 2: NOW ITERATE THROUGH VALUES OF THE LOCATION PARAMETER
4164C
4165C             IF MINIMUM VALUE IS SUFFICIENTLY SMALL, JUST DEFINE A
4166C             SINGLE GRID.  IF IT IS LARGE, THEN DO 2 PASSES.  ONCE
4167C             WITH A BROAD GRID AND THEN WITH A FINER GRID.
4168C
4169      XMINT=XMIN - EPS
4170      IF(XMIN.LE.100.0)THEN
4171        NITER=1
4172        IPASS=1
4173        IF(XMIN.LE.10)THEN
4174          AINC=0.001
4175        ELSE
4176          AINC=0.01
4177        ENDIF
4178        NLOOP=INT(((XMINT-YMIN)/AINC)+0.1)
4179      ELSE
4180        NITER=2
4181        IPASS=1
4182        NLOOP=100
4183        AINC=(XMIN-YMIN)/REAL(NLOOP)
4184      ENDIF
4185C
4186 1000 CONTINUE
4187C
4188      IF(IPASS.EQ.2)THEN
4189        XSTRT=ALOCML - AINC
4190        IF(XSTRT.LE.0.0)XSTRT=0.0
4191        XSTOP=ALOCML + AINC
4192        NLOOP=100
4193        AINC=XMIN/REAL(NLOOP)
4194      ELSE
4195        XSTRT=YMIN
4196      ENDIF
4197C
4198      DO1100ILOOP=1,NLOOP
4199C
4200C       STEP 2A: SUBTRACT OFF CONDITIONAL VALUE OF LOCATION
4201C
4202        ALOC=XSTRT + REAL(ILOOP)*AINC
4203        IF(ALOC.GE.XMIN)GOTO1100
4204        DO1110I=1,N
4205          Y2(I)=Y(I) - ALOC
4206 1110   CONTINUE
4207C
4208C       STEP 2B: COMPUTE 2-PARAMETER ML ESTIMATES FOR MODIFIED DATA SET
4209C                (BUT NOT THAT LIKELIHOOD IS COMPUTED FOR ORIGINAL DATA)
4210C
4211        CALL GAMML1(Y2,N,IGAMFL,
4212     1              TEMP1,DTEMP1,
4213     1              XMEANT,XSDT,XVART,XMINT,XMAXT,XGEOMT,
4214     1              ZMEANT,ZSDT,ZGEOMT,
4215     1              SCALMT,SCALSE,SHAPMT,SHAPSE,COVSE,
4216     1              SCALMO,SHAPMO,
4217     1              SCALYE,SHAPYE,SCYEBC,SHYEBC,
4218     1              ISUBRO,IBUGA3,IERROR)
4219        CALL GAMLI1(Y,N,ICASAN,IGAMFL,ALOCMT,SCALMT,SHAPMT,
4220     1              ALIKT,AIC,AICC,BIC,
4221     1              ISUBRO,IBUGA3,IERROR)
4222C
4223        IF(IOPFLG.EQ.'ON' .OR. IOPFLG.EQ.'YES')THEN
4224          WRITE(IOUNI2,151)ALOC,ALIKT,SCALMT,SHAPMT
4225        ENDIF
4226C
4227C       STEP 2C: COMPARE LIKELIHOOD TO CURRENT MAXIMUM
4228C
4229        IF(ALIKT.GT.ALIK)THEN
4230          ALIK=ALIKT
4231          ALOCML=ALOC
4232          SCALML=SCALMT
4233          SHAPML=SHAPMT
4234          ITEMP=ILOOP
4235        ENDIF
4236C
4237 1100 CONTINUE
4238C
4239      IF(NITER.EQ.2 .AND. IPASS.EQ.1)THEN
4240        IPASS=2
4241        GOTO1000
4242      ENDIF
4243C
4244 9000 CONTINUE
4245C
4246      IF(IOPFLG.EQ.'ON' .OR. IOPFLG.EQ.'YES')THEN
4247        IOP='CLOS'
4248        CALL DPAUFI(IOP,IFLAG1,IFLAG2,IFLAG3,IFLAG4,IFLAG5,
4249     1              IOUNI1,IOUNI2,IOUNI3,IOUNI4,IOUNI5,
4250     1              IBUGA3,ISUBRO,IERROR)
4251      ENDIF
4252C
4253      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MML8')THEN
4254        WRITE(ICOUT,999)
4255        CALL DPWRST('XXX','WRIT')
4256        WRITE(ICOUT,9011)
4257 9011   FORMAT('**** AT THE END OF GAMML8--')
4258        CALL DPWRST('XXX','WRIT')
4259        WRITE(ICOUT,9013)NITER,NLOOP,IPASS,IERROR
4260 9013   FORMAT('NITER,NLOOP,IPASS,IERROR = ',3I8,2X,A4)
4261        CALL DPWRST('XXX','WRIT')
4262        WRITE(ICOUT,9021)ALOCML,SCALML,SHAPML,ALIK
4263 9021   FORMAT('MLE: ALOCML,SCALML,SHAPML,ALIK = ',4G15.7)
4264        CALL DPWRST('XXX','WRIT')
4265      ENDIF
4266C
4267      RETURN
4268      END
4269      SUBROUTINE GAMMO1(XMEAN,XSD,XMIN,XSKEW,N,PSTAMV,
4270     1                  ALOCMO,SCALMO,SHAPMO,
4271     1                  ALOCMM,SCALMM,SHAPMM,
4272     1                  ISUBRO,IBUGA3,IERROR)
4273C
4274C     PURPOSE--THIS ROUTINE COMPUTES MOMENT ESTIMATES FOR THE 3-PARAMETER
4275C              GAMMA DISTRIBUTION.  THE INPUT VALUES ARE:
4276C
4277C                 XMEAN   - THE SAMPLE MEAN
4278C                 XSD     - THE SAMPLE STANDARD DEVIATION
4279C                 XSKEW   - THE SAMPLE SKEWNESS
4280C                 XMIN    - THE SAMPLE MINIMUM
4281C
4282C              THIS IS FOR THE UNCENSORED CASE.
4283C
4284C     REFERENCE--COHEN AND WHITTEN, "PARAMETER ESTIMATION IN RELIABILITY
4285C                AND LIFE SPAN MODELS", MARCEL DEKKER, INC., P. 61 AND
4286C                PP. 363-364.
4287C     WRITTEN BY--ALAN HECKERT
4288C                 STATISTICAL ENGINEERING DIVISION
4289C                 INFORMATION TECHNOLOGY LABORATORY
4290C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
4291C                 GAITHERSBURG, MD 20899-8980
4292C                 PHONE--301-975-2899
4293C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
4294C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
4295C     LANGUAGE--ANSI FORTRAN (1977)
4296C     VERSION NUMBER--2014/4
4297C     ORIGINAL VERSION--APRIL     2014
4298C
4299C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
4300C
4301      DOUBLE PRECISION AMOM(3)
4302      DOUBLE PRECISION VMOM(6)
4303      DOUBLE PRECISION VMMOM(6)
4304      DOUBLE PRECISION RHO
4305      DOUBLE PRECISION RHOL
4306      DOUBLE PRECISION RHOU
4307      DOUBLE PRECISION FL
4308      DOUBLE PRECISION FU
4309      DOUBLE PRECISION F
4310      DOUBLE PRECISION EPS
4311      DOUBLE PRECISION DN
4312      DOUBLE PRECISION Z
4313      DOUBLE PRECISION Z1
4314      DOUBLE PRECISION DCDF
4315C
4316      CHARACTER*4 ISUBRO
4317      CHARACTER*4 IBUGA3
4318      CHARACTER*4 IERROR
4319C
4320      CHARACTER*4 ISUBN1
4321      CHARACTER*4 ISUBN2
4322      CHARACTER*4 ISTEPN
4323C
4324C-----COMMON----------------------------------------------------------
4325C
4326      INCLUDE 'DPCOP2.INC'
4327C
4328C-----START POINT-----------------------------------------------------
4329C
4330      ISUBN1='GAMM'
4331      ISUBN2='O1  '
4332      IERROR='NO'
4333C
4334      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MMO1')THEN
4335        WRITE(ICOUT,999)
4336  999   FORMAT(1X)
4337        CALL DPWRST('XXX','WRIT')
4338        WRITE(ICOUT,51)
4339   51   FORMAT('**** AT THE BEGINNING OF GAMMO1--')
4340        CALL DPWRST('XXX','WRIT')
4341        WRITE(ICOUT,52)IBUGA3,ISUBRO
4342   52   FORMAT('IBUGA3,ISUBRO = ',A4,2X,A4)
4343        CALL DPWRST('XXX','WRIT')
4344        WRITE(ICOUT,54)XMEAN,XSD,XMIN,XSKEW
4345   54   FORMAT('XMEAN,XSD,XMIN,XSKEW = ',4G15.7)
4346        CALL DPWRST('XXX','WRIT')
4347      ENDIF
4348C
4349C               ******************************************
4350C               **  STEP 1--                            **
4351C               **  CARRY OUT CALCULATIONS              **
4352C               **  FOR GAMMA MOMENT ESTIMATE       **
4353C               ******************************************
4354C
4355      ISTEPN='1'
4356      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MMO1')
4357     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
4358C
4359      IF(XMEAN.EQ.CPUMIN .OR. XMEAN.EQ.PSTAMV)THEN
4360        WRITE(ICOUT,999)
4361        CALL DPWRST('XXX','WRIT')
4362        WRITE(ICOUT,101)
4363  101   FORMAT('***** ERROR IN GAMMA MOMENT ESTIMATION--')
4364        CALL DPWRST('XXX','WRIT')
4365        WRITE(ICOUT,102)
4366  102   FORMAT('      THE SAMPLE MEAN IS UNDEFINED.')
4367        CALL DPWRST('XXX','WRIT')
4368        IERROR='YES'
4369        GOTO9000
4370      ELSEIF(XSD.EQ.CPUMIN .OR. XSD.EQ.PSTAMV)THEN
4371        WRITE(ICOUT,999)
4372        CALL DPWRST('XXX','WRIT')
4373        WRITE(ICOUT,101)
4374        CALL DPWRST('XXX','WRIT')
4375        WRITE(ICOUT,107)
4376  107   FORMAT('      THE SAMPLE STANDARD DEVIATION IS UNDEFINED.')
4377        CALL DPWRST('XXX','WRIT')
4378        IERROR='YES'
4379        GOTO9000
4380      ELSEIF(XSD.LE.0.0)THEN
4381        WRITE(ICOUT,999)
4382        CALL DPWRST('XXX','WRIT')
4383        WRITE(ICOUT,101)
4384        CALL DPWRST('XXX','WRIT')
4385        WRITE(ICOUT,112)
4386  112   FORMAT('      THE SAMPLE STANDARD DEVIATION IS NON-POSTIVE.')
4387        CALL DPWRST('XXX','WRIT')
4388        WRITE(ICOUT,113)XSD
4389  113   FORMAT('      STANDARD DEVIATION = ',G15.7)
4390        CALL DPWRST('XXX','WRIT')
4391        IERROR='YES'
4392        GOTO9000
4393      ELSEIF(N.LT.5)THEN
4394        WRITE(ICOUT,999)
4395        CALL DPWRST('XXX','WRIT')
4396        WRITE(ICOUT,101)
4397        CALL DPWRST('XXX','WRIT')
4398        WRITE(ICOUT,122)
4399  122   FORMAT('      THE SAMPLE SIZE IS LESS THAN FIVE.')
4400        CALL DPWRST('XXX','WRIT')
4401        WRITE(ICOUT,123)N
4402  123   FORMAT('      SAMPLE SIZE  = ',I8)
4403        CALL DPWRST('XXX','WRIT')
4404        IERROR='YES'
4405        GOTO9000
4406      ENDIF
4407C
4408      EPS=0.1D-7
4409C
4410      ALOCMO=CPUMIN
4411      SCALMO=CPUMIN
4412      SHAPMO=CPUMIN
4413C
4414      ALOCMM=CPUMIN
4415      SCALMM=CPUMIN
4416      UHATMM=CPUMIN
4417C
4418      VMMOM(1)=CPUMIN
4419      VMMOM(2)=CPUMIN
4420      VMMOM(3)=CPUMIN
4421      VMMOM(4)=CPUMIN
4422      VMMOM(5)=CPUMIN
4423      VMMOM(6)=CPUMIN
4424      VMOM(1)=CPUMIN
4425      VMOM(2)=CPUMIN
4426      VMOM(3)=CPUMIN
4427      VMOM(4)=CPUMIN
4428      VMOM(5)=CPUMIN
4429      VMOM(6)=CPUMIN
4430      AMOM(1)=CPUMIN
4431      AMOM(2)=CPUMIN
4432      AMOM(3)=CPUMIN
4433C
4434C               ******************************************
4435C               **  STEP 2--                            **
4436C               **  MOMENT ESTIMATES                    **
4437C               ******************************************
4438C
4439      ISTEPN='2'
4440      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MMO1')
4441     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
4442C
4443C     IN CODE BELOW:
4444C
4445C        VMOM(1) = ESTIMATE OF LOCATION
4446C        VMOM(2) = ESTIMATE OF SCALE
4447C        VMOM(3) = ESTIMATE OF SHAPE (SIGMA)
4448C        VMOM(4) = ESTIMATE OF MEAN
4449C                = LOC + SHAPE*SCALE
4450C        VMOM(5) = ESTIMATE OF STANDARD DEVIATION
4451C                = SHAPE*SCALE**2
4452C        VMOM(6) = THIRD STANDARD MOMENT, A3
4453C
4454C     FOR OUR PURPOSES, WE ARE PRIMARILY INTERESTED IN THE PARAMETER
4455C     ESTIMATES.
4456C
4457      AMOM(1)=DBLE(XMEAN)
4458      AMOM(2)=DBLE(XSD)
4459      AMOM(3)=DBLE(XSKEW)
4460C
4461      VMOM(1)=AMOM(1) - (2.0D0*AMOM(2)/AMOM(3))
4462      VMOM(2)=AMOM(2)*AMOM(3)/2.0D0
4463      VMOM(3)=4.0D0/AMOM(3)**2
4464      VMOM(4)=VMOM(2)*VMOM(3) + VMOM(1)
4465      VMOM(5)=VMOM(2)*DSQRT(VMOM(3))
4466      VMOM(6)=AMOM(3)
4467C
4468      ALOCMO=REAL(VMOM(1))
4469      SCALMO=REAL(VMOM(2))
4470      SHAPMO=REAL(VMOM(3))
4471C
4472C     IN CODE BELOW:
4473C
4474C        VMMOM(1) = ESTIMATE OF LOCATION
4475C        VMMOM(2) = ESTIMATE OF SCALE
4476C        VMMOM(3) = ESTIMATE OF SHAPE (SIGMA)
4477C        VMMOM(4) = ESTIMATE OF MEAN
4478C                 = LOC + SHAPE*SCALE
4479C        VMMOM(5) = ESTIMATE OF STANDARD DEVIATION
4480C                 = SHAPE*SCALE**2
4481C        VMMOM(6) = THIRD STANDARD MOMENT, A3
4482C
4483C     COMPUTE MODIFIED MOMENT ESTIMATORS USING CODE FOUND ON
4484C     PP. 363-364 OF COHEN/WHITTEN BOOK.
4485C
4486C     IF XMIN PARAMETER NOT GIVEN, THEN SKIP THIS CASE.
4487C
4488      IF(XMIN.EQ.CPUMIN)THEN
4489        WRITE(ICOUT,999)
4490        CALL DPWRST('XXX','WRIT')
4491        WRITE(ICOUT,101)
4492        CALL DPWRST('XXX','WRIT')
4493        WRITE(ICOUT,212)
4494  212   FORMAT('      MINIMUM VALUE NOT SPECIFIED.  MODIFIED ',
4495     1         'MOMENTS WILL NOT BE COMPUTED.')
4496        CALL DPWRST('XXX','WRIT')
4497        IERROR='YES'
4498        GOTO9000
4499      ENDIF
4500C
4501      IERR=0
4502      EPS=0.1D-08
4503      DN=DBLE(N)
4504C
4505C     FIND THE STANDARDIZED FIRST ORDER STATISTIC
4506C
4507      Z=(DBLE(XMIN) - AMOM(1))/AMOM(2)
4508C
4509C     SET UPPER BOUND ON SHAPE TO 1600 (LOWER BOUND ON SKEWNESS IS 0.05)
4510C
4511CCCCC RHOU=1600.D0
4512      RHOU=200.D0
4513      RHOL=((AMOM(1) - DBLE(XMIN))/AMOM(2))**2
4514C
4515C     CALCULATE FUNCTION AT UPPER BOUND, A3U, AND SCALE Z1 SO THAT Z1 > 0
4516C
4517      Z1=(Z + DSQRT(RHOU))*DSQRT(RHOU)
4518      CALL GAMCDF(REAL(Z1),REAL(RHOU),CDF)
4519      DCDF=DBLE(CDF)
4520      FU=DCDF - (1.0D0/(DN+1.0D0))
4521      Z1=(Z + DSQRT(RHOL))*DSQRT(RHOL)
4522      CALL GAMCDF(REAL(Z1),REAL(RHOL),CDF)
4523      DCDF=DBLE(CDF)
4524      FL=DCDF - (1.0D0/(DN+1.0D0))
4525C
4526      IF(FL*FU.GT.0.0)THEN
4527        IERR=1
4528        WRITE(ICOUT,999)
4529        CALL DPWRST('XXX','WRIT')
4530        WRITE(ICOUT,101)
4531        CALL DPWRST('XXX','WRIT')
4532        WRITE(ICOUT,222)
4533  222   FORMAT('      NO MODIFIED MOMENT ESTIMATOR FOUND.')
4534        CALL DPWRST('XXX','WRIT')
4535      ELSE
4536        RHO=(RHOL+RHOU)/2.0D0
4537        F=FL
4538300     CONTINUE
4539        IF(DABS(RHO-RHOL).GT.EPS)THEN
4540          Z1=(Z + DSQRT(RHO))*DSQRT(RHO)
4541          CALL GAMCDF(REAL(Z1),REAL(RHO),CDF)
4542          DCDF=DBLE(CDF)
4543          F=DCDF - (1.0D0/(DN+1.0D0))
4544          IF(F*FL.LT.0.0D0)THEN
4545            RHOU=RHO
4546          ELSE
4547            RHOL=RHO
4548            FL=F
4549          ENDIF
4550          RHO=(RHOL+RHOU)/2.0D0
4551          GOTO300
4552        ELSE
4553          VMMOM(1)=AMOM(1) - AMOM(2)*DSQRT(RHO)
4554          VMMOM(2)=AMOM(2)/DSQRT(RHO)
4555          VMMOM(3)=RHO
4556          VMMOM(4)=VMMOM(3)*VMMOM(2) + VMMOM(1)
4557          VMMOM(5)=VMMOM(2)*DSQRT(VMMOM(3))
4558          VMMOM(6)=2.0D0/DSQRT(VMMOM(3))
4559        ENDIF
4560      ENDIF
4561C
4562      ALOCMM=VMMOM(1)
4563      SCALMM=VMMOM(2)
4564      SHAPMM=VMMOM(3)
4565C
4566 9000 CONTINUE
4567      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'MMO1')THEN
4568        WRITE(ICOUT,999)
4569        CALL DPWRST('XXX','WRIT')
4570        WRITE(ICOUT,9011)
4571 9011   FORMAT('**** AT THE END OF GAMMO1--')
4572        CALL DPWRST('XXX','WRIT')
4573        WRITE(ICOUT,9012)ALOCMO,SCALMO,SHAPMO
4574 9012   FORMAT('ALOCMO,SCALMO,SHAPMO = ',3G15.7)
4575        CALL DPWRST('XXX','WRIT')
4576        WRITE(ICOUT,9013)ALOCMM,SCALMM,SHAPMM
4577 9013   FORMAT('ALOCMM,SCALMM,SHAPMM = ',3G15.7)
4578        CALL DPWRST('XXX','WRIT')
4579      ENDIF
4580C
4581      RETURN
4582      END
4583      SUBROUTINE GAMPDF(X,GAMMA,PDF)
4584C
4585C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
4586C              FUNCTION VALUE FOR THE GAMMA
4587C              DISTRIBUTION WITH SINGLE PRECISION
4588C              TAIL LENGTH PARAMETER = GAMMA.
4589C              THE GAMMA DISTRIBUTION USED
4590C              HEREIN HAS MEAN = GAMMA
4591C              AND STANDARD DEVIATION = SQRT(GAMMA).
4592C              THIS DISTRIBUTION IS DEFINED FOR ALL POSITIVE X,
4593C              AND HAS THE PROBABILITY DENSITY FUNCTION
4594C              F(X) = (1/CONSTANT) * (X**(GAMMA-1)) * EXP(-X)
4595C              WHERE THE CONSTANT = THE GAMMA FUNCTION EVALUATED
4596C              AT THE VALUE GAMMA.
4597C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
4598C                                AT WHICH THE CUMULATIVE DISTRIBUTION
4599C                                FUNCTION IS TO BE EVALUATED.
4600C                                X SHOULD BE POSITIVE.
4601C                     --GAMMA  = THE SINGLE PRECISION VALUE
4602C                                OF THE TAIL LENGTH PARAMETER.
4603C                                GAMMA SHOULD BE POSITIVE.
4604C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
4605C                                DENSITY FUNCTION VALUE.
4606C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
4607C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
4608C                 --X SHOULD BE POSITIVE.
4609C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
4610C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG.
4611C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
4612C     LANGUAGE--ANSI FORTRAN.
4613C     REFERENCES--WILK, GNANADESIKAN, AND HUYETT, 'PROBABILITY
4614C                 PLOTS FOR THE GAMMA DISTRIBUTION',
4615C                 TECHNOMETRICS, 1962, PAGES 1-15,
4616C                 ESPECIALLY PAGES 3-5.
4617C               --NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY APPLIED MATHEMATICS
4618C                 SERIES 55, 1964, PAGE 257, FORMULA 6.1.41.
4619C               --JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
4620C                 DISTRIBUTIONS--1, 1970, PAGES 166-206.
4621C               --HASTINGS AND PEACOCK, STATISTICAL
4622C                 DISTRIBUTIONS--A HANDBOOK FOR
4623C                 STUDENTS AND PRACTITIONERS, 1975,
4624C                 PAGES 68-73.
4625C     WRITTEN BY--JAMES J. FILLIBEN
4626C                 STATISTICAL ENGINEERING LABORATORY (205.03)
4627C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
4628C                 GAITHERSBURG, MD 20899-8980
4629C                 PHONE:  301-975-2855
4630C     ORIGINAL VERSION--SEPTEMBER 1994.
4631C     UPDATED         --JANUARY   1996.  HANDLE X=0 AS SPECIAL CASE
4632C
4633C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
4634C
4635C---------------------------------------------------------------------
4636C
4637CCCCC JANUARY 1996.  ADD FOLLOWING LINE.
4638      INCLUDE 'DPCOMC.INC'
4639      INCLUDE 'DPCOP2.INC'
4640C
4641C---------------------------------------------------------------------
4642C
4643      DOUBLE PRECISION DX,DGAMMA,DLNGAM,DPDF
4644      DOUBLE PRECISION DTERM1, DTERM2, DTERM3, DTERM4, DTERM5
4645C
4646C     CHECK THE INPUT ARGUMENTS FOR ERRORS
4647C
4648      PDF=0.0
4649      IF(X.LE.0.0)THEN
4650        WRITE(ICOUT,4)
4651    4   FORMAT('***** WARNING--THE FIRST ARGUMENT TO GAMPDF IS ',
4652     1         'NON-POSITIVE.')
4653        CALL DPWRST('XXX','BUG ')
4654        WRITE(ICOUT,46)X
4655        CALL DPWRST('XXX','BUG ')
4656        GOTO9999
4657      ELSEIF(GAMMA.LE.0.0)THEN
4658        WRITE(ICOUT,15)
4659   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GAMPDF IS ',
4660     1         'NON-POSITIVE.')
4661        CALL DPWRST('XXX','BUG ')
4662        WRITE(ICOUT,46)GAMMA
4663        CALL DPWRST('XXX','BUG ')
4664        GOTO9999
4665      ENDIF
4666   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
4667C
4668C-----START POINT-----------------------------------------------------
4669C
4670      DX=DBLE(X)
4671      DGAMMA=DBLE(GAMMA)
4672C
4673CCCCC JANUARY 1996.  TRREAT X = 0 AS SPECIAL CASE.
4674      IF(ABS(DX).LE.D1MACH(1))THEN
4675        IF(DGAMMA.EQ.1.0D0)THEN
4676          PDF=1.0
4677          GOTO9999
4678        ELSEIF(DGAMMA.LT.1.0D0)THEN
4679          DX=1.0D-10
4680        ELSE
4681          DX=D1MACH(1)
4682        ENDIF
4683      ENDIF
4684C
4685C     COMPUTE THE GAMMA FUNCTION USING THE ALGORITHM IN THE
4686C     NBS APPLIED MATHEMATICS SERIES REFERENCE.
4687C
4688      DTERM1=(DGAMMA-1.0D0)*DLOG(DX)
4689      DTERM2=-DX
4690      DTERM3=DLOG(1.0D0)
4691      DTERM4=DLNGAM(DGAMMA)
4692      DTERM5=DTERM1+DTERM2-DTERM3-DTERM4
4693      IF(DTERM5.LT.-80.D0)THEN
4694        PDF=0.0
4695      ELSEIF(DTERM5.GT.65.D0)THEN
4696        WRITE(ICOUT,105)
4697        CALL DPWRST('XXX','BUG ')
4698        WRITE(ICOUT,46)GAMMA
4699        CALL DPWRST('XXX','BUG ')
4700        PDF=EXP(65.0)
4701      ELSE
4702        DPDF=DEXP(DTERM5)
4703        PDF=REAL(DPDF)
4704      ENDIF
4705  105 FORMAT('****** WARNING--OVERFLOW IN GAMPDF ROUTINE.  PDF VALUE ',
4706     1'SET TO EXP(65)')
4707CCCCC   WRITE(ICOUT,25)
4708CCCCC   CALL DPWRST('XXX','BUG ')
4709C
4710CCC25 FORMAT('***** WARNING--UNDERFLOW IN CALCULATION OF GAMMA PDF.',
4711CCCCC1       '  PDF SET TO ZERO. *****')
4712C
4713 9999 CONTINUE
4714      RETURN
4715      END
4716      SUBROUTINE GAMPPF(P,GAMMA,PPF)
4717C
4718C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
4719C              FUNCTION VALUE FOR THE GAMMA DISTRIBUTION
4720C              WITH SINGLE PRECISION
4721C              TAIL LENGTH PARAMETER = GAMMA.
4722C              THE GAMMA DISTRIBUTION USED
4723C              HEREIN HAS MEAN = GAMMA
4724C              AND STANDARD DEVIATION = SQRT(GAMMA).
4725C              THIS DISTRIBUTION IS DEFINED FOR ALL POSITIVE X,
4726C              AND HAS THE PROBABILITY DENSITY FUNCTION
4727C              F(X) = (1/CONSTANT) * (X**(GAMMA-1)) * EXP(-X)
4728C              WHERE THE CONSTANT = THE GAMMA FUNCTION EVALUATED
4729C              AT THE VALUE GAMMA.
4730C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
4731C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
4732C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
4733C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE
4734C                                (BETWEEN 0.0 (EXCLUSIVELY)
4735C                                AND 1.0 (EXCLUSIVELY))
4736C                                AT WHICH THE PERCENT POINT
4737C                                FUNCTION IS TO BE EVALUATED.
4738C                     --GAMMA  = THE SINGLE PRECISION VALUE OF THE
4739C                                TAIL LENGTH PARAMETER.
4740C                                GAMMA SHOULD BE POSITIVE.
4741C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT
4742C                                POINT FUNCTION VALUE.
4743C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION .
4744C             VALUE PPF FOR THE GAMMA DISTRIBUTION
4745C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
4746C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
4747C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
4748C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
4749C                   AND 1.0 (EXCLUSIVELY).
4750C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
4751C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG.
4752C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
4753C     LANGUAGE--ANSI FORTRAN (1977)
4754C     ACCURACY--(ON THE UNIVAC 1108, EXEC 8 SYSTEM AT NBS)
4755C               COMPARED TO THE KNOWN GAMMA = 1 (EXPONENTIAL)
4756C               RESULTS, AGREEMENT WAS HAD OUT TO 6 SIGNIFICANT
4757C               DIGITS FOR ALL TESTED P IN THE RANGE P = .001 TO
4758C               P = .999.  FOR P = .95 AND SMALLER, THE AGREEMENT
4759C               WAS EVEN BETTER--7 SIGNIFICANT DIGITS.
4760C               (NOTE THAT THE TABULATED VALUES GIVEN IN THE WILK,
4761C               GNANADESIKAN, AND HUYETT REFERENCE BELOW, PAGE 20,
4762C               ARE IN ERROR FOR AT LEAST THE GAMMA = 1 CASE--
4763C               THE WORST DETECTED ERROR WAS AGREEMENT TO ONLY 3
4764C               SIGNIFICANT DIGITS (IN THEIR 8 SIGNIFICANT DIGIT TABLE)
4765C               FOR P = .999.)
4766C     REFERENCES--WILK, GNANADESIKAN, AND HUYETT, 'PROBABILITY
4767C                 PLOTS FOR THE GAMMA DISTRIBUTION',
4768C                 TECHNOMETRICS, 1962, PAGES 1-15,
4769C                 ESPECIALLY PAGES 3-5.
4770C               --NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY APPLIED MATHEMATICS
4771C                 SERIES 55, 1964, PAGE 257, FORMULA 6.1.41.
4772C               --JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
4773C                 DISTRIBUTIONS--1, 1970, PAGES 166-206.
4774C               --HASTINGS AND PEACOCK, STATISTICAL
4775C                 DISTRIBUTIONS--A HANDBOOK FOR
4776C                 STUDENTS AND PRACTITIONERS, 1975,
4777C                 PAGES 68-73.
4778C     WRITTEN BY--JAMES J. FILLIBEN
4779C                 STATISTICAL ENGINEERING DIVISION
4780C                 INFORMATION TECHNOLOGY LABORATORY
4781C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
4782C                 GAITHERSBURG, MD 20899-8980
4783C                 PHONE--301-921-3651
4784C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
4785C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
4786C     LANGUAGE--ANSI FORTRAN (1966)
4787C     VERSION NUMBER--82/7
4788C     ORIGINAL VERSION--NOVEMBER  1974.
4789C     UPDATED         --SEPTEMBER 1975.
4790C     UPDATED         --NOVEMBER  1975.
4791C     UPDATED         --DECEMBER  1981.
4792C     UPDATED         --MAY       1982.
4793C     UPDATED         --JUNE      1987.
4794C
4795C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
4796C
4797C---------------------------------------------------------------------
4798C
4799      DOUBLE PRECISION DP,DGAMMA
4800CCCCC DOUBLE PRECISION Z,Z2,Z3,Z4,Z5,DEN,A,B,C,D,G
4801      DOUBLE PRECISION Z,Z2,DEN,A,B,C,D
4802      DOUBLE PRECISION XMIN0,XMIN,AI,XMAX,DX,PCALC,XMID
4803      DOUBLE PRECISION XLOWER,XUPPER,XDEL
4804      DOUBLE PRECISION SUM,TERM,CUT1,CUT2,AJ,CUTOFF,T
4805      DOUBLE PRECISION DLG,DLT,DLX,DLPCAL
4806      DOUBLE PRECISION DLP,DLGAMM,DLXMI0
4807      DOUBLE PRECISION Z2INV
4808      DOUBLE PRECISION DEXP,DLOG
4809C
4810      DIMENSION D(10)
4811C
4812C-----COMMON----------------------------------------------------------
4813C
4814      INCLUDE 'DPCOP2.INC'
4815C
4816C-----DATA STATEMENTS-------------------------------------------------
4817C
4818      DATA C/ .918938533204672741D0/
4819      DATA D(1),D(2),D(3),D(4),D(5)
4820     1                 /+.833333333333333333D-1,-.277777777777777778D-2,
4821     1+.793650793650793651D-3,-.595238095238095238D-3,+.8417508417508417
4822     151D-3/
4823      DATA D(6),D(7),D(8),D(9),D(10)
4824     1     /-.191752691752691753D-2,+.641025641025641025D-2,-.2955065359
4825     147712418D-1,+.179644372368830573D0,-.139243221690590111D1/
4826C
4827C-----START POINT-----------------------------------------------------
4828C
4829      XMID=0.0
4830      XLOWER=0.0
4831      XUPPER=0.0
4832C
4833C     CHECK THE INPUT ARGUMENTS FOR ERRORS
4834C
4835      PPF=0.0
4836      IF(P.LE.0.0.OR.P.GE.1.0)THEN
4837        WRITE(ICOUT,1)
4838    1   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GAMPPF IS OUTSIDE ',
4839     1         'THE ALLOWABLE (0,1) INTERVAL')
4840        CALL DPWRST('XXX','BUG ')
4841        WRITE(ICOUT,46)P
4842        CALL DPWRST('XXX','BUG ')
4843        GOTO9000
4844      ELSEIF(GAMMA.LE.0.0)THEN
4845        WRITE(ICOUT,15)
4846   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GAMMPPF IS ',
4847     1         'NON-POSITIVE')
4848        CALL DPWRST('XXX','BUG ')
4849        WRITE(ICOUT,46)GAMMA
4850        CALL DPWRST('XXX','BUG ')
4851        GOTO9000
4852      ENDIF
4853   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
4854C
4855      DP=P
4856      DGAMMA=GAMMA
4857      MAXIT=10000
4858C
4859C     COMPUTE THE GAMMA FUNCTION USING THE ALGORITHM IN THE
4860C     NBS APPLIED MATHEMATICS SERIES REFERENCE.
4861C     THIS GAMMA FUNCTION NEED BE CALCULATED ONLY ONCE.
4862C     IT IS USED IN THE CALCULATION OF THE CDF BASED ON
4863C     THE TENTATIVE VALUE OF THE PPF IN THE ITERATION.
4864C
4865      Z=DGAMMA
4866      DEN=1.0D0
4867  150 IF(Z.GE.10.0D0)GOTO160
4868      DEN=DEN*Z
4869      Z=Z+1.0D0
4870      GOTO150
4871  160 Z2=Z*Z
4872CCCCC Z3=Z*Z2
4873CCCCC Z4=Z2*Z2
4874CCCCC Z5=Z2*Z3
4875      A=(Z-0.5D0)*DLOG(Z)-Z+C
4876CCCCC B=D(1)/Z+D(2)/Z3+D(3)/Z5+D(4)/(Z2*Z5)+D(5)/(Z4*Z5)+
4877CCCCC1D(6)/(Z*Z5*Z5)+D(7)/(Z3*Z5*Z5)+D(8)/(Z5*Z5*Z5)+D(9)/(Z2*Z5*Z5*Z5)
4878      Z2INV=1.0D0/Z2
4879      B=D(9)
4880      B=Z2INV*B+D(8)
4881      B=Z2INV*B+D(7)
4882      B=Z2INV*B+D(6)
4883      B=Z2INV*B+D(5)
4884      B=Z2INV*B+D(4)
4885      B=Z2INV*B+D(3)
4886      B=Z2INV*B+D(2)
4887      B=Z2INV*B+D(1)
4888      B=(1.0D0/Z)*B
4889CCCCC G=DEXP(A+B)/DEN
4890      DLG=(A+B)-DLOG(DEN)
4891CCCCC WRITE(ICOUT,277)Z,B,DEN,DLG
4892CC277 FORMAT('Z,B,DEN,DLG = ',4E15.7)
4893CCCCC CALL DPWRST('XXX','BUG ')
4894C
4895C     DETERMINE LOWER AND UPPER LIMITS ON THE DESIRED 100P
4896C     PERCENT POINT.
4897C
4898      ILOOP=1
4899CCCCC WRITE(ICOUT,377)DP,DGAMMA
4900CC377 FORMAT('DP,DGAMMA = ',2D15.7)
4901CCCCC CALL DPWRST('XXX','BUG ')
4902CCCCC XMIN0=(DP*DGAMMA*G)**(1.0D0/DGAMMA)
4903      DLP=DLOG(DP)
4904      DLGAMM=DLOG(DGAMMA)
4905      DLXMI0=(1.0D0/DGAMMA)*(DLP+DLGAMM+DLG)
4906      XMIN0=DEXP(DLXMI0)
4907CCCCC WRITE(ICOUT,378)XMIN0
4908CC378 FORMAT('XMIN0 = ',E15.7)
4909CCCCC CALL DPWRST('XXX','BUG ')
4910      XMIN=XMIN0
4911      ICOUNT=1
4912  350 AI=ICOUNT
4913      XMAX=AI*XMIN0
4914      DX=XMAX
4915      GOTO1000
4916  360 IF(PCALC.GE.DP)GOTO370
4917      XMIN=XMAX
4918      ICOUNT=ICOUNT+1
4919      IF(ICOUNT.LE.30000)GOTO350
4920  370 XMID=(XMIN+XMAX)/2.0D0
4921C
4922C     NOW ITERATE BY BISECTION UNTIL THE DESIRED ACCURACY IS ACHIEVED.
4923C
4924      ILOOP=2
4925      XLOWER=XMIN
4926      XUPPER=XMAX
4927      ICOUNT=0
4928  550 DX=XMID
4929      GOTO1000
4930  560 IF(PCALC.EQ.DP)GOTO570
4931      IF(PCALC.GT.DP)GOTO580
4932      XLOWER=XMID
4933      XMID=(XMID+XUPPER)/2.0D0
4934      GOTO590
4935  580 XUPPER=XMID
4936      XMID=(XMID+XLOWER)/2.0D0
4937  590 XDEL=XMID-XLOWER
4938      IF(XDEL.LT.0.0D0)XDEL=-XDEL
4939      ICOUNT=ICOUNT+1
4940      IF(XDEL.LT.0.0000000001D0.OR.ICOUNT.GT.100)GOTO570
4941      GOTO550
4942  570 PPF=XMID
4943      GOTO9000
4944C
4945C********************************************************************
4946C     THIS SECTION BELOW IS LOGICALLY SEPARATE FROM THE ABOVE.
4947C     THIS SECTION COMPUTES A CDF VALUE FOR ANY GIVEN TENTATIVE
4948C     PERCENT POINT X VALUE AS DEFINED IN EITHER OF THE 2
4949C     ITERATION LOOPS IN THE ABOVE CODE.
4950C
4951C     COMPUTE T-SUB-Q AS DEFINED ON PAGE 4 OF THE WILK, GNANADESIKAN,
4952C     AND HUYETT REFERENCE
4953C
4954 1000 SUM=1.0D0/DGAMMA
4955      TERM=1.0D0/DGAMMA
4956      CUT1=DX-DGAMMA
4957      CUT2=DX*10000000000.0D0
4958      DO700J=1,MAXIT
4959      AJ=J
4960      TERM=DX*TERM/(DGAMMA+AJ)
4961      SUM=SUM+TERM
4962      CUTOFF=CUT1+(CUT2*TERM/SUM)
4963      IF(AJ.GT.CUTOFF)GOTO750
4964  700 CONTINUE
4965      WRITE(ICOUT,705)MAXIT
4966      CALL DPWRST('XXX','BUG ')
4967      WRITE(ICOUT,706)P
4968      CALL DPWRST('XXX','BUG ')
4969      WRITE(ICOUT,707)GAMMA
4970      CALL DPWRST('XXX','BUG ')
4971      WRITE(ICOUT,708)
4972      CALL DPWRST('XXX','BUG ')
4973      PPF=0.0
4974      GOTO9000
4975C
4976  750 T=SUM
4977CCCCC WRITE(ICOUT,777)T,DX
4978CC777 FORMAT('T,DX = ',2E15.7)
4979CCCCC CALL DPWRST('XXX','BUG ')
4980      DLT=DLOG(T)
4981      DLX=DLOG(DX)
4982CCCCC WRITE(ICOUT,778)DX,DGAMMA,T,DLT,G,DLG
4983CC778 FORMAT('DX,DGAMMA,T,DLT,G,DLG = ',6D15.7)
4984CCCCC CALL DPWRST('XXX','BUG ')
4985CCCCC PCALC=(DX**DGAMMA)*(DEXP(-DX))*T/G
4986      DLPCAL=DGAMMA*DLX-DX+DLT-DLG
4987      PCALC=DEXP(DLPCAL)
4988      IF(ILOOP.EQ.1)GOTO360
4989      GOTO560
4990C
4991  705 FORMAT('*****ERROR IN INTERNAL OPERATIONS IN THE GAMPPF ',
4992     1'SUBROUTINE--THE NUMBER OF ITERATIONS EXCEEDS ',I7)
4993  706 FORMAT(33H     THE INPUT VALUE OF P     IS ,E15.8)
4994  707 FORMAT(33H     THE INPUT VALUE OF GAMMA IS ,E15.8)
4995  708 FORMAT(48H     THE OUTPUT VALUE OF PPF HAS BEEN SET TO 0.0)
4996C
4997 9000 CONTINUE
4998      RETURN
4999      END
5000      SUBROUTINE GAMRAN(N,GAMMA,ISEED,X)
5001C
5002C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
5003C              FROM THE GAMMA DISTRIBUTION
5004C              WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
5005C              THE PROTOTYPE GAMMA DISTRIBUTION USED
5006C              HEREIN HAS MEAN = GAMMA
5007C              AND STANDARD DEVIATION = SQRT(GAMMA).
5008C              THIS DISTRIBUTION IS DEFINED FOR ALL POSITIVE X,
5009C              AND HAS THE PROBABILITY DENSITY FUNCTION
5010C              F(X) = (1/CONSTANT) * (X**(GAMMA-1)) * EXP(-X)
5011C              WHERE THE CONSTANT = THE GAMMA FUNCTION EVALUATED
5012C              AT THE VALUE GAMMA.
5013C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
5014C                                OF RANDOM NUMBERS TO BE
5015C                                GENERATED.
5016C                     --GAMMA  = THE SINGLE PRECISION VALUE OF THE
5017C                                TAIL LENGTH PARAMETER.
5018C                                GAMMA SHOULD BE POSITIVE.
5019C                                GAMMA SHOULD BE LARGER
5020C                                THAN 1/3 (ALGORITHMIC RESTRICTION).
5021C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
5022C                                (OF DIMENSION AT LEAST N)
5023C                                INTO WHICH THE GENERATED
5024C                                RANDOM SAMPLE WILL BE PLACED.
5025C     OUTPUT--A RANDOM SAMPLE OF SIZE N
5026C             FROM THE GAMMA DISTRIBUTION
5027C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
5028C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
5029C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
5030C                   OF N FOR THIS SUBROUTINE.
5031C                 --GAMMA SHOULD BE POSITIVE.
5032C                 --GAMMA SHOULD BE LARGER
5033C                   THAN 1/3 (ALGORITHMIC RESTRICTION).
5034C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, NORRAN.
5035C     FORTRAN LIBRARY SUBROUTINES NEEDED--SQRT, EXP.
5036C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
5037C     LANGUAGE--ANSI FORTRAN (1977)
5038C     REFERENCES--GREENWOOD, 'A FAST GENERATOR FOR
5039C                 GAMMA-DISTRIBUTED RANDOM VARIABLES',
5040C                 COMPSTAT 1974, PROCEEDINGS IN
5041C                 COMPUTATIONAL STATISTICS, VIENNA,
5042C                 SEPTEMBER, 1974, PAGES 19-27.
5043C               --TOCHER, THE ART OF SIMULATION,
5044C                 1963, PAGES 24-27.
5045C               --HAMMERSLEY AND HANDSCOMB, MONTE CARLO METHODS,
5046C                 1964, PAGES 36-37.
5047C               --WILK, GNANADESIKAN, AND HUYETT, 'PROBABILITY
5048C                 PLOTS FOR THE GAMMA DISTRIBUTION',
5049C                 TECHNOMETRICS, 1962, PAGES 1-15.
5050C               --JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
5051C                 DISTRIBUTIONS--1, 1970, PAGES 166-206.
5052C               --HASTINGS AND PEACOCK, STATISTICAL
5053C                 DISTRIBUTIONS--A HANDBOOK FOR
5054C                 STUDENTS AND PRACTITIONERS, 1975,
5055C                 PAGES 68-73.
5056C               --NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY APPLIED MATHEMATICS
5057C                 SERIES 55, 1964, PAGE 952.
5058C     WRITTEN BY--JAMES J. FILLIBEN
5059C                 STATISTICAL ENGINEERING DIVISION
5060C                 INFORMATION TECHNOLOGY LABORATORY
5061C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
5062C                 GAITHERSBURG, MD 20899-8980
5063C                 PHONE--301-921-3651
5064C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
5065C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
5066C     LANGUAGE--ANSI FORTRAN (1966)
5067C     VERSION NUMBER--82/7
5068C     ORIGINAL VERSION--NOVEMBER  1975.
5069C     UPDATED         --FEBRUARY  1976.
5070C     UPDATED         --JUNE      1978.
5071C     UPDATED         --DECEMBER  1981.
5072C     UPDATED         --MARCH     1982.
5073C     UPDATED         --MAY       1982.
5074C     UPDATED         --MAY       2003. REPLACE WITH CALL TO
5075C                                       AHRENS-DIETER CODE
5076C     UPDATED  VERSION--JANUARY   2005. BUG IF ROUTINE CALLED MORE
5077C                                       THAN ONCE, RESET AA AND AAA
5078C                                       AND STORE IN COMMON
5079C
5080C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
5081C
5082C---------------------------------------------------------------------
5083C
5084      DIMENSION X(*)
5085C
5086CCCCC DIMENSION XN(2)
5087CCCCC DIMENSION U(2)
5088C
5089      COMMON/SGAMM/AA,AAA
5090C
5091C-----COMMON----------------------------------------------------------
5092C
5093      INCLUDE 'DPCOP2.INC'
5094C
5095C-----DATA STATEMENTS-------------------------------------------------
5096C
5097CCCCC DATA ATHIRD/0.3333333/
5098CCCCC DATA SQRT3 /1.73205081/
5099C
5100C-----START POINT-----------------------------------------------------
5101C
5102C     CHECK THE INPUT ARGUMENTS FOR ERRORS
5103C
5104      IF(N.LT.1)THEN
5105        WRITE(ICOUT, 5)
5106    5   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GAMRAN IS ',
5107     1         'NON-POSITIVE *****')
5108        CALL DPWRST('XXX','BUG ')
5109        WRITE(ICOUT,47)N
5110   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
5111        CALL DPWRST('XXX','BUG ')
5112        GOTO9000
5113      ELSEIF(GAMMA.LE.0.0)THEN
5114        WRITE(ICOUT,15)
5115   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GAMRAN IS ',
5116     1         'NON-POSITIVE')
5117        CALL DPWRST('XXX','BUG ')
5118        WRITE(ICOUT,46)GAMMA
5119   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
5120        CALL DPWRST('XXX','BUG ')
5121        GOTO9000
5122CCCCC ELSEIF(GAMMA.LE.0.33333333)THEN
5123CCCCC   WRITE(ICOUT,16)
5124CCC16   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GAMRAN ',
5125CCCCC1         'IS SMALLER THAN OR EQUAL TO 0.3333333')
5126CCCCC   CALL DPWRST('XXX','BUG ')
5127CCCCC   WRITE(ICOUT,17)
5128CCC17   FORMAT('      (ALGORITHMIC RESTIRCTION)')
5129CCCCC   CALL DPWRST('XXX','BUG ')
5130CCCCC   WRITE(ICOUT,46)GAMMA
5131CCCCC   CALL DPWRST('XXX','BUG ')
5132CCCCC   GOTO9000
5133      ENDIF
5134C
5135C     GENERATE N GAMMA DISTRIBUTION RANDOM NUMBERS
5136C     USING GREENWOOD'S REJECTION ALGORITHM--
5137C     1) GENERATE A NORMAL RANDOM NUMBER;
5138C     2) TRANSFORM THE NORMAL VARIATE TO AN APPROXIMATE
5139C        GAMMA VARIATE USING THE WILSON-HILFERTY
5140C        APPROXIMATION (SEE THE JOHNSON AND KOTZ
5141C        REFERENCE, PAGE 176);
5142C     3) FORM THE REJECTION FUNCTION VALUE, BASED
5143C        ON THE PROBABILITY DENSITY FUNCTION VALUE
5144C        OF THE ACTUAL DISTRIBUTION OF THE PSEUDO-GAMMA
5145C        VARIATE, AND THE PROBABILITY DENSITY FUNCTION VALUE
5146C        OF A TRUE GAMMA VARIATE.
5147C     4) GENERATE A UNIFORM RANDOM NUMBER;
5148C     5) IF THE UNIFORM RANDOM NUMBER IS LESS THAN
5149C        THE REJECTION FUNCTION VALUE, THEN ACCEPT
5150C        THE PSEUDO-RANDOM NUMBER AS A GAMMA VARIATE;
5151C        IF THE UNIFORM RANDOM NUMBER IS LARGER THAN
5152C        THE REJECTION FUNCTION VALUE, THEN REJECT
5153C        THE PSEUDO-RANDOM NUMBER AS A GAMMA VARIATE.
5154C
5155C  MAY 2003: THIS ALGORITHM DOESN'T WORK FOR GAMMA < 1/3.
5156C            REPLACE WITH THE POPULAR AHRENS-DIETER CODE FOR
5157C            GAMMA RANDOM NUMBERS.
5158C
5159CCCCC A1=1.0/(9.0*GAMMA)
5160CCCCC B1=SQRT(A1)
5161CCCCC XN0=-SQRT3+B1
5162CCCCC XG0=GAMMA*(1.0-A1+B1*XN0)**3
5163CCCCC DO100I=1,N
5164CC150 CALL NORRAN(1,ISEED,XN)
5165CCCCC XG=GAMMA*(1.0-A1+B1*XN(1))**3
5166CCCCC IF(XG.LT.0.0)GOTO150
5167CCCCC TERM=(XG/XG0)**(GAMMA-ATHIRD)
5168CCCCC ARG=0.5*XN(1)*XN(1)-XG-0.5*XN0*XN0+XG0
5169CCCCC FUNCT=TERM*EXP(ARG)
5170CCCCC CALL UNIRAN(1,ISEED,U)
5171CCCCC IF(U(1).LE.FUNCT)GOTO170
5172CCCCC GOTO150
5173CC170 X(I)=XG
5174CC100 CONTINUE
5175C
5176      DO100I=1,N
5177        ATEMP=SGAMMA(ISEED,GAMMA)
5178        X(I)=ATEMP
5179  100 CONTINUE
5180C
5181 9000 CONTINUE
5182      RETURN
5183      END
5184      SUBROUTINE GATHER(N,A,B,IINDEX,MAXOBV,ISUBRO,IBUGA3,IERROR)
5185C
5186C     PURPOSE--THIS SUBROUTINE COLLECTS ELEMENTS FROM ARRAY B
5187C              BASED ON THE INDEX ELEMENTS IN ARRAY INDEX AND
5188C              STORES THEM CONTIGUOUSLY IN ARRAY A.
5189C     INPUT  ARGUMENTS--IINDEX = THE INTEGER VECTOR THAT SPECIFIES
5190C                                THE ELEMENTS OF B THAT WILL BE
5191C                                EXTRACTED.
5192C                       B      = A SINGLE PRECISION VECTOR FROM WHIC
5193C                                DATA VALUES WILL BE EXTRACTED.
5194C                     --N      = THE INTEGER NUMBER OF OBSERVATIONS
5195C                                TO BE EXTRACTED.
5196C     OUTPUT ARGUMENTS--A      = THE OUTPUT ARRAY THAT WILL CONTAIN
5197C                                N ELEMENTS.
5198C     OUTPUT--THE COMPUTED SINGLE PRECISION ARRAY A.
5199C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
5200C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
5201C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
5202C     LANGUAGE--ANSI FORTRAN (1977)
5203C     WRITTEN BY--ALAN HECKERT
5204C                 STATISTICAL ENGINEERING DIVISION
5205C                 INFORMATION TECHNOLOGY LABORATORY
5206C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
5207C                 GAITHERSBURG, MD 20899-8980
5208C                 PHONE--301-975-2899
5209C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
5210C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
5211C     LANGUAGE--ANSI FORTRAN (1977)
5212C     VERSION NUMBER--2008.11
5213C     ORIGINAL VERSION--NOVEMBER  2008.
5214C
5215C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
5216C
5217C
5218      INTEGER N
5219      INTEGER IINDEX(*)
5220      REAL A(*)
5221      REAL B(*)
5222C
5223      CHARACTER*4 ISUBRO
5224      CHARACTER*4 IBUGA3
5225      CHARACTER*4 IERROR
5226C
5227      INCLUDE 'DPCOP2.INC'
5228C
5229C-----START POINT-----------------------------------------------------
5230C
5231      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'THER')THEN
5232        WRITE(ICOUT,999)
5233  999   FORMAT(1X)
5234        CALL DPWRST('XXX','BUG ')
5235        WRITE(ICOUT,51)
5236   51   FORMAT('***** AT THE BEGINNING OF GATHER--')
5237        CALL DPWRST('XXX','BUG ')
5238        WRITE(ICOUT,52)IBUGA3,ISUBRO,N
5239   52   FORMAT('IBUGA3,ISUBRO,N = ',A4,2X,A4,2X,I8)
5240        CALL DPWRST('XXX','BUG ')
5241        WRITE(ICOUT,53)N
5242   53   FORMAT('N = ',I8)
5243        CALL DPWRST('XXX','BUG ')
5244        IF(N.GT.0)THEN
5245          DO55I=1,N
5246            WRITE(ICOUT,56)I,IINDEX(I),B(I)
5247   56       FORMAT('I,IINDX(I),B(I) = ',I8,2X,I8,G15.7)
5248            CALL DPWRST('XXX','BUG ')
5249   55     CONTINUE
5250        ENDIF
5251      ENDIF
5252C
5253      DO 1010 I = 1,N
5254         ITEMP=IINDEX(I)
5255         IF(ITEMP.GE.1 .AND. ITEMP.LE.MAXOBV)THEN
5256           A(I) = B(ITEMP)
5257         ELSE
5258           WRITE(ICOUT,1011)
5259 1011      FORMAT('***** ERROR IN GATHER OPERATION--')
5260           CALL DPWRST('XXX','BUG ')
5261           WRITE(ICOUT,1013)I
5262 1013      FORMAT('      FOR ROW ',I8,' THE INDEX VALUE IS OUTSIDE THE')
5263           CALL DPWRST('XXX','BUG ')
5264           WRITE(ICOUT,1015)MAXOBV
5265 1015      FORMAT('      THE INTERVAL (1,',I10,').')
5266           CALL DPWRST('XXX','BUG ')
5267           IERROR='YES'
5268           GOTO9000
5269         ENDIF
5270 1010 CONTINUE
5271C
5272 9000 CONTINUE
5273C
5274      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'THER')THEN
5275        WRITE(ICOUT,9051)
5276 9051   FORMAT('***** AT THE BEGINNING OF GATHER--')
5277        CALL DPWRST('XXX','BUG ')
5278        WRITE(ICOUT,9053)N
5279 9053   FORMAT('N = ',I8)
5280        CALL DPWRST('XXX','BUG ')
5281        IF(N.GT.0)THEN
5282          DO9055I=1,N
5283            WRITE(ICOUT,9056)I,A(I)
5284 9056       FORMAT('I,A(I) = ',I8,2X,G15.7)
5285            CALL DPWRST('XXX','BUG ')
5286 9055     CONTINUE
5287        ENDIF
5288      ENDIF
5289C
5290      RETURN
5291      END
5292      SUBROUTINE GC1FUN (NPAR, XPAR, FVEC, IFLAG, ZDATA, M)
5293C
5294C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
5295C              GAMMA MAXIMUM LIKELIHOOD EQUATIONS FOR THE CENSORING
5296C              CASE (FROM PP. 217-218 OF BURY).
5297C
5298C      R*XBAR/SHAT - R*GHAT + SUM[i=1 to M]
5299C        [Z(j)**GHAT*EXP(Z(j)/(GAMMA(GHAT) - G(Z(j),GHAT))] = 0
5300C
5301C      R*LOG(GEOMEAN/SHAT)  - N*DIGAMMA(GHAT) + SUM[i=1 to M]
5302C        [(GAMMA(GHAT)*DIGAMMA(GHAT) J(Z(j),GHAT))/
5303C        (GAMMA(GHAT) - G(Z(j),GHAT))] = 0
5304C
5305C      WHERE
5306C
5307C
5308C         XBAR = MEAN OF FAILURE DATA
5309C         GEOMEAN  = GEOMETRIC MEAN OF FAILURE DATA
5310C         R        = NUMBER OF FAILURES
5311C         M        = NUMBER OF CENSORING TIMES
5312C         SHAT     = FVEC(1) = CURRENT ESTIMATE OF SCALE PARAMETER
5313C         GHAT     = FVEC(2) = CURRENT ESTIMATE OF SHAPE PARAMETER
5314C         Z(j)     = jth CENSORING TIME
5315C         GAMMA    = GAMMA FUNCTION
5316C         DIGAMMA  = DIGAMMA FUNCTION
5317C         G(x,a)   = INCOMPLETE GAMMA FUNCTION
5318C         J(X,a)   = INTEGRAL[0 to x][t**(A-1)*LOG(t)*EXP(-t)]dt
5319C
5320C
5321C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
5322C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
5323C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
5324C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
5325C     EXAMPLE--GAMMA MAXIMUM LIKELIHOOD Y X
5326C     REFERENCE--KARL BURY, (1999). "STATISTICAL DISTRIBUTIONS IN
5327C                ENGINEERING", CAMBRIDGE UNIVERSITY PRESS,
5328C                PP. 217-218.
5329C     WRITTEN BY--JAMES J. FILLIBEN
5330C                 STATISTICAL ENGINEERING DIVISION
5331C                 CENTER FOR APPLIED MATHEMATICS
5332C                 NATIONAL BUREAU OF STANDARDS
5333C                 WASHINGTON, D. C. 20234
5334C                 PHONE--301-975-2855
5335C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
5336C           OF THE NATIONAL BUREAU OF STANDARDS.
5337C     LANGUAGE--ANSI FORTRAN (1977)
5338C     VERSION NUMBER--2004/11
5339C     ORIGINAL VERSION--NOVEMBER  2004.
5340C
5341C---------------------------------------------------------------------
5342C
5343      INTEGER M
5344      DOUBLE PRECISION XPAR(*)
5345      DOUBLE PRECISION FVEC(*)
5346      REAL ZDATA(*)
5347C
5348      DOUBLE PRECISION DN
5349      DOUBLE PRECISION DR
5350      DOUBLE PRECISION DX
5351      DOUBLE PRECISION GHAT
5352      DOUBLE PRECISION SHAT
5353      DOUBLE PRECISION DGI
5354      DOUBLE PRECISION DP
5355      DOUBLE PRECISION DSUM1
5356      DOUBLE PRECISION DSUM2
5357      DOUBLE PRECISION DTERM1
5358      DOUBLE PRECISION DTERM2
5359      DOUBLE PRECISION DTERM3
5360      DOUBLE PRECISION DTERM4
5361      DOUBLE PRECISION DTERM5
5362      DOUBLE PRECISION DTERM6
5363C
5364      INTEGER LIMIT
5365      INTEGER LENW
5366      PARAMETER(LIMIT=200)
5367      PARAMETER(LENW=4*LIMIT)
5368      INTEGER NEVAL
5369      INTEGER IER
5370      INTEGER LAST
5371      INTEGER IWORK(LIMIT)
5372      DOUBLE PRECISION EPSABS
5373      DOUBLE PRECISION EPSREL
5374      DOUBLE PRECISION DLOW
5375      DOUBLE PRECISION ABSERR
5376      DOUBLE PRECISION WORK(LENW)
5377C
5378      DOUBLE PRECISION XBAR
5379      DOUBLE PRECISION GEOMEA
5380      INTEGER N
5381      INTEGER R
5382      COMMON/GC1COM/XBAR,GEOMEA,N,R
5383C
5384      DOUBLE PRECISION DA
5385      COMMON/J1COM/DA
5386C
5387      DOUBLE PRECISION DGAMMA
5388      DOUBLE PRECISION DGAMI
5389      DOUBLE PRECISION DPSI
5390      DOUBLE PRECISION J1FUN
5391      EXTERNAL DGAMMA
5392      EXTERNAL DGAMI
5393      EXTERNAL DPSI
5394      EXTERNAL J1FUN
5395C
5396C-----COMMON----------------------------------------------------------
5397C
5398      INCLUDE 'DPCOP2.INC'
5399C
5400C-----START POINT-----------------------------------------------------
5401C
5402      NPAR=2
5403      IFLAG=0
5404C
5405      DN=DBLE(N)
5406      DR=DBLE(R)
5407      GHAT=XPAR(1)
5408      SHAT=XPAR(2)
5409      DG=DGAMMA(GHAT)
5410      DP=DPSI(GHAT)
5411      DA=GHAT
5412C
5413      DTERM1=DR*XBAR/SHAT - DR*GHAT
5414      DTERM2=DR*DLOG(GEOMEA/SHAT) - DN*DP
5415      DSUM1=0.0D0
5416      DSUM2=0.0D0
5417C
5418      EPSABS=1.0D-7
5419      EPSREL=1.0D-7
5420      IER=0
5421      IKEY=3
5422      DLOW=0.0D0
5423C
5424      IF(M.GT.0)THEN
5425        DO100I=1,M
5426          DX=DBLE(ZDATA(I))/SHAT
5427          DGI=DGAMI(GHAT,DX)
5428          DTERM3=DX**GHAT*DEXP(-DX)
5429          DTERM6=0.0D0
5430          CALL DQAG(J1FUN,DLOW,DX,EPSABS,EPSREL,IKEY,DTERM6,
5431     1              ABSERR,NEVAL,
5432     1              IER,LIMIT,LENW,LAST,IWORK,WORK)
5433          DTERM4=DG*DP - DTERM6
5434          DTERM5=DG - DGI
5435          DSUM1=DSUM1 + DTERM3/DTERM5
5436          DSUM2=DSUM2 + DTERM4/DTERM5
5437  100   CONTINUE
5438      ENDIF
5439C
5440      FVEC(1) = DTERM1 + DSUM1
5441      FVEC(2) = DTERM2 + DSUM2
5442C
5443      RETURN
5444      END
5445      subroutine gci1(ngrp, ni, xi, obsi, conf, nrun, mean,
5446     1                llmt, ulmt,segci,
5447     1                esi, thold, emu,
5448     1                ierror)
5449c
5450c     Note: This routine performs a consensus means analysis
5451c           based on generalized confidence interval approach.
5452c           This is documented in:
5453c
5454c           Hari K. Iyer, C. M. Wang, and Thomas Matthew,
5455c           "Models and Confidence Intervals for True Values
5456c           in Interlaboratory Trials", Journal of the
5457c           American Statistical Association, Volume 99,
5458c           No. 468, pp. 1060-1071.
5459c
5460c           Modified for Dataplot 3/2006.
5461c
5462c           1) I/O modified to use DPWRST
5463c           2) Compute standard deviation of EMU as estimate of
5464c              standard error
5465c           3) Pass THOLD, EMU, ESI as arguments
5466c
5467      implicit none
5468c
5469c  parameters:
5470c
5471c    input:
5472c     ngrp - number of groups (labs)
5473c     ni   - vector of size ngrp containing the sample size of each lab
5474c     xi   - vector of size ngrp containing the mean of each lab
5475c     obsi - vector of size ngrp containing the variance of each lab
5476c     conf - nominal confidence coefficient, e.g., 0.95
5477c     nrun - number of Monte Carlo samples to be used, e.g., 10000
5478c
5479c    output:
5480c     mean - mean of the simulated distribution of the GPQ
5481c     llmt - lower confidence limit
5482c     ulmt - upper confidence limit
5483c
5484      integer ngrp, nrun, ni(ngrp)
5485      integer njunk
5486      double precision  obsi(ngrp), xi(ngrp)
5487      double precision conf, mean, llmt, ulmt
5488c
5489      integer iseed
5490      double precision thold(ngrp)
5491      real    atemp
5492      real    atemp2(1)
5493      double precision esi(ngrp)
5494      double precision xbar, esa, emu(nrun), sesi, zval
5495      double precision lbd, ubd, errabs, tmp, segci
5496c
5497      double precision zeroin
5498c
5499      integer kk
5500      double precision aa, ybar, cc, bb(100), yy(100)
5501      common /cmn1/ kk
5502      common /cmn2/ aa, ybar, cc, bb, yy
5503c
5504      integer j, m, ilb, iub
5505c
5506      external ff
5507      double precision  ff
5508c
5509      CHARACTER*4 IWRITE
5510      CHARACTER*4 IBUGA3
5511      CHARACTER*4 IERROR
5512C
5513      INCLUDE 'DPCOP2.INC'
5514C
5515      iseed = 1234579
5516      esa=0.0d0
5517c
5518      ilb = int(real(nrun) * ((1.0d0 - conf)/2.0)) + 1
5519      iub = int(real(nrun) * ((1.0d0 + conf)/2.0))
5520c
5521      kk = ngrp
5522      errabs = 0.001d0
5523c
5524      ybar = 0.0
5525      do 10 m = 1, ngrp
5526         yy(m) = xi(m)
5527         ybar = ybar + xi(m)
5528   10 continue
5529      ybar = ybar/real(ngrp)
5530c
5531c  for each set of observed \bar{x}_i and S_i^2
5532c
5533      mean = 0.0d0
5534c
5535      do 20 j = 1, nrun
5536c
5537c  generate chi-square deviates to calculate
5538c  esi(*) = \hat{\sigma}_i^2 = (n_i - 1)*S_i^2/\chi^2
5539c
5540         njunk=1
5541         do 30 m = 1, ngrp
5542            atemp = real(abs(ni(m)) - 1)
5543            call chsran(njunk, atemp, iseed, atemp2)
5544            thold(m)=atemp2(1)
5545            esi(m) = (abs(ni(m)) - 1) * obsi(m)/thold(m)
5546            bb(m) = esi(m)/abs(ni(m))
5547   30    continue
5548         atemp = real(ngrp - 1)
5549         call chsran(njunk, atemp, iseed, atemp2)
5550         thold(1)=atemp2(1)
5551         cc = thold(1)
5552c
5553c  calculate the max of quadratic form, if it is less than cc
5554c  set esa to zero, else call zeroin (bi-section method) to
5555c  find the solution of esa = \sigma_a^2
5556c
5557         call maxofq
5558c
5559         ubd = 99999.9d0
5560         if (cc .ge. aa) then
5561            esa = 0.0d0
5562         else
5563            if (ff(ubd) .lt. 0.0d0) then
5564               lbd = 0.0d0
5565               ierror='NO'
5566               esa = zeroin(lbd, ubd, ff, errabs,ierror)
5567               if(ierror.eq.'YES')GOTO9000
5568            end if
5569         end if
5570c
5571c  form emu(*) = \hat{\mu}
5572c
5573         call norran(1, iseed, atemp2)
5574         thold(1)=atemp2(1)
5575         zval = thold(1)
5576         xbar = 0.0d0
5577         sesi = 0.0d0
5578         do 40 m = 1, ngrp
5579            tmp = esa + bb(m)
5580            sesi = sesi + 1.0d0/tmp
5581            xbar = xbar + xi(m)/tmp
5582   40    continue
5583         xbar = xbar/sesi
5584         emu(j) = xbar - zval/sqrt(sesi)
5585c
5586         mean = mean + emu(j)
5587c
5588   20 continue
5589c
5590      mean = mean/real(nrun)
5591c
5592c  sort emu(*) to find appropriate percentiles as
5593c  the confidence limits
5594c
5595      call ssort(emu, emu, nrun, 1)
5596      llmt = emu(ilb)
5597      ulmt = emu(iub)
5598      iwrite='OFF'
5599      ibuga3='OFF'
5600      call sddp(emu,nrun,iwrite,segci,ibuga3,ierror)
5601c
5602 9000 continue
5603      return
5604      end
5605      SUBROUTINE GCHAR(CHR,X,Y,SZ,IBUGG3,ISUBRO,IERROR)
5606C
5607C     PURPOSE--XX
5608C
5609C     WRITTEN BY--DAVID W. BEHRINGER NOAA/AOML (MIAMI).
5610C                 AS PART OF NOAA'S CONCX V.3   MARCH 1988.
5611C     ORIGINAL VERSION (IN DATAPLOT)--AUGUST    1988.
5612C
5613C---------------------------------------------------------------------
5614C
5615      CHARACTER CHR(15)*1
5616C
5617      CHARACTER*4 IBUGG3
5618      CHARACTER*4 ISUBRO
5619      CHARACTER*4 IERROR
5620C
5621C-----COMMON----------------------------------------------------------
5622C
5623      INCLUDE 'DPCOP2.INC'
5624C
5625C-----START POINT-----------------------------------------------------
5626C
5627      IF(IBUGG3.EQ.'ON'.OR.ISUBRO.EQ.'CHAR')THEN
5628        WRITE(ICOUT,999)
5629  999   FORMAT(1X)
5630        CALL DPWRST('XXX','BUG ')
5631        WRITE(ICOUT,1011)CHR,X,Y,SZ
5632 1011   FORMAT('FROM GCHAR--CHR,X,Y,SZ = ',4F10.5)
5633        CALL DPWRST('XXX','BUG ')
5634      ENDIF
5635C
5636      IERROR='NO'
5637C
5638      RETURN
5639      END
5640      SUBROUTINE GDER(MEW, THETA, RL, MRL, LM, IDER, RD, PD)
5641C
5642C        ALGORITHM AS 189.4 APPL. STATIST. (1983) VOL.32, NO.2
5643C
5644C        GENERAL DERIVATIVE SUBROUTINE
5645C
5646      DOUBLE PRECISION MEW, THETA, PD(IDER), A, B, C, D
5647      INTEGER RL(MRL,3), LM(3), RD(2,IDER)
5648C
5649      MLM = LM(3)
5650      KK = IDER-1
5651      DO 5 I = 1,IDER
5652        PD(I) = 0.0D0
5653    5 CONTINUE
5654      DO 45 I = 1,MLM
5655        C = DBLE(I-1)
5656        A = C*THETA
5657        DO 40 J = 1,3
5658          IF(I.GT.LM(J)) GOTO 40
5659          GOTO (10,15,20) J
5660   10     D = MEW+A
5661          GOTO 25
5662   15     D = 1.0D0-MEW+A
5663          GOTO 25
5664   20     D = 1.0D0+A
5665   25     B = DBLE(RL(I,J))/D**KK
5666          IF(J.EQ.3) GOTO 35
5667          DO 30 K = 1,IDER
5668            PD(K) = PD(K)+DBLE(RD(J,K))*B
5669            B = B*C
5670   30     CONTINUE
5671          GOTO 40
5672   35     D = -DBLE(RD(1,1))*B*C**KK
5673          PD(IDER) = PD(IDER)+D
5674   40   CONTINUE
5675   45 CONTINUE
5676      RETURN
5677      END
5678      SUBROUTINE GEECDF(X,GAMMA,CDF)
5679C
5680C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
5681C              FUNCTION VALUE FOR THE GEOMETRIC EXTREME EXPONENTIAL
5682C              DISTRIBUTION WITH SINGLE PRECISION
5683C              TAIL LENGTH PARAMETER = GAMMA.
5684C              THE GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION USED
5685C              HEREIN IS DEFINED FOR ALL X >= 0
5686C              AND HAS THE CUMULATIVE DISTRIBUTION FUNCTION
5687C              F(X) = 1 - GAMMA/[EXP(X) + GAMMA - 1]      GAMMA > 0
5688C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
5689C                                WHICH THE CUMULATIVE DISTRIBUTION
5690C                                FUNCTION IS TO BE EVALUATED.
5691C                     --GAMMA  = THE SHAPE PARAMETER
5692C                                GAMMA SHOULD BE POSITIVE.
5693C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
5694C                                DISTRIBUTION FUNCTION VALUE.
5695C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
5696C             FUNCTION VALUE CDF FOR THE GEOMETRIC EXTREME
5697C             EXPONENTIAL DISTRIBUTION
5698C             WITH TAIL LENGTH PARAMETER = GAMMA.
5699C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
5700C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
5701C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
5702C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP, LOG.
5703C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
5704C     LANGUAGE--ANSI FORTRAN (1977)
5705C     REFERENCES--"CAN DATA RECOGNOZE ITS PARENT DISTRIBUTION?",
5706C                 MARSHALL, MEZA, OLKIN, JOURNAL OF COMPUTATIONAL
5707C                 AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
5708C                 PP. 555-580.
5709C     WRITTEN BY--JAMES J. FILLIBEN
5710C                 STATISTICAL ENGINEERING DIVISION
5711C                 INFORMATION TECHNOLOGY LABORATORY
5712C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
5713C                 GAITHERSBURG, MD 20899-8980
5714C                 PHONE--301-975-2855
5715C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
5716C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
5717C     LANGUAGE--ANSI FORTRAN (1966)
5718C     VERSION NUMBER--2001.11
5719C     ORIGINAL VERSION--NOVEMBER  2001.
5720C
5721      DOUBLE PRECISION DX
5722      DOUBLE PRECISION DGAMMA
5723      DOUBLE PRECISION DCDF
5724C
5725C-----COMMON----------------------------------------------------------
5726C
5727      INCLUDE 'DPCOP2.INC'
5728C
5729C-----START POINT-----------------------------------------------------
5730C
5731C     CHECK THE INPUT ARGUMENTS FOR ERRORS
5732C
5733      CDF=0.0
5734      IF(X.LT.0.0)THEN
5735CCCCC   WRITE(ICOUT,5)
5736CCCC5   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEECDF IS NEGATIVE.')
5737CCCCC   CALL DPWRST('XXX','BUG ')
5738CCCCC   WRITE(ICOUT,46)X
5739CCCCC   CALL DPWRST('XXX','BUG ')
5740        GOTO9000
5741      ELSEIF(GAMMA.LE.0.0)THEN
5742        WRITE(ICOUT,15)
5743   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEECDF IS ',
5744     1         'NON-POSITIVE')
5745        CALL DPWRST('XXX','BUG ')
5746        WRITE(ICOUT,46)GAMMA
5747        CALL DPWRST('XXX','BUG ')
5748        GOTO9000
5749      ENDIF
5750   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
5751C
5752      DGAMMA=DBLE(GAMMA)
5753      DX=DBLE(X)
5754      DCDF=1.0D0 - DGAMMA/(EXP(DX) + DGAMMA - 1.0D0)
5755      CDF=REAL(DCDF)
5756C
5757 9000 CONTINUE
5758      RETURN
5759      END
5760      SUBROUTINE GEECHA(X,GAMMA,HAZ)
5761C
5762C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE HAZARD
5763C              FUNCTION VALUE FOR THE GEOMETRIC EXTREME EXPONENTIAL
5764C              DISTRIBUTION WITH SINGLE PRECISION
5765C              TAIL LENGTH PARAMETER = GAMMA.
5766C              THE GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION USED
5767C              HEREIN IS DEFINED FOR ALL X >= 0
5768C              AND HAS THE CUMULATIVE HAZARD FUNCTION
5769C              H(X) = -LOG(1-GEECDF(X)),    GAMMA > 0
5770C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
5771C                                WHICH THE CUMULATIVE HAZARD
5772C                                FUNCTION IS TO BE EVALUATED.
5773C                     --GAMMA  = THE SHAPE PARAMETER
5774C                                GAMMA SHOULD BE POSITIVE.
5775C     OUTPUT ARGUMENTS--HAZ    = THE SINGLE PRECISION CUMULATIVE HAZARD
5776C                                FUNCTION VALUE.
5777C     OUTPUT--THE SINGLE PRECISION CUMULATIVE HAZARD
5778C             FUNCTION VALUE PDF FOR THE GEOMETRIC EXTREME
5779C             EXPONENTIAL DISTRIBUTION
5780C             WITH TAIL LENGTH PARAMETER = GAMMA.
5781C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
5782C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
5783C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
5784C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP, LOG.
5785C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
5786C     LANGUAGE--ANSI FORTRAN (1977)
5787C     REFERENCES--"CAN DATA RECOGNOZE ITS PARENT DISTRIBUTION?",
5788C                 MARSHALL, MEZA, OLKIN, JOURNAL OF COMPUTATIONAL
5789C                 AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
5790C                 PP. 555-580.
5791C     WRITTEN BY--JAMES J. FILLIBEN
5792C                 STATISTICAL ENGINEERING DIVISION
5793C                 INFORMATION TECHNOLOGY LABORATORY
5794C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
5795C                 GAITHERSBURG, MD 20899-8980
5796C                 PHONE--301-975-2855
5797C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
5798C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
5799C     LANGUAGE--ANSI FORTRAN (1966)
5800C     VERSION NUMBER--2001.11
5801C     ORIGINAL VERSION--NOVEMBER  2001.
5802C
5803      DOUBLE PRECISION DX
5804      DOUBLE PRECISION DGAMMA
5805      DOUBLE PRECISION DCDF
5806      DOUBLE PRECISION DHAZ
5807C
5808C-----COMMON----------------------------------------------------------
5809C
5810      INCLUDE 'DPCOP2.INC'
5811C
5812C-----START POINT-----------------------------------------------------
5813C
5814C     CHECK THE INPUT ARGUMENTS FOR ERRORS
5815C
5816      HAZ=0.0
5817      IF(X.LT.0.0)THEN
5818        WRITE(ICOUT,5)
5819    5   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEECHA IS NEGATIVE')
5820        CALL DPWRST('XXX','BUG ')
5821        WRITE(ICOUT,46)X
5822        CALL DPWRST('XXX','BUG ')
5823        GOTO9000
5824      ELSEIF(GAMMA.LE.0.0)THEN
5825        WRITE(ICOUT,15)
5826   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEECHA IS ',
5827     1         'NON-POSITIVE')
5828        CALL DPWRST('XXX','BUG ')
5829        WRITE(ICOUT,46)GAMMA
5830   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
5831        CALL DPWRST('XXX','BUG ')
5832        HAZ=0.0
5833        GOTO9000
5834      ENDIF
5835C
5836      DGAMMA=DBLE(GAMMA)
5837      DX=DBLE(X)
5838      DCDF=DGAMMA/(EXP(DX) + DGAMMA - 1.0D0)
5839      DHAZ=-LOG(DCDF)
5840      HAZ=REAL(DHAZ)
5841C
5842 9000 CONTINUE
5843      RETURN
5844      END
5845      SUBROUTINE GEEFUN (N, X, FVEC, IFLAG, XDATA, NOBS)
5846C
5847C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
5848C              GENERALIZED EXTREME EXPONENTIAL MAXIMUM LIKELIHOOD
5849C              EQUATIONS.
5850C
5851C              N/G - 2*SUM[i=1 to N][EXP(-L*X(i)/(1-(1-G)*EXP(-L*X(i)))]
5852C
5853C              N/L - SUM[i=1 to n][X(i)] -
5854C                    2*SUM[i=1 to N][(1-G)*X(i)*EXP(-L*X(i))/
5855C                    (1 - (1-G)*EXP(-L*X(i)))]
5856C
5857C              WITH G AND L DENOTING THE SHAPE PARAMETER GAMMA AND
5858C              SCALE PARAMETER LAMBDA RESPECTIVELY.  NOTE THAT L
5859C              IS ACTUALLY (1/SCALE).
5860C
5861C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
5862C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
5863C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
5864C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
5865C     EXAMPLE--GENERALIZED EXTREME EXPONENTIAL MAXIMUM LIKELIHOOD Y
5866C     REFERENCE--"CAN DATA RECOGNIZE ITS PARENT DISTRIBUTION?",
5867C                MARSHALL, MEZA, AND OLKIN, JOURNAL OF COMPUTATIONAL
5868C                AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
5869C                PP. 555-580.
5870C     WRITTEN BY--JAMES J. FILLIBEN
5871C                 STATISTICAL ENGINEERING DIVISION
5872C                 INFORMATION TECHNOLOGY LABORATORY
5873C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
5874C                 GAITHERSBUG, MD 20899-8980
5875C                 PHONE--301-975-2855
5876C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
5877C           OF THE NATIONAL BUREAU OF STANDARDS.
5878C     LANGUAGE--ANSI FORTRAN (1977)
5879C     VERSION NUMBER--2004/3
5880C     ORIGINAL VERSION--MARCH     2004.
5881C
5882C---------------------------------------------------------------------
5883C
5884      DOUBLE PRECISION X(*)
5885      DOUBLE PRECISION FVEC(*)
5886      REAL XDATA(*)
5887C
5888      DOUBLE PRECISION DN
5889      DOUBLE PRECISION DX
5890      DOUBLE PRECISION DG
5891      DOUBLE PRECISION DGC
5892      DOUBLE PRECISION DL
5893      DOUBLE PRECISION DSUM1
5894      DOUBLE PRECISION DSUM2
5895      DOUBLE PRECISION DSUM3
5896      DOUBLE PRECISION DTERM1
5897      DOUBLE PRECISION DTERM2
5898C
5899C-----COMMON----------------------------------------------------------
5900C
5901      INCLUDE 'DPCOP2.INC'
5902C
5903C-----START POINT-----------------------------------------------------
5904C
5905C  COMPUTE SOME SUMS
5906C
5907      N=2
5908      IFLAG=0
5909C
5910      DG=X(1)
5911      DGC=1.0D0-DG
5912      DL=X(2)
5913      DN=DBLE(NOBS)
5914C
5915      DSUM1=0.0D0
5916      DSUM2=0.0D0
5917      DSUM3=0.0D0
5918C
5919      DO200I=1,NOBS
5920        DX=DBLE(XDATA(I))
5921        DTERM1=DEXP(-DL*DX)
5922        DTERM2=1.0D0 - DGC*DEXP(-DL*DX)
5923        DSUM1=DSUM1 + DTERM1/DTERM2
5924        DTERM1=DGC*DX*DEXP(-DL*DX)
5925        DTERM2=1.0D0 - DGC*DEXP(-DL*DX)
5926        DSUM2=DSUM2 + DTERM1/DTERM2
5927        DSUM3=DSUM3 + DX
5928  200 CONTINUE
5929C
5930      FVEC(1)=(DN/DG) - 2.0D0*DSUM1
5931      FVEC(2)=(DN/DL) - DSUM3 - 2.0D0*DSUM2
5932C
5933      RETURN
5934      END
5935      SUBROUTINE GEEML1(Y,N,MAXNXT,
5936     1                  TEMP1,TEMP2,DISPAR,DTEMP1,
5937     1                  XMEAN,XSD,XVAR,XMIN,XMAX,
5938     1                  SCALSV,SHAPSV,SCALML,SHAPML,
5939     1                  ISUBRO,IBUGA3,IERROR)
5940C
5941C     PURPOSE--THIS ROUTINE COMPUTES THE MAXIMUM LIKELIHOOD ESTIMATES
5942C              FOR THE 2-PARAMETER GEOMETRIC EXTREME EXPONENTIAL
5943C              DISTRIBUTION FOR THE RAW DATA CASE (I.E., NO CENSORING
5944C              AND NO GROUPING).  THIS ROUTINE RETURNS ONLY THE POINT
5945C              ESTIMATES (CONFIDENCE INTERVALS WILL BE COMPUTED IN A
5946C              SEPARATE ROUTINE).
5947C
5948C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
5949C              PERFORMED.
5950C
5951C              PUT THIS IN A SEPARATE ROUTINE AS IT MAY BE CALLED
5952C              FROM MULTIPLE PLACES (DPMLGX WILL GENERATE THE OUTPUT
5953C              FOR THE GEOMETRIC EXTREME EXPONENTIAL MLE COMMAND).
5954C
5955C              THE MLE ESTIMATES ARE THE SOLUTION TO THE FOLLOWING
5956C              TWO SIMULTANEOUS NON-LINEAR EQUATIONS:
5957C
5958C              N/G - 2*SUM[i=1 to N][EXP(-L*X(i)/(1-(1-G)*EXP(-L*X(i)))]
5959C
5960C              N/L - SUM[i=1 to n][X(i)] -
5961C                    2*SUM[i=1 to N][(1-G)*X(i)*EXP(-L*X(i))/
5962C                    (1 - (1-G)*EXP(-L*X(i)))]
5963C
5964C              WITH G AND L DENOTING THE SHAPE PARAMETER GAMMA AND
5965C              SCALE PARAMETER LAMBDA RESPECTIVELY.  NOTE THAT L
5966C              IS ACTUALLY (1/SCALE).
5967C
5968C     REFERENCE--"CAN DATA RECOGNIZE ITS PARENT DISTRIBUTION?",
5969C                MARSHALL, MEZA, AND OLKIN, JOURNAL OF COMPUTATIONAL
5970C                AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
5971C                PP. 555-580.
5972C     WRITTEN BY--JAMES J. FILLIBEN
5973C                 STATISTICAL ENGINEERING DIVISION
5974C                 INFORMATION TECHNOLOGY LABORATORY
5975C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
5976C                 GAITHERSBURG, MD 20899-8980
5977C                 PHONE--301-975-2855
5978C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
5979C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
5980C     LANGUAGE--ANSI FORTRAN (1977)
5981C     VERSION NUMBER--2010/2
5982C     ORIGINAL VERSION--FEBRUARY  2010. EXTRACTED AS A SEPARATE
5983C                                       SUBROUTINE (FROM DPMLE1)
5984C     UPDATED         --FEBRUARY  2010. LAMBDA IS ACTUALLY (1/SCALE)
5985C
5986C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
5987C
5988      DIMENSION Y(*)
5989      DIMENSION TEMP1(*)
5990      DIMENSION TEMP2(*)
5991      DIMENSION DISPAR(*)
5992      DOUBLE PRECISION DTEMP1(*)
5993C
5994      DOUBLE PRECISION TOL
5995      DOUBLE PRECISION XPAR(2)
5996      DOUBLE PRECISION FVEC(2)
5997      DIMENSION DISPA2(1)
5998C
5999      INTEGER IPPCAP(2)
6000C
6001      EXTERNAL GEEFUN
6002C
6003      CHARACTER*4 ISUBRO
6004      CHARACTER*4 IBUGA3
6005      CHARACTER*4 IERROR
6006C
6007      CHARACTER*4 IWRITE
6008      CHARACTER*40 IDIST
6009C
6010      CHARACTER*4 ISUBN1
6011      CHARACTER*4 ISUBN2
6012      CHARACTER*4 ISTEPN
6013C
6014      CHARACTER*4 IADEDF
6015      CHARACTER*4 IGEPDF
6016      CHARACTER*4 IMAKDF
6017      CHARACTER*4 IBEIDF
6018      CHARACTER*4 ILGADF
6019      CHARACTER*4 ISKNDF
6020      CHARACTER*4 IGLDDF
6021      CHARACTER*4 IBGEDF
6022      CHARACTER*4 IGETDF
6023      CHARACTER*4 ICONDF
6024      CHARACTER*4 IGOMDF
6025      CHARACTER*4 IKATDF
6026      CHARACTER*4 IGIGDF
6027      CHARACTER*4 IGEODF
6028      CHARACTER*4 ICASPL
6029      CHARACTER*4 ICASP2
6030C
6031C-----COMMON----------------------------------------------------------
6032C
6033      INCLUDE 'DPCOP2.INC'
6034C
6035C-----START POINT-----------------------------------------------------
6036C
6037      ISUBN1='GEEM'
6038      ISUBN2='L1  '
6039      IERROR='NO'
6040C
6041      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'EML1')THEN
6042        WRITE(ICOUT,999)
6043  999   FORMAT(1X)
6044        CALL DPWRST('XXX','WRIT')
6045        WRITE(ICOUT,51)
6046   51   FORMAT('**** AT THE BEGINNING OF GEEML1--')
6047        CALL DPWRST('XXX','WRIT')
6048        WRITE(ICOUT,52)IBUGA3,ISUBRO,N
6049   52   FORMAT('IBUGA3,ISUBRO,N = ',A4,2X,A4,2X,I8)
6050        CALL DPWRST('XXX','WRIT')
6051        DO56I=1,MIN(N,100)
6052          WRITE(ICOUT,57)I,Y(I)
6053   57     FORMAT('I,Y(I) = ',I8,G15.7)
6054          CALL DPWRST('XXX','WRIT')
6055   56   CONTINUE
6056      ENDIF
6057C
6058C               ********************************************
6059C               **  STEP 1--                              **
6060C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
6061C               ********************************************
6062C
6063      ISTEPN='1'
6064      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'EML1')
6065     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
6066C
6067C               *****************************************************
6068C               **  STEP 2--                                       **
6069C               **  CARRY OUT CALCULATIONS                         **
6070C               **  FOR GEOMETRIC EXTREME EXPONENTIAL MLE ESTIMATE **
6071C               *****************************************************
6072C
6073      ISTEPN='2'
6074      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'EML1')
6075     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
6076C
6077      IDIST='GEOMETRIC EXTREME EXPONENTIAL'
6078C
6079      IFLAG=2
6080      CALL SUMRAW(Y,N,IDIST,IFLAG,
6081     1            XMEAN,XVAR,XSD,XMIN,XMAX,
6082     1            ISUBRO,IBUGA3,IERROR)
6083C
6084      SHAPML=CPUMIN
6085      SCALML=CPUMIN
6086      IF(IERROR.EQ.'YES')GOTO9000
6087C
6088      IF(SHAPSV.GT.0.0 .AND. SCALSV.GT.0.0)THEN
6089        XPAR(1)=DBLE(SHAPSV)
6090        XPAR(2)=DBLE(1.0/SCALSV)
6091      ELSE
6092C
6093C       IF NO STARTING VALUES SPECIFIED, COMPUTE STARTING
6094C       VALUES BASED ON PPCC METHOD.
6095C
6096        CALL UNIMED(N,TEMP1)
6097        CALL SORT(Y,N,Y)
6098        ICASP2='GEEX'
6099        ICASPL='PPCC'
6100        IPPCAP(1)=100
6101        IPPCAP(2)=1
6102C
6103C       OBTAIN LOWER/UPPER LIMITS FOR SHAPE PARAMETER
6104C
6105        CALL EXTPA2(ICASP2,IDIST,A,B,
6106     1              SHAP11,SHAP12,SHAP21,SHAP22,
6107     1              SHAPE1,SHAPE2,SHAPE3,SHAPE4,SHAPE5,
6108     1              IADEDF,IGEPDF,IMAKDF,IBEIDF,
6109     1              ILGADF,ISKNDF,IGLDDF,IBGEDF,
6110     1              IGETDF,ICONDF,IGOMDF,IKATDF,
6111     1              IGIGDF,IGEODF,
6112     1              ISUBRO,IBUGA3,IERROR)
6113C
6114C       CREATE ARRAY FOR THE CANDIDATE VALUES OF SHAPE PARAMETER
6115C
6116        NUMSHA=1
6117        CALL DPPPC7(ICASPL,ICASP2,IPPCAP,
6118     1              SHAP11,SHAP12,SHAP21,SHAP22,
6119     1              SHAPE1,SHAPE2,SHAPE3,SHAPE4,
6120     1              XMIN,XMAX,A,B,
6121     1              DISPAR,DISPA2,NUMDIS,NUMSHA,
6122     1              IADEDF,IGEPDF,IMAKDF,IBEIDF,
6123     1              ILGADF,ISKNDF,IGLDDF,IBGEDF,IGETDF,
6124     1              ICONDF,IGOMDF,IKATDF,IGIGDF,IGEODF,
6125     1              IBUGA3,ISUBRO,IERROR)
6126C
6127        CORRMX=-1.0
6128        IWRITE='OFF'
6129        DO1010IDIS=1,NUMDIS
6130          SHAPE=DISPAR(IDIS)
6131          DO1020I=1,N
6132            CALL GEEPPF(TEMP1(I),SHAPE,TEMP2(I))
6133 1020     CONTINUE
6134          CALL CORR(Y,TEMP2,N,IWRITE,CC,IBUGA3,IERROR)
6135          IF(CC.GT.CORRMX)THEN
6136            SHAPE1=SHAPE
6137            CALL LINFI2(Y,TEMP2,N,PPA0,PPA1,ISUBRO,IBUGA3,IERROR)
6138            CORRMX=CC
6139          ENDIF
6140 1010   CONTINUE
6141        XPAR(1)=DBLE(SHAPE1)
6142        XPAR(2)=DBLE(1.0/PPA1)
6143      ENDIF
6144C
6145      IOPT=2
6146      TOL=1.0D-6
6147      NVAR=2
6148      NPRINT=-1
6149      INFO=0
6150      LWA=MAXNXT
6151      CALL DNSQE(GEEFUN,JAC,IOPT,NVAR,XPAR,FVEC,TOL,NPRINT,INFO,
6152     1           DTEMP1,MAXNXT,Y,N)
6153C
6154      SHAPML=REAL(XPAR(1))
6155      SCALML=1.0/REAL(XPAR(2))
6156      IF(SHAPML.LE.0.0)IERROR='YES'
6157      IF(SCALML.LE.0.0)IERROR='YES'
6158C
6159 9000 CONTINUE
6160      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'EML1')THEN
6161        WRITE(ICOUT,999)
6162        CALL DPWRST('XXX','WRIT')
6163        WRITE(ICOUT,9011)
6164 9011   FORMAT('**** AT THE END OF GEEML1--')
6165        CALL DPWRST('XXX','WRIT')
6166        WRITE(ICOUT,9013)N,XMEAN,XSD,XMIN,XMAX
6167 9013   FORMAT('N,XMEAN,XSD,XMIN,XMAX = ',I8,4G15.7)
6168        CALL DPWRST('XXX','WRIT')
6169        WRITE(ICOUT,9017)SHAPSV,SCALSV,SHAPML,SCALML
6170 9017   FORMAT('SHAPSV,SCALSV,SHAPML,SCALML =  ',4G15.7)
6171        CALL DPWRST('XXX','WRIT')
6172        WRITE(ICOUT,9019)XPAR(1),XPAR(2)
6173 9019   FORMAT('XPAR(1),XPAR(2) =  ',2G15.7)
6174        CALL DPWRST('XXX','WRIT')
6175      ENDIF
6176C
6177      RETURN
6178      END
6179      SUBROUTINE GEEPDF(X,GAMMA,PDF)
6180C
6181C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
6182C              FUNCTION VALUE FOR THE GEOMETRIC EXTREME EXPONENTIAL
6183C              DISTRIBUTION WITH SINGLE PRECISION
6184C              TAIL LENGTH PARAMETER = GAMMA.
6185C              THE GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION USED
6186C              HEREIN IS DEFINED FOR ALL X >= 0
6187C              AND HAS THE PROBABILITY DENSITY FUNCTION
6188C              F(X) = GAMMA*EXP(X)/[(EXP(X)+GAMMA-1)**2]  GAMMA > 0
6189C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
6190C                                WHICH THE PROBABILITY DENSITY
6191C                                FUNCTION IS TO BE EVALUATED.
6192C                     --GAMMA  = THE SHAPE PARAMETER
6193C                                GAMMA SHOULD BE POSITIVE.
6194C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
6195C                                DENSITY FUNCTION VALUE.
6196C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
6197C             FUNCTION VALUE PDF FOR THE GEOMETRIC EXTREME
6198C             EXPONENTIAL DISTRIBUTION
6199C             WITH TAIL LENGTH PARAMETER = GAMMA.
6200C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
6201C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
6202C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
6203C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP, LOG.
6204C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
6205C     LANGUAGE--ANSI FORTRAN (1977)
6206C     REFERENCES--"CAN DATA RECOGNOZE ITS PARENT DISTRIBUTION?",
6207C                 MARSHALL, MEZA, OLKIN, JOURNAL OF COMPUTATIONAL
6208C                 AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
6209C                 PP. 555-580.
6210C     WRITTEN BY--JAMES J. FILLIBEN
6211C                 STATISTICAL ENGINEERING DIVISION
6212C                 INFORMATION TECHNOLOGY LABORATORY
6213C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
6214C                 GAITHERSBURG, MD 20899-8980
6215C                 PHONE--301-975-2855
6216C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
6217C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
6218C     LANGUAGE--ANSI FORTRAN (1966)
6219C     VERSION NUMBER--2001.11
6220C     ORIGINAL VERSION--NOVEMBER  2001.
6221C
6222      DOUBLE PRECISION DX
6223      DOUBLE PRECISION DGAMMA
6224      DOUBLE PRECISION DPDF
6225C
6226C-----COMMON----------------------------------------------------------
6227C
6228      INCLUDE 'DPCOP2.INC'
6229C
6230C-----START POINT-----------------------------------------------------
6231C
6232C     CHECK THE INPUT ARGUMENTS FOR ERRORS
6233C
6234      IF(X.LT.0.0)THEN
6235        WRITE(ICOUT,5)
6236    5   FORMAT('***** FATAL ERROR--THE FIRST INPUT ARGUMENT TO THE ',
6237     1         'GEEPDF SUBROUTINE IS NEGATIVE')
6238        CALL DPWRST('XXX','BUG ')
6239        WRITE(ICOUT,46)X
6240        CALL DPWRST('XXX','BUG ')
6241        PDF=0.0
6242        GOTO9000
6243      ENDIF
6244C
6245      IF(GAMMA.LE.0.0)THEN
6246        WRITE(ICOUT,15)
6247   15   FORMAT('***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE ',
6248     1         'GEEPDF SUBROUTINE IS NON-POSITIVE')
6249        CALL DPWRST('XXX','BUG ')
6250        WRITE(ICOUT,46)GAMMA
6251   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8)
6252        CALL DPWRST('XXX','BUG ')
6253        PDF=0.0
6254        GOTO9000
6255      ENDIF
6256C
6257      DGAMMA=DBLE(GAMMA)
6258      DX=DBLE(X)
6259      DPDF=LOG(DGAMMA) + DX - 2.0D0*LOG(EXP(DX)+DGAMMA-1.0D0)
6260      IF(DPDF.LT.-36.0D0)THEN
6261        PDF=0.0
6262      ELSEIF(DPDF.GT.36.0D0)THEN
6263        WRITE(ICOUT,25)
6264   25   FORMAT('***** FATAL ERROR--GEEPDF ROUTINE OVERFLOWS FOR')
6265        CALL DPWRST('XXX','BUG ')
6266        WRITE(ICOUT,26)X,GAMMA
6267   26   FORMAT('      X = ',E15.7,'  GAMMA = ',E15.7)
6268        CALL DPWRST('XXX','BUG ')
6269        PDF=0.0
6270      ELSE
6271        DPDF=EXP(DPDF)
6272        PDF=REAL(DPDF)
6273      ENDIF
6274C
6275 9000 CONTINUE
6276      RETURN
6277      END
6278      SUBROUTINE GEEHAZ(X,GAMMA,HAZ)
6279C
6280C     PURPOSE--THIS SUBROUTINE COMPUTES THE HAZARD
6281C              FUNCTION VALUE FOR THE GEOMETRIC EXTREME EXPONENTIAL
6282C              DISTRIBUTION WITH SINGLE PRECISION
6283C              TAIL LENGTH PARAMETER = GAMMA.
6284C              THE GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION USED
6285C              HEREIN IS DEFINED FOR ALL X >= 0
6286C              AND HAS THE HAZARD FUNCTION
6287C              H(X) = GEEPDF(X)/(1-GEECDF(X)),    GAMMA > 0
6288C                   = EXP(X)/[EXP(X)+GAMMA-1)]    GAMMA > 0
6289C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
6290C                                WHICH THE HAZARD
6291C                                FUNCTION IS TO BE EVALUATED.
6292C                     --GAMMA  = THE SHAPE PARAMETER
6293C                                GAMMA SHOULD BE POSITIVE.
6294C     OUTPUT ARGUMENTS--HAZ    = THE SINGLE PRECISION HAZARD
6295C                                FUNCTION VALUE.
6296C     OUTPUT--THE SINGLE PRECISION HAZARD
6297C             FUNCTION VALUE PDF FOR THE GEOMETRIC EXTREME
6298C             EXPONENTIAL DISTRIBUTION
6299C             WITH TAIL LENGTH PARAMETER = GAMMA.
6300C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
6301C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
6302C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
6303C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP, LOG.
6304C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
6305C     LANGUAGE--ANSI FORTRAN (1977)
6306C     REFERENCES--"CAN DATA RECOGNOZE ITS PARENT DISTRIBUTION?",
6307C                 MARSHALL, MEZA, OLKIN, JOURNAL OF COMPUTATIONAL
6308C                 AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
6309C                 PP. 555-580.
6310C     WRITTEN BY--JAMES J. FILLIBEN
6311C                 STATISTICAL ENGINEERING DIVISION
6312C                 INFORMATION TECHNOLOGY LABORATORY
6313C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
6314C                 GAITHERSBURG, MD 20899-8980
6315C                 PHONE--301-975-2855
6316C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
6317C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
6318C     LANGUAGE--ANSI FORTRAN (1966)
6319C     VERSION NUMBER--2001.11
6320C     ORIGINAL VERSION--NOVEMBER  2001.
6321C
6322      DOUBLE PRECISION DX
6323      DOUBLE PRECISION DGAMMA
6324      DOUBLE PRECISION DTERM1
6325      DOUBLE PRECISION DTERM2
6326      DOUBLE PRECISION DHAZ
6327C
6328C-----COMMON---------------------------------------------------------
6329C
6330      INCLUDE 'DPCOP2.INC'
6331C
6332C-----START POINT-----------------------------------------------------
6333C
6334C     CHECK THE INPUT ARGUMENTS FOR ERRORS
6335C
6336      HAZ=0.0
6337      IF(X.LT.0.0)THEN
6338        WRITE(ICOUT,5)
6339    5   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEEHAZ IS NEGATIVE')
6340        CALL DPWRST('XXX','BUG ')
6341        WRITE(ICOUT,46)X
6342        CALL DPWRST('XXX','BUG ')
6343        GOTO9000
6344      ELSEIF(GAMMA.LE.0.0)THEN
6345        WRITE(ICOUT,15)
6346   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEEHAZ IS ',
6347     1         'NON-POSITIVE')
6348        CALL DPWRST('XXX','BUG ')
6349        WRITE(ICOUT,46)GAMMA
6350        CALL DPWRST('XXX','BUG ')
6351        GOTO9000
6352      ENDIF
6353   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
6354C
6355      DGAMMA=DBLE(GAMMA)
6356      DX=DBLE(X)
6357      DTERM1=EXP(DX)
6358      DTERM2=DTERM1+DGAMMA-1.0D0
6359      IF(DTERM2.NE.0.0D0)THEN
6360        DHAZ=DTERM1/DTERM2
6361        HAZ=REAL(DHAZ)
6362      ELSE
6363        HAZ=0.0
6364      ENDIF
6365C
6366 9000 CONTINUE
6367      RETURN
6368      END
6369      SUBROUTINE GEEPPF(P,GAMMA,PPF)
6370C
6371C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
6372C              FUNCTION VALUE FOR THE GEOMETRIC EXTREME EXPONENTIAL
6373C              DISTRIBUTION WITH SINGLE PRECISION
6374C              TAIL LENGTH PARAMETER = GAMMA.
6375C              THE GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION USED
6376C              HEREIN IS DEFINED FOR ALL 0 <= P < 1.
6377C              AND HAS THE PERCENT POINT FUNCTION
6378C              G(P) = LOG[GAMMA/(1-P) + 1 - GAMMA],    GAMMA > 0
6379C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE AT
6380C                                WHICH THE PERCENT POINT
6381C                                FUNCTION IS TO BE EVALUATED.
6382C                     --GAMMA  = THE SHAPE PARAMETER
6383C                                GAMMA SHOULD BE POSITIVE.
6384C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT
6385C                                POINT FUNCTION VALUE.
6386C     OUTPUT--THE SINGLE PRECISION PERCENT POINT
6387C             FUNCTION VALUE PPF FOR THE GEOMETRIC EXTREME
6388C             EXPONENTIAL DISTRIBUTION
6389C             WITH TAIL LENGTH PARAMETER = GAMMA.
6390C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
6391C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
6392C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
6393C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
6394C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
6395C     LANGUAGE--ANSI FORTRAN (1977)
6396C     REFERENCES--"CAN DATA RECOGNOZE ITS PARENT DISTRIBUTION?",
6397C                 MARSHALL, MEZA, OLKIN, JOURNAL OF COMPUTATIONAL
6398C                 AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
6399C                 PP. 555-580.
6400C     WRITTEN BY--JAMES J. FILLIBEN
6401C                 STATISTICAL ENGINEERING DIVISION
6402C                 INFORMATION TECHNOLOGY LABORATORY
6403C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
6404C                 GAITHERSBURG, MD 20899-8980
6405C                 PHONE--301-975-2855
6406C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
6407C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
6408C     LANGUAGE--ANSI FORTRAN (1966)
6409C     VERSION NUMBER--2001.11
6410C     ORIGINAL VERSION--NOVEMBER  2001.
6411C
6412      DOUBLE PRECISION DP
6413      DOUBLE PRECISION DGAMMA
6414      DOUBLE PRECISION DPPF
6415C
6416C-----COMMON----------------------------------------------------------
6417C
6418      INCLUDE 'DPCOP2.INC'
6419C
6420C-----START POINT-----------------------------------------------------
6421C
6422C     CHECK THE INPUT ARGUMENTS FOR ERRORS
6423C
6424      PPF=0.0
6425      IF(P.LT.0.0.OR.P.GE.1.0)THEN
6426        WRITE(ICOUT,5)
6427    5   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEEPPF IS OUTSIDE ',
6428     1         'THE ALLOWABLE (0,1] INTERVAL.')
6429        CALL DPWRST('XXX','BUG ')
6430        WRITE(ICOUT,46)P
6431        CALL DPWRST('XXX','BUG ')
6432        GOTO9000
6433      ELSEIF(GAMMA.LE.0.0)THEN
6434        WRITE(ICOUT,15)
6435   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEEPPF IS ',
6436     1         'NON-POSITIVE')
6437        CALL DPWRST('XXX','BUG ')
6438        WRITE(ICOUT,46)GAMMA
6439   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
6440        CALL DPWRST('XXX','BUG ')
6441        GOTO9000
6442      ENDIF
6443C
6444      DGAMMA=DBLE(GAMMA)
6445      DP=DBLE(P)
6446      DPPF=LOG(DGAMMA/(1.0D0-DP) + 1.0D0 - DGAMMA)
6447      PPF=REAL(DPPF)
6448C
6449 9000 CONTINUE
6450      RETURN
6451      END
6452      SUBROUTINE GEERAN(N,GAMMA,ISEED,X)
6453C
6454C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
6455C              FROM THE GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION
6456C              WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
6457C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
6458C                                OF RANDOM NUMBERS TO BE
6459C                                GENERATED.
6460C                     --GAMMA  = THE SINGLE PRECISION VALUE OF THE
6461C                                TAIL LENGTH PARAMETER.
6462C                                GAMMA SHOULD BE POSITIVE.
6463C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
6464C                                (OF DIMENSION AT LEAST N)
6465C                                INTO WHICH THE GENERATED
6466C                                RANDOM SAMPLE WILL BE PLACED.
6467C     OUTPUT--A RANDOM SAMPLE OF SIZE N
6468C             FROM THE GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION
6469C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
6470C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
6471C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
6472C                   OF N FOR THIS SUBROUTINE.
6473C                 --GAMMA SHOULD BE POSITIVE.
6474C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
6475C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
6476C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
6477C     LANGUAGE--ANSI FORTRAN (1977)
6478C     REFERENCES--"CAN DATA RECOGNOZE ITS PARENT DISTRIBUTION?",
6479C                 MARSHALL, MEZA, OLKIN, JOURNAL OF COMPUTATIONAL
6480C                 AND GRAPHICAL STATISTICS, SEPTEMBER, 2001,
6481C                 PP. 555-580.
6482C     WRITTEN BY--JAMES J. FILLIBEN
6483C                 STATISTICAL ENGINEERING DIVISION
6484C                 INFORMATION TECHNOLOGY LABORATORY
6485C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
6486C                 GAITHERSBURG, MD 20899-8980
6487C                 PHONE--301-975-2855
6488C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
6489C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
6490C     LANGUAGE--ANSI FORTRAN (1966)
6491C     VERSION NUMBER--2001.11
6492C     ORIGINAL VERSION--NOVEMBER  2001.
6493C
6494C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
6495C
6496C---------------------------------------------------------------------
6497C
6498      DIMENSION X(*)
6499C
6500C-----COMMON----------------------------------------------------------
6501C
6502      INCLUDE 'DPCOP2.INC'
6503C
6504C-----START POINT-----------------------------------------------------
6505C
6506C     CHECK THE INPUT ARGUMENTS FOR ERRORS
6507C
6508      IF(N.LT.1)THEN
6509        WRITE(ICOUT, 5)
6510        CALL DPWRST('XXX','BUG ')
6511        WRITE(ICOUT,47)N
6512        CALL DPWRST('XXX','BUG ')
6513        GOTO9000
6514      ELSEIF(GAMMA.LE.0.0)THEN
6515        WRITE(ICOUT,15)
6516        CALL DPWRST('XXX','BUG ')
6517        WRITE(ICOUT,46)GAMMA
6518        CALL DPWRST('XXX','BUG ')
6519        GOTO9000
6520      ENDIF
6521    5 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEERAN IS ',
6522     1       'NON-POSITIVE')
6523   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEERAN IS ',
6524     1       'NON-POSITIVE')
6525   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
6526   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
6527C
6528C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
6529C
6530      CALL UNIRAN(N,ISEED,X)
6531C
6532C     GENERATE N GEOMETRIC EXTREME EXPONENTIAL DISTRIBUTION RANDOM
6533C     NUMBERS USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
6534C
6535      DO100I=1,N
6536        CALL GEEPPF(X(I),GAMMA,XTEMP)
6537        X(I)=XTEMP
6538  100 CONTINUE
6539C
6540 9000 CONTINUE
6541      RETURN
6542      END
6543      SUBROUTINE GENARI(Y1,Y2,Y3,Y4,N1,N3,IACASE,IWRITE,
6544     1                  Y5,Y6,N5,N6,SCAL3,ITYP3,
6545     1                  IBUGA3,ISUBRO,IERROR)
6546C
6547C     PURPOSE--CARRY OUT (DEX) GENERATOR ARITHMETIC OPERATIONS
6548C              OF THE REAL DATA IN Y1 AND Y3.
6549C
6550C     OPERATIONS--ADDITION
6551C                 SUBTRACTION
6552C                 MULTIPLICATION
6553C
6554C     INPUT  ARGUMENTS--Y1 (REAL PART)       Y2 (IMAGINARY PART)
6555C                     --Y3 (REAL PART)       Y4 (IMAGINARY PART)
6556C     OUTPUT ARGUMENTS--Y5 (REAL PART)       Y6 (IMAGINARY PART)
6557C
6558C     NOTE--IT IS NOT PERMISSIBLE TO HAVE THE OUTPUT VECTORS Y5(.) AND Y6(.)
6559C           BEING IDENTICAL TO THE INPUT VECTORS Y1(.) AND Y2(.), OR
6560C           Y3(.) AND Y4(.).
6561C     WRITTEN BY--JAMES J. FILLIBEN
6562C                 STATISTICAL ENGINEERING DIVISION
6563C                 INFORMATION TECHNOLOGY LABORATORY
6564C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
6565C                 GAITHERSBURG, MD 20899-8980
6566C                 PHONE--301-921-3651
6567C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
6568C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
6569C     LANGUAGE--ANSI FORTRAN (1977)
6570C     VERSION NUMBER--89/12
6571C     ORIGINAL VERSION--DECEMBER  1989.
6572C     UPDATED         --JUNE      1990. TEMPORARY ARRAYS TO GARBAGE
6573C                                       COMMON
6574C
6575C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
6576C
6577      CHARACTER*4 IACASE
6578      CHARACTER*4 IWRITE
6579      CHARACTER*4 ITYP3
6580      CHARACTER*4 IBUGA3
6581      CHARACTER*4 ISUBRO
6582      CHARACTER*4 IERROR
6583C
6584      CHARACTER*4 ISUBN1
6585      CHARACTER*4 ISUBN2
6586C
6587C---------------------------------------------------------------------
6588C
6589      DIMENSION Y1(*)
6590      DIMENSION Y2(*)
6591      DIMENSION Y3(*)
6592      DIMENSION Y4(*)
6593      DIMENSION Y5(*)
6594      DIMENSION Y6(*)
6595C
6596C-----COMMON----------------------------------------------------------
6597C
6598      INCLUDE 'DPCOP2.INC'
6599C
6600C-----START POINT-----------------------------------------------------
6601C
6602      ISUBN1='GENA'
6603      ISUBN2='RI  '
6604      IERROR='NO'
6605C
6606      SCAL3=(-999.0)
6607      ITYP3='VECT'
6608C
6609      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'NARI')THEN
6610        WRITE(ICOUT,999)
6611  999   FORMAT(1X)
6612        CALL DPWRST('XXX','BUG ')
6613        WRITE(ICOUT,51)
6614   51   FORMAT('***** AT THE BEGINNING OF GENARI--')
6615        CALL DPWRST('XXX','BUG ')
6616        WRITE(ICOUT,52)IBUGA3,ISUBRO,IACASE,IWRITE
6617   52   FORMAT('IBUGA3,ISUBRO,IACASE,IWRITE = ',3(A4,2X),A4)
6618        CALL DPWRST('XXX','BUG ')
6619        WRITE(ICOUT,53)N1,N3
6620   53   FORMAT('N1,N3 = ',2I8)
6621        CALL DPWRST('XXX','BUG ')
6622        DO55I=1,N1
6623          WRITE(ICOUT,56)I,Y1(I),Y2(I)
6624   56     FORMAT('I,Y1(I),Y2(I) = ',I8,2G15.7)
6625          CALL DPWRST('XXX','BUG ')
6626   55   CONTINUE
6627        DO65I=1,N3
6628          WRITE(ICOUT,66)I,Y3(I),Y4(I)
6629   66     FORMAT('I,Y3(I),Y4(I) = ',I8,2G15.7)
6630          CALL DPWRST('XXX','BUG ')
6631   65   CONTINUE
6632      ENDIF
6633C
6634C               **************************************************
6635C               **  CARRY OUT (DEX) GENERATOR ARITHMETIC OPERATIONS  **
6636C               **************************************************
6637C
6638C               ********************************************
6639C               **  STEP 11--                             **
6640C               **  CHECK NUMBER OF INPUT OBSERVATIONS.   **
6641C               ********************************************
6642C
6643      IF(N1.LT.1)GOTO1100
6644      IF(N3.LT.1)GOTO1100
6645      GOTO1190
6646C
6647 1100 CONTINUE
6648      IERROR='YES'
6649      WRITE(ICOUT,999)
6650      CALL DPWRST('XXX','BUG ')
6651      WRITE(ICOUT,1151)
6652 1151 FORMAT('***** ERROR IN GENERATOR ARITHMETIC--')
6653      CALL DPWRST('XXX','BUG ')
6654      WRITE(ICOUT,1152)
6655 1152 FORMAT('      THE INPUT NUMBER OF OBSERVATIONS IN THE VARIABLE ',
6656     1       'FOR WHICH')
6657      CALL DPWRST('XXX','BUG ')
6658      IF(IACASE.EQ.'GEAD')THEN
6659        WRITE(ICOUT,1161)
6660 1161   FORMAT('      THE (DEX) GENERATOR ADDITION IS TO BE COMPTED')
6661      ELSEIF(IACASE.EQ.'GESU')THEN
6662        WRITE(ICOUT,1162)
6663 1162   FORMAT('      THE (DEX) GENERATOR SUBTRACTION IS TO BE ',
6664     1         'COMPUTED')
6665      ELSEIF(IACASE.EQ.'GEMU')THEN
6666        WRITE(ICOUT,1163)
6667 1163   FORMAT('      THE (DEX) GENERATOR MULTIPLICATION IS TO BE ',
6668     1         'COMPUTED')
6669      ENDIF
6670      CALL DPWRST('XXX','BUG ')
6671      WRITE(ICOUT,1181)
6672 1181 FORMAT('      MUST BE 1 OR LARGER.  SUCH WAS NOT THE CASE HERE.')
6673      CALL DPWRST('XXX','BUG ')
6674      WRITE(ICOUT,1183)N1,N3
6675 1183 FORMAT('      THE INPUT NUMBER OF OBSERVATIONS HERE = ',2I8,'.')
6676      CALL DPWRST('XXX','BUG ')
6677      GOTO9000
6678C
6679 1190 CONTINUE
6680C
6681C               *********************************
6682C               **  STEP 12--                  **
6683C               **  BRANCH TO THE PROPER CASE  **
6684C               *********************************
6685C
6686      IF(IACASE.EQ.'GEAD')THEN
6687        GOTO2300
6688      ELSEIF(IACASE.EQ.'GESU')THEN
6689        GOTO2300
6690      ELSEIF(IACASE.EQ.'GEMU')THEN
6691        GOTO2300
6692      ELSE
6693        WRITE(ICOUT,999)
6694        CALL DPWRST('XXX','BUG ')
6695        WRITE(ICOUT,1211)
6696 1211   FORMAT('***** INTERNAL ERROR IN GENARI--')
6697        CALL DPWRST('XXX','BUG ')
6698        WRITE(ICOUT,1212)
6699 1212   FORMAT('      IACASE NOT EQUAL TO GEAD, GESU, OR GEMU')
6700        CALL DPWRST('XXX','BUG ')
6701        WRITE(ICOUT,1215)
6702 1215   FORMAT('      IACASE = ',A4)
6703        CALL DPWRST('XXX','BUG ')
6704        IERROR='YES'
6705        GOTO9000
6706      ENDIF
6707C
6708 2300 CONTINUE
6709      N5TEMP=0
6710      L=0
6711C
6712      DO2310J=1,N1
6713        Y1J=Y1(J)
6714        DO2320K=1,N3
6715          IF(Y3(K).EQ.Y1J)GOTO2310
6716 2320   CONTINUE
6717        L=L+1
6718        Y5(L)=Y1J
6719 2310 CONTINUE
6720C
6721      DO2330J=1,N3
6722        Y3J=Y3(J)
6723        DO2340K=1,N1
6724          IF(Y1(K).EQ.Y3J)GOTO2330
6725 2340   CONTINUE
6726        L=L+1
6727        Y5(L)=Y3J
6728 2330 CONTINUE
6729C
6730      N5TEMP=L
6731C
6732      IF(N5TEMP.LE.0)GOTO2359
6733      DO2350J=1,N5TEMP
6734        JP1=J+1
6735        IF(JP1.GT.N5TEMP)GOTO2359
6736        DO2360K=JP1,N5TEMP
6737          IF(Y5(K).GT.Y5(J))GOTO2360
6738          HOLD=Y5(J)
6739          Y5(J)=Y5(K)
6740          Y5(K)=HOLD
6741 2360   CONTINUE
6742 2350 CONTINUE
6743 2359 CONTINUE
6744C
6745      ITYP3='VECT'
6746      N5=N5TEMP
6747      N6=N5
6748      GOTO9000
6749C
6750C               *****************
6751C               **  STEP 90--  **
6752C               **  EXIT.      **
6753C               *****************
6754C
6755 9000 CONTINUE
6756C
6757      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'NARI')THEN
6758        WRITE(ICOUT,999)
6759        CALL DPWRST('XXX','BUG ')
6760        WRITE(ICOUT,9011)
6761 9011   FORMAT('***** AT THE END       OF GENARI--')
6762        CALL DPWRST('XXX','BUG ')
6763        WRITE(ICOUT,9017)IERROR,N1,N3,N5,N6
6764 9017   FORMAT('IERROR,N1,N3,N5,N6 = ',A4,2X,4I8)
6765        CALL DPWRST('XXX','BUG ')
6766        WRITE(ICOUT,9018)SCAL3,ITYP3
6767 9018   FORMAT('SCAL3,ITYP3 = ',G15.7,2X,A4)
6768        CALL DPWRST('XXX','BUG ')
6769        IF(ITYP3.NE.'SCAL')THEN
6770          DO9021I=1,N1
6771            WRITE(ICOUT,9022)I,Y1(I),Y2(I)
6772 9022       FORMAT('I,Y1(I),Y2(I) = ',I8,2E13.5)
6773            CALL DPWRST('XXX','BUG ')
6774 9021     CONTINUE
6775          DO9031I=1,N3
6776            WRITE(ICOUT,9032)I,Y3(I),Y4(I)
6777 9032       FORMAT('I,Y3(I),Y4(I) = ',I8,2E13.5)
6778            CALL DPWRST('XXX','BUG ')
6779 9031     CONTINUE
6780          DO9041I=1,N5
6781            WRITE(ICOUT,9042)I,Y5(I),Y6(I)
6782 9042       FORMAT('I,Y5(I),Y6(I) = ',I8,2G15.7)
6783            CALL DPWRST('XXX','BUG ')
6784 9041     CONTINUE
6785        ENDIF
6786      ENDIF
6787C
6788      RETURN
6789      END
6790      SUBROUTINE GEOCDF(X,P,CDF)
6791C
6792C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
6793C              FUNCTION VALUE AT THE DOUBLE PRECISION VALUE X FOR THE
6794C              GEOMETRIC DISTRIBUTION WITH DOUBLE PRECISION 'BERNOULLI
6795C              PROBABILITY' PARAMETER = P.  THE GEOMETRIC DISTRIBUTION
6796C              USED HEREIN HAS MEAN = (1-P)/P AND STANDARD DEVIATION
6797C              = SQRT((1-P)/(P*P))).  THIS DISTRIBUTION IS DEFINED FOR
6798C              ALL NON-NEGATIVE INTEGER X--X = 0, 1, 2, ... .  THIS
6799C              DISTRIBUTION HAS THE PROBABILITY MASS FUNCTION
6800C
6801C                 p(X;P) = P * (1-P)**X.
6802C
6803C              THE GEOMETRIC DISTRIBUTION IS THE DISTRIBUTION OF THE
6804C              NUMBER OF FAILURES BEFORE OBTAINING 1 SUCCESS IN AN
6805C              INDEFINITE SEQUENCE OF BERNOULLI (0,1) TRIALS WHERE THE
6806C              PROBABILITY OF SUCCESS IN A SINGLE TRIAL = P.
6807C     INPUT  ARGUMENTS--X      = THE DOUBLE PRECISION VALUE AT WHICH
6808C                                THE CUMULATIVE DISTRIBUTION FUNCTION
6809C                                IS TO BE EVALUATED.  X SHOULD BE
6810C                                NON-NEGATIVE AND INTEGRAL-VALUED.
6811C                     --P      = THE DOUBLE PRECISION VALUE OF THE
6812C                                'BERNOULLI PROBABILITY' PARAMETER FOR
6813C                                THE GEOMETRIC DISTRIBUTION.  P SHOULD
6814C                                BE BETWEEN 0.0 (EXCLUSIVELY) AND
6815C                                1.0 (INCLUSIVELY).
6816C     OUTPUT ARGUMENTS--CDF    = THE DOUBLE PRECISION CUMULATIVE
6817C                                DISTRIBUTION FUNCTION VALUE.
6818C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION FUNCTION
6819C             VALUE CDF FOR THE GEOMETRIC DISTRIBUTION WITH
6820C             'BERNOULLI PROBABILITY' PARAMETER = P.
6821C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
6822C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE AND INTEGRAL-VALUED.
6823C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
6824C                   AND 1.0 (EXCLUSIVELY).
6825C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
6826C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
6827C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
6828C     LANGUAGE--ANSI FORTRAN.
6829C     REFERENCES--FELLER, AN INTRODUCTION TO PROBABILITY
6830C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
6831C                 EDITION 2, 1957, PAGES 155-157, 210.
6832C               --NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS
6833C                 SERIES 55, 1964, PAGE 929.
6834C               --CATHERINE LOADER (2000), "FAST AND ACCURATE COMPUTATION
6835C                 OF BINOMIAL PROBABILITIES", BELL LABS?
6836C     WRITTEN BY--JAMES J. FILLIBEN
6837C                 STATISTICAL ENGINEERING LABORATORY (205.03)
6838C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
6839C                 GAITHERSBURG, MD 20899-8980
6840C                 PHONE:  301-975-2855
6841C     ORIGINAL VERSION--APRIL     1994.
6842C     UPDATED         --MARCH     2009.
6843C
6844C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
6845C
6846C---------------------------------------------------------------------
6847C
6848      IMPLICIT DOUBLE PRECISION (A-H, O-Z)
6849      EXTERNAL DLNREL
6850C
6851      INCLUDE 'DPCOP2.INC'
6852C
6853C---------------------------------------------------------------------
6854C
6855C     CHECK THE INPUT ARGUMENTS FOR ERRORS
6856C
6857      CDF=0.0D0
6858      IF(P.LE.0.0D0 .OR. P.GT.1.0D0)THEN
6859        WRITE(ICOUT,11)
6860        CALL DPWRST('XXX','BUG ')
6861        WRITE(ICOUT,46)P
6862        CALL DPWRST('XXX','BUG ')
6863        GOTO9000
6864      ELSEIF(X.LT.0.0D0)THEN
6865        WRITE(ICOUT,3)
6866        CALL DPWRST('XXX','BUG ')
6867        WRITE(ICOUT,46)X
6868        CALL DPWRST('XXX','BUG ')
6869        GOTO9000
6870      ENDIF
6871    3 FORMAT('***** WARNING--THE FIRST ARGUMENT TO GEOPDF IS NEGATIVE')
6872   11 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEOPDF IS OUTSIDE ',
6873     1       'THE ALLOWABLE (0,1) INTERVAL')
6874   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
6875C
6876C-----START POINT-----------------------------------------------------
6877C
6878      INTX=INT(X+0.00001D0)
6879      DX=DBLE(INTX)
6880      IF(P.EQ.1.0D0)THEN
6881        CDF=1.0D0
6882      ELSE
6883        DTERM1=DLNREL(-P)*(DX+1.0D0)
6884        CDF=-EXPM1(DTERM1)
6885      ENDIF
6886C
6887 9000 CONTINUE
6888      RETURN
6889      END
6890      SUBROUTINE GE2CDF(X,P,CDF)
6891C
6892C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
6893C              FUNCTION VALUE AT THE SINGLE PRECISION VALUE X
6894C              FOR THE GEOMETRIC DISTRIBUTION
6895C              WITH SINGLE PRECISION
6896C              'BERNOULLI PROBABILITY' PARAMETER = P.
6897C              THIS USES AN ALTERNATE DEFINITION THAN GEOPDF
6898C              (THE VERSION HERE IS USED IN THE DIGITAL LIBRARY OF
6899C              MATHEMATICAL FUNCTIONS).
6900C              THE GEOMETRIC DISTRIBUTION USED HEREIN
6901C              HEREIN HAS MEAN = 1/P
6902C              AND STANDARD DEVIATION = SQRT((1-P)/(P*P))).
6903C              THIS DISTRIBUTION IS DEFINED FOR
6904C              ALL POSITIVE INTEGER X--X = 1, 2, ... .
6905C              THIS DISTRIBUTION HAS THE PROBABILITY FUNCTION
6906C              F(X) = P * (1-P)**X.
6907C              THE GEOMETRIC DISTRIBUTION IS THE
6908C              DISTRIBUTION OF THE NUMBER OF TRIALS UP TO AND
6909C              INCLUDING THE FIRST SUCCESS IN AN
6910C              INDEFINITE SEQUENCE OF BERNOULLI (0,1)
6911C              TRIALS WHERE THE PROBABILITY OF SUCCESS
6912C              IN A SINGLE TRIAL = P.
6913C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
6914C                                AT WHICH THE CUMULATIVE DISTRIBUTION
6915C                                FUNCTION IS TO BE EVALUATED.
6916C                                X SHOULD BE NON-NEGATIVE AND
6917C                                INTEGRAL-VALUED.
6918C                     --P      = THE SINGLE PRECISION VALUE
6919C                                OF THE 'BERNOULLI PROBABILITY'
6920C                                PARAMETER FOR THE GEOMETRIC
6921C                                DISTRIBUTION.
6922C                                P SHOULD BE BETWEEN
6923C                                0.0 (EXCLUSIVELY) AND
6924C                                1.0 (EXCLUSIVELY).
6925C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
6926C                                DISTRIBUTION FUNCTION VALUE.
6927C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
6928C             FUNCTION VALUE CDF
6929C             FOR THE GEOMETRIC DISTRIBUTION
6930C             WITH 'BERNOULLI PROBABILITY' PARAMETER = P.
6931C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
6932C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE AND INTEGRAL-VALUED.
6933C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
6934C                   AND 1.0 (EXCLUSIVELY).
6935C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
6936C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
6937C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
6938C     LANGUAGE--ANSI FORTRAN.
6939C     COMMENT--NOTE THAT EVEN THOUGH THE INPUT
6940C              TO THIS CUMULATIVE
6941C              DISTRIBUTION FUNCTION SUBROUTINE
6942C              FOR THIS DISCRETE DISTRIBUTION
6943C              SHOULD (UNDER NORMAL CIRCUMSTANCES) BE A
6944C              DISCRETE INTEGER VALUE,
6945C              THE INPUT VARIABLE X IS SINGLE
6946C              PRECISION IN MODE.
6947C              X HAS BEEN SPECIFIED AS SINGLE
6948C              PRECISION SO AS TO CONFORM WITH THE DATAPAC
6949C              CONVENTION THAT ALL INPUT ****DATA****
6950C              (AS OPPOSED TO SAMPLE SIZE, FOR EXAMPLE)
6951C              VARIABLES TO ALL
6952C              DATAPAC SUBROUTINES ARE SINGLE PRECISION.
6953C              THIS CONVENTION IS BASED ON THE BELIEF THAT
6954C              1) A MIXTURE OF MODES (FLOATING POINT
6955C              VERSUS INTEGER) IS INCONSISTENT AND
6956C              AN UNNECESSARY COMPLICATION
6957C              IN A DATA ANALYSIS; AND
6958C              2) FLOATING POINT MACHINE ARITHMETIC
6959C              (AS OPPOSED TO INTEGER ARITHMETIC)
6960C              IS THE MORE NATURAL MODE FOR DOING
6961C              DATA ANALYSIS.
6962C     REFERENCES--FELLER, AN INTRODUCTION TO PROBABILITY
6963C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
6964C                 EDITION 2, 1957, PAGES 155-157, 210.
6965C               --NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS
6966C                 SERIES 55, 1964, PAGE 929.
6967C     WRITTEN BY--JAMES J. FILLIBEN
6968C                 STATISTICAL ENGINEERING DIVISION
6969C                 INFORMATION TECHNOLOGY LABORATORY
6970C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
6971C                 GAITHERSBURG, MD 20899-8980
6972C                 PHONE:  301-975-2899
6973C     ORIGINAL VERSION--MARCH     2004.
6974C
6975C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
6976C
6977C---------------------------------------------------------------------
6978C
6979      IMPLICIT DOUBLE PRECISION (A-H, O-Z)
6980C
6981      INCLUDE 'DPCOP2.INC'
6982C
6983C---------------------------------------------------------------------
6984C
6985C     CHECK THE INPUT ARGUMENTS FOR ERRORS
6986C
6987      CDF=0.0D0
6988C
6989C-----START POINT-----------------------------------------------------
6990C
6991      X2=X-1.0D0
6992      CALL GEOCDF(X2,P,CDF)
6993C
6994      RETURN
6995      END
6996      SUBROUTINE GEOMEA(X,N,IWRITE,XGEOM,IBUGA3,IERROR)
6997C
6998C     PURPOSE--THIS SUBROUTINE COMPUTES THE
6999C              SAMPLE GEOMETRIC MEAN, XGEOM,
7000C              OF THE DATA IN THE INPUT VECTOR X.
7001C              THE SAMPLE XGEOM = (PRODUCT OF THE OBSERVATIONS)**(1/N)
7002C                               = EXP((SUM OF LOG OF OBSERVATIONS)/N)
7003C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VECTOR OF
7004C                                (UNSORTED OR SORTED) OBSERVATIONS.
7005C                     --N      = THE INTEGER NUMBER OF OBSERVATIONS
7006C                                IN THE VECTOR X.
7007C     OUTPUT ARGUMENTS--XGEOM  = THE SINGLE PRECISION VALUE OF THE
7008C                                COMPUTED SAMPLE GEOMETRIC MEAN.
7009C     OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE
7010C             SAMPLE GEOMETRIC MEAN
7011C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
7012C                   OF N FOR THIS SUBROUTINE.
7013C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
7014C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG, EXP.
7015C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
7016C     LANGUAGE--ANSI FORTRAN (1977)
7017C     WRITTEN BY--JAMES J. FILLIBEN
7018C                 STATISTICAL ENGINEERING DIVISION
7019C                 INFORMATION TECHNOLOGY LABORATORY
7020C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
7021C                 GAITHERSBURG, MD 20899-8980
7022C                 PHONE--301-975-2855
7023C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
7024C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
7025C     LANGUAGE--ANSI FORTRAN (1966)
7026C     VERSION NUMBER--99.3
7027C     ORIGINAL VERSION--MARCH     1999.
7028C
7029C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
7030C
7031      CHARACTER*4 IWRITE
7032      CHARACTER*4 IBUGA3
7033      CHARACTER*4 IERROR
7034C
7035      CHARACTER*4 ISUBN1
7036      CHARACTER*4 ISUBN2
7037C
7038C---------------------------------------------------------------------
7039C
7040      DOUBLE PRECISION DN
7041      DOUBLE PRECISION DX
7042      DOUBLE PRECISION DSUM
7043C
7044      DIMENSION X(*)
7045C
7046C-----COMMON----------------------------------------------------------
7047C
7048      INCLUDE 'DPCOP2.INC'
7049C
7050C-----START POINT-----------------------------------------------------
7051C
7052      ISUBN1='GEOM'
7053      ISUBN2='EA  '
7054      IERROR='NO'
7055C
7056      IF(IBUGA3.EQ.'OFF')GOTO90
7057      WRITE(ICOUT,999)
7058  999 FORMAT(1X)
7059      CALL DPWRST('XXX','BUG ')
7060      WRITE(ICOUT,51)
7061   51 FORMAT('***** AT THE BEGINNING OF GEOMEA--')
7062      CALL DPWRST('XXX','BUG ')
7063      WRITE(ICOUT,52)IBUGA3
7064   52 FORMAT('IBUGA3 = ',A4)
7065      CALL DPWRST('XXX','BUG ')
7066      WRITE(ICOUT,53)N
7067   53 FORMAT('N = ',I8)
7068      CALL DPWRST('XXX','BUG ')
7069      DO55I=1,N
7070      WRITE(ICOUT,56)I,X(I)
7071   56 FORMAT('I,X(I) = ',I8,E15.7)
7072      CALL DPWRST('XXX','BUG ')
7073   55 CONTINUE
7074   90 CONTINUE
7075C
7076C               ******************************
7077C               **  COMPUTE GEOMETRIC MEAN  **
7078C               ******************************
7079C
7080C               ********************************************
7081C               **  STEP 1--                              **
7082C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
7083C               ********************************************
7084C
7085      AN=N
7086C
7087      IF(N.GE.1)GOTO119
7088      IERROR='YES'
7089      WRITE(ICOUT,999)
7090      CALL DPWRST('XXX','BUG ')
7091      WRITE(ICOUT,111)
7092  111 FORMAT('***** ERROR IN GEOMEA--')
7093      CALL DPWRST('XXX','BUG ')
7094      WRITE(ICOUT,112)
7095  112 FORMAT('      THE INPUT NUMBER OF OBSERVATIONS')
7096      CALL DPWRST('XXX','BUG ')
7097      WRITE(ICOUT,113)
7098  113 FORMAT('      IN THE VARIABLE FOR WHICH')
7099      CALL DPWRST('XXX','BUG ')
7100      WRITE(ICOUT,114)
7101  114 FORMAT('      THE GEOMEA IS TO BE COMPUTED')
7102      CALL DPWRST('XXX','BUG ')
7103      WRITE(ICOUT,115)
7104  115 FORMAT('      MUST BE 1 OR LARGER.')
7105      CALL DPWRST('XXX','BUG ')
7106      WRITE(ICOUT,116)
7107  116 FORMAT('      SUCH WAS NOT THE CASE HERE.')
7108      CALL DPWRST('XXX','BUG ')
7109      WRITE(ICOUT,117)N
7110  117 FORMAT('      THE INPUT NUMBER OF OBSERVATIONS HERE = ',I8,
7111     1'.')
7112      CALL DPWRST('XXX','BUG ')
7113      GOTO9000
7114  119 CONTINUE
7115C
7116      IF(N.EQ.1)GOTO120
7117      GOTO129
7118  120 CONTINUE
7119      XGEOM=X(1)
7120      GOTO9000
7121  129 CONTINUE
7122C
7123C               ***********************************
7124C               **  STEP 2--                     **
7125C               **  COMPUTE THE GEOMETRIC MEAN.  **
7126C               ***********************************
7127C
7128      DN=N
7129      DSUM=0.0D0
7130      DO200I=1,N
7131      IF(X(I).LE.0.0)THEN
7132        WRITE(ICOUT,999)
7133        CALL DPWRST('XXX','BUG ')
7134        WRITE(ICOUT,211)
7135  211   FORMAT('***** ERROR FROM GEOMEA')
7136        CALL DPWRST('XXX','BUG ')
7137        WRITE(ICOUT,213)
7138  213   FORMAT('      NON-POSITIVE NUMBER ENCOUNTERED.  MEAN SET ',
7139     1         'TO ZERO.')
7140        CALL DPWRST('XXX','BUG ')
7141        IERROR='YES'
7142        XGEOM=0.0
7143        GOTO9000
7144      ENDIF
7145      DX=DBLE(X(I))
7146      DSUM=DSUM+DLOG(DX)
7147  200 CONTINUE
7148      DSUM=DSUM/DN
7149      DSUM=DEXP(DSUM)
7150      XGEOM=REAL(DSUM)
7151C
7152C               *******************************
7153C               **  STEP 3--                 **
7154C               **  WRITE OUT A LINE         **
7155C               **  OF SUMMARY INFORMATION.  **
7156C               *******************************
7157C
7158      IF(IFEEDB.EQ.'OFF')GOTO890
7159      IF(IWRITE.EQ.'OFF')GOTO890
7160      WRITE(ICOUT,999)
7161      CALL DPWRST('XXX','BUG ')
7162      WRITE(ICOUT,811)N,XGEOM
7163  811 FORMAT('THE GEOMETRIC MEAN OF THE ',I8,' OBSERVATIONS = ',E15.7)
7164      CALL DPWRST('XXX','BUG ')
7165  890 CONTINUE
7166C
7167C               *****************
7168C               **  STEP 90--  **
7169C               **  EXIT.      **
7170C               *****************
7171C
7172 9000 CONTINUE
7173      IF(IBUGA3.EQ.'OFF')GOTO9090
7174      WRITE(ICOUT,999)
7175      CALL DPWRST('XXX','BUG ')
7176      WRITE(ICOUT,9011)
7177 9011 FORMAT('***** AT THE END       OF GEOMEA--')
7178      CALL DPWRST('XXX','BUG ')
7179      WRITE(ICOUT,9012)IBUGA3,IERROR
7180 9012 FORMAT('IBUGA3,IERROR = ',A4,2X,A4)
7181      CALL DPWRST('XXX','BUG ')
7182      WRITE(ICOUT,9013)N
7183 9013 FORMAT('N = ',I8)
7184      CALL DPWRST('XXX','BUG ')
7185      WRITE(ICOUT,9015)XGEOM
7186 9015 FORMAT('XGEOM = ',E15.7)
7187      CALL DPWRST('XXX','BUG ')
7188 9090 CONTINUE
7189C
7190      RETURN
7191      END
7192      SUBROUTINE GEOSD(X,N,IWRITE,XGEOSD,IBUGA3,IERROR)
7193C
7194C     PURPOSE--THIS SUBROUTINE COMPUTES THE
7195C              SAMPLE GEOMETRIC STANDARD DEVIATION, XGEOSD,
7196C              OF THE DATA IN THE INPUT VECTOR X.
7197C                XGSD = EXP(SD(LOG(Y)))
7198C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VECTOR OF
7199C                                (UNSORTED OR SORTED) OBSERVATIONS.
7200C                     --N      = THE INTEGER NUMBER OF OBSERVATIONS
7201C                                IN THE VECTOR X.
7202C     OUTPUT ARGUMENTS--XGEOSD  = THE SINGLE PRECISION VALUE OF THE
7203C                                 COMPUTED SAMPLE GEOMETRIC STANDARD
7204C                                 DEVIATION.
7205C     OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE
7206C             SAMPLE GEOMETRIC STANDARD DEVIATION
7207C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
7208C                   OF N FOR THIS SUBROUTINE.
7209C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
7210C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG, EXP.
7211C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
7212C     LANGUAGE--ANSI FORTRAN (1977)
7213C     WRITTEN BY--JAMES J. FILLIBEN
7214C                 STATISTICAL ENGINEERING DIVISION
7215C                 INFORMATION TECHNOLOGY LABORATORY
7216C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
7217C                 GAITHERSBURG, MD 20899-8980
7218C                 PHONE--301-975-2855
7219C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
7220C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
7221C     LANGUAGE--ANSI FORTRAN (1966)
7222C     VERSION NUMBER--99.3
7223C     ORIGINAL VERSION--MARCH     1999.
7224C
7225C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
7226C
7227      CHARACTER*4 IWRITE
7228      CHARACTER*4 IBUGA3
7229      CHARACTER*4 IERROR
7230C
7231      CHARACTER*4 ISUBN1
7232      CHARACTER*4 ISUBN2
7233C
7234C---------------------------------------------------------------------
7235C
7236      DOUBLE PRECISION DN
7237      DOUBLE PRECISION DX
7238      DOUBLE PRECISION DSUM1
7239      DOUBLE PRECISION DMEAN
7240      DOUBLE PRECISION DSD
7241C
7242      DIMENSION X(*)
7243C
7244C-----COMMON----------------------------------------------------------
7245C
7246      INCLUDE 'DPCOP2.INC'
7247C
7248C-----START POINT-----------------------------------------------------
7249C
7250      ISUBN1='GEOS'
7251      ISUBN2='D   '
7252      IERROR='NO'
7253C
7254      IF(IBUGA3.EQ.'OFF')GOTO90
7255      WRITE(ICOUT,999)
7256  999 FORMAT(1X)
7257      CALL DPWRST('XXX','BUG ')
7258      WRITE(ICOUT,51)
7259   51 FORMAT('***** AT THE BEGINNING OF GEOSD--')
7260      CALL DPWRST('XXX','BUG ')
7261      WRITE(ICOUT,52)IBUGA3
7262   52 FORMAT('IBUGA3 = ',A4)
7263      CALL DPWRST('XXX','BUG ')
7264      WRITE(ICOUT,53)N
7265   53 FORMAT('N = ',I8)
7266      CALL DPWRST('XXX','BUG ')
7267      DO55I=1,N
7268      WRITE(ICOUT,56)I,X(I)
7269   56 FORMAT('I,X(I) = ',I8,E15.7)
7270      CALL DPWRST('XXX','BUG ')
7271   55 CONTINUE
7272   90 CONTINUE
7273C
7274C               ********************************************
7275C               **  COMPUTE GEOMETRIC STANDARD DEVIATION  **
7276C               ********************************************
7277C
7278C               ********************************************
7279C               **  STEP 1--                              **
7280C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
7281C               ********************************************
7282C
7283      AN=N
7284C
7285      IF(N.GE.1)GOTO119
7286      IERROR='YES'
7287      WRITE(ICOUT,999)
7288      CALL DPWRST('XXX','BUG ')
7289      WRITE(ICOUT,111)
7290  111 FORMAT('***** ERROR IN GEOSD--')
7291      CALL DPWRST('XXX','BUG ')
7292      WRITE(ICOUT,112)
7293  112 FORMAT('      THE INPUT NUMBER OF OBSERVATIONS')
7294      CALL DPWRST('XXX','BUG ')
7295      WRITE(ICOUT,113)
7296  113 FORMAT('      IN THE VARIABLE FOR WHICH')
7297      CALL DPWRST('XXX','BUG ')
7298      WRITE(ICOUT,114)
7299  114 FORMAT('      THE GEOSD IS TO BE COMPUTED')
7300      CALL DPWRST('XXX','BUG ')
7301      WRITE(ICOUT,115)
7302  115 FORMAT('      MUST BE 1 OR LARGER.')
7303      CALL DPWRST('XXX','BUG ')
7304      WRITE(ICOUT,116)
7305  116 FORMAT('      SUCH WAS NOT THE CASE HERE.')
7306      CALL DPWRST('XXX','BUG ')
7307      WRITE(ICOUT,117)N
7308  117 FORMAT('      THE INPUT NUMBER OF OBSERVATIONS HERE = ',I8,
7309     1'.')
7310      CALL DPWRST('XXX','BUG ')
7311      GOTO9000
7312  119 CONTINUE
7313C
7314C               *************************************************
7315C               **  STEP 2--                                   **
7316C               **  COMPUTE THE GEOMETRIC STANDARD DEVIATION.  **
7317C               *************************************************
7318C
7319      DN=DBLE(N)
7320      DSUM1=0.0D0
7321C
7322      DO200I=1,N
7323        IF(X(I).LE.0.0)THEN
7324          WRITE(ICOUT,999)
7325          CALL DPWRST('XXX','BUG ')
7326          WRITE(ICOUT,211)
7327  211     FORMAT('***** ERROR FROM GEOSD')
7328          CALL DPWRST('XXX','BUG ')
7329          WRITE(ICOUT,213)
7330  213     FORMAT('      NON-POSITIVE NUMBER ENCOUNTERED.  SD SET ',
7331     1           'TO ZERO.')
7332          CALL DPWRST('XXX','BUG ')
7333          IERROR='YES'
7334          XGEOSD=0.0
7335          GOTO9000
7336        ENDIF
7337        DX=DBLE(X(I))
7338        DSUM1=DSUM1+DLOG(DX)
7339  200 CONTINUE
7340      DMEAN=DSUM1/DN
7341      DSUM1=0.0D0
7342      DO300I=1,N
7343        DX=DLOG(DBLE(X(I)))
7344        DSUM1=DSUM1 + (DX-DMEAN)**2
7345  300 CONTINUE
7346      DSD=DSQRT(DSUM1/(DN-1.0D0))
7347      XGEOSD=
7348     1  REAL(DEXP(DSD))
7349C
7350C               *******************************
7351C               **  STEP 3--                 **
7352C               **  WRITE OUT A LINE         **
7353C               **  OF SUMMARY INFORMATION.  **
7354C               *******************************
7355C
7356      IF(IFEEDB.EQ.'OFF')GOTO890
7357      IF(IWRITE.EQ.'OFF')GOTO890
7358      WRITE(ICOUT,999)
7359      CALL DPWRST('XXX','BUG ')
7360      WRITE(ICOUT,811)N,XGEOSD
7361  811 FORMAT('THE GEOMETRIC STANDARD DEVIATION OF THE ',I8,
7362     1' OBSERVATIONS = ',E15.7)
7363      CALL DPWRST('XXX','BUG ')
7364  890 CONTINUE
7365C
7366C               *****************
7367C               **  STEP 90--  **
7368C               **  EXIT.      **
7369C               *****************
7370C
7371 9000 CONTINUE
7372      IF(IBUGA3.EQ.'OFF')GOTO9090
7373      WRITE(ICOUT,999)
7374      CALL DPWRST('XXX','BUG ')
7375      WRITE(ICOUT,9011)
7376 9011 FORMAT('***** AT THE END       OF GEOSD--')
7377      CALL DPWRST('XXX','BUG ')
7378      WRITE(ICOUT,9012)IBUGA3,IERROR
7379 9012 FORMAT('IBUGA3,IERROR = ',A4,2X,A4)
7380      CALL DPWRST('XXX','BUG ')
7381      WRITE(ICOUT,9013)N
7382 9013 FORMAT('N = ',I8)
7383      CALL DPWRST('XXX','BUG ')
7384      WRITE(ICOUT,9015)XGEOSD
7385 9015 FORMAT('XGEOSD = ',E15.7)
7386      CALL DPWRST('XXX','BUG ')
7387 9090 CONTINUE
7388C
7389      RETURN
7390      END
7391      SUBROUTINE GEOPDF(X,P,PDF)
7392C
7393C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY MASS
7394C              FUNCTION VALUE AT THE DOUBLE PRECISION VALUE X
7395C              FOR THE GEOMETRIC DISTRIBUTION WITH DOUBLE PRECISION
7396C              'BERNOULLI PROBABILITY' PARAMETER = P.  THE GEOMETRIC
7397C              DISTRIBUTION USED HEREIN HAS MEAN = (1-P)/P AND
7398C              STANDARD DEVIATION = SQRT((1-P)/(P*P))).  THIS
7399C              DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE INTEGER
7400C              X--X = 0, 1, 2, ... .  THIS DISTRIBUTION HAS THE
7401C              PROBABILITY MASS FUNCTION
7402C
7403C                 p(X;P) = P * (1-P)**X.
7404C
7405C              THE GEOMETRIC DISTRIBUTION IS THE DISTRIBUTION OF THE
7406C              NUMBER OF FAILURES BEFORE OBTAINING 1 SUCCESS IN AN
7407C              INDEFINITE SEQUENCE OF BERNOULLI (0,1) TRIALS WHERE THE
7408C              PROBABILITY OF SUCCESS IN A SINGLE TRIAL = P.
7409C     INPUT  ARGUMENTS--X      = THE DOUBLE PRECISION VALUE AT WHICH
7410C                                THE PROBABILITY MASS FUNCTION IS TO
7411C                                BE EVALUATED.  X SHOULD BE NON-NEGATIVE
7412C                                AND INTEGRAL-VALUED.
7413C                     --P      = THE DOUBLE PRECISION VALUE OF THE
7414C                                'BERNOULLI PROBABILITY' PARAMETER FOR
7415C                                THE GEOMETRIC DISTRIBUTION.  P SHOULD
7416C                                BE BETWEEN 0.0 (EXCLUSIVELY) AND
7417C                                1.0 (INCLUSIVELY).
7418C     OUTPUT ARGUMENTS--PDF    = THE DOUBLE PRECISION PROBABILITY
7419C                                MASS FUNCTION VALUE.
7420C     OUTPUT--THE DOUBLE PRECISION PROBABILITY MASS FUNCTION VALUE PDF
7421C             FOR THE GEOMETRIC DISTRIBUTION WITH 'BERNOULLI
7422C             PROBABILITY' PARAMETER = P.
7423C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
7424C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE AND INTEGRAL-VALUED.
7425C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
7426C                   AND 1.0 (INCLUSIVELY).
7427C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
7428C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
7429C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
7430C     LANGUAGE--ANSI FORTRAN.
7431C     REFERENCES--FELLER, AN INTRODUCTION TO PROBABILITY
7432C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
7433C                 EDITION 2, 1957, PAGES 155-157, 210.
7434C               --NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS
7435C                 SERIES 55, 1964, PAGE 929.
7436C               --CATHERINE LOADER (2000), "FAST AND ACCURATE COMPUTATION
7437C                 OF BINOMIAL PROBABILITIES", BELL LABS?
7438C     WRITTEN BY--JAMES J. FILLIBEN
7439C                 STATISTICAL ENGINEERING LABORATORY (205.03)
7440C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
7441C                 GAITHERSBURG, MD 20899-8980
7442C                 PHONE:  301-975-2855
7443C     ORIGINAL VERSION--APRIL     1994.
7444C     UPDATED         --MARCH     2009. USE CATHERINE LOADER BINOMIAL
7445C                                       PDF ALGORITHM
7446C
7447C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
7448C
7449C---------------------------------------------------------------------
7450C
7451      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
7452C
7453      INCLUDE 'DPCOP2.INC'
7454C
7455C---------------------------------------------------------------------
7456C
7457C     CHECK THE INPUT ARGUMENTS FOR ERRORS
7458C
7459      PDF=0.0D0
7460      IF(P.LE.0.0D0 .OR. P.GT.1.0D0)THEN
7461        WRITE(ICOUT,11)
7462        CALL DPWRST('XXX','BUG ')
7463        WRITE(ICOUT,46)P
7464        CALL DPWRST('XXX','BUG ')
7465        GOTO9000
7466      ELSEIF(X.LT.0.0D0)THEN
7467        WRITE(ICOUT,3)
7468        CALL DPWRST('XXX','BUG ')
7469        WRITE(ICOUT,46)X
7470        CALL DPWRST('XXX','BUG ')
7471        GOTO9000
7472      ENDIF
7473    3 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEOPDF IS NEGATIVE')
7474   11 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEOPDF IS OUTSIDE ',
7475     1       'THE ALLOWABLE (0,1) INTERVAL')
7476   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
7477C
7478C-----START POINT-----------------------------------------------------
7479C
7480      IF(P.EQ.0.0D0)THEN
7481        PDF=0.0D0
7482      ELSE
7483        INTX=INT(X+0.00001D0)
7484        DX=DBLE(INTX) + 1.0D0
7485        DQ=1.0D0 - P
7486        DN=0.0D00
7487        ILOG=0
7488        CALL BINRAW(DN,P,DQ,DX,DTERM1,ILOG)
7489        PDF=P*DTERM1
7490      ENDIF
7491C
7492 9000 CONTINUE
7493      RETURN
7494      END
7495      SUBROUTINE GE2PDF(X,P,PDF)
7496C
7497C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY MASS
7498C              FUNCTION VALUE AT THE DOUBLE PRECISION VALUE X
7499C              FOR THE GEOMETRIC DISTRIBUTION WITH DOUBLE PRECISION
7500C              'BERNOULLI PROBABILITY' PARAMETER = P.  THE GEOMETRIC
7501C              DISTRIBUTION USED HEREIN HAS MEAN = 1/P AND
7502C              STANDARD DEVIATION = SQRT((1-P)/(P*P))).  THIS
7503C              DISTRIBUTION IS DEFINED FOR ALL POSITIVE INTEGER
7504C              X--X = 1, 2, ... .  THIS DISTRIBUTION HAS THE
7505C              PROBABILITY MASS FUNCTION
7506C
7507C                 p(X;P) = P * (1-P)**(X-1).
7508C
7509C              THE GEOMETRIC DISTRIBUTION IS THE DISTRIBUTION OF THE
7510C              NUMBER OF FAILURES UP TO AND INCLUDING THE FIRST SUCCESS
7511C              IN AN INDEFINITE SEQUENCE OF BERNOULLI (0,1) TRIALS WHERE
7512C              THE PROBABILITY OF SUCCESS IN A SINGLE TRIAL = P.
7513C     INPUT  ARGUMENTS--X      = THE DOUBLE PRECISION VALUE AT WHICH
7514C                                THE PROBABILITY MASS FUNCTION IS TO
7515C                                BE EVALUATED.  X SHOULD BE POSITIVE
7516C                                AND INTEGRAL-VALUED.
7517C                     --P      = THE DOUBLE PRECISION VALUE OF THE
7518C                                'BERNOULLI PROBABILITY' PARAMETER FOR
7519C                                THE GEOMETRIC DISTRIBUTION.  P SHOULD
7520C                                BE BETWEEN 0.0 (EXCLUSIVELY) AND
7521C                                1.0 (INCLUSIVELY).
7522C     OUTPUT ARGUMENTS--PDF    = THE DOUBLE PRECISION PROBABILITY
7523C                                MASS FUNCTION VALUE.
7524C     OUTPUT--THE DOUBLE PRECISION PROBABILITY MASS FUNCTION VALUE PDF
7525C             FOR THE GEOMETRIC DISTRIBUTION WITH 'BERNOULLI
7526C             PROBABILITY' PARAMETER = P.
7527C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
7528C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE AND INTEGRAL-VALUED.
7529C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
7530C                   AND 1.0 (INCLUSIVELY).
7531C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
7532C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
7533C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
7534C     LANGUAGE--ANSI FORTRAN.
7535C     REFERENCES--FELLER, AN INTRODUCTION TO PROBABILITY
7536C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
7537C                 EDITION 2, 1957, PAGES 155-157, 210.
7538C               --NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS
7539C                 SERIES 55, 1964, PAGE 929.
7540C               --CATHERINE LOADER (2000), "FAST AND ACCURATE COMPUTATION
7541C                 OF BINOMIAL PROBABILITIES", BELL LABS?
7542C     WRITTEN BY--JAMES J. FILLIBEN
7543C                 STATISTICAL ENGINEERING LABORATORY (205.03)
7544C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
7545C                 GAITHERSBURG, MD 20899-8980
7546C                 PHONE:  301-975-2855
7547C     ORIGINAL VERSION--APRIL     1994.
7548C     UPDATED         --MARCH     2009. USE CATHERINE LOADER BINOMIAL
7549C                                       PDF ALGORITHM
7550C
7551C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
7552C
7553C---------------------------------------------------------------------
7554C
7555      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
7556C
7557      INCLUDE 'DPCOP2.INC'
7558C
7559C---------------------------------------------------------------------
7560C
7561C     CHECK THE INPUT ARGUMENTS FOR ERRORS
7562C
7563      PDF=0.0D0
7564      IF(P.LE.0.0D0 .OR. P.GT.1.0D0)THEN
7565        WRITE(ICOUT,11)
7566        CALL DPWRST('XXX','BUG ')
7567        WRITE(ICOUT,46)P
7568        CALL DPWRST('XXX','BUG ')
7569        GOTO9000
7570      ELSEIF(X.LT.1.0D0)THEN
7571        WRITE(ICOUT,3)
7572        CALL DPWRST('XXX','BUG ')
7573        WRITE(ICOUT,46)X
7574        CALL DPWRST('XXX','BUG ')
7575        GOTO9000
7576      ENDIF
7577    3 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GE2PDF IS ',
7578     1       'NON-POSITIVE')
7579   11 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GE2PDF IS OUTSIDE ',
7580     1       'THE ALLOWABLE (0,1) INTERVAL')
7581   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
7582C
7583C-----START POINT-----------------------------------------------------
7584C
7585      IF(P.EQ.0.0D0)THEN
7586        PDF=0.0D0
7587      ELSE
7588        INTX=INT(X+0.00001D0)
7589CCCCC   DX=DBLE(INTX) - 1.0D0
7590        DX=DBLE(INTX)
7591        DQ=1.0D0 - P
7592        DN=0.0D00
7593        ILOG=0
7594        CALL BINRAW(DN,P,DQ,DX,DTERM1,ILOG)
7595        PDF=P*DTERM1
7596      ENDIF
7597C
7598 9000 CONTINUE
7599      RETURN
7600      END
7601      SUBROUTINE GEOPPF(P,PPAR,PPF)
7602C
7603C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT FUNCTION
7604C              VALUE FOR THE GEOMETRIC DISTRIBUTION WITH DOUBLE
7605C              PRECISION 'BERNOULLI PROBABILITY' PARAMETER = PPAR.
7606C              THE GEOMETRIC DISTRIBUTION USED HEREIN HAS MEAN =
7607C              (1-PPAR)/PPAR AND STANDARD DEVIATION =
7608C              SQRT((1-PPAR)/(PPAR*PPAR))).  THIS DISTRIBUTION IS
7609C              DEFINED FOR ALL NON-NEGATIVE INTEGER X--X = 0, 1, 2, ...
7610C              THIS DISTRIBUTION HAS THE PROBABILITY FUNCTION
7611C
7612C                 p(X;PPAR) = PPAR * (1-PPAR)**X
7613C
7614C              THE GEOMETRIC DISTRIBUTION IS THE DISTRIBUTION OF THE
7615C              NUMBER OF FAILURES BEFORE OBTAINING 1 SUCCESS IN AN
7616C              INDEFINITE SEQUENCE OF BERNOULLI (0,1) TRIALS WHERE THE
7617C              PROBABILITY OF SUCCESS IN A SINGLE TRIAL = PPAR.
7618C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
7619C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
7620C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
7621C     INPUT  ARGUMENTS--P      = THE DOUBLE PRECISION VALUE (BETWEEN
7622C                                0.0 (INCLUSIVELY) AND 1.0 (EXCLUSIVELY))
7623C                                AT WHICH THE PERCENT POINT FUNCTION IS
7624C                                TO BE EVALUATED.
7625C                     --PPAR   = THE DOUBLE PRECISION VALUE OF THE
7626C                                'BERNOULLI PROBABILITY' PARAMETER FOR
7627C                                THE GEOMETRIC DISTRIBUTION.  PPAR
7628C                                SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
7629C                                AND 1.0 (INCLUSIVELY).
7630C     OUTPUT ARGUMENTS--PPF    = THE DOUBLE PRECISION PERCENT POINT
7631C                                FUNCTION VALUE.
7632C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION VALUE PPF
7633C             FOR THE GEOMETRIC DISTRIBUTION WITH 'BERNOULLI
7634C             PROBABILITY' PARAMETER VALUE = PPAR.
7635C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
7636C     RESTRICTIONS--PPAR SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
7637C                   AND 1.0 (INCLUSIVELY).
7638C                 --P SHOULD BE BETWEEN 0.0 (INCLUSIVELY)
7639C                   AND 1.0 (EXCLUSIVELY).
7640C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
7641C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
7642C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
7643C     LANGUAGE--ANSI FORTRAN (1977)
7644C     REFERENCES--FELLER, AN INTRODUCTION TO PROBABILITY
7645C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
7646C                 EDITION 2, 1957, PAGES 155-157, 210.
7647C               --NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS
7648C                 SERIES 55, 1964, PAGE 929.
7649C     WRITTEN BY--JAMES J. FILLIBEN
7650C                 STATISTICAL ENGINEERING DIVISION
7651C                 INFORMATION TECHNOLOGY LABORATORY
7652C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
7653C                 GAITHERSBURG, MD 20899-8980
7654C                 PHONE--301-921-3651
7655C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
7656C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
7657C     LANGUAGE--ANSI FORTRAN (1977)
7658C     VERSION NUMBER--82/7
7659C     ORIGINAL VERSION--NOVEMBER  1975.
7660C     UPDATED         --DECEMBER  1981.
7661C     UPDATED         --MAY       1982.
7662C     UPDATED         --MARCH     2009. USE DOUBLE PRECISION
7663C
7664C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
7665C
7666C---------------------------------------------------------------------
7667C
7668      IMPLICIT DOUBLE PRECISION (A-H, O-Z)
7669C
7670      INCLUDE 'DPCOP2.INC'
7671C
7672C-----START POINT-----------------------------------------------------
7673C
7674C     CHECK THE INPUT ARGUMENTS FOR ERRORS
7675C
7676      PPF=0.0D0
7677      IF(P.LT.0.0D0 .OR. P.GE.1.0D0)THEN
7678        WRITE(ICOUT,1)
7679        CALL DPWRST('XXX','BUG ')
7680        WRITE(ICOUT,46)P
7681        CALL DPWRST('XXX','BUG ')
7682        GOTO9000
7683      ELSEIF(PPAR.LE.0.0D0 .OR. PPAR.GT.1.0D0)THEN
7684        WRITE(ICOUT,11)
7685        CALL DPWRST('XXX','BUG ')
7686        WRITE(ICOUT,46)PPAR
7687        CALL DPWRST('XXX','BUG ')
7688        GOTO9000
7689      ENDIF
7690    1 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEOPPF IS OUTSIDE ',
7691     1       'THE ALLOWABLE (0,1) INTERVAL')
7692   11 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEOPPF IS OUTSIDE ',
7693     1       'THE ALLOWABLE (0,1) INTERVAL')
7694   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
7695C
7696      IF(P.EQ.0.0D0)THEN
7697        PPF=0.0D0
7698      ELSEIF(PPAR.EQ.1.0D0)THEN
7699        PPF=0.0D0
7700      ELSE
7701C
7702        ARG1=1.0D0-P
7703        ARG2=1.0D0-PPAR
7704        ANUM=LOG(ARG1)
7705        ADEN=LOG(ARG2)
7706        RATIO=ANUM/ADEN
7707        IRATIO=INT(RATIO)
7708        PPF=REAL(IRATIO)
7709        ARATIO=REAL(IRATIO)
7710        IF(ARATIO.EQ.RATIO)PPF=REAL(IRATIO-1)
7711      ENDIF
7712C
7713 9000 CONTINUE
7714      RETURN
7715      END
7716      SUBROUTINE GEORAN(N,P,ISEED,X)
7717C
7718C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
7719C              FROM THE GEOMETRIC DISTRIBUTION
7720C              WITH SINGLE PRECISION 'BERNOULLI PROBABILITY'
7721C              PARAMETER = P.
7722C              THE GEOMETRIC DISTRIBUTION USED
7723C              HEREIN HAS MEAN = (1-P)/P
7724C              AND STANDARD DEVIATION = SQRT((1-P)/(P*P))).
7725C              THIS DISTRIBUTION IS DEFINED FOR
7726C              ALL NON-NEGATIVE INTEGER X--X = 0, 1, 2, ... .
7727C              THIS DISTRIBUTION HAS THE PROBABILITY FUNCTION
7728C              F(X) = P * (1-P)**X.
7729C              THE GEOMETRIC DISTRIBUTION IS THE
7730C              DISTRIBUTION OF THE NUMBER OF FAILURES
7731C              BEFORE OBTAINING 1 SUCCESS IN AN
7732C              INDEFINITE SEQUENCE OF BERNOULLI (0,1)
7733C              TRIALS WHERE THE PROBABILITY OF SUCCESS
7734C              IN A SINGLE TRIAL = P.
7735C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
7736C                                OF RANDOM NUMBERS TO BE
7737C                                GENERATED.
7738C                     --P      = THE SINGLE PRECISION VALUE
7739C                                OF THE 'BERNOULLI PROBABILITY'
7740C                                PARAMETER FOR THE GEOMETRIC
7741C                                DISTRIBUTION.
7742C                                P SHOULD BE BETWEEN
7743C                                0.0 (EXCLUSIVELY) AND
7744C                                1.0 (EXCLUSIVELY).
7745C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
7746C                                (OF DIMENSION AT LEAST N)
7747C                                INTO WHICH THE GENERATED
7748C                                RANDOM SAMPLE WILL BE PLACED.
7749C     OUTPUT--A RANDOM SAMPLE OF SIZE N
7750C             FROM THE GEOMETRIC DISTRIBUTION
7751C             WITH 'BERNOULLI PROBABILITY' PARAMETER = P.
7752C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
7753C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
7754C                   OF N FOR THIS SUBROUTINE.
7755C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
7756C                   AND 1.0 (EXCLUSIVELY).
7757C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
7758C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
7759C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
7760C     LANGUAGE--ANSI FORTRAN (1977)
7761C     COMMENT--NOTE THAT EVEN THOUGH THE OUTPUT
7762C              FROM THIS DISCRETE RANDOM NUMBER
7763C              GENERATOR MUST NECESSARILY BE A
7764C              SEQUENCE OF ***INTEGER*** VALUES,
7765C              THE OUTPUT VECTOR X IS SINGLE
7766C              PRECISION IN MODE.
7767C              X HAS BEEN SPECIFIED AS SINGLE
7768C              PRECISION SO AS TO CONFORM WITH THE DATAPAC
7769C              CONVENTION THAT ALL OUTPUT VECTORS FROM ALL
7770C              DATAPAC SUBROUTINES ARE SINGLE PRECISION.
7771C              THIS CONVENTION IS BASED ON THE BELIEF THAT
7772C              1) A MIXTURE OF MODES (FLOATING POINT
7773C              VERSUS INTEGER) IS INCONSISTENT AND
7774C              AN UNNECESSARY COMPLICATION
7775C              IN A DATA ANALYSIS; AND
7776C              2) FLOATING POINT MACHINE ARITHMETIC
7777C              (AS OPPOSED TO INTEGER ARITHMETIC)
7778C              IS THE MORE NATURAL MODE FOR DOING
7779C              DATA ANALYSIS.
7780C     REFERENCES--TOCHER, THE ART OF SIMULATION,
7781C                 1963, PAGES 14-15.
7782C               --HAMMERSLEY AND HANDSCOMB, MONTE CARLO METHODS,
7783C                 1964, PAGE 36.
7784C               --FELLER, AN INTRODUCTION TO PROBABILITY
7785C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
7786C                 EDITION 2, 1957, PAGES 155-157, 210.
7787C               --NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY APPLIED MATHEMATICS
7788C                 SERIES 55, 1964, PAGE 929.
7789C     WRITTEN BY--JAMES J. FILLIBEN
7790C                 STATISTICAL ENGINEERING DIVISION
7791C                 INFORMATION TECHNOLOGY LABORATORY
7792C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
7793C                 GAITHERSBURG, MD 20899-8980
7794C                 PHONE--301-921-3651
7795C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
7796C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
7797C     LANGUAGE--ANSI FORTRAN (1966)
7798C     VERSION NUMBER--82/7
7799C     ORIGINAL VERSION--NOVEMBER  1975.
7800C     UPDATED         --DECEMBER  1981.
7801C     UPDATED         --MAY       1982.
7802C
7803C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
7804C
7805C---------------------------------------------------------------------
7806C
7807      DIMENSION X(*)
7808C
7809C---------------------------------------------------------------------
7810C
7811      INCLUDE 'DPCOP2.INC'
7812C
7813C-----START POINT-----------------------------------------------------
7814C
7815C     CHECK THE INPUT ARGUMENTS FOR ERRORS
7816C
7817      IF(N.LT.1)THEN
7818        WRITE(ICOUT, 5)
7819    5   FORMAT('***** ERROR--THE REQUESTED NUMBER OF GEOMETRIC ',
7820     1         'RANDOM NUMBERS IS NON-POSITIVE.')
7821        CALL DPWRST('XXX','BUG ')
7822        WRITE(ICOUT,47)N
7823   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
7824        CALL DPWRST('XXX','BUG ')
7825        GOTO9000
7826      ELSEIF(P.LE.0.0.OR.P.GE.1.0)THEN
7827        WRITE(ICOUT,11)
7828   11   FORMAT('***** ERROR--THE PROBABILITY OF SUCCESS PARAMETER ',
7829     1         'FOR THE GEOMETRIC DISTRIBUTION')
7830        CALL DPWRST('XXX','BUG ')
7831        WRITE(ICOUT,12)
7832   12   FORMAT('      IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
7833        CALL DPWRST('XXX','BUG ')
7834        WRITE(ICOUT,46)P
7835   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',F10.5)
7836        CALL DPWRST('XXX','BUG ')
7837        GOTO9000
7838      ENDIF
7839C
7840C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
7841C
7842      CALL UNIRAN(N,ISEED,X)
7843C
7844C     GENERATE N GEOMETRIC RANDOM NUMBERS
7845C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
7846C
7847      DO100I=1,N
7848        IF(X(I).EQ.0.0)GOTO100
7849        ARG1=1.0-X(I)
7850        ARG2=1.0-P
7851        ANUM=LOG(ARG1)
7852        ADEN=LOG(ARG2)
7853        RATIO=ANUM/ADEN
7854        IRATIO=INT(RATIO)
7855        X(I)=REAL(IRATIO)
7856        ARATIO=REAL(IRATIO)
7857        IF(ARATIO.EQ.RATIO)X(I)=REAL(IRATIO-1)
7858  100 CONTINUE
7859C
7860 9000 CONTINUE
7861      RETURN
7862      END
7863      SUBROUTINE GE2RAN(N,P,ISEED,X)
7864C
7865C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
7866C              FROM THE GEOMETRIC DISTRIBUTION
7867C              WITH SINGLE PRECISION 'BERNOULLI PROBABILITY'
7868C              PARAMETER = P.
7869C              THIS USES AN ALTERNATE DEFINITION THAN GEOPDF
7870C              (THE VERSION HERE IS USED IN THE DIGITAL LIBRARY OF
7871C              MATHEMATICAL FUNCTIONS).
7872C              THE GEOMETRIC DISTRIBUTION USED HEREIN
7873C              HEREIN HAS MEAN = 1/P
7874C              AND STANDARD DEVIATION = SQRT((1-P)/(P*P))).
7875C              THIS DISTRIBUTION IS DEFINED FOR
7876C              ALL POSITIVE INTEGER X--X = 1, 2, ... .
7877C              THIS DISTRIBUTION HAS THE PROBABILITY FUNCTION
7878C              F(X) = P * (1-P)**(X-1).
7879C              NOTE THAT THIS ALTERNATE DEFINITION IS ESENTIALLY
7880C              THE DEFAULT DEFINITION SHIFTED 1 TO THE RIGHT.
7881C              SO FOR RANDOM NUMBERS, JUST USE THE ALGORITHM FOR
7882C              THE DEFAULT DEFINITION AND ADD 1.
7883C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
7884C                                OF RANDOM NUMBERS TO BE
7885C                                GENERATED.
7886C                     --P      = THE SINGLE PRECISION VALUE
7887C                                OF THE 'BERNOULLI PROBABILITY'
7888C                                PARAMETER FOR THE GEOMETRIC
7889C                                DISTRIBUTION.
7890C                                P SHOULD BE BETWEEN
7891C                                0.0 (EXCLUSIVELY) AND
7892C                                1.0 (EXCLUSIVELY).
7893C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
7894C                                (OF DIMENSION AT LEAST N)
7895C                                INTO WHICH THE GENERATED
7896C                                RANDOM SAMPLE WILL BE PLACED.
7897C     OUTPUT--A RANDOM SAMPLE OF SIZE N
7898C             FROM THE GEOMETRIC DISTRIBUTION
7899C             WITH 'BERNOULLI PROBABILITY' PARAMETER = P.
7900C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
7901C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
7902C                   OF N FOR THIS SUBROUTINE.
7903C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
7904C                   AND 1.0 (EXCLUSIVELY).
7905C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
7906C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
7907C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
7908C     LANGUAGE--ANSI FORTRAN (1977)
7909C     COMMENT--NOTE THAT EVEN THOUGH THE OUTPUT
7910C              FROM THIS DISCRETE RANDOM NUMBER
7911C              GENERATOR MUST NECESSARILY BE A
7912C              SEQUENCE OF ***INTEGER*** VALUES,
7913C              THE OUTPUT VECTOR X IS SINGLE
7914C              PRECISION IN MODE.
7915C              X HAS BEEN SPECIFIED AS SINGLE
7916C              PRECISION SO AS TO CONFORM WITH THE DATAPAC
7917C              CONVENTION THAT ALL OUTPUT VECTORS FROM ALL
7918C              DATAPAC SUBROUTINES ARE SINGLE PRECISION.
7919C              THIS CONVENTION IS BASED ON THE BELIEF THAT
7920C              1) A MIXTURE OF MODES (FLOATING POINT
7921C              VERSUS INTEGER) IS INCONSISTENT AND
7922C              AN UNNECESSARY COMPLICATION
7923C              IN A DATA ANALYSIS; AND
7924C              2) FLOATING POINT MACHINE ARITHMETIC
7925C              (AS OPPOSED TO INTEGER ARITHMETIC)
7926C              IS THE MORE NATURAL MODE FOR DOING
7927C              DATA ANALYSIS.
7928C     REFERENCES--TOCHER, THE ART OF SIMULATION,
7929C                 1963, PAGES 14-15.
7930C               --HAMMERSLEY AND HANDSCOMB, MONTE CARLO METHODS,
7931C                 1964, PAGE 36.
7932C               --FELLER, AN INTRODUCTION TO PROBABILITY
7933C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
7934C                 EDITION 2, 1957, PAGES 155-157, 210.
7935C               --NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY APPLIED MATHEMATICS
7936C                 SERIES 55, 1964, PAGE 929.
7937C     WRITTEN BY--JAMES J. FILLIBEN
7938C                 STATISTICAL ENGINEERING DIVISION
7939C                 INFORMATION TECHNOLOGY LABORATORY
7940C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
7941C                 GAITHERSBURG, MD 20899-8980
7942C                 PHONE--301-921-3651
7943C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
7944C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
7945C     LANGUAGE--ANSI FORTRAN (1966)
7946C     VERSION NUMBER--82/7
7947C     ORIGINAL VERSION--NOVEMBER  1975.
7948C     UPDATED         --DECEMBER  1981.
7949C     UPDATED         --MAY       1982.
7950C
7951C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
7952C
7953C---------------------------------------------------------------------
7954C
7955      DIMENSION X(*)
7956C
7957C-----COMMON----------------------------------------------------------
7958C
7959      INCLUDE 'DPCOP2.INC'
7960C
7961C-----START POINT-----------------------------------------------------
7962C
7963C     CHECK THE INPUT ARGUMENTS FOR ERRORS
7964C
7965      IF(N.LT.1)THEN
7966        WRITE(ICOUT, 5)
7967    5   FORMAT('***** ERROR--THE REQUESTED NUMBER OF GEOMETRIC ',
7968     1        'RANDOM NUMBERS IS NON-POSITIVE.')
7969        CALL DPWRST('XXX','BUG ')
7970        WRITE(ICOUT,47)N
7971   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
7972        CALL DPWRST('XXX','BUG ')
7973        GOTO9000
7974      ELSEIF(P.LE.0.0.OR.P.GE.1.0)THEN
7975        WRITE(ICOUT,11)
7976   11   FORMAT('***** ERROR--THE PROBABILITY OF SUCCESS PARAMETER ',
7977     1         'FOR THE GEOMETRIC DISTRIBUTION')
7978        CALL DPWRST('XXX','BUG ')
7979        WRITE(ICOUT,12)
7980   12   FORMAT('      IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
7981        CALL DPWRST('XXX','BUG ')
7982        WRITE(ICOUT,46)P
7983   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
7984        CALL DPWRST('XXX','BUG ')
7985        GOTO9000
7986      ENDIF
7987C
7988C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
7989C
7990      CALL UNIRAN(N,ISEED,X)
7991C
7992C     GENERATE N GEOMETRIC RANDOM NUMBERS
7993C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
7994C
7995      DO100I=1,N
7996        IF(X(I).EQ.0.0)GOTO100
7997        ARG1=1.0-X(I)
7998        ARG2=1.0-P
7999        ANUM=LOG(ARG1)
8000        ADEN=LOG(ARG2)
8001        RATIO=ANUM/ADEN
8002        IRATIO=INT(RATIO)
8003        X(I)=REAL(IRATIO)
8004        ARATIO=REAL(IRATIO)
8005        IF(ARATIO.EQ.RATIO)X(I)=REAL(IRATIO-1)
8006        X(I)=X(I)+1.0
8007  100 CONTINUE
8008C
8009 9000 CONTINUE
8010      RETURN
8011      END
8012      SUBROUTINE GENER (W, N, WPRIME, NPRIME, INDEX, R)
8013C
8014C        ALGORITHM AS 304.6 APPL.STATIST. (1996), VOL.45, NO.3
8015C
8016C        Computes an array of sums of the various R-combinations of
8017C        the elements of W
8018C
8019C        DATAPLOT NOTE: UTILITY ROUTINE USED BY FISHER TWO SAMPLE
8020C                       RANDOMIZATION TEST
8021C
8022      INTEGER N, NPRIME, R, INDEX(R)
8023      REAL W(N), WPRIME(NPRIME)
8024C
8025      INTEGER I, J
8026      DOUBLE PRECISION SUM
8027      LOGICAL INIT
8028C
8029      EXTERNAL NEXT
8030C
8031      INIT = .TRUE.
8032C
8033      DO 20 I = 1, NPRIME
8034         CALL NEXT(INDEX, R, N, INIT)
8035         SUM = 0.0D0
8036         DO 10 J = 1, R
8037            SUM = SUM + DBLE(W(INDEX(J)))
8038   10    CONTINUE
8039         WPRIME(I) = REAL(SUM)
8040   20 CONTINUE
8041C
8042      RETURN
8043      END
8044      SUBROUTINE GEPCDF(X,GAMMA,MINMAX,IGEPDF,CDF)
8045C
8046C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
8047C              FUNCTION VALUE FOR THE GENERALIZED PARETO
8048C              DISTRIBUTION WITH SINGLE PRECISION
8049C              SHAPE LENGTH PARAMETER = GAMMA.
8050C
8051C              THE GENERALIZED PARETO DENSITY FOR THE MAXIMUM
8052C              CASE HAS THE CUMULATIVE DISTRIBUTION FUNCTION
8053C
8054C              F(X;GAMMA) = 1 - [1+GAMMA*X]**(-1/GAMMA)
8055C                           IF GAMMA < 0: X >= 0
8056C                           IF GAMMA > 0: 0 <= X < 1/GAMMA
8057C
8058C                         = 1 - EXP(-X)
8059C                           X >= 0, GAMMA = 0
8060C
8061C              SOME SOURCES (E.G., JOHNSON, KOTZ, AND BALAKRISHNAN
8062C              AND CASTILLO, HADI, BALAKRISHNAN, AND SARABIA)
8063C              USE THE PARAMETERIZATION GAMMA=-GAMMA:
8064C
8065C              F(X;GAMMA) = 1 - [1-GAMMA*X]**(1/GAMMA)
8066C                           IF GAMMA < 0: 0 <= X < -1/GAMMA
8067C                           IF GAMMA > 0: X >= 0
8068C
8069C                         = 1 - EXP(-X)
8070C                           X >= 0, GAMMA = 0
8071C
8072C              THE GENERALIZED PARETO DENSITY FOR THE MINIMUM
8073C              CASE HAS THE PROBABILITY DENSITY FUNCTION
8074C
8075C              F(X;GAMMA) = [1-GAMMA*X]**(-(1/GAMMA))
8076C                           IF GAMMA < 0: 0 <= X < 1/GAMMA
8077C                           IF GAMMA > 0: X >= 0
8078C
8079C                         = EXP(X)
8080C                           X <= 0, GAMMA = 0
8081C
8082C              IN THE ALTERNATE PARAMETERIZATION
8083C
8084C              F(X;GAMMA) = [1+GAMMA*X]**(1/GAMMA)
8085C                           IF GAMMA < 0: X >= 0
8086C                           IF GAMMA > 0: 0 <= X < 1/GAMMA
8087C
8088C                         = EXP(X)
8089C                           X <= 0, GAMMA = 0
8090C
8091C
8092C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
8093C                                AT WHICH THE CUMULATIVE DISTRIBUTION
8094C                                FUNCTION IS TO BE EVALUATED.
8095C                     --GAMMA  = THE SINGLE PRECISION VALUE
8096C                                OF THE TAIL LENGTH PARAMETER.
8097C                                GAMMA CAN BE NEATIVE, 0, OR POSITIVE.
8098C                     --MINMAX = INTEGER VALUE, CURRENTLY NOT USED.
8099C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
8100C                                DISTRIBUTION FUNCTION VALUE.
8101C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION FUNCTION .
8102C             VALUE CDF FOR THE GENERALIZED PARETO DISTRIBUTION
8103C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
8104C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
8105C     RESTRICTIONS--GAMMA SHOULD BE POSITIVE.
8106C                 --X SHOULD BE POSITIVE
8107C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
8108C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
8109C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
8110C     LANGUAGE--ANSI FORTRAN (1977)
8111C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTIUOUS UNIVARIATE
8112C                 DISTRIBUTIONS--VOLUME 1", SECOND EDITION, PP. 614-620.
8113C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA (2005),
8114C                 "EXTREME VALUES AND RELATED MODELS WITH APPLICATIONS
8115C                 IN ENGINEERING AND SCIENCE", WILEY, PP. 65-66.
8116C     WRITTEN BY--JAMES J. FILLIBEN
8117C                 STATISTICAL ENGINEERING DIVISION
8118C                 INFORMATION TECHNOLOGY LABORATORY
8119C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
8120C                 GAITHERSBURG, MD 20899-8980
8121C                 PHONE--301-975-2899
8122C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
8123C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
8124C     VERSION NUMBER--93/12
8125C     ORIGINAL VERSION--DECEMBER  1993.
8126C     UPDATED         --DECEMBER  1994  CHECK FOR NEGATIVE X
8127C     UPDATED         --JANUARY   1995  CHECK FOR OUT OF RANGE X
8128C     UPDATED         --JUNE      2004  ALTERNATE DEFINITION FOR
8129C                                       GENERAPLIZED PARETO (USES
8130C                                       DIFFERENT SIGN)
8131C     UPDATED         --JANUARY   2008  SUPPORT MINIMUM CASE
8132C
8133C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
8134C
8135C
8136C---------------------------------------------------------------------
8137C
8138      CHARACTER*4 IGEPDF
8139C
8140      DOUBLE PRECISION DX
8141      DOUBLE PRECISION DG
8142      DOUBLE PRECISION DCDF
8143C
8144      INCLUDE 'DPCOP2.INC'
8145C
8146C-----START POINT-----------------------------------------------------
8147C
8148C     CHECK THE INPUT ARGUMENTS FOR ERRORS
8149C
8150C
8151C     COMPUTE THE CDF VALUE
8152C
8153C
8154C     MAXIMUM CASE
8155C
8156      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
8157C
8158C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
8159C       2) X >= 0                 FOR BOTH PARAMETERIZATIONS
8160C
8161        IF(X.LT.0.0)THEN
8162          CDF=0.0
8163          GOTO9000
8164        ENDIF
8165C
8166        IF(GAMMA.EQ.0.0)THEN
8167          CDF=1.0 - EXP(-X)
8168          GOTO9000
8169        ENDIF
8170C
8171        IF(IGEPDF.EQ.'JOHN')THEN
8172          IF(X.GE.1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
8173            CDF=1.0
8174            GOTO9000
8175          ENDIF
8176        ELSE
8177          IF(X.GE.-1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
8178            CDF=1.0
8179            GOTO9000
8180          ENDIF
8181        ENDIF
8182C
8183C       COMPUTE THE CDF VALUE
8184C
8185        DX=DBLE(X)
8186        DG=DBLE(GAMMA)
8187C
8188        IF(IGEPDF.EQ.'JOHN')THEN
8189          DCDF=1.0D0-((1.0D0-DG*DX)**(1.0D0/DG))
8190        ELSE
8191          DCDF=1.0D0-((1.0D0+DG*DX)**(-1.0D0/DG))
8192        ENDIF
8193        CDF=REAL(DCDF)
8194C
8195C     NOW DO THE MINIMUM CASE
8196C
8197      ELSE
8198C
8199C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
8200C       2) X <= 0                 FOR BOTH PARAMETERIZATIONS
8201C
8202        IF(X.GE.0.0)THEN
8203          CDF=1.0
8204          GOTO9000
8205        ENDIF
8206C
8207        IF(GAMMA.EQ.0.0)THEN
8208          CDF=EXP(X)
8209          GOTO9000
8210        ENDIF
8211C
8212        IF(IGEPDF.EQ.'JOHN')THEN
8213          IF(X.LE.-1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
8214            CDF=0.0
8215            GOTO9000
8216          ENDIF
8217        ELSE
8218          IF(X.LE.1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
8219            CDF=0.0
8220            GOTO9000
8221          ENDIF
8222        ENDIF
8223C
8224C       COMPUTE THE CDF VALUE
8225C
8226        DX=DBLE(X)
8227        DG=DBLE(GAMMA)
8228C
8229        IF(IGEPDF.EQ.'JOHN')THEN
8230          DCDF=(1.0D0+DG*DX)**(1.0D0/DG)
8231        ELSE
8232          DCDF=(1.0D0-DG*DX)**(-(1.0D0/DG))
8233        ENDIF
8234        CDF=REAL(DCDF)
8235C
8236      ENDIF
8237C
8238 9000 CONTINUE
8239      RETURN
8240      END
8241      SUBROUTINE GEPCHA(X,GAMMA,MINMAX,IGEPDF,HAZ)
8242C
8243C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE HAZARD
8244C              FUNCTION VALUE FOR THE GENERALIZED PARETO
8245C              DENSITY WITH SINGLE PRECISION
8246C              SHAPE LENGTH PARAMETER = GAMMA.
8247C              THE GENERALIZED PARETO DENSITY USED
8248C              HEREIN IS DEFINED FOR ALL POSITIVE X,
8249C              AND HAS THE CUMULATIVE HAZARD FUNCTION
8250C                H(X) = -LOG[(1-GAMMA*X)**(1/GAMMA)]
8251C              JOHNSON, KOTZ, AND BALAKRISHNANA REVERSE THE SIGN OF THE
8252C              SHAPE PARAMETER:
8253C                H(X) = -LOG[(1+GAMMA*X)**(-1/GAMMA)]
8254C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION POSITIVE VALUE AT
8255C                                WHICH THE HAZARD FUNCTION IS TO BE
8256C                                EVALUATED.
8257C                     --GAMMA  = THE SINGLE PRECISION VALUE
8258C                                OF THE TAIL LENGTH PARAMETER.
8259C                                GAMMA CAN BE NEG., 0, OR POS.
8260C                     --MINMAX = THE INTEGER VALUE, NOT CURRENTLY USED
8261C                     --IGEPDF = CHARACTER VALUE SPECIFYING WHETHER
8262C                                EMIL SIMIU OR JOHNSON AND KOTZ DEFINITION
8263C                                SHOULD BE USED.
8264C     OUTPUT ARGUMENTS--HAZ    = THE SINGLE PRECISION
8265C                                CUMULATIVE HAZARD FUNCTION VALUE.
8266C     OUTPUT--THE SINGLE PRECISION CUMULATIVE HAZARD FUNCTION .
8267C             VALUE HAZ FOR THE GENERALIZED PARETO DENSITY
8268C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
8269C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
8270C     RESTRICTIONS--GAMMA MAY BE NEGATIVE, 0, OR POSITIVE
8271C                 --X SHOULD BE POSITIVE
8272C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
8273C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
8274C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
8275C     LANGUAGE--ANSI FORTRAN (1977)
8276C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTIUOUS UNIVARIATE
8277C                 DISTRIBUTIONS--VOLUME 1", SECOND EDITION, PP. 614-620.
8278C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA (2005),
8279C                 "EXTREME VALUES AND RELATED MODELS WITH APPLICATIONS
8280C                 IN ENGINEERING AND SCIENCE", WILEY, PP. 65-66.
8281C     WRITTEN BY--JAMES J. FILLIBEN
8282C                 STATISTICAL ENGINEERING DIVISION
8283C                 INFORMATION TECHNOLOGY LABORATORY
8284C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
8285C                 GAITHERSBURG, MD 20899-8980
8286C                 PHONE--301-975-2855
8287C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
8288C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
8289C     VERSION NUMBER--98/4
8290C     ORIGINAL VERSION--APRIL     1998.
8291C     UPDATED         --JUNE      2004  ALTERNATE DEFINITION FOR
8292C                                       GENERAPLIZED PARETO (USES
8293C                                       DIFFERENT SIGN)
8294C     UPDATED         --JANUARY   2008  SUPPORT MINIMUM CASE
8295C
8296C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
8297C
8298      INCLUDE 'DPCOMC.INC'
8299C
8300C---------------------------------------------------------------------
8301C
8302      CHARACTER*4 IGEPDF
8303C
8304      DOUBLE PRECISION DX
8305      DOUBLE PRECISION DG
8306      DOUBLE PRECISION DHAZ
8307C
8308      INCLUDE 'DPCOP2.INC'
8309C
8310C-----START POINT-----------------------------------------------------
8311C
8312C     CHECK THE INPUT ARGUMENTS FOR ERRORS
8313C
8314C     MAXIMUM CASE
8315C
8316      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
8317C
8318C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
8319C       2) X >= 0                 FOR BOTH PARAMETERIZATIONS
8320C
8321        IF(X.LT.0.0)THEN
8322          WRITE(ICOUT,1)
8323          CALL DPWRST('XXX','BUG ')
8324          WRITE(ICOUT,46)X
8325          CALL DPWRST('XXX','BUG ')
8326          HAZ=0.0
8327          GOTO9000
8328        ENDIF
8329    1   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEPCHAZ IS ',
8330     1         'NEGATIVE.')
8331C
8332        IF(GAMMA.EQ.0.0)THEN
8333          HAZ=X
8334          GOTO9000
8335        ENDIF
8336C
8337        IF(IGEPDF.EQ.'JOHN')THEN
8338          IF(X.GT.1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
8339            WRITE(ICOUT,3)
8340            CALL DPWRST('XXX','BUG ')
8341            WRITE(ICOUT,47)X
8342            CALL DPWRST('XXX','BUG ')
8343            WRITE(ICOUT,48)GAMMA
8344            CALL DPWRST('XXX','BUG ')
8345            HAZ=0.0
8346            GOTO9000
8347          ENDIF
8348        ELSE
8349          IF(X.GT.-1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
8350            WRITE(ICOUT,2)
8351            CALL DPWRST('XXX','BUG ')
8352            WRITE(ICOUT,47)X
8353            CALL DPWRST('XXX','BUG ')
8354            WRITE(ICOUT,48)GAMMA
8355            CALL DPWRST('XXX','BUG ')
8356            HAZ=0.0
8357            GOTO9000
8358          ENDIF
8359        ENDIF
8360C
8361    2   FORMAT('***** ERROR--FROM GEPCHAZ: X >= -1/GAMMA.')
8362    3   FORMAT('***** ERROR--FROM GEPCHAZ: X >= 1/GAMMA.')
8363   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
8364   47   FORMAT('***** THE VALUE OF X IS     ',G15.7)
8365   48   FORMAT('***** THE VALUE OF GAMMA IS ',G15.7)
8366C
8367C       COMPUTE THE HAZ VALUE
8368C
8369        DX=DBLE(X)
8370        DG=DBLE(GAMMA)
8371C
8372        IF(IGEPDF.EQ.'JOHN')THEN
8373          DHAZ=-DLOG((1.0D0-DG*DX)**(1.0D0/DG))
8374        ELSE
8375          DHAZ=-DLOG((1.0D0+DG*DX)**(-1.0D0/DG))
8376        ENDIF
8377        HAZ=REAL(DHAZ)
8378C
8379C     NOW DO THE MINIMUM CASE
8380C
8381      ELSE
8382C
8383C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
8384C       2) X <= 0                 FOR BOTH PARAMETERIZATIONS
8385C
8386        IF(X.GT.0.0)THEN
8387          WRITE(ICOUT,11)
8388          CALL DPWRST('XXX','BUG ')
8389          WRITE(ICOUT,46)X
8390          CALL DPWRST('XXX','BUG ')
8391          HAZ=0.0
8392          GOTO9000
8393        ENDIF
8394   11   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEPHAZ IS ',
8395     1         'POSITIVE.')
8396C
8397        IF(GAMMA.EQ.0.0)THEN
8398          HAZ=1.0
8399          GOTO9000
8400        ENDIF
8401C
8402        IF(IGEPDF.EQ.'JOHN')THEN
8403          IF(X.LE.-1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
8404            WRITE(ICOUT,13)
8405            CALL DPWRST('XXX','BUG ')
8406            WRITE(ICOUT,47)X
8407            CALL DPWRST('XXX','BUG ')
8408            WRITE(ICOUT,48)GAMMA
8409            CALL DPWRST('XXX','BUG ')
8410            HAZ=0.0
8411            GOTO9000
8412          ENDIF
8413        ELSE
8414          IF(X.LE.1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
8415            WRITE(ICOUT,12)
8416            CALL DPWRST('XXX','BUG ')
8417            WRITE(ICOUT,47)X
8418            CALL DPWRST('XXX','BUG ')
8419            WRITE(ICOUT,48)GAMMA
8420            CALL DPWRST('XXX','BUG ')
8421            HAZ=0.0
8422            GOTO9000
8423          ENDIF
8424        ENDIF
8425C
8426   12   FORMAT('***** ERROR--FROM GEPHAZ: X <= 1/GAMMA.')
8427   13   FORMAT('***** ERROR--FROM GEPHAZ: X <= -1/GAMMA.')
8428C
8429C       COMPUTE THE HAZ VALUE
8430C
8431        CALL GEPCDF(X,GAMMA,MINMAX,IGEPDF,CDF)
8432        XTEMP1=1.0 - CDF
8433        IF(XTEMP1.NE.0.0)THEN
8434          HAZ=-LOG(XTEMP1)
8435        ELSE
8436          HAZ=0.0
8437          WRITE(ICOUT,22)
8438          CALL DPWRST('XXX','BUG ')
8439        ENDIF
8440   22   FORMAT('***** ERROR FROM GEPCHAZ: HAZARD VALUE OVERFLOWS.')
8441C
8442      ENDIF
8443C
8444
8445
8446
8447 9000 CONTINUE
8448      RETURN
8449      END
8450      SUBROUTINE GEPHAZ(X,GAMMA,MINMAX,IGEPDF,HAZ)
8451C
8452C     PURPOSE--THIS SUBROUTINE COMPUTES THE HAZARD
8453C              FUNCTION VALUE FOR THE GENERALIZED PARETO
8454C              DENSITY WITH SINGLE PRECISION
8455C              SHAPE LENGTH PARAMETER = GAMMA.
8456C              THE GENERALIZED PARETO DENSITY USED
8457C              HEREIN IS DEFINED FOR ALL POSITIVE X,
8458C              AND HAS THE HAZARD FUNCTION
8459C                 H(X) = 1/(1+GAMMA*X)
8460C              JOHNSON, KOTZ, AND BALARKRISHNAN REVERSE THE SIGN:
8461C                 H(X) = 1/(1-GAMMA*X)
8462C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION POSITIVE VALUE
8463C                                AT WHICH THE HAZARD
8464C                                FUNCTION IS TO BE EVALUATED.
8465C                     --GAMMA  = THE SINGLE PRECISION VALUE
8466C                                OF THE TAIL LENGTH PARAMETER.
8467C                                GAMMA CAN BE NEG., 0, OR POS.
8468C                     --MINMAX = THE INTEGER VALUE, NOT CURRENTLY USED
8469C                     --IGEPDF = CHARACTER VALUE SPECIFYING WHETHER
8470C                                EMIL SIMIU OR JOHNSON AND KOTZ DEFINITION
8471C                                SHOULD BE USED.
8472C     OUTPUT ARGUMENTS--HAZ    = THE SINGLE PRECISION
8473C                                HAZARD FUNCTION VALUE.
8474C     OUTPUT--THE SINGLE PRECISION HAZARD FUNCTION .
8475C             VALUE HAZ FOR THE GENERALIZED PARETO DENSITY
8476C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
8477C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
8478C     RESTRICTIONS--GAMMA MAY BE NEGATIVE, 0, OR POSITIVE
8479C                 --X SHOULD BE POSITIVE
8480C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
8481C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
8482C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
8483C     LANGUAGE--ANSI FORTRAN (1977)
8484C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTIUOUS UNIVARIATE
8485C                 DISTRIBUTIONS--VOLUME 1", SECOND EDITION, PP. 614-620.
8486C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA (2005),
8487C                 "EXTREME VALUES AND RELATED MODELS WITH APPLICATIONS
8488C                 IN ENGINEERING AND SCIENCE", WILEY, PP. 65-66.
8489C     WRITTEN BY--JAMES J. FILLIBEN
8490C                 STATISTICAL ENGINEERING DIVISION
8491C                 INFORMATION TECHNOLOGY LABORATORY
8492C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
8493C                 GAITHERSBURG, MD 20899-8980
8494C                 PHONE--301-975-2855
8495C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
8496C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
8497C     VERSION NUMBER--98/4
8498C     ORIGINAL VERSION--APRIL     1998.
8499C     UPDATED         --JUNE      2004  ALTERNATE DEFINITION FOR
8500C                                       GENERAPLIZED PARETO (USES
8501C                                       DIFFERENT SIGN)
8502C     UPDATED         --JANUARY   2008  SUPPORT MINIMUM CASE
8503C
8504C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
8505C
8506C
8507C---------------------------------------------------------------------
8508C
8509      CHARACTER*4 IGEPDF
8510C
8511      DOUBLE PRECISION DX
8512      DOUBLE PRECISION DG
8513      DOUBLE PRECISION DHAZ
8514C
8515      INCLUDE 'DPCOP2.INC'
8516C
8517C-----START POINT-----------------------------------------------------
8518C
8519C     CHECK THE INPUT ARGUMENTS FOR ERRORS
8520C
8521C     COMPUTE THE HAZ VALUE
8522C
8523C     MAXIMUM CASE
8524C
8525      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
8526C
8527C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
8528C       2) X >= 0                 FOR BOTH PARAMETERIZATIONS
8529C
8530        IF(X.LT.0.0)THEN
8531          WRITE(ICOUT,1)
8532          CALL DPWRST('XXX','BUG ')
8533          WRITE(ICOUT,46)X
8534          CALL DPWRST('XXX','BUG ')
8535          HAZ=0.0
8536          GOTO9000
8537        ENDIF
8538    1   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEPHAZ IS ',
8539     1         'NEGATIVE.')
8540C
8541        IF(GAMMA.EQ.0.0)THEN
8542          HAZ=1.0
8543          GOTO9000
8544        ENDIF
8545C
8546        IF(IGEPDF.EQ.'JOHN')THEN
8547          IF(X.GT.1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
8548            WRITE(ICOUT,3)
8549            CALL DPWRST('XXX','BUG ')
8550            WRITE(ICOUT,47)X
8551            CALL DPWRST('XXX','BUG ')
8552            WRITE(ICOUT,48)GAMMA
8553            CALL DPWRST('XXX','BUG ')
8554            HAZ=0.0
8555            GOTO9000
8556          ENDIF
8557        ELSE
8558          IF(X.GT.-1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
8559            WRITE(ICOUT,2)
8560            CALL DPWRST('XXX','BUG ')
8561            WRITE(ICOUT,47)X
8562            CALL DPWRST('XXX','BUG ')
8563            WRITE(ICOUT,48)GAMMA
8564            CALL DPWRST('XXX','BUG ')
8565            HAZ=0.0
8566            GOTO9000
8567          ENDIF
8568        ENDIF
8569C
8570    2   FORMAT('***** ERROR--FROM GEPHAZ: X >= -1/GAMMA.')
8571    3   FORMAT('***** ERROR--FROM GEPHAZ: X >= 1/GAMMA.')
8572   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
8573   47   FORMAT('***** THE VALUE OF X IS     ',G15.7)
8574   48   FORMAT('***** THE VALUE OF GAMMA IS ',G15.7)
8575C
8576C       COMPUTE THE HAZ VALUE
8577C
8578        DX=DBLE(X)
8579        DG=DBLE(GAMMA)
8580C
8581        IF(IGEPDF.EQ.'JOHN')THEN
8582          DHAZ=1.0D0/(1.0D0 - DG*DX)
8583        ELSE
8584          DHAZ=1.0D0/(1.0D0 + DG*DX)
8585        ENDIF
8586        HAZ=REAL(DHAZ)
8587C
8588C     NOW DO THE MINIMUM CASE
8589C
8590      ELSE
8591C
8592C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
8593C       2) X <= 0                 FOR BOTH PARAMETERIZATIONS
8594C
8595        IF(X.GT.0.0)THEN
8596          WRITE(ICOUT,11)
8597          CALL DPWRST('XXX','BUG ')
8598          WRITE(ICOUT,46)X
8599          CALL DPWRST('XXX','BUG ')
8600          HAZ=0.0
8601          GOTO9000
8602        ENDIF
8603   11   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEPHAZ IS ',
8604     1         'POSITIVE.')
8605C
8606        IF(GAMMA.EQ.0.0)THEN
8607          HAZ=1.0
8608          GOTO9000
8609        ENDIF
8610C
8611        IF(IGEPDF.EQ.'JOHN')THEN
8612          IF(X.LE.-1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
8613            WRITE(ICOUT,13)
8614            CALL DPWRST('XXX','BUG ')
8615            WRITE(ICOUT,47)X
8616            CALL DPWRST('XXX','BUG ')
8617            WRITE(ICOUT,48)GAMMA
8618            CALL DPWRST('XXX','BUG ')
8619            HAZ=0.0
8620            GOTO9000
8621          ENDIF
8622        ELSE
8623          IF(X.LE.1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
8624            WRITE(ICOUT,12)
8625            CALL DPWRST('XXX','BUG ')
8626            WRITE(ICOUT,47)X
8627            CALL DPWRST('XXX','BUG ')
8628            WRITE(ICOUT,48)GAMMA
8629            CALL DPWRST('XXX','BUG ')
8630            HAZ=0.0
8631            GOTO9000
8632          ENDIF
8633        ENDIF
8634C
8635   12   FORMAT('***** ERROR--FROM GEPHAZ: X <= 1/GAMMA.')
8636   13   FORMAT('***** ERROR--FROM GEPHAZ: X <= -1/GAMMA.')
8637C
8638C       COMPUTE THE HAZ VALUE
8639C
8640        CALL GEPPDF(X,GAMMA,MINMAX,IGEPDF,PDF)
8641        CALL GEPCDF(X,GAMMA,MINMAX,IGEPDF,CDF)
8642        XTEMP1=1.0 - CDF
8643        IF(XTEMP1.NE.0.0)THEN
8644          HAZ=PDF/XTEMP1
8645        ELSE
8646          HAZ=0.0
8647          WRITE(ICOUT,22)
8648          CALL DPWRST('XXX','BUG ')
8649        ENDIF
8650   22   FORMAT('***** ERROR FROM GEPHAZ: HAZARD VALUE OVERFLOWS.')
8651C
8652      ENDIF
8653C
8654 9000 CONTINUE
8655      RETURN
8656      END
8657      SUBROUTINE GEPLI1(Y,N,MINMAX,IGEPDF,ALOC,SCALE,SHAPE,
8658     1                  ALIK,AIC,AICC,BIC,
8659     1                  ISUBRO,IBUGA3,IERROR)
8660C
8661C     PURPOSE--THIS ROUTINE COMPUTES THE LIKELIHOOD FUNCTION FOR THE
8662C              GENERALIZED PARETO DISTRIBUTION.  THIS IS FOR THE
8663C              RAW DATA CASE (I.E., NO GROUPING AND NO CENSORING).
8664C
8665C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
8666C              PERFORMED.
8667C
8668C     REFERENCE--CASTILLO, HADI, BALAKRISHNAN, SARABIA, "EXTREME
8669C                VALUE AND RELATED MODELS WITH APPLICATIONS IN
8670C                ENGINEERING AND SCIENCE", WILEY, 2005.
8671C     WRITTEN BY--ALAN HECKERT
8672C                 STATISTICAL ENGINEERING DIVISION
8673C                 INFORMATION TECHNOLOGY LABORATORY
8674C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
8675C                 GAITHERSBURG, MD 20899-8980
8676C                 PHONE--301-975-2899
8677C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
8678C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
8679C     LANGUAGE--ANSI FORTRAN (1977)
8680C     VERSION NUMBER--2010/07
8681C     ORIGINAL VERSION--JULY      2010.
8682C
8683C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
8684C
8685      CHARACTER*4 IGEPDF
8686      CHARACTER*4 ISUBRO
8687      CHARACTER*4 IBUGA3
8688      CHARACTER*4 IERROR
8689C
8690      CHARACTER*4 IWRITE
8691C
8692      CHARACTER*4 ISUBN1
8693      CHARACTER*4 ISUBN2
8694      CHARACTER*4 ISTEPN
8695C
8696      DOUBLE PRECISION DX
8697      DOUBLE PRECISION DS
8698      DOUBLE PRECISION DU
8699      DOUBLE PRECISION DG
8700      DOUBLE PRECISION DN
8701      DOUBLE PRECISION DNP
8702      DOUBLE PRECISION DLIK
8703      DOUBLE PRECISION DSUM1
8704      DOUBLE PRECISION DTERM1
8705      DOUBLE PRECISION DTERM2
8706      DOUBLE PRECISION DTERM3
8707C
8708C---------------------------------------------------------------------
8709C
8710      DIMENSION Y(*)
8711C
8712C---------------------------------------------------------------------
8713C
8714      INCLUDE 'DPCOP2.INC'
8715C
8716C-----START POINT-----------------------------------------------------
8717C
8718      ISUBN1='GEPL'
8719      ISUBN2='I1  '
8720      IERROR='NO'
8721C
8722      SHAPE=CPUMIN
8723      SHAPSV=CPUMIN
8724      ALIK=CPUMIN
8725      AIC=CPUMIN
8726      AICC=CPUMIN
8727      BIC=CPUMIN
8728C
8729      IF(IGEPDF.EQ.'SIMI')THEN
8730        SHAPSV=SHAPE
8731        SHAPE=-SHAPE
8732      ENDIF
8733C
8734      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PLI1')THEN
8735        WRITE(ICOUT,999)
8736  999   FORMAT(1X)
8737        CALL DPWRST('XXX','WRIT')
8738        WRITE(ICOUT,51)
8739   51   FORMAT('**** AT THE BEGINNING OF GEPLI1--')
8740        CALL DPWRST('XXX','WRIT')
8741        WRITE(ICOUT,52)IBUGA3,ISUBRO,N,ALOC,SCALE,SHAPE
8742   52   FORMAT('IBUGA3,ISUBRO,N,ALOC,SCALE,SHAPE = ',2(A4,2X),I8,3G15.7)
8743        CALL DPWRST('XXX','WRIT')
8744        DO56I=1,MIN(N,100)
8745          WRITE(ICOUT,57)I,Y(I)
8746   57     FORMAT('I,Y(I) = ',I8,G15.7)
8747          CALL DPWRST('XXX','WRIT')
8748   56   CONTINUE
8749      ENDIF
8750C
8751C               ******************************************
8752C               **  STEP 1--                            **
8753C               **  COMPUTE LIKELIHOOD FUNCTION         **
8754C               ******************************************
8755C
8756      ISTEPN='1'
8757      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PLI1')
8758     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
8759C
8760      IERFLG=0
8761      IERROR='NO'
8762      IWRITE='OFF'
8763C
8764C     FOR THE MAXIMUM CASE, THE LOG-LIKELIHOOD FUNCTION IS
8765C     (U = LOCATION, S = SCALE, G = SHAPE):
8766C
8767C        -N*LOG(S) + ((1/G - 1)*SUM[i=1 to N][LOG(1 - G*(X(i)-U)/S)]
8768C
8769C     WHEN G = 0, THIS SIMPLIFIES TO
8770C
8771C        -N*LOG(S) + (1/G)*SUM[i=1 to N][X(i) - U]
8772C
8773C     FOR THE MINIMUM CASE, JUST TAKE X(I) = -X(I) AND USE ABOVE FORMULA.
8774C
8775      DN=DBLE(N)
8776      DS=DBLE(SCALE)
8777      DU=DBLE(ALOC)
8778      DG=DBLE(SHAPE)
8779      IF(MINMAX.EQ.1)THEN
8780        DO100I=1,N
8781          Y(I)=-Y(I)
8782  100   CONTINUE
8783      ENDIF
8784C
8785      DTERM1=-DN*DLOG(DS)
8786      DSUM1=0.0D0
8787      IF(SHAPE.NE.0.0)THEN
8788        DTERM2=(1.0D0/DG) - 1.0D0
8789        DO1010I=1,N
8790          DX=(DBLE(Y(I)) - DU)/DS
8791          IF(1.0D0 - DG*DX.LE.0.0D0)THEN
8792            IERROR='YES'
8793            GOTO9000
8794          ENDIF
8795          DSUM1=DSUM1 + DLOG(1.0D0 - DG*DX)
8796 1010   CONTINUE
8797        DLIK=DTERM1 + DTERM2*DSUM1
8798      ELSE
8799        DO1020I=1,N
8800          DX=(DBLE(Y(I)) - DU)/DS
8801          DSUM1=DSUM1 + DX
8802 1020   CONTINUE
8803        DLIK=DTERM1 - DSUM1
8804      ENDIF
8805C
8806      ALIK=REAL(DLIK)
8807      DNP=3.0D0
8808      AIC=REAL(-2.0D0*DLIK + 2.0D0*DNP)
8809      DTERM3=(2.0D0*DNP*(DNP+1.0D0))/(DN-DNP-1.0D0)
8810      AICC=REAL(-2.0D0*DLIK + 2.0D0*DNP + DTERM3)
8811      BIC=REAL(-2.0D0*DLIK + DNP*LOG(DN))
8812C
8813C     FOR MINIMUM CASE, CONVERT Y BACK TO ORIGINAL VALUES
8814C
8815      IF(MINMAX.EQ.1)THEN
8816        DO8010I=1,N
8817          Y(I)=-Y(I)
8818 8010   CONTINUE
8819      ENDIF
8820C
8821 9000 CONTINUE
8822C
8823      IF(IGEPDF.EQ.'SIMI')THEN
8824        SHAPE=SHAPSV
8825      ENDIF
8826C
8827      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PLI1')THEN
8828        WRITE(ICOUT,999)
8829        CALL DPWRST('XXX','WRIT')
8830        WRITE(ICOUT,9011)
8831 9011   FORMAT('**** AT THE END OF GEPLI1--')
8832        CALL DPWRST('XXX','WRIT')
8833        WRITE(ICOUT,9013)DSUM1,DSUM2,DTERM1,DTERM2,DTERM3
8834 9013   FORMAT('DSUM1,DSUM2,DTERM1,DTERM2,DTERM3 = ',5G15.7)
8835        CALL DPWRST('XXX','WRIT')
8836        WRITE(ICOUT,9014)ALIK,AIC,AICC,BIC
8837 9014   FORMAT('ALIK,AIC,AICC,BIC = ',4G15.7)
8838        CALL DPWRST('XXX','WRIT')
8839      ENDIF
8840C
8841      RETURN
8842      END
8843      SUBROUTINE GEPML1(Y,N,MAXNXT,MINMAX,ICASPL,IGEPDF,IGEPSV,IDFTTY,
8844     1                  GAMMSV,SCALSV,ISEED,THRESH,
8845     1                  TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,YTEMP,
8846     1                  DTEMP1,XMOM,NMOM,
8847     1                  XMEAN,XSD,XVAR,XMIN,XMAX,
8848     1                  ALOCMO,SCALMO,SHAPMO,
8849     1                  ALOCLM,SCALLM,SHAPLM,
8850     1                  ALOCEP,SCALEP,SHAPEP,
8851     1                  ALOCML,SCALML,SHAPML,MLFLAG,
8852     1                  NUSE,ZMEAN,ZVAR,ZSD,ALOC,
8853     1                  VARMM1,VARMM2,COVMOM,
8854     1                  VARML1,VARML2,COVML,
8855     1                  ISUBRO,IBUGA3,IERROR)
8856C
8857C     PURPOSE--THIS ROUTINE COMPUTES THE MAXIMUM LIKELIHOOD ESTIMATES
8858C              FOR THE 3-PARAMETER GENERALIZED PARETO DISTRIBUTION FOR
8859C              THE RAW DATA CASE (I.E., NO CENSORING AND NO GROUPING).
8860C              THIS ROUTINE RETURNS ONLY THE POINT ESTIMATES (CONFIDENCE
8861C              INTERVALS WILL BE COMPUTED IN A SEPARATE ROUTINE).
8862C
8863C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
8864C              PERFORMED.
8865C
8866C              PUT THIS IN A SEPARATE ROUTINE AS IT MAY BE CALLED
8867C              FROM MULTIPLE PLACES (DPMLGP WILL GENERATE THE OUTPUT
8868C              FOR THE GENERALIZED PARETO MLE COMMAND).
8869C
8870C              THE FOLLOWING METHODS ARE SUPPORTED:
8871C
8872C                  1) MOMENTS
8873C                  2) L-MOMENTS
8874C                  3) ELEMENTAL PERCENTILES
8875C                  4) MAXIMUM LIKELIHOOD
8876C
8877C               NOTE THAT MOMENT, L-MOMENT AND MAXIMUM LIKELIHOOD ARE
8878C               ONLY SUPOORTED FOR CERTAIN RANGES OF THE SHAPE PARAMETER.
8879C               ELEMENTAL PERCENTILES DOES NOT HAVE THIS RESTRICTION.
8880C
8881C               FOR CERTAIN PROCEDURES (E.G., BOOTSTRAP OR
8882C               BEST DISTRIBUTIONAL FIT) WE MAY WANT TO RESTRICT
8883C               FITTING TO THE ELEMENTAL PERCENTILES METHOD SINCE
8884C               THIS SHOULD RETURN A VALID VALUE REGARDLESS OF THE
8885C               VALUE OF THE SHAPE PARAMETER.
8886C
8887C     REFERENCE--JOHNSON, KOTZ, AND BALAKRISHNAN.  "CONTINUOUS
8888C                UNIVARIATE DISTRIBUTIONS, VOLUME I", SECOND
8889C                EDITION, WILEY, 1994, PP. 614-619.
8890C              --CASTILLO, HADI, BALAKRISHNAN, SARABIA, "EXTREME
8891C                VALUE AND RELATED MODELS WITH APPLICATIONS IN
8892C                ENGINEERING AND SCIENCE", WILEY, 2005.
8893C     WRITTEN BY--ALAN HECKERT
8894C                 STATISTICAL ENGINEERING DIVISION
8895C                 INFORMATION TECHNOLOGY LABORATORY
8896C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
8897C                 GAITHERSBURG, MD 20899-8980
8898C                 PHONE--301-975-2899
8899C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
8900C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
8901C     LANGUAGE--ANSI FORTRAN (1977)
8902C     VERSION NUMBER--2010/07
8903C     ORIGINAL VERSION--JULY      2010. EXTRACTED AS A SEPARATE
8904C                                       SUBROUTINE (FROM DPMLGP)
8905C     UPDATED         --APRIL     2011. IDFTTY TO SUPPRESS MOMENT
8906C                                       OR ML METHODS
8907C
8908C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
8909C
8910      DIMENSION Y(*)
8911      DIMENSION TEMP1(*)
8912      DIMENSION TEMP2(*)
8913      DIMENSION TEMP3(*)
8914      DIMENSION TEMP4(*)
8915      DIMENSION TEMP5(*)
8916      DIMENSION YTEMP(*)
8917      DOUBLE PRECISION DTEMP1(*)
8918      DOUBLE PRECISION XMOM(*)
8919      DOUBLE PRECISION XPAR(3)
8920      DOUBLE PRECISION FVEC(2)
8921      DOUBLE PRECISION TOL
8922      DOUBLE PRECISION G
8923      DOUBLE PRECISION T3
8924C
8925      CHARACTER*4 IGEPDF
8926      CHARACTER*4 IGEPSV
8927      CHARACTER*4 IDFTTY
8928      CHARACTER*4 ICASPL
8929      CHARACTER*4 ISUBRO
8930      CHARACTER*4 IBUGA3
8931      CHARACTER*4 IERROR
8932C
8933      CHARACTER*4 IWRITE
8934      CHARACTER*40 IDIST
8935C
8936      CHARACTER*4 ISUBN1
8937      CHARACTER*4 ISUBN2
8938      CHARACTER*4 ISTEPN
8939C
8940      EXTERNAL GPAFUN
8941C
8942C-----COMMON----------------------------------------------------------
8943C
8944      INCLUDE 'DPCOP2.INC'
8945C
8946C-----START POINT-----------------------------------------------------
8947C
8948      ISUBN1='GEPM'
8949      ISUBN2='L1  '
8950      IERROR='NO'
8951      IWRITE='OFF'
8952C
8953      AN=REAL(N)
8954      ALOCMO=CPUMIN
8955      SCALMO=CPUMIN
8956      SHAPMO=CPUMIN
8957      ALOCLM=CPUMIN
8958      SCALLM=CPUMIN
8959      SHAPLM=CPUMIN
8960      ALOCEP=CPUMIN
8961      SCALEP=CPUMIN
8962      SHAPEP=CPUMIN
8963      ALOCML=CPUMIN
8964      SCALMO=CPUMIN
8965      SHAPML=CPUMIN
8966      VARML1=CPUMIN
8967      VARML2=CPUMIN
8968      COVML=CPUMIN
8969      VARMM1=CPUMIN
8970      VARMM2=CPUMIN
8971      COVMOM=CPUMIN
8972      IFRST=0
8973C
8974      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PML1')THEN
8975        WRITE(ICOUT,999)
8976  999   FORMAT(1X)
8977        CALL DPWRST('XXX','WRIT')
8978        WRITE(ICOUT,51)
8979   51   FORMAT('**** AT THE BEGINNING OF GEPML1--')
8980        CALL DPWRST('XXX','WRIT')
8981        WRITE(ICOUT,52)IBUGA3,ISUBRO,ICASPL,IGEPDF,IDFTTY,MINMAX
8982   52   FORMAT('IBUGA3,ISUBRO,ICASPL,IGEPDF,IDFTTY,MINMAX = ',
8983     1         5(A4,2X),I5)
8984        CALL DPWRST('XXX','WRIT')
8985        DO56I=1,MIN(N,100)
8986          WRITE(ICOUT,57)I,Y(I)
8987   57     FORMAT('I,Y(I) = ',I8,G15.7)
8988          CALL DPWRST('XXX','WRIT')
8989   56   CONTINUE
8990      ENDIF
8991C
8992C               ********************************************
8993C               **  STEP 1--                              **
8994C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
8995C               ********************************************
8996C
8997      ISTEPN='1'
8998      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PML1')
8999     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
9000C
9001      IF(MINMAX.NE.1)THEN
9002        DO1145I=1,N
9003          IF(Y(I).LE.0.0)THEN
9004            WRITE(ICOUT,999)
9005            CALL DPWRST('XXX','WRIT')
9006            WRITE(ICOUT,1111)
9007            CALL DPWRST('XXX','WRIT')
9008            WRITE(ICOUT,1148)I,Y(I)
9009 1148       FORMAT('      ROW ',I8,' IS NON-POSITIVE (VALUE = ',
9010     1             G15.7,')')
9011            CALL DPWRST('XXX','WRIT')
9012            IERROR='YES'
9013            GOTO9000
9014          ENDIF
9015 1145   CONTINUE
9016      ELSE
9017        DO1155I=1,N
9018          IF(Y(I).GE.0.0)THEN
9019            WRITE(ICOUT,999)
9020            CALL DPWRST('XXX','WRIT')
9021            WRITE(ICOUT,1111)
9022            CALL DPWRST('XXX','WRIT')
9023            WRITE(ICOUT,1158)I,Y(I)
9024 1158       FORMAT('      ROW ',I8,' IS NON-NEGATIVE (VALUE = ',
9025     1             G15.7,')')
9026            CALL DPWRST('XXX','WRIT')
9027            IERROR='YES'
9028            GOTO9000
9029          ENDIF
9030 1155   CONTINUE
9031      ENDIF
9032C
9033C               **************************************************
9034C               **  STEP 2--                                   **
9035C               **  CARRY OUT CALCULATIONS                     **
9036C               **  FOR GENERALIZED PARETO MLE ESTIMATE        **
9037C               *************************************************
9038C
9039      ISTEPN='2'
9040      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PML1')
9041     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
9042C
9043      IDIST='GENERALIZED PARETO'
9044      IFLAG=0
9045      CALL SUMRAW(Y,N,IDIST,IFLAG,
9046     1            XMEAN,XVAR,XSD,XMIN,XMAX,
9047     1            ISUBRO,IBUGA3,IERROR)
9048C
9049      IF(MINMAX.EQ.1)THEN
9050        DO2002I=1,N
9051          Y(I)=-Y(I)
9052 2002   CONTINUE
9053      ENDIF
9054      CALL SORT(Y,N,Y)
9055      XMIN2=Y(1)
9056C
9057C     NOTE: L-MOMENTS WILL ESTIMATE THE THRESHOLD PARAMETER, SO
9058C           GENERATE THIS FIRST.  THE OTHER ESTIMATES ESTIMATE
9059C           ONLY SHAPE/SCALE PARAMETER, SO SUBTRACT OFF THE
9060C           L-MOMENT LOCATION ESTIMATE.
9061C
9062C           ALTERNATIVELY, THE USER CAN SPECIFY A THRESHOLD.
9063C           IF THE L-MOMENT ESTIMATE APPEARS TO BE INVALID
9064C           AND NO USER SPECIFIED THRESHOLD IS GIVEN, THEN
9065C           SUBTRACT THE DATA MINIMUM (PLUS AN EPSILON) FROM
9066C           THE DATA.
9067C
9068      NMOM=3
9069      DO2110I=1,N
9070        DTEMP1(I)=DBLE(Y(I))
9071 2110 CONTINUE
9072      CALL SAMLMU(DTEMP1,N,XMOM,NMOM)
9073      T3=XMOM(3)
9074      IF(XMOM(2).LE.0.0D0 .OR. DABS(T3).GE.1.0D0)THEN
9075        CONTINUE
9076      ELSE
9077        G=(1.0D0-3.0D0*T3)/(1.0D0+T3)
9078        SHAPLM=REAL(G)
9079        SCALLM=REAL((1.0D0+G)*(2.0D0+G)*XMOM(2))
9080        ALOCLM=REAL(XMOM(1)-DBLE(SCALLM)/(1.0D0+G))
9081        IF(IGEPDF.EQ.'SIMI')SHAPLM=-SHAPLM
9082      ENDIF
9083C
9084C     EXTRACT POINTS ABOVE THE THRESHOLD.  MOMENT AND ML ESTIMATORS
9085C     ARE CURRENTLY BASED ON 2-PARAMETER CASE, SO USE THIS
9086C     THRESHOLD AS LOCATION ESTIMATE IN THESE CASES.
9087C
9088C        1) IF USER-SPECIFIED VALUE GIVEN, USE THAT
9089C        2) IF NO THRESHOLD SPECIFIED, THEN
9090C           A) IF L-MOMENTS ESTIMATES ARE VALID, USE THE L-MOMENT
9091C              ESTIMATE OF LOCATION.  IF THIS IS >= DATA MINIMUM,
9092C              THEN USE OPTION B.
9093C           B) IF L-MOMENTS ESTIMATES ARE NOT VALID, USE THE
9094C              DATA MINIMUM (MINUS AN EPSILON)
9095C
9096      IF(THRESH.EQ.CPUMIN)THEN
9097        IF(ALOCLM.NE.CPUMIN .AND. ABS(SHAPLM).LE.0.6 .AND.
9098     1     ALOCLM.LT.XMIN2) THEN
9099          ALOC=ALOCLM
9100        ELSE
9101          EPS=XMIN2*0.0001
9102          ALOC=XMIN2 - EPS
9103        ENDIF
9104        NUSE=N
9105        DO2005I=1,N
9106          YTEMP(I)=Y(I) - ALOC
9107 2005   CONTINUE
9108      ELSE
9109        ALOC=THRESH
9110        IFIRST=N+1
9111        DO2010I=1,N
9112          IF(Y(I).GT.THRESH)THEN
9113            IFRST=I
9114            GOTO2019
9115          ENDIF
9116 2010   CONTINUE
9117 2019   CONTINUE
9118C
9119        NUSE=N-IFRST+1
9120        IF(NUSE.LT.3)THEN
9121          WRITE(ICOUT,999)
9122          CALL DPWRST('XXX','WRIT')
9123          WRITE(ICOUT,1111)
9124 1111     FORMAT('****** ERROR IN GENERALIZED PARETO ',
9125     1           'MAXIMUM LIKELIHOOD--')
9126          CALL DPWRST('XXX','WRIT')
9127          WRITE(ICOUT,2021)
9128 2021     FORMAT('      LESS THAN 3 POINTS ARE ABOVE THE THRESHOLD.')
9129          CALL DPWRST('XXX','WRIT')
9130          WRITE(ICOUT,2023)THRESH
9131 2023     FORMAT('      THRESHOLD          = ',G15.7)
9132          CALL DPWRST('XXX','WRIT')
9133          WRITE(ICOUT,2024)Y(1)
9134 2024     FORMAT('      MINIMUM DATA POINT = ',G15.7)
9135          CALL DPWRST('XXX','WRIT')
9136          WRITE(ICOUT,2025)Y(N)
9137 2025     FORMAT('      MAXIMUM DATA POINT = ',G15.7)
9138          CALL DPWRST('XXX','WRIT')
9139          IERROR='YES'
9140          GOTO9000
9141        ELSE
9142          ICNT=0
9143          DO2030I=IFRST,N
9144            ICNT=ICNT+1
9145            YTEMP(ICNT)=Y(I)
9146 2030     CONTINUE
9147        ENDIF
9148      ENDIF
9149C
9150      ITEMP=2
9151      NSAMP=20*NUSE
9152      IF(NSAMP.GT.5000)NSAMP=5000
9153      CALL DPEPM2(YTEMP,NUSE,ICASPL,MAXNXT,MINMAX,IGEPDF,
9154     1            ISEED,NSAMP,
9155     1            TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,
9156     1            ALOCDM,SCALEP,SHAPEP,
9157     1            IBUGA3,ISUBRO,IERROR)
9158      ALOCEP=ALOC
9159C
9160      IF(IDFTTY.EQ.'EPER')GOTO9000
9161C
9162C     MOMENT ESTIMATES (BASED ON POINTS ABOVE THRESHOLD)
9163C
9164      CALL MEAN(YTEMP,NUSE,IWRITE,ZMEAN,IBUGA3,IERROR)
9165      CALL VAR(YTEMP,NUSE,IWRITE,ZVAR,IBUGA3,IERROR)
9166      ZSD=SQRT(ZVAR)
9167C
9168      SHAPMO=0.5*(ZMEAN*ZMEAN/ZVAR - 1.0)
9169      SCALMO=0.5*ZMEAN*(ZMEAN*ZMEAN/ZVAR + 1.0)
9170      ALOCMO=ALOC
9171      IF(IGEPDF.EQ.'SIMI')SHAPMO=-SHAPMO
9172C
9173C     MAXIMUM LIKELIHOOD ESTIMATES (BASED ON POINTS ABOVE THRESHOLD)
9174C
9175      IF(IGEPSV.EQ.'EPER')THEN
9176        XPAR(1)=DBLE(SHAPEP)
9177        XPAR(2)=DBLE(SCALEP)
9178      ELSEIF(IGEPSV.EQ.'LMOM')THEN
9179        XPAR(1)=DBLE(SHAPLM)
9180        XPAR(2)=DBLE(SCALLM)
9181      ELSEIF(IGEPSV.EQ.'MOME')THEN
9182        XPAR(1)=DBLE(SHAPMO)
9183        XPAR(2)=DBLE(SCALMO)
9184      ELSEIF(IGEPSV.EQ.'USER')THEN
9185        XPAR(1)=DBLE(GAMMSV)
9186        XPAR(2)=DBLE(SCALSV)
9187      ELSE
9188        XPAR(1)=DBLE(SHAPEP)
9189        XPAR(2)=DBLE(SCALEP)
9190      ENDIF
9191      DO2111I=1,MAXNXT
9192        DTEMP1(I)=0.0D0
9193 2111 CONTINUE
9194C
9195      IOPT=2
9196      TOL=1.0D-5
9197      NVAR=2
9198      NPRINT=-1
9199      INFO=0
9200      LWA=MAXNXT
9201      CALL DNSQE(GPAFUN,JAC,IOPT,NVAR,XPAR,FVEC,TOL,NPRINT,INFO,
9202     1           DTEMP1,MAXNXT,YTEMP,NUSE)
9203C
9204      ALOCML=ALOC
9205      SHAPML=REAL(XPAR(1))
9206      SCALML=REAL(XPAR(2))
9207      MLFLAG=0
9208      IF(INFO.EQ.0)MLFLAG=1
9209      IF(INFO.EQ.2)MLFLAG=1
9210      IF(INFO.EQ.4)MLFLAG=1
9211C
9212      IF(SHAPMO.GT.-0.25)THEN
9213        AC1=(1.0+SHAPMO)**2/
9214     1      ((1.0+2.0*SHAPMO)*(1.0+3.0*SHAPMO)*(1.0+4.0*SHAPMO))
9215        AC1=AC1/REAL(N)
9216        VARMM2=2.0*SCALMO**2*(1.0+6.0*SHAPMO+12.0*SHAPMO**2)
9217        VARMM2=AC1*VARMM2
9218        VARMM1=(1.0+2.0*SHAPMO)**2*(1.0+SHAPMO+6.0*SHAPMO**2)
9219        VARMM1=AC1*VARMM1
9220        COVMOM=AC1*SCALMO*
9221     1         (1.0+2.0*SHAPMO)*(1.0+4.0*SHAPMO+12.0*SHAPMO**2)
9222      ELSE
9223        VARMM1=CPUMIN
9224        VARMM2=CPUMIN
9225        COVMOM=CPUMIN
9226      ENDIF
9227C
9228      IF(MLFLAG.EQ.0)THEN
9229        AN=REAL(N)
9230        VARML1=(1.0-SHAPML)**2/AN
9231        VARML2=2.0*SCALML**2*(1.0-SHAPML)/AN
9232        COVML=SCALML*(1.0-SHAPML)/AN
9233        IF(IGEPDF.NE.'SIMI')SHAPML=-SHAPML
9234      ENDIF
9235C
9236 9000 CONTINUE
9237      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PML1')THEN
9238        WRITE(ICOUT,999)
9239        CALL DPWRST('XXX','WRIT')
9240        WRITE(ICOUT,9011)
9241 9011   FORMAT('**** AT THE END OF GEPML1--')
9242        CALL DPWRST('XXX','WRIT')
9243        WRITE(ICOUT,9013)N,XMEAN,XSD,XMIN,XMAX
9244 9013   FORMAT('N,XMEAN,XSD,XMIN,XMAX = ',I8,4G15.7)
9245        CALL DPWRST('XXX','WRIT')
9246        WRITE(ICOUT,9016)ALOCMO,SCALMO,SHAPMO
9247 9016   FORMAT('ALOCMO,SCALMO,SHAPMO =  ',3G15.7)
9248        CALL DPWRST('XXX','WRIT')
9249        WRITE(ICOUT,9017)ALOCLM,SCALLM,SHAPLM
9250 9017   FORMAT('ALOCLM,SCALLM,SHAPLM =  ',3G15.7)
9251        CALL DPWRST('XXX','WRIT')
9252        WRITE(ICOUT,9018)ALOCEP,SCALEP,SHAPEP
9253 9018   FORMAT('ALOCLM,SCALLM,SHAPLM =  ',3G15.7)
9254        CALL DPWRST('XXX','WRIT')
9255        WRITE(ICOUT,9019)ALOCML,SCALML,SHAPML
9256 9019   FORMAT('ALOCML,SCALML,SHAPML =  ',3G15.7)
9257        CALL DPWRST('XXX','WRIT')
9258      ENDIF
9259C
9260      RETURN
9261      END
9262      SUBROUTINE GEPPDF(X,GAMMA,MINMAX,IGEPDF,PDF)
9263C
9264C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
9265C              FUNCTION VALUE FOR THE GENERALIZED PARETO
9266C              DENSITY WITH SINGLE PRECISION
9267C              SHAPE LENGTH PARAMETER = GAMMA.
9268C
9269C              THE GENERALIZED PARETO DENSITY FOR THE MAXIMUM
9270C              CASE HAS THE PROBABILITY DENSITY FUNCTION
9271C
9272C              f(X;GAMMA) = (1+GAMMA*X)**(-(1/GAMMA)-1)
9273C                           IF GAMMA < 0: X >= 0
9274C                           IF GAMMA > 0: 0 <= X < 1/GAMMA
9275C
9276C                         = EXP(-X)
9277C                           X >= 0, GAMMA = 0
9278C
9279C              SOME SOURCES (E.G., JOHNSON, KOTZ, AND BALAKRISHNAN
9280C              AND CASTILLO, HADI, BALAKRISHNAN, AND SARABIA)
9281C              USE THE PARAMETERIZATION GAMMA=-GAMMA:
9282C
9283C              f(X;GAMMA) = (1-GAMMA*X)**((1/GAMMA)-1)
9284C                           IF GAMMA < 0: 0 <= X < -1/GAMMA
9285C                           IF GAMMA > 0: X >= 0
9286C
9287C                         = EXP(-X)
9288C                           X >= 0, GAMMA = 0
9289C
9290C              THE GENERALIZED PARETO DENSITY FOR THE MINIMUM
9291C              CASE HAS THE PROBABILITY DENSITY FUNCTION
9292C
9293C              f(X;GAMMA) = (1-GAMMA*X)**(-(1/GAMMA)-1)
9294C                           IF GAMMA < 0: 1/GAMMA < X <= 0
9295C                           IF GAMMA > 0: X <= 0
9296C
9297C                         = EXP(X)
9298C                           X <= 0, GAMMA = 0
9299C
9300C              IN THE ALTERNATE PARAMETERIZATION
9301C
9302C              f(X;GAMMA) = (1+GAMMA*X)**((1/GAMMA)-1)
9303C                           IF GAMMA < 0: X <= 0
9304C                           IF GAMMA > 0: -1/GAMMA < X <= 0
9305C
9306C                         = EXP(X)
9307C                           X <= 0, GAMMA = 0
9308C
9309C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
9310C                                (BETWEEN ...
9311C                                AND ... (EXCLUSIVELY))
9312C                                AT WHICH THE PROBABILITY DENSITY
9313C                                FUNCTION IS TO BE EVALUATED.
9314C                     --GAMMA  = THE SINGLE PRECISION VALUE
9315C                                OF THE TAIL LENGTH PARAMETER.
9316C                                GAMMA CAN BE NEGATIVE 0, OR POSITIVE.
9317C                     --MINMAX = SPECIFY WHETHER THE MINIMUM OR
9318C                                MAXIMUM CASE IS USED
9319C                     --IGEPDF = CHARACTER VALUE SPECIFYING WHETHER
9320C                                EMIL SIMIU OR JOHNSON AND KOTZ DEFINITION
9321C                                SHOULD BE USED.
9322C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
9323C                                DENSITY FUNCTION VALUE.
9324C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY FUNCTION .
9325C             VALUE PDF FOR THE GENERALIZED PARETO DENSITY
9326C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
9327C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
9328C     RESTRICTIONS--GAMMA MAY BE NEGATIVE, 0, OR POSITIVE
9329C                 --X SHOULD BE BETWEEN 0 (EXCLUSIVELY)
9330C                   AND INFINITY OR (1/-GAMMA) (EXCLUSIVELY).
9331C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
9332C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
9333C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
9334C     LANGUAGE--ANSI FORTRAN (1977)
9335C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTIUOUS UNIVARIATE
9336C                 DISTRIBUTIONS--VOLUME 1", SECOND EDITION, PP. 614-620.
9337C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA (2005),
9338C                 "EXTREME VALUES AND RELATED MODELS WITH APPLICATIONS
9339C                 IN ENGINEERING AND SCIENCE", WILEY, PP. 65-66.
9340C     WRITTEN BY--JAMES J. FILLIBEN
9341C                 STATISTICAL ENGINEERING DIVISION
9342C                 INFORMATION TECHNOLOGY LABORATORY
9343C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
9344C                 GAITHERSBURG, MD 20899-8980
9345C                 PHONE--301-975-2899
9346C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
9347C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
9348C     LANGUAGE--ANSI FORTRAN (1977)
9349C     VERSION NUMBER--93/12
9350C     ORIGINAL VERSION--DECEMBER  1993.
9351C     UPDATED         --DECEMBER  1994  CHECK FOR NEGATIVE X
9352C     UPDATED         --JANUARY   1995  CHECK FOR OUT OF RANGE X
9353C     UPDATED         --JUNE      2004  ALTERNATE DEFINITION FOR
9354C                                       GENERAPLIZED PARETO (USES
9355C                                       DIFFERENT SIGN)
9356C     UPDATED         --JANUARY   2008  SUPPORT MINIMUM CASE
9357C
9358C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
9359C
9360C---------------------------------------------------------------------
9361C
9362      CHARACTER*4 IGEPDF
9363C
9364      DOUBLE PRECISION DX
9365      DOUBLE PRECISION DG
9366      DOUBLE PRECISION DPDF
9367C
9368      INCLUDE 'DPCOP2.INC'
9369C
9370C-----START POINT-----------------------------------------------------
9371C
9372C     CHECK THE INPUT ARGUMENTS FOR ERRORS
9373C
9374C     MAXIMUM CASE
9375C
9376      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
9377C
9378C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
9379C       2) X >= 0                 FOR BOTH PARAMETERIZATIONS
9380C
9381        IF(X.LT.0.0)THEN
9382          WRITE(ICOUT,1)
9383          CALL DPWRST('XXX','BUG ')
9384          WRITE(ICOUT,46)X
9385          CALL DPWRST('XXX','BUG ')
9386          PDF=0.0
9387          GOTO9000
9388        ENDIF
9389    1   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEPPDF IS ',
9390     1         'NEGATIVE.')
9391C
9392        IF(GAMMA.EQ.0.0)THEN
9393          PDF=EXP(-X)
9394          GOTO9000
9395        ENDIF
9396C
9397        IF(IGEPDF.EQ.'JOHN')THEN
9398          IF(X.GT.1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
9399            WRITE(ICOUT,3)
9400            CALL DPWRST('XXX','BUG ')
9401            WRITE(ICOUT,47)X
9402            CALL DPWRST('XXX','BUG ')
9403            WRITE(ICOUT,48)GAMMA
9404            CALL DPWRST('XXX','BUG ')
9405            PDF=0.0
9406            GOTO9000
9407          ENDIF
9408        ELSE
9409          IF(X.GT.-1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
9410            WRITE(ICOUT,2)
9411            CALL DPWRST('XXX','BUG ')
9412            WRITE(ICOUT,47)X
9413            CALL DPWRST('XXX','BUG ')
9414            WRITE(ICOUT,48)GAMMA
9415            CALL DPWRST('XXX','BUG ')
9416            PDF=0.0
9417            GOTO9000
9418          ENDIF
9419        ENDIF
9420C
9421    2   FORMAT('***** ERROR--FROM GEPPDF: X >= -1/GAMMA.')
9422    3   FORMAT('***** ERROR--FROM GEPPDF: X >= 1/GAMMA.')
9423   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
9424   47   FORMAT('***** THE VALUE OF X IS     ',G15.7)
9425   48   FORMAT('***** THE VALUE OF GAMMA IS ',G15.7)
9426C
9427C       COMPUTE THE PDF VALUE
9428C
9429        DX=DBLE(X)
9430        DG=DBLE(GAMMA)
9431C
9432        IF(IGEPDF.EQ.'JOHN')THEN
9433          DPDF=(1.0D0-DG*DX)**((1.0D0/DG)-1.0D0)
9434        ELSE
9435          DPDF=(1.0D0+DG*DX)**(-(1.0D0/DG)-1.0D0)
9436        ENDIF
9437        PDF=REAL(DPDF)
9438C
9439C     NOW DO THE MINIMUM CASE
9440C
9441      ELSE
9442C
9443C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
9444C       2) X <= 0                 FOR BOTH PARAMETERIZATIONS
9445C
9446        IF(X.GT.0.0)THEN
9447          WRITE(ICOUT,11)
9448          CALL DPWRST('XXX','BUG ')
9449          WRITE(ICOUT,46)X
9450          CALL DPWRST('XXX','BUG ')
9451          PDF=0.0
9452          GOTO9000
9453        ENDIF
9454   11   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEPPDF IS ',
9455     1         'POSITIVE.')
9456C
9457        IF(GAMMA.EQ.0.0)THEN
9458          PDF=EXP(X)
9459          GOTO9000
9460        ENDIF
9461C
9462        IF(IGEPDF.EQ.'JOHN')THEN
9463          IF(X.LE.-1.0/GAMMA .AND. GAMMA.GT.0.0)THEN
9464            WRITE(ICOUT,13)
9465            CALL DPWRST('XXX','BUG ')
9466            WRITE(ICOUT,47)X
9467            CALL DPWRST('XXX','BUG ')
9468            WRITE(ICOUT,48)GAMMA
9469            CALL DPWRST('XXX','BUG ')
9470            PDF=0.0
9471            GOTO9000
9472          ENDIF
9473        ELSE
9474          IF(X.LE.1.0/GAMMA .AND. GAMMA.LT.0.0)THEN
9475            WRITE(ICOUT,12)
9476            CALL DPWRST('XXX','BUG ')
9477            WRITE(ICOUT,47)X
9478            CALL DPWRST('XXX','BUG ')
9479            WRITE(ICOUT,48)GAMMA
9480            CALL DPWRST('XXX','BUG ')
9481            PDF=0.0
9482            GOTO9000
9483          ENDIF
9484        ENDIF
9485C
9486   12   FORMAT('***** ERROR--FROM GEPPDF: X <= 1/GAMMA.')
9487   13   FORMAT('***** ERROR--FROM GEPPDF: X <= -1/GAMMA.')
9488C
9489C       COMPUTE THE PDF VALUE
9490C
9491        DX=DBLE(X)
9492        DG=DBLE(GAMMA)
9493C
9494        IF(IGEPDF.EQ.'JOHN')THEN
9495          DPDF=(1.0D0+DG*DX)**((1.0D0/DG)-1.0D0)
9496        ELSE
9497          DPDF=(1.0D0-DG*DX)**(-(1.0D0/DG)-1.0D0)
9498        ENDIF
9499        PDF=REAL(DPDF)
9500C
9501      ENDIF
9502C
9503 9000 CONTINUE
9504      RETURN
9505      END
9506      SUBROUTINE GEPPPF(P,GAMMA,MINMAX,IGEPDF,PPF)
9507C
9508C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
9509C              FUNCTION VALUE FOR THE GENERALIZED PARETO
9510C              DISTRIBUTION WITH SINGLE PRECISION
9511C              SHAPE LENGTH PARAMETER = GAMMA.
9512C              THE GENERALIZED PARETO DENSITY FOR THE MAXIMUM
9513C              CASE HAS THE PERCENT POINT FUNCTION
9514C
9515C              G(P;GAMMA) = (-1/GAMMA)*(1.0 - (1-P)**(-GAMMA)))
9516C                           IF GAMMA < 0: 0 <= P < 1
9517C                           IF GAMMA > 0: 0 <= P <= 1
9518C
9519C                         = -LOG(1-P)
9520C                           0 < P <= 1, GAMMA = 0
9521C
9522C              SOME SOURCES (E.G., JOHNSON, KOTZ, AND BALAKRISHNAN
9523C              AND CASTILLO, HADI, BALAKRISHNAN, AND SARABIA)
9524C              USE THE PARAMETERIZATION GAMMA=-GAMMA:
9525C
9526C              G(P;GAMMA) = (1/GAMMA)*(1.0 - (1-P)**GAMMA))
9527C                           IF GAMMA < 0: 0 <= P <= 1
9528C                           IF GAMMA > 0: 0 <= P < 1
9529C
9530C                         = -LOG(1-P)
9531C                           0 < P <= 1, GAMMA = 0
9532C
9533C              THE GENERALIZED PARETO DENSITY FOR THE MINIMUM
9534C              CASE HAS THE PROBABILITY DENSITY FUNCTION
9535C
9536C              G(P;GAMMA) = (-1/GAMMA)*(P**(-GAMMA) - 1)
9537C                           IF GAMMA < 0: 0 <= P <= 1
9538C                           IF GAMMA > 0: 0 <  P <= 1
9539C
9540C                         = LOG(P)
9541C                           0 < P <= 1, GAMMA = 0
9542C
9543C              IN THE ALTERNATE PARAMETERIZATION
9544C
9545C              G(P;GAMMA) = (1/GAMMA)*(P**GAMMA - 1)
9546C                           IF GAMMA < 0: 0 <  P <= 1
9547C                           IF GAMMA > 0: 0 <= P <= 1
9548C
9549C                         = LOG(P)
9550C                           0 < P <= 1, GAMMA = 0
9551C
9552C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
9553C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
9554C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
9555C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE
9556C                                (BETWEEN 0.0 (EXCLUSIVELY)
9557C                                AND 1.0 (EXCLUSIVELY))
9558C                                AT WHICH THE PERCENT POINT
9559C                                FUNCTION IS TO BE EVALUATED.
9560C                     --GAMMA  = THE SINGLE PRECISION VALUE
9561C                                OF THE TAIL LENGTH PARAMETER.
9562C                                GAMMA CAN BE NEGATIVE, 0, OR POSITIVE.
9563C                     --MINMAX = THE INTEGER VALUE, NOT CURRENTLY USED
9564C                     --IGEPDF = CHARACTER VALUE SPECIFYING WHETHER
9565C                                EMIL SIMIU OR JOHNSON AND KOTZ DEFINITION
9566C                                SHOULD BE USED.
9567C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT
9568C                                POINT FUNCTION VALUE.
9569C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION .
9570C             VALUE PPF FOR THE GENERALIZED PARETO DISTRIBUTION
9571C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
9572C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
9573C     RESTRICTIONS--P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
9574C                   AND 1.0 (EXCLUSIVELY).
9575C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
9576C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
9577C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
9578C     LANGUAGE--ANSI FORTRAN (1977)
9579C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTIUOUS UNIVARIATE
9580C                 DISTRIBUTIONS--VOLUME 1", SECOND EDITION, PP. 614-620.
9581C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA (2005),
9582C                 "EXTREME VALUES AND RELATED MODELS WITH APPLICATIONS
9583C                 IN ENGINEERING AND SCIENCE", WILEY, PP. 65-66.
9584C     WRITTEN BY--JAMES J. FILLIBEN
9585C                 STATISTICAL ENGINEERING DIVISION
9586C                 INFORMATION TECHNOLOGY LABORATORY
9587C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
9588C                 GAITHERSBURG, MD 20899-8980
9589C                 PHONE--301-975-2899
9590C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
9591C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
9592C     VERSION NUMBER--93/12
9593C     ORIGINAL VERSION--DECEMBER  1993.
9594C     UPDATED         --JUNE      2004  ALTERNATE DEFINITION FOR
9595C                                       GENERAPLIZED PARETO (USES
9596C                                       DIFFERENT SIGN)
9597C     UPDATED         --JANUARY   2008  SUPPORT MINIMUM CASE
9598C
9599C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
9600C
9601      CHARACTER*4 IGEPDF
9602C
9603      DOUBLE PRECISION DP
9604      DOUBLE PRECISION DG
9605      DOUBLE PRECISION DPPF
9606C
9607C-----COMMON----------------------------------------------------------
9608C
9609      INCLUDE 'DPCOP2.INC'
9610C
9611C-----START POINT-----------------------------------------------------
9612C
9613C     CHECK THE INPUT ARGUMENTS FOR ERRORS
9614C
9615      DP=DBLE(P)
9616      DG=DBLE(GAMMA)
9617      IF(GAMMA.EQ.0.0)THEN
9618        DPPF=(-DLOG(1.0D0-DP))
9619      ELSE
9620         IF(IGEPDF.EQ.'JOHN')THEN
9621            DPPF=(-1.0D0/DG)*(((1.0D0-DP)**DG)-1.0D0)
9622         ELSE
9623            DPPF=(1.0D0/DG)*(((1.0D0-DP)**(-DG))-1.0D0)
9624         ENDIF
9625      ENDIF
9626      PPF=REAL(DPPF)
9627C
9628C     MAXIMUM CASE
9629C
9630      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
9631C
9632C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
9633C
9634        IF(P.LT.0.0 .OR. P.GT.1.0)THEN
9635          WRITE(ICOUT,1)
9636          CALL DPWRST('XXX','BUG ')
9637          WRITE(ICOUT,46)P
9638          CALL DPWRST('XXX','BUG ')
9639          PPF=0.0
9640          GOTO9000
9641        ENDIF
9642    1   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEPPPF IS ',
9643     1         'OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
9644C
9645        IF(GAMMA.EQ.0.0)THEN
9646          IF(P.GE.1.0)THEN
9647            WRITE(ICOUT,1)
9648            CALL DPWRST('XXX','BUG ')
9649            WRITE(ICOUT,46)P
9650            CALL DPWRST('XXX','BUG ')
9651            PPF=0.0
9652            GOTO9000
9653          ENDIF
9654          DPPF=-DLOG(1.0D0 - DBLE(P))
9655          PPF=REAL(DPPF)
9656          GOTO9000
9657        ENDIF
9658C
9659        IF(IGEPDF.EQ.'JOHN')THEN
9660          IF(P.GE.1.0 .AND. GAMMA.LT.0.0)THEN
9661            WRITE(ICOUT,1)
9662            CALL DPWRST('XXX','BUG ')
9663            WRITE(ICOUT,46)P
9664            CALL DPWRST('XXX','BUG ')
9665            PPF=0.0
9666            GOTO9000
9667          ENDIF
9668        ELSE
9669          IF(P.GE.1.0 .AND. GAMMA.GT.0.0)THEN
9670            WRITE(ICOUT,1)
9671            CALL DPWRST('XXX','BUG ')
9672            WRITE(ICOUT,46)P
9673            CALL DPWRST('XXX','BUG ')
9674            PPF=0.0
9675            GOTO9000
9676          ENDIF
9677        ENDIF
9678C
9679   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
9680C
9681C       COMPUTE THE PPF VALUE
9682C
9683        DP=DBLE(P)
9684        DG=DBLE(GAMMA)
9685C
9686        IF(IGEPDF.EQ.'JOHN')THEN
9687          DPPF=(1.0D0/DG)*(1.0D0 - (1.0D0 - DP)**DG)
9688        ELSE
9689          DPPF=(-1.0D0/DG)*(1.0D0 - (1.0D0 - DP)**(-DG))
9690        ENDIF
9691        PPF=REAL(DPPF)
9692C
9693C     NOW DO THE MINIMUM CASE
9694C
9695      ELSE
9696C
9697C       1) GAMMA = 0 CASE IS SAME FOR BOTH PARAMETERIZATIONS
9698C
9699        IF(P.LT.0.0 .OR. P.GT.1.0)THEN
9700          WRITE(ICOUT,1)
9701          CALL DPWRST('XXX','BUG ')
9702          WRITE(ICOUT,46)P
9703          CALL DPWRST('XXX','BUG ')
9704          PPF=0.0
9705          GOTO9000
9706        ENDIF
9707C
9708        IF(GAMMA.EQ.0.0)THEN
9709          IF(P.LE.0.0)THEN
9710            WRITE(ICOUT,1)
9711            CALL DPWRST('XXX','BUG ')
9712            WRITE(ICOUT,46)P
9713            CALL DPWRST('XXX','BUG ')
9714            PPF=0.0
9715            GOTO9000
9716          ENDIF
9717          DPPF=DLOG(DBLE(P))
9718          PPF=REAL(DPPF)
9719          GOTO9000
9720        ENDIF
9721C
9722        IF(IGEPDF.EQ.'JOHN')THEN
9723          IF(P.LE.0.0 .AND. GAMMA.LT.0.0)THEN
9724            WRITE(ICOUT,1)
9725            CALL DPWRST('XXX','BUG ')
9726            WRITE(ICOUT,46)P
9727            CALL DPWRST('XXX','BUG ')
9728            PPF=0.0
9729            GOTO9000
9730          ENDIF
9731        ELSE
9732          IF(P.LE.0.0 .AND. GAMMA.GT.0.0)THEN
9733            WRITE(ICOUT,1)
9734            CALL DPWRST('XXX','BUG ')
9735            WRITE(ICOUT,46)P
9736            CALL DPWRST('XXX','BUG ')
9737            PPF=0.0
9738            GOTO9000
9739          ENDIF
9740        ENDIF
9741C
9742C       COMPUTE THE PPF VALUE
9743C
9744        DP=DBLE(P)
9745        DG=DBLE(GAMMA)
9746C
9747        IF(IGEPDF.EQ.'JOHN')THEN
9748          DPPF=(1.0D0/DG)*(DP**DG - 1.0D0)
9749        ELSE
9750          DPPF=(-1.0D0/DG)*(DP**(-DG) - 1.0D0)
9751        ENDIF
9752        PPF=REAL(DPPF)
9753C
9754      ENDIF
9755C
9756
9757
9758C
9759 9000 CONTINUE
9760      RETURN
9761      END
9762      SUBROUTINE GEDPPF(DP,DG,MINMAX,IGEPDF,DPPF)
9763C
9764C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
9765C              FUNCTION VALUE FOR THE GENERALIZED PARETO
9766C              DISTRIBUTION WITH DOUBLE PRECISION
9767C              SHAPE LENGTH PARAMETER = GAMMA.
9768C              THE GENERALIZED PARETO DISTRIBUTION USED
9769C              HEREIN IS DEFINED FOR ALL POSITIVE X,
9770C              AND HAS THE PERCENT POINT FUNCTION
9771C                 G(P) = (1/GAMMA)*(((1-P)**(-GAMMA))-1.0)
9772C              JOHNSON, KOTZ, AND BALAKRISHNAN REVERSE THE SIGN:
9773C                 G(P) = (-1/GAMMA)*(((1-P)**GAMMA)-1.0)
9774C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
9775C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
9776C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
9777C
9778C              THIS VERSION IS A DOUBLE PRECISION VERSION.
9779C
9780C     INPUT  ARGUMENTS--P      = THE DOUBLE PRECISION VALUE
9781C                                (BETWEEN 0.0 (EXCLUSIVELY)
9782C                                AND 1.0 (EXCLUSIVELY))
9783C                                AT WHICH THE PERCENT POINT
9784C                                FUNCTION IS TO BE EVALUATED.
9785C                     --GAMMA  = THE DOUBLE PRECISION VALUE
9786C                                OF THE TAIL LENGTH PARAMETER.
9787C                                GAMMA CAN BE NEGATIVE, 0, OR POSITIVE.
9788C                     --MINMAX = THE INTEGER VALUE, NOT CURRENTLY USED
9789C                     --IGEPDF = CHARACTER VALUE SPECIFYING WHETHER
9790C                                EMIL SIMIU OR JOHNSON AND KOTZ DEFINITION
9791C                                SHOULD BE USED.
9792C     OUTPUT ARGUMENTS--PPF    = THE DOUBLE PRECISION PERCENT
9793C                                POINT FUNCTION VALUE.
9794C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION .
9795C             VALUE PPF FOR THE GENERALIZED PARETO DISTRIBUTION
9796C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
9797C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
9798C     RESTRICTIONS--P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
9799C                   AND 1.0 (EXCLUSIVELY).
9800C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
9801C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
9802C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
9803C     LANGUAGE--ANSI FORTRAN (1977)
9804C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTIUOUS UNIVARIATE
9805C                 DISTRIBUTIONS--VOLUME 1", SECOND EDITION, PP. 614-620.
9806C     WRITTEN BY--JAMES J. FILLIBEN
9807C                 STATISTICAL ENGINEERING DIVISION
9808C                 INFORMATION TECHNOLOGY LABORATORY
9809C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
9810C                 GAITHERSBURG, MD 20899-8980
9811C                 PHONE--301-975-2899
9812C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
9813C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
9814C     VERSION NUMBER--2005/5
9815C     ORIGINAL VERSION--MAY       2005.
9816C
9817C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
9818C
9819      CHARACTER*4 IGEPDF
9820C
9821      DOUBLE PRECISION DP
9822      DOUBLE PRECISION DG
9823      DOUBLE PRECISION DPPF
9824C
9825C-----COMMON----------------------------------------------------------
9826C
9827      INCLUDE 'DPCOBE.INC'
9828      INCLUDE 'DPCOP2.INC'
9829C
9830C-----START POINT-----------------------------------------------------
9831C
9832C     CHECK THE INPUT ARGUMENTS FOR ERRORS
9833C
9834      IF(ISUBG4.EQ.'DPPF')THEN
9835        WRITE(ICOUT,52)IGEPDF,MINMAX,DP,DG
9836   52   FORMAT('IGEPDF,MINMAX,DP,DG = ',A4,2X,I5,2G15.7)
9837        CALL DPWRST('XXX','BUG ')
9838      ENDIF
9839C
9840      IF(DP.LE.0.0D0.OR.DP.GE.1.0D0)THEN
9841        WRITE(ICOUT,1)
9842    1   FORMAT('***** ERROR--THE FIRST ARGUMENT TO ',
9843     1         'GEDPPF IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
9844        CALL DPWRST('XXX','BUG ')
9845        WRITE(ICOUT,46)DP
9846   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
9847        CALL DPWRST('XXX','BUG ')
9848        DPPF=0.0D0
9849        GOTO9000
9850      ENDIF
9851C
9852      IF(DG.EQ.0.0D0)THEN
9853        DPPF=(-DLOG(1.0D0-DP))
9854      ELSE
9855         IF(IGEPDF.EQ.'JOHN')THEN
9856            DPPF=(-1.0D0/DG)*(((1.0D0-DP)**DG)-1.0D0)
9857         ELSE
9858            DPPF=(1.0D0/DG)*(((1.0D0-DP)**(-DG))-1.0D0)
9859         ENDIF
9860      ENDIF
9861C
9862 9000 CONTINUE
9863      RETURN
9864      END
9865      SUBROUTINE GE2PPF(P,PPAR,PPF)
9866C
9867C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT FUNCTION
9868C              VALUE FOR THE GEOMETRIC DISTRIBUTION WITH DOUBLE
9869C              PRECISION 'BERNOULLI PROBABILITY' PARAMETER = PPAR.
9870C              THIS VERSION USES AN ALTERNATIVE DEFINITION
9871C              USED IN THE DIGITAL LIBRARY OF MATHEMATICAL FUNCTIONS.
9872C              THE GEOMETRIC DISTRIBUTION USED HEREIN HAS MEAN = 1/PPAR
9873C              AND STANDARD DEVIATION = SQRT((1-PPAR)/(PPAR*PPAR))).
9874C              THIS DISTRIBUTION IS DEFINED FOR ALL POSITIVE INTEGER
9875C              X--X = 1, 2, ... .
9876C              THIS DISTRIBUTION HAS THE PROBABILITY FUNCTION
9877C
9878C                 p(X;PPAR) = PPAR * (1-PPAR)**(X-1).
9879C
9880C              THE GEOMETRIC DISTRIBUTION IS THE DISTRIBUTION OF THE
9881C              NUMBER OF FAILURES BEFORE OBTAINING 1 SUCCESS IN AN
9882C              INDEFINITE SEQUENCE OF BERNOULLI (0,1) TRIALS WHERE THE
9883C              PROBABILITY OF SUCCESS IN A SINGLE TRIAL = PPAR.
9884C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
9885C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
9886C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
9887C     INPUT  ARGUMENTS--P      = THE DOUBLE PRECISION VALUE (BETWEEN
9888C                                0.0 (INCLUSIVELY) AND 1.0 (EXCLUSIVELY))
9889C                                AT WHICH THE PERCENT POINT FUNCTION IS
9890C                                TO BE EVALUATED.
9891C                     --PPAR   = THE DOUBLE PRECISION VALUE OF THE
9892C                                'BERNOULLI PROBABILITY' PARAMETER FOR
9893C                                THE GEOMETRIC DISTRIBUTION.  PPAR
9894C                                SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
9895C                                AND 1.0 (INCLUSIVELY).
9896C     OUTPUT ARGUMENTS--PPF    = THE DOUBLE PRECISION PERCENT POINT
9897C                                FUNCTION VALUE.
9898C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION VALUE PPF
9899C             FOR THE GEOMETRIC DISTRIBUTION WITH 'BERNOULLI
9900C             PROBABILITY' PARAMETER VALUE = PPAR.
9901C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
9902C     RESTRICTIONS--PPAR SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
9903C                   AND 1.0 (INCLUSIVELY).
9904C                 --P SHOULD BE BETWEEN 0.0 (INCLUSIVELY)
9905C                   AND 1.0 (EXCLUSIVELY).
9906C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
9907C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
9908C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
9909C     LANGUAGE--ANSI FORTRAN (1977)
9910C     REFERENCES--FELLER, AN INTRODUCTION TO PROBABILITY
9911C                 THEORY AND ITS APPLICATIONS, VOLUME 1,
9912C                 EDITION 2, 1957, PAGES 155-157, 210.
9913C               --NATIONAL BUREAU OF STANDARDS APPLIED MATHEMATICS
9914C                 SERIES 55, 1964, PAGE 929.
9915C     WRITTEN BY--JAMES J. FILLIBEN
9916C                 STATISTICAL ENGINEERING DIVISION
9917C                 INFORMATION TECHNOLOGY LABORATORY
9918C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
9919C                 GAITHERSBURG, MD 20899-8980
9920C                 PHONE--301-921-3651
9921C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
9922C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
9923C     LANGUAGE--ANSI FORTRAN (1977)
9924C     VERSION NUMBER--82/7
9925C     ORIGINAL VERSION--NOVEMBER  1975.
9926C     UPDATED         --DECEMBER  1981.
9927C     UPDATED         --MAY       1982.
9928C     UPDATED         --MARCH     2009. USE DOUBLE PRECISION
9929C
9930C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
9931C
9932C---------------------------------------------------------------------
9933C
9934      IMPLICIT DOUBLE PRECISION (A-H, O-Z)
9935C
9936      INCLUDE 'DPCOP2.INC'
9937C
9938C-----START POINT-----------------------------------------------------
9939C
9940C     CHECK THE INPUT ARGUMENTS FOR ERRORS
9941C
9942      PPF=0.0D0
9943      IF(P.LT.0.0D0 .OR. P.GE.1.0D0)THEN
9944        WRITE(ICOUT,1)
9945        CALL DPWRST('XXX','BUG ')
9946        WRITE(ICOUT,46)P
9947        CALL DPWRST('XXX','BUG ')
9948        GOTO9000
9949      ELSEIF(PPAR.LE.0.0D0 .OR. PPAR.GT.1.0D0)THEN
9950        WRITE(ICOUT,11)
9951        CALL DPWRST('XXX','BUG ')
9952        WRITE(ICOUT,46)PPAR
9953        CALL DPWRST('XXX','BUG ')
9954        GOTO9000
9955      ENDIF
9956    1 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GEOPPF IS OUTSIDE ',
9957     1       'THE ALLOWABLE (0,1) INTERVAL')
9958   11 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GEOPPF IS OUTSIDE ',
9959     1       'THE ALLOWABLE (0,1) INTERVAL')
9960   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
9961C
9962      IF(P.EQ.0.0D0)THEN
9963        PPF=1.0D0
9964      ELSEIF(PPAR.EQ.1.0D0)THEN
9965        PPF=1.0D0
9966      ELSE
9967C
9968        ARG1=1.0D0-P
9969        ARG2=1.0D0-PPAR
9970        ANUM=LOG(ARG1)
9971        ADEN=LOG(ARG2)
9972        RATIO=ANUM/ADEN
9973        IRATIO=INT(RATIO+0.99999D0)
9974        PPF=REAL(IRATIO)
9975      ENDIF
9976C
9977 9000 CONTINUE
9978      RETURN
9979      END
9980      SUBROUTINE GEPRAN(N,GAMMA,MINMAX,IGEPDF,ISEED,X)
9981C
9982C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
9983C              FROM THE GENERALIZED PARETO DISTRIBUTION
9984C              WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
9985C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
9986C                                OF RANDOM NUMBERS TO BE
9987C                                GENERATED.
9988C                     --GAMMA  = THE SINGLE PRECISION VALUE OF THE
9989C                                TAIL LENGTH PARAMETER.
9990C                                GAMMA SHOULD BE POSITIVE.
9991C                     --MINMAX = THE INTEGER VALUE
9992C                                IDENTIFYING THE
9993C                                CHOSEN GEN. PARETO DISTRIBUTION.
9994C                                1 = MIN, 2 = MAX.
9995C                     --IGEPDF = CHARACTER VALUE SPECIFYING WHETHER
9996C                                EMIL SIMIU OR JOHNSON AND KOTZ DEFINITION
9997C                                SHOULD BE USED.
9998C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
9999C                                (OF DIMENSION AT LEAST N)
10000C                                INTO WHICH THE GENERATED
10001C                                RANDOM SAMPLE WILL BE PLACED.
10002C     OUTPUT--A RANDOM SAMPLE OF SIZE N
10003C             FROM THE GENERALIZED PARETO DISTRIBUTION
10004C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
10005C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
10006C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
10007C                   OF N FOR THIS SUBROUTINE.
10008C                 --GAMMA SHOULD BE POSITIVE.
10009C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
10010C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
10011C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
10012C     LANGUAGE--ANSI FORTRAN (1977)
10013C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTIUOUS UNIVARIATE
10014C                 DISTRIBUTIONS--VOLUME 1", SECOND EDITION, PP. 614-620.
10015C     WRITTEN BY--JAMES J. FILLIBEN
10016C                 STATISTICAL ENGINEERING DIVISION
10017C                 INFORMATION TECHNOLOGY LABORATORY
10018C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
10019C                 GAITHERSBURG, MD 20899-8980
10020C                 PHONE--301-975-2899
10021C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
10022C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
10023C     VERSION NUMBER--93/12
10024C     ORIGINAL VERSION--DECEMBER  1993.
10025C     UPDATED         --JUNE      2004  ALTERNATE DEFINITION FOR
10026C                                       GENERAPLIZED PARETO (USES
10027C                                       DIFFERENT SIGN)
10028C     UPDATED         --JANUARY   2008  TO SUPPORT MINIMUM CASE, JUST
10029C                                       CALL GEPPPF INSTEAD OF
10030C                                       COMPUTING PPF INLINE
10031C
10032C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
10033C
10034C---------------------------------------------------------------------
10035C
10036      DIMENSION X(*)
10037C
10038CCCCC DOUBLE PRECISION DP
10039CCCCC DOUBLE PRECISION DG
10040CCCCC DOUBLE PRECISION DPPF
10041C
10042      CHARACTER*4 IGEPDF
10043C
10044C---------------------------------------------------------------------
10045C
10046      INCLUDE 'DPCOP2.INC'
10047C
10048C-----START POINT-----------------------------------------------------
10049C
10050C     CHECK THE INPUT ARGUMENTS FOR ERRORS
10051C
10052      IF(N.LT.1)THEN
10053C
10054        WRITE(ICOUT,5)
10055    5   FORMAT('***** ERROR--FOR THE GENERALIZED PARETO DISTRIBUTION, ',
10056     1         'THE REQUESTED NUMBER OF RANDOM NUMBERS')
10057        CALL DPWRST('XXX','BUG ')
10058        WRITE(ICOUT,6)
10059    6   FORMAT('      IS NON-POSITIVE.')
10060        CALL DPWRST('XXX','BUG ')
10061        WRITE(ICOUT,47)N
10062   47   FORMAT('***** THE REQUESTED NUMBER OF RANDOM NUMBERS IS ',I8)
10063        CALL DPWRST('XXX','BUG ')
10064        GOTO9000
10065      ENDIF
10066C
10067C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
10068C
10069C     NOTE THAT GAMMA = 0 REDUCES TO AN EXPONENTIAL, SO HANDLE THAT CASE
10070C     SEPARATELY.  ALSO, JOHNSON, KOTZ, AND BALAKRISHNAN PARAMETERIZE
10071C     WITH THE SIGN OF THE SHAPE PARAMETER REVERSED.  HANDLE THAT CASE
10072C     SEPARATELY.
10073C
10074CCCCC IF(GAMMA.EQ.0.0)THEN
10075CCCCC   CALL EXPRAN(N,ISEED,X)
10076CCCCC ELSE
10077CCCCC   CALL UNIRAN(N,ISEED,X)
10078C
10079C       GENERATE N GENERALIZED PARETO DISTRIBUTION RANDOM NUMBERS
10080C       USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
10081C
10082CCCCC   DG=DBLE(GAMMA)
10083C
10084CCCCC   IF(IGEPDF.EQ.'JOHN')THEN
10085CCCCC     DO100I=1,N
10086CCCCC       DP=DBLE(X(I))
10087CCCCC       DPPF=(-1.0D0/DG)*(((1.0D0-DP)**DG)-1.0D0)
10088CCCCC       X(I)=REAL(DPPF)
10089CC100     CONTINUE
10090CCCCC   ELSE
10091CCCCC     DO200I=1,N
10092CCCCC       DP=DBLE(X(I))
10093CCCCC       DPPF=(1.0D0/DG)*(((1.0D0-DP)**(-DG))-1.0D0)
10094CCCCC       X(I)=REAL(DPPF)
10095CC200     CONTINUE
10096CCCCC   ENDIF
10097CCCCC ENDIF
10098C
10099      CALL UNIRAN(N,ISEED,X)
10100C
10101      DO100I=1,N
10102        PTEMP=X(I)
10103        CALL GEPPPF(PTEMP,GAMMA,MINMAX,IGEPDF,PPF)
10104        X(I)=PPF
10105  100 CONTINUE
10106C
10107 9000 CONTINUE
10108      RETURN
10109      END
10110      SUBROUTINE GETCDF(DX,DSHAPE,DBETA,IGETDF,DCDF)
10111C
10112C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
10113C              FUNCTION VALUE FOR THE GEETA DISTRIBUTION WITH SHAPE
10114C              PARAMETERS THETA AND BETA.  THIS DISTRIBUTION IS
10115C              DEFINED FOR ALL INTEGER X >= 1.
10116C
10117C              THE PROBABILITY MASS FUNCTION IS:
10118C              p(X;THETA,BETA)=
10119C                  (BETA*X-1  X)*THETA**(X-1)*(1-THETA)**(BETA*X-X)/
10120C                  (BETA*X-1)
10121C                  X = 1, 2, 3, ,...
10122C                  0 < THETA < 1; 1 <= BETA < 1/THETA
10123C
10124C              THE MEAN AND VARIANCE ARE:
10125C
10126C                  MU = (1-THETA)/(1-THETA*BETA)
10127C                  SIGMA**2 = (BETA-1)*THETA*(1-THETA)/
10128C                             (1-THETA*BETA)**3
10129C
10130C              THIS DISTRIBUTION IS SOMETIMES PARAMETERIZED USING
10131C              THE MEAN (MU) INSTEAD OF THETA.  THIS RESULTS IN
10132C              THE PROBABILITY MASS FUNCTION:
10133C              p(X;MU,BETA)=
10134C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-1))**(X-1)*
10135C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-X)/(BETA*X-1)
10136C                  X = 1, 2, 3, ,...
10137C                  MU >= 1; BETA > 1
10138C              THE PROBABILITY MASS FUNCTION IS ALSO GIVEN AS
10139C              p(X;MU,BETA)=
10140C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-MU))**(X-1)*
10141C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-1)/(BETA*X-1)
10142C
10143C              THE CUMULATIVE DISTRIBUTION IS COMPUTED USING THE
10144C              FOLLOWING RECURRENCE RELATION:
10145C
10146C              F(1;MU,BETA) = ((BETA-1)*MU/(BETA*MU-1))**(BETA-1)
10147C              F(2;MU,BETA) = ((MU-1)/MU)*
10148C                             ((BETA-1)*MU/(BETA*MU-1))**(2*BETA-1)
10149C              F(X=k+1;MU,BETA) = PROD[i=1 to k][1 + BETA/(BETA*k-1)]*
10150C                                 ((MU-1)/MU)*
10151C                                 ((BETA-1)*MU/(BETA*MU-1))**BETA*
10152C                                 P(X=k;MU,BETA)
10153C
10154C              NOTE: THIS RECCURENCE RELATION DOES NOT SEEM TO
10155C                    RETURN ACCURATE RESULTS.  SO UNTIL THIS IS
10156C                    RESOLVED, JUST USE BRUTE FORCE AND CALL THE
10157C                    PDF FUNCTION.
10158C
10159C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
10160C                                WHICH THE CUMULATIVE DISTRIBUTION
10161C                                FUNCTION IS TO BE EVALUATED.
10162C                                DX SHOULD BE A NON-NEGATIVE INTEGER.
10163C                     --DSHAPE = THE FIRST SHAPE PARAMETER
10164C                                (EITHER THETA OR MU)
10165C                     --DBETA  = THE SECOND SHAPE PARAMETER
10166C     OUTPUT ARGUMENTS--DCDF   = THE DOUBLE PRECISION CUMULATIVE
10167C                                DISTRIBUTION FUNCTION VALUE.
10168C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION FUNCTION
10169C             VALUE DCDF FOR THE GEETA DISTRIBUTION WITH SHAPE
10170C             PARAMETERS THETA (OR MU) AND BETA
10171C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
10172C     RESTRICTIONS--DX SHOULD BE A POSITIVE INTEGER
10173C                 --0 < THETA < 1; 1 < BETA < 1/THETA
10174C                 --MU >= 1; BETA > 1
10175C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
10176C     LANGUAGE--ANSI FORTRAN (1977)
10177C     REFERENCES--CONSUL (1990), "GEETA DISTRIBUTION AND ITS
10178C                 PROPERTIES", COMMUNICATIONS IN STATISTICS--
10179C                 THEORY AND METHODS, 19, PP. 3051-3068.
10180C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
10181C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 8.
10182C     WRITTEN BY--JAMES J. FILLIBEN
10183C                 STATISTICAL ENGINEERING DIVISION
10184C                 INFORMATION TECHNOLOGY LABORATORY
10185C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
10186C                 GAITHERSBURG, MD 20899-8980
10187C                 PHONE--301-975-2855
10188C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
10189C           OF THE NATIONAL BUREAU OF STANDARDS.
10190C     LANGUAGE--ANSI FORTRAN (1977)
10191C     VERSION NUMBER--2006/7
10192C     ORIGINAL VERSION--JULY      2006.
10193C
10194C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
10195C
10196C---------------------------------------------------------------------
10197C
10198      DOUBLE PRECISION DX
10199      DOUBLE PRECISION DSHAPE
10200      DOUBLE PRECISION DBETA
10201      DOUBLE PRECISION DCDF
10202C
10203      DOUBLE PRECISION DTHETA
10204      DOUBLE PRECISION DMU
10205      DOUBLE PRECISION DPDF
10206C
10207      CHARACTER*4 IGETDF
10208C
10209C-----COMMON----------------------------------------------------------
10210C
10211      INCLUDE 'DPCOP2.INC'
10212C
10213C-----START POINT-----------------------------------------------------
10214C
10215C     CHECK THE INPUT ARGUMENTS FOR ERRORS
10216C
10217      IF(IGETDF.EQ.'THET')THEN
10218        DTHETA=DSHAPE
10219      ELSE
10220        DMU=DSHAPE
10221      ENDIF
10222C
10223      IX=INT(DX+0.5D0)
10224      IF(IX.LT.1)THEN
10225        WRITE(ICOUT,4)
10226        CALL DPWRST('XXX','BUG ')
10227        WRITE(ICOUT,46)DX
10228        CALL DPWRST('XXX','BUG ')
10229        DCDF=0.0D0
10230        GOTO9000
10231      ENDIF
10232    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GETCDF IS LESS ',
10233     1'THAN 1')
10234C
10235      IF(IGETDF.EQ.'THET')THEN
10236        IF(DTHETA.LE.0.0D0 .OR. DTHETA.GE.1.0D0)THEN
10237          WRITE(ICOUT,15)
10238          CALL DPWRST('XXX','BUG ')
10239          WRITE(ICOUT,46)DTHETA
10240          CALL DPWRST('XXX','BUG ')
10241          DCDF=0.0
10242          GOTO9000
10243        ENDIF
10244   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GETCDF IS NOT ',
10245     1         'IN THE INTERVAL (0,1)')
10246C
10247        IF(DBETA.LT.1.0D0 .OR. DBETA.GE.1.0D0/DTHETA)THEN
10248          WRITE(ICOUT,25)1.0D0/DTHETA
10249          CALL DPWRST('XXX','BUG ')
10250          WRITE(ICOUT,46)DBETA
10251          CALL DPWRST('XXX','BUG ')
10252          DCDF=0.0
10253          GOTO9000
10254        ENDIF
10255   25   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GETCDF IS NOT ',
10256     1         'IN THE INTERVAL (1,',G15.7,')')
10257      ELSE
10258        IF(DMU.LT.1.0D0)THEN
10259          WRITE(ICOUT,35)
10260          CALL DPWRST('XXX','BUG ')
10261          WRITE(ICOUT,46)DMU
10262          CALL DPWRST('XXX','BUG ')
10263          DCDF=0.0
10264          GOTO9000
10265        ENDIF
10266   35   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GETCDF IS ',
10267     1         'LESS THAN 1')
10268C
10269        IF(DBETA.LE.1.0D0)THEN
10270          WRITE(ICOUT,38)
10271          CALL DPWRST('XXX','BUG ')
10272          WRITE(ICOUT,46)DBETA
10273          CALL DPWRST('XXX','BUG ')
10274          DCDF=0.0
10275          GOTO9000
10276        ENDIF
10277   38   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GETCDF IS ',
10278     1         'LESS THAN OR EQUAL TO 1')
10279      ENDIF
10280C
10281   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
10282C
10283CCCCC USE PDF FUNCTION UNTIL WE GET RECURRENCE RELATION RESOLVED.
10284C
10285      IF(IGETDF.EQ.'THET')THEN
10286        IF(DBETA.LE.1.0D0)THEN
10287          DCDF=1.0D0
10288        ELSE
10289          DCDF=0.0D0
10290          DO100I=IX,1,-1
10291            CALL GETPDF(DBLE(I),DTHETA,DBETA,IGETDF,DPDF)
10292            DCDF=DCDF + DPDF
10293  100     CONTINUE
10294        ENDIF
10295      ELSE
10296        IF(DMU.LE.1.0D0)THEN
10297          DCDF=1.0D0
10298        ELSE
10299          DCDF=0.0D0
10300          DO200I=IX,1,-1
10301            CALL GETPDF(DBLE(I),DMU,DBETA,IGETDF,DPDF)
10302            DCDF=DCDF + DPDF
10303  200     CONTINUE
10304        ENDIF
10305      ENDIF
10306C
10307CCCCC IF(IGETDF.EQ.'THET')THEN
10308CCCCC   DTHETA=DBLE(THETA)
10309CCCCC   DMU=(1.0D0 - DTHETA)/(1.0D0 - DTHETA*DBETA)
10310CCCCC ELSE
10311CCCCC   DMU=DBLE(MU)
10312CCCCC ENDIF
10313C
10314CCCCC DCDF=((DBETA-1.0D0)*DMU/(DBETA*DMU-1.0D0))**(DBETA-1.0D0)
10315CCCCC IF(IX.LE.1)THEN
10316CCCCC   CDF=REAL(DCDF)
10317CCCCC   GOTO9000
10318CCCCC ENDIF
10319CCCCC DPDF=((DMU-1.0D0)/DMU)*
10320CCCCC1     ((DBETA-1.0D0)*DMU/(DBETA*DMU-1.0D0))**(2.0D0*DBETA-1.0D0)
10321CCCCC DCDF=DCDF+DPDF
10322CCCCC IF(IX.LE.2)THEN
10323CCCCC   CDF=REAL(DCDF)
10324CCCCC   GOTO9000
10325CCCCC ENDIF
10326CCCCC DPDFSV=DPDF
10327C
10328CCCCC DTERM1=DLOG(DMU-1.0D0) - DLOG(DMU)
10329CCCCC DTERM2=DBETA*(DLOG(DBETA-1.0D0)+DLOG(DMU)-DLOG(DBETA*DMU-1.0D0))
10330CCCCC DO100I=3,IX
10331CCCCC   K=I-1
10332CCCCC   DX=DBLE(I)
10333CCCCC   DSUM=0.0D0
10334CCCCC   DO200J=1,K
10335CCCCC     DSUM=DSUM+DLOG(1.0D0+DBETA/(DBETA*DBLE(K)-DBLE(J)))
10336CC200   CONTINUE
10337CCCCC   IF(DPDFSV.GT.0.0D0)THEN
10338CCCCC     DTERM3=DLOG(DPDFSV)
10339CCCCC     DPDF=DEXP(DTERM3 + DSUM + DTERM1 + DTERM2)
10340CCCCC   ELSE
10341CCCCC     CDF=REAL(DCDF)
10342CCCCC     GOTO9000
10343CCCCC   ENDIF
10344CCCCC   DCDF=DCDF + DPDF
10345CCCCC   DPDFSV=DPDF
10346CC100 CONTINUE
10347C
10348 9000 CONTINUE
10349      RETURN
10350      END
10351      DOUBLE PRECISION FUNCTION GETFUN(DBETA)
10352C
10353C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
10354C              GEETA MEAN AND ONES FREQUENCY EQUATION.
10355C
10356C              THE MEAN AND ONES FREQUENCY ESTIMATE OF MU IS:
10357C
10358C                  MUHAT = XBAR
10359C
10360C              THE ESTIMATE OF BETA IS THEN THE SOLUTION OF THE
10361C              EQUATION
10362C
10363C                 ((BETA-1)*XBAR/(BETA*XBAR-1))**(BETA-1) - (N1/N) = 0
10364C
10365C              CALLED BY DFZERO ROUTINE FOR SOLVING A NONLINEAR
10366C              UNIVARIATE EQUATION.
10367C     EXAMPLE--GEETA MAXIMUM LIKELIHOOD Y
10368C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
10369C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 8.
10370C     WRITTEN BY--JAMES J. FILLIBEN
10371C                 STATISTICAL ENGINEERING DIVISION
10372C                 INFORMATION TECHNOLOGY LABORATORY
10373C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
10374C                 GAITHERSBUG, MD 20899-8980
10375C                 PHONE--301-975-2855
10376C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
10377C           OF THE NATIONAL BUREAU OF STANDARDS.
10378C     LANGUAGE--ANSI FORTRAN (1977)
10379C     VERSION NUMBER--2006/7
10380C     ORIGINAL VERSION--JULY      2006.
10381C
10382C---------------------------------------------------------------------
10383C
10384      DOUBLE PRECISION DBETA
10385C
10386      DOUBLE PRECISION XBAR
10387      DOUBLE PRECISION S2
10388      DOUBLE PRECISION F1FREQ
10389      COMMON/GETCOM/XBAR,S2,F1FREQ,MAXROW,N
10390C
10391C-----COMMON----------------------------------------------------------
10392C
10393      INCLUDE 'DPCOP2.INC'
10394C
10395C-----START POINT-----------------------------------------------------
10396C
10397      GETFUN=((DBETA-1.0D0)*XBAR/(DBETA*XBAR-1.0D0))**(DBETA-1.0D0) -
10398     1       F1FREQ
10399C
10400      RETURN
10401      END
10402      SUBROUTINE GETFU2(N,XPAR,FVEC,IFLAG,Y,K)
10403C
10404C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
10405C              GEETA MAXIMUM LIKELIHOOD EQUATION.
10406C
10407C              THE MAXIMUM LIKELIHOOD FREQUENCY ESTIMATE OF MU IS:
10408C
10409C                  MUHAT = XBAR
10410C
10411C              THE ESTIMATE OF BETA IS THEN THE SOLUTION OF THE
10412C              EQUATION
10413C
10414C                 ((BETA-1)*XBAR/(BETA*XBAR-1))**(BETA-1) -
10415C                 (1/(N*XBAR))*
10416C                 SUM[X=2 to k][SUM[i=2 to k][X*N(x)/(BETA*X-1)]] = 0
10417C
10418C              THIS ROUTINE ASSUMES THE DATA IS IN THE FORM
10419C
10420C                   X(I)  FREQ(I)
10421C
10422C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
10423C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
10424C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
10425C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
10426C              SINCE DNSQE ONLY PASSES ONE ARRAY, WE SPLIT INTO
10427C              TWO PARTS: 1 - MAXNXT/2 ARE THE FREQUENCIES WHILE
10428C              (MAXNXT/2 + 1) - MAXNXT ARE THE CLASS VALUES (I.E.,
10429C              THE X).
10430C     EXAMPLE--GEETA MAXIMUM LIKELIHOOD Y
10431C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
10432C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 8.
10433C     WRITTEN BY--JAMES J. FILLIBEN
10434C                 STATISTICAL ENGINEERING DIVISION
10435C                 INFORMATION TECHNOLOGY LABORATORY
10436C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
10437C                 GAITHERSBUG, MD 20899-8980
10438C                 PHONE--301-975-2855
10439C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
10440C           OF THE NATIONAL BUREAU OF STANDARDS.
10441C     LANGUAGE--ANSI FORTRAN (1977)
10442C     VERSION NUMBER--2006/7
10443C     ORIGINAL VERSION--JULY      2006.
10444C
10445C---------------------------------------------------------------------
10446C
10447      DOUBLE PRECISION XPAR(*)
10448      DOUBLE PRECISION FVEC(*)
10449      REAL Y(*)
10450C
10451      DOUBLE PRECISION DBETA
10452      DOUBLE PRECISION DTERM1
10453      DOUBLE PRECISION DTERM2
10454      DOUBLE PRECISION DTERM3
10455      DOUBLE PRECISION DSUM1
10456      DOUBLE PRECISION DN
10457      DOUBLE PRECISION DX
10458      DOUBLE PRECISION DX2
10459      DOUBLE PRECISION DFREQ
10460C
10461      DOUBLE PRECISION XBAR
10462      DOUBLE PRECISION S2
10463      DOUBLE PRECISION F1FREQ
10464      COMMON/GETCOM/XBAR,S2,F1FREQ,MAXROW,NTOT
10465C
10466C-----COMMON----------------------------------------------------------
10467C
10468      INCLUDE 'DPCOP2.INC'
10469C
10470C-----START POINT-----------------------------------------------------
10471C
10472      N=2
10473      IFLAG=0
10474C
10475      DBETA=XPAR(1)
10476      DN=DBLE(NTOT)
10477      IINDX=MAXROW/2
10478C
10479      DTERM1=(DBETA - 1.0D0)*XBAR/(DBETA*XBAR - 1.0D0)
10480      DTERM2=1.0D0/(DN*XBAR)
10481C
10482      DSUM1=0.0D0
10483      DO100I=2,K
10484        DX=DBLE(Y(IINDX+I))
10485        DFREQ=Y(I)
10486        DO200J=2,I
10487          DX2=DBLE(Y(IINDX+J))
10488          DSUM1=DSUM1 + DX*DFREQ/(DBETA*DX - DX2)
10489  200   CONTINUE
10490  100 CONTINUE
10491C
10492      DTERM3=DTERM2*DSUM1
10493      FVEC(1)=DEXP(-DTERM3) - DTERM1
10494C
10495      RETURN
10496      END
10497      SUBROUTINE GETPDF(DX,DSHAPE,DBETA,IGETDF,DPDF)
10498C
10499C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY MASS
10500C              FUNCTION VALUE FOR THE GEETA DISTRIBUTION WITH SHAPE
10501C              PARAMETERS THETA AND BETA.  THIS DISTRIBUTION IS
10502C              DEFINED FOR ALL INTEGER X >= 1.
10503C
10504C              THE PROBABILITY MASS FUNCTION IS:
10505C              p(X;THETA,BETA)=
10506C                  (BETA*X-1  X)*THETA**(X-1)*(1-THETA)**(BETA*X-X)/
10507C                  (BETA*X-1)
10508C                  X = 1, 2, 3, ,...
10509C                  0 < THETA < 1; 1 <= BETA < 1/THETA
10510C
10511C              THE MEAN AND VARIANCE ARE:
10512C
10513C                  MU = (1-THETA)/(1-THETA*BETA)
10514C                  SIGMA**2 = (BETA-1)*THETA*(1-THETA)/
10515C                             (1-THETA*BETA)**3
10516C
10517C              THIS DISTRIBUTION IS SOMETIMES PARAMETERIZED USING
10518C              THE MEAN (MU) INSTEAD OF THETA.  THIS RESULTS IN
10519C              THE PROBABILITY MASS FUNCTION:
10520C              p(X;MU,BETA)=
10521C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-1))**(X-1)*
10522C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-X)/(BETA*X-1)
10523C                  X = 1, 2, 3, ,...
10524C                  MU >= 1; BETA > 1
10525C              THE PROBABILITY MASS FUNCTION IS ALSO GIVEN AS
10526C              p(X;MU,BETA)=
10527C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-MU))**(X-1)*
10528C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-1)/(BETA*X-1)
10529C
10530C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
10531C                                WHICH THE PROBABILITY MASS
10532C                                FUNCTION IS TO BE EVALUATED.
10533C                                X SHOULD BE A NON-NEGATIVE INTEGER.
10534C                     --DSHAPE = THE FIRST SHAPE PARAMETER
10535C                                (EITHER THETA OR MU)
10536C                     --DBETA  = THE SECOND SHAPE PARAMETER
10537C     OUTPUT ARGUMENTS--DPDF   = THE DOUBLE PRECISION PROBABILITY MASS
10538C                                FUNCTION VALUE.
10539C     OUTPUT--THE DOUBLE PRECISION PROBABILITY MASS FUNCTION VALUE
10540C             PDF FOR THE GEETA
10541C             DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA
10542C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
10543C     RESTRICTIONS--X SHOULD BE A POSITIVE INTEGER
10544C                 --0 < THETA < 1; 1 < BETA < 1/THETA
10545C                 --MU >= 1; BETA > 1
10546C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
10547C     LANGUAGE--ANSI FORTRAN (1977)
10548C     REFERENCES--CONSUL (1990), "GEETA DISTRIBUTION AND ITS
10549C                 PROPERTIES", COMMUNICATIONS IN STATISTICS--
10550C                 THEORY AND METHODS, 19, PP. 3051-3068.
10551C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
10552C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 8.
10553C     WRITTEN BY--JAMES J. FILLIBEN
10554C                 STATISTICAL ENGINEERING DIVISION
10555C                 INFORMATION TECHNOLOGY LABORATORY
10556C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
10557C                 GAITHERSBURG, MD 20899-8980
10558C                 PHONE--301-975-2855
10559C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
10560C           OF THE NATIONAL BUREAU OF STANDARDS.
10561C     LANGUAGE--ANSI FORTRAN (1977)
10562C     VERSION NUMBER--2006/7
10563C     ORIGINAL VERSION--JULY      2006.
10564C
10565C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
10566C
10567C---------------------------------------------------------------------
10568C
10569      DOUBLE PRECISION DX
10570      DOUBLE PRECISION DSHAPE
10571      DOUBLE PRECISION DBETA
10572      DOUBLE PRECISION DPDF
10573C
10574      DOUBLE PRECISION DTERM1
10575      DOUBLE PRECISION DTERM2
10576      DOUBLE PRECISION DTERM3
10577      DOUBLE PRECISION DTERM4
10578      DOUBLE PRECISION DTERM5
10579      DOUBLE PRECISION DTHETA
10580      DOUBLE PRECISION DMU
10581      DOUBLE PRECISION DLNGAM
10582C
10583      CHARACTER*4 IGETDF
10584C
10585C-----COMMON----------------------------------------------------------
10586C
10587      INCLUDE 'DPCOP2.INC'
10588C
10589C-----START POINT-----------------------------------------------------
10590C
10591C     CHECK THE INPUT ARGUMENTS FOR ERRORS
10592C
10593      IF(IGETDF.EQ.'THET')THEN
10594        DTHETA=DSHAPE
10595      ELSE
10596        DMU=DSHAPE
10597      ENDIF
10598C
10599      IX=INT(DX+0.5D0)
10600      IF(IX.LT.1)THEN
10601        WRITE(ICOUT,4)
10602        CALL DPWRST('XXX','BUG ')
10603        WRITE(ICOUT,46)DX
10604        CALL DPWRST('XXX','BUG ')
10605        DPDF=0.0D0
10606        GOTO9000
10607      ENDIF
10608    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GETPDF IS LESS ',
10609     1'THAN 1')
10610C
10611      IF(IGETDF.EQ.'THET')THEN
10612        IF(DTHETA.LE.0.0D0 .OR. DTHETA.GE.1.0D0)THEN
10613          WRITE(ICOUT,15)
10614          CALL DPWRST('XXX','BUG ')
10615          WRITE(ICOUT,46)DTHETA
10616          CALL DPWRST('XXX','BUG ')
10617          DPDF=0.0
10618          GOTO9000
10619        ENDIF
10620   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GETPDF IS NOT ',
10621     1         'IN THE INTERVAL (0,1)')
10622C
10623        IF(DBETA.LT.1.0D0 .OR. DBETA.GE.1.0D0/DTHETA)THEN
10624          WRITE(ICOUT,25)1.0D0/DTHETA
10625          CALL DPWRST('XXX','BUG ')
10626          WRITE(ICOUT,46)DBETA
10627          CALL DPWRST('XXX','BUG ')
10628          DPDF=0.0
10629          GOTO9000
10630        ENDIF
10631   25   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GETPDF IS NOT ',
10632     1         'IN THE INTERVAL (1,',G15.7,')')
10633      ELSE
10634        IF(DMU.LT.1.0D0)THEN
10635          WRITE(ICOUT,35)
10636          CALL DPWRST('XXX','BUG ')
10637          WRITE(ICOUT,46)DMU
10638          CALL DPWRST('XXX','BUG ')
10639          DPDF=0.0
10640          GOTO9000
10641        ENDIF
10642   35   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GETPDF IS ',
10643     1         'LESS THAN 1')
10644C
10645        IF(DBETA.LE.1.0D0)THEN
10646          WRITE(ICOUT,38)
10647          CALL DPWRST('XXX','BUG ')
10648          WRITE(ICOUT,46)DBETA
10649          CALL DPWRST('XXX','BUG ')
10650          DPDF=0.0
10651          GOTO9000
10652        ENDIF
10653   38   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GETPDF IS ',
10654     1         'LESS THAN OR EQUAL TO 1')
10655      ENDIF
10656C
10657   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
10658C
10659      DX=DBLE(IX)
10660C
10661      IF(IGETDF.EQ.'THET')THEN
10662        IF(DBETA.LE.1.0D0)THEN
10663          IF(IX.EQ.1)THEN
10664            DPDF=1.0D0
10665          ELSE
10666            DPDF=0.0D0
10667          ENDIF
10668        ELSE
10669          DTERM1=DLNGAM(DBETA*DX) + (DX-1.0D0)*DLOG(DTHETA) +
10670     1           (DBETA*DX-DX)*DLOG(1.0D0 - DTHETA)
10671          DTERM2=DLNGAM(DX+1.0D0) + DLOG(DBETA*DX-1.0D0)
10672          DTERM3=DLNGAM(DBETA*DX-DX)
10673          DTERM4=DTERM1 - DTERM2 - DTERM3
10674          DPDF=DEXP(DTERM4)
10675        ENDIF
10676      ELSE
10677        IF(DMU.LE.1.0D0)THEN
10678          IF(IX.EQ.1)THEN
10679            DPDF=1.0D0
10680          ELSE
10681            DPDF=0.0D0
10682          ENDIF
10683        ELSE
10684          DTERM1=-DLOG(DBETA*DX - 1.0D0)
10685          DTERM2=DLNGAM(DBETA*DX) - DLNGAM(DX+1.0D0) -
10686     1           DLNGAM(DBETA*DX-DX)
10687          DTERM3=(DX-1.0D0)*(DLOG(DMU-1.0D0) - DLOG(DMU) -
10688     1           DLOG(DBETA-1.0D0))
10689          DTERM4=(DBETA*DX-1.0D0)*(DLOG(DBETA*DMU - DMU) -
10690     1           DLOG(DBETA*DMU - 1.0D0))
10691          DTERM5=DTERM1 + DTERM2 + DTERM3+ DTERM4
10692          DPDF=DEXP(DTERM5)
10693        ENDIF
10694      ENDIF
10695C
10696 9000 CONTINUE
10697      RETURN
10698      END
10699      SUBROUTINE GETPPF(DP,DSHAPE,DBETA,IGETDF,DPPF)
10700C
10701C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
10702C              FUNCTION VALUE FOR THE GEETA DISTRIBUTION WITH SHAPE
10703C              PARAMETERS THETA AND BETA.  THIS DISTRIBUTION IS
10704C              DEFINED FOR ALL INTEGER X >= 1.
10705C
10706C              THE PROBABILITY MASS FUNCTION IS:
10707C              p(X;THETA,BETA)=
10708C                  (BETA*X-1  X)*THETA**(X-1)*(1-THETA)**(BETA*X-X)/
10709C                  (BETA*X-1)
10710C                  X = 1, 2, 3, ,...
10711C                  0 < THETA < 1; 1 <= BETA < 1/THETA
10712C
10713C              THE MEAN AND VARIANCE ARE:
10714C
10715C                  MU = (1-THETA)/(1-THETA*BETA)
10716C                  SIGMA**2 = (BETA-1)*THETA*(1-THETA)/
10717C                             (1-THETA*BETA)**3
10718C
10719C              THIS DISTRIBUTION IS SOMETIMES PARAMETERIZED USING
10720C              THE MEAN (MU) INSTEAD OF THETA.  THIS RESULTS IN
10721C              THE PROBABILITY MASS FUNCTION:
10722C              p(X;MU,BETA)=
10723C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-1))**(X-1)*
10724C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-X)/(BETA*X-1)
10725C                  X = 1, 2, 3, ,...
10726C                  MU >= 1; BETA > 1
10727C              THE PROBABILITY MASS FUNCTION IS ALSO GIVEN AS
10728C              p(X;MU,BETA)=
10729C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-MU))**(X-1)*
10730C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-1)/(BETA*X-1)
10731C
10732C
10733C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED
10734C              BY SUMMING THE PROBABILITY MASS FUNCTION.  THE
10735C              PERCENT POINT FUNCTION IS COMPUTED BY COMPUTING THE
10736C              CUMULATIVE DISTRIBUTION UNTIL THE APPROPRIATE
10737C              PROBABILITY IS REACHED.
10738C
10739C     INPUT  ARGUMENTS--DP     = THE DOUBLE PRECISION VALUE AT
10740C                                WHICH THE PERCENT POINT
10741C                                FUNCTION IS TO BE EVALUATED.
10742C                     --DSHAPE = THE FIRST SHAPE PARAMETER
10743C                                (EITHER THETA OR MU)
10744C                     --DBETA  = THE SECOND SHAPE PARAMETER
10745C     OUTPUT ARGUMENTS--DPPF   = THE DOUBLE PRECISION PERCENT POINT
10746C                                FUNCTION VALUE.
10747C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION
10748C             VALUE DCDF FOR THE GEETA DISTRIBUTION WITH SHAPE
10749C             PARAMETERS THETA (OR MU) AND BETA
10750C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
10751C     RESTRICTIONS--0 <= DP < 1
10752C                 --0 < THETA < 1; 1 < BETA < 1/THETA
10753C                 --MU >= 1; BETA > 1
10754C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
10755C     LANGUAGE--ANSI FORTRAN (1977)
10756C     REFERENCES--CONSUL (1990), "GEETA DISTRIBUTION AND ITS
10757C                 PROPERTIES", COMMUNICATIONS IN STATISTICS--
10758C                 THEORY AND METHODS, 19, PP. 3051-3068.
10759C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
10760C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 8.
10761C     WRITTEN BY--JAMES J. FILLIBEN
10762C                 STATISTICAL ENGINEERING DIVISION
10763C                 INFORMATION TECHNOLOGY LABORATORY
10764C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
10765C                 GAITHERSBURG, MD 20899-8980
10766C                 PHONE--301-975-2855
10767C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
10768C           OF THE NATIONAL BUREAU OF STANDARDS.
10769C     LANGUAGE--ANSI FORTRAN (1977)
10770C     VERSION NUMBER--2006/7
10771C     ORIGINAL VERSION--JULY      2006.
10772C
10773C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
10774C
10775C---------------------------------------------------------------------
10776C
10777      DOUBLE PRECISION DP
10778      DOUBLE PRECISION DSHAPE
10779      DOUBLE PRECISION DBETA
10780      DOUBLE PRECISION DPPF
10781C
10782      DOUBLE PRECISION DX
10783      DOUBLE PRECISION DTHETA
10784      DOUBLE PRECISION DMU
10785      DOUBLE PRECISION DCDF
10786      DOUBLE PRECISION DPDF
10787      DOUBLE PRECISION DEPS
10788C
10789      CHARACTER*4 IGETDF
10790C
10791C-----COMMON----------------------------------------------------------
10792C
10793      INCLUDE 'DPCOMC.INC'
10794      INCLUDE 'DPCOP2.INC'
10795C
10796C-----START POINT-----------------------------------------------------
10797C
10798C     CHECK THE INPUT ARGUMENTS FOR ERRORS
10799C
10800      IF(IGETDF.EQ.'THET')THEN
10801        DTHETA=DSHAPE
10802      ELSE
10803        DMU=DSHAPE
10804      ENDIF
10805C
10806      IF(DP.LT.0.0D0 .OR. DP.GE.1.0D0)THEN
10807        WRITE(ICOUT,4)
10808        CALL DPWRST('XXX','BUG ')
10809        WRITE(ICOUT,46)DP
10810        CALL DPWRST('XXX','BUG ')
10811        DPPF=0.0D0
10812        GOTO9000
10813      ENDIF
10814    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GETPPF IS OUTSIDE ',
10815     1'THE (0,1] INTERVAL')
10816C
10817      IF(IGETDF.EQ.'THET')THEN
10818        IF(DTHETA.LE.0.0D0 .OR. DTHETA.GE.1.0D0)THEN
10819          WRITE(ICOUT,15)
10820          CALL DPWRST('XXX','BUG ')
10821          WRITE(ICOUT,46)DTHETA
10822          CALL DPWRST('XXX','BUG ')
10823          DPPF=0.0
10824          GOTO9000
10825        ENDIF
10826   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GETPPF IS NOT ',
10827     1         'IN THE INTERVAL (0,1)')
10828C
10829        IF(DBETA.LT.1.0D0 .OR. DBETA.GE.1.0D0/DTHETA)THEN
10830          WRITE(ICOUT,25)1.0D0/DTHETA
10831          CALL DPWRST('XXX','BUG ')
10832          WRITE(ICOUT,46)DBETA
10833          CALL DPWRST('XXX','BUG ')
10834          DPPF=0.0
10835          GOTO9000
10836        ENDIF
10837   25   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GETPPF IS NOT ',
10838     1         'IN THE INTERVAL (1,',G15.7,')')
10839      ELSE
10840        IF(DMU.LT.1.0D0)THEN
10841          WRITE(ICOUT,35)
10842          CALL DPWRST('XXX','BUG ')
10843          WRITE(ICOUT,46)DMU
10844          CALL DPWRST('XXX','BUG ')
10845          DPPF=0.0
10846          GOTO9000
10847        ENDIF
10848   35   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GETPPF IS ',
10849     1         'LESS THAN 1')
10850C
10851        IF(DBETA.LE.1.0D0)THEN
10852          WRITE(ICOUT,38)
10853          CALL DPWRST('XXX','BUG ')
10854          WRITE(ICOUT,46)DBETA
10855          CALL DPWRST('XXX','BUG ')
10856          DPPF=0.0
10857          GOTO9000
10858        ENDIF
10859   38   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GETPPF IS ',
10860     1         'LESS THAN OR EQUAL TO 1')
10861      ENDIF
10862C
10863   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
10864C
10865CCCCC USE PDF FUNCTION UNTIL WE GET RECURRENCE RELATION RESOLVED.
10866C
10867      IF(IGETDF.EQ.'THET')THEN
10868        IF(DBETA.LE.1.0D0)THEN
10869          DPPF=1.0D0
10870        ELSE
10871          I=0
10872          DCDF=0.0D0
10873          DEPS=1.0D-7
10874  100     CONTINUE
10875          I=I+1
10876          IF(DBLE(I).GE.DBLE(I1MACH(9)))THEN
10877            WRITE(ICOUT,55)
10878   55       FORMAT('***** ERROR--THE COMPUTED PERCENT POINT VALUE ',
10879     1             'EXCEEDS THE LARGEST MACHINE INTEGER.')
10880            CALL DPWRST('XXX','BUG ')
10881            DPPF=0.0D0
10882            GOTO9000
10883          ENDIF
10884          DX=DBLE(I)
10885          CALL GETPDF(DX,DTHETA,DBETA,IGETDF,DPDF)
10886          DCDF=DCDF + DPDF
10887          IF(DCDF.GE.DP-DEPS)THEN
10888            DPPF=DX
10889            GOTO9000
10890          ENDIF
10891          GOTO100
10892        ENDIF
10893      ELSE
10894        IF(DMU.LE.1.0D0)THEN
10895          DPPF=1.0D0
10896        ELSE
10897          I=0
10898          DCDF=0.0D0
10899          DEPS=1.0D-7
10900  200     CONTINUE
10901          I=I+1
10902          IF(DBLE(I).GE.DBLE(I1MACH(9)))THEN
10903            WRITE(ICOUT,55)
10904            CALL DPWRST('XXX','BUG ')
10905            DPPF=0.0D0
10906            GOTO9000
10907          ENDIF
10908          DX=DBLE(I)
10909          CALL GETPDF(DX,DMU,DBETA,IGETDF,DPDF)
10910          DCDF=DCDF + DPDF
10911          IF(DCDF.GE.DP-DEPS)THEN
10912            DPPF=DX
10913            GOTO9000
10914          ENDIF
10915          GOTO200
10916        ENDIF
10917      ENDIF
10918C
10919 9000 CONTINUE
10920      RETURN
10921      END
10922      SUBROUTINE GETRAN(N,SHAPE,BETA,IGETDF,ISEED,X)
10923C
10924C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
10925C              FROM THE GEETA DISTRIBUTION WITH SHAPE PARAMETERS
10926C              THETA OR MU AND BETA.
10927C
10928C              THE PROBABILITY MASS FUNCTION IS:
10929C              p(X;THETA,BETA)=
10930C                  (BETA*X-1  X)*THETA**(X-1)*(1-THETA)**(BETA*X-X)/
10931C                  (BETA*X-1)
10932C                  X = 1, 2, 3, ,...
10933C                  0 < THETA < 1; 1 <= BETA < 1/THETA
10934C
10935C              THE MEAN AND VARIANCE ARE:
10936C
10937C                  MU = (1-THETA)/(1-THETA*BETA)
10938C                  SIGMA**2 = (BETA-1)*THETA*(1-THETA)/
10939C                             (1-THETA*BETA)**3
10940C
10941C              THIS DISTRIBUTION IS SOMETIMES PARAMETERIZED USING
10942C              THE MEAN (MU) INSTEAD OF THETA.  THIS RESULTS IN
10943C              THE PROBABILITY MASS FUNCTION:
10944C              p(X;MU,BETA)=
10945C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-1))**(X-1)*
10946C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-X)/(BETA*X-1)
10947C                  X = 1, 2, 3, ,...
10948C                  MU >= 1; BETA > 1
10949C              THE PROBABILITY MASS FUNCTION IS ALSO GIVEN AS
10950C              p(X;MU,BETA)=
10951C                  (BETA*X-1  X)*((MU-1)/(BETA*MU-MU))**(X-1)*
10952C                  (MU*(BETA-1)/(BETA*MU-1))**(BETA*X-1)/(BETA*X-1)
10953C
10954C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
10955C                                OF RANDOM NUMBERS TO BE
10956C                                GENERATED.
10957C                     --SHAPE  = THE SINGLE PRECISION VALUE
10958C                                OF THE FIRST SHAPE PARAMETER.
10959C                     --BETA   = THE SINGLE PRECISION VALUE
10960C                                OF THE SECOND SHAPE PARAMETER.
10961C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
10962C                                (OF DIMENSION AT LEAST N)
10963C                                INTO WHICH THE GENERATED
10964C                                RANDOM SAMPLE WILL BE PLACED.
10965C     OUTPUT--A RANDOM SAMPLE OF SIZE N
10966C             FROM THE GEETA DISTRIBUTION
10967C             WITH SHAPE PARAMETERS THETA (OR MU) AND BETA.
10968C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
10969C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
10970C                   OF N FOR THIS SUBROUTINE.
10971C                 --0 < THETA < 1, 1 < BETA < 1/THETA
10972C                   MU >= 1; BETA > 1
10973C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GETPPF
10974C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
10975C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
10976C     LANGUAGE--ANSI FORTRAN (1977)
10977C     REFERENCES--CONSUL (1990), "GEETA DISTRIBUTION AND ITS
10978C                 PROPERTIES", COMMUNICATIONS IN STATISTICS--
10979C                 THEORY AND METHODS, 19, PP. 3051-3068.
10980C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
10981C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 8.
10982C     WRITTEN BY--JAMES J. FILLIBEN
10983C                 STATISTICAL ENGINEERING DIVISION
10984C                 INFORMATION TECHNOLOGY LABORATORY
10985C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
10986C                 GAITHERSBURG, MD 20899-8980
10987C                 PHONE--301-975-2899
10988C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
10989C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
10990C     LANGUAGE--ANSI FORTRAN (1977)
10991C     VERSION NUMBER--2006/7
10992C     ORIGINAL VERSION--JULY      2006.
10993C
10994C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
10995C
10996C---------------------------------------------------------------------
10997C
10998      DIMENSION X(*)
10999C
11000      CHARACTER*4 IGETDF
11001C
11002      DOUBLE PRECISION DPPF
11003C
11004C-----COMMON----------------------------------------------------------
11005C
11006      INCLUDE 'DPCOP2.INC'
11007C
11008C-----START POINT-----------------------------------------------------
11009C
11010C     CHECK THE INPUT ARGUMENTS FOR ERRORS
11011C
11012      IF(N.LT.1)THEN
11013        WRITE(ICOUT,5)
11014        CALL DPWRST('XXX','BUG ')
11015        WRITE(ICOUT,47)N
11016        CALL DPWRST('XXX','BUG ')
11017        GOTO9000
11018      ENDIF
11019    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GEETA RANDOM ',
11020     1       'NUMBERS IS NON-POSITIVE')
11021C
11022      IF(IGETDF.EQ.'THET')THEN
11023        THETA=SHAPE
11024        IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
11025          WRITE(ICOUT,15)
11026          CALL DPWRST('XXX','BUG ')
11027          WRITE(ICOUT,16)
11028          CALL DPWRST('XXX','BUG ')
11029          WRITE(ICOUT,46)THETA
11030          CALL DPWRST('XXX','BUG ')
11031          GOTO9000
11032        ENDIF
11033   15   FORMAT('***** ERROR--THE THETA PARAMETER FOR THE GEETA')
11034   16   FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (0,1) INTERVAL')
11035C
11036        IF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA)THEN
11037          WRITE(ICOUT,25)
11038          CALL DPWRST('XXX','BUG ')
11039          WRITE(ICOUT,26)1.0/THETA
11040          CALL DPWRST('XXX','BUG ')
11041          WRITE(ICOUT,46)BETA
11042          CALL DPWRST('XXX','BUG ')
11043          GOTO9000
11044        ENDIF
11045   25   FORMAT('***** ERROR--THE BETA PARAMETER FOR THE GEETA')
11046   26   FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (1,',G15.7,') ',
11047     1         'INTERVAL')
11048      ELSE
11049        AMU=SHAPE
11050        IF(AMU.LT.1.0)THEN
11051          WRITE(ICOUT,35)
11052          CALL DPWRST('XXX','BUG ')
11053          WRITE(ICOUT,36)
11054          CALL DPWRST('XXX','BUG ')
11055          WRITE(ICOUT,46)AMU
11056          CALL DPWRST('XXX','BUG ')
11057          GOTO9000
11058        ENDIF
11059   35   FORMAT('***** ERROR--THE MU PARAMETER FOR THE GEETA')
11060   36   FORMAT('      RANDOM NUMBERS IS LESS THAN 1')
11061C
11062        IF(BETA.LE.1.0)THEN
11063          WRITE(ICOUT,38)
11064          CALL DPWRST('XXX','BUG ')
11065          WRITE(ICOUT,39)
11066          CALL DPWRST('XXX','BUG ')
11067          WRITE(ICOUT,46)BETA
11068          CALL DPWRST('XXX','BUG ')
11069          GOTO9000
11070        ENDIF
11071   38   FORMAT('***** ERROR--THE BETA PARAMETER FOR THE GEETA')
11072   39   FORMAT('      RANDOM NUMBERS IS LESS THAN OR EQUAL TO 1')
11073      ENDIF
11074C
11075   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
11076   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
11077C
11078C     GENERATE N GEETA DISTRIBUTION RANDOM NUMBERS USING THE
11079C     INVERSION METHOD.
11080C
11081      CALL UNIRAN(N,ISEED,X)
11082      DO100I=1,N
11083        XTEMP=X(I)
11084        CALL GETPPF(DBLE(XTEMP),DBLE(SHAPE),DBLE(BETA),IGETDF,DPPF)
11085        X(I)=REAL(DPPF)
11086  100 CONTINUE
11087C
11088 9000 CONTINUE
11089C
11090      RETURN
11091      END
11092      SUBROUTINE GEVCDF(X,GAMMA,MINMAX,CDF)
11093C
11094C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
11095C              FUNCTION VALUE FOR THE GENERALIZED EXTREME VALUE
11096C              DISTRIBUTION WITH SINGLE PRECISION
11097C              SHAPE PARAMETER = GAMMA.
11098C              THERE ARE TWO GENERALIZED EXTREME VALUE FAMALIES:
11099C              ONE BASED ON THE MAXIMUM ORDER STATISTIC (THE MOST
11100C              COMMONLY USED, SPECIFIED BY MINMAX=2) AND THE OTHER
11101C              BASED ON THE MINIMUM ORDER STATISTIC (SPECIFIED BY
11102C              SET MINMAX = 1).
11103C
11104C              THE CUMUALTIVE DISTRIBUTION FUNCTION FOR THE MAXIMUM
11105C              CASE OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
11106C              F(X,G) = EXP(-EXP(-X))                          G = 0
11107C                     = EXP(-(1 - GAMMA*X)**(1/GAMMA)]         G <> 0
11108C                                     1 - GAMMA*X >= 0
11109C
11110C              THE CUMULATIVE DISTRIBUTION FUNCTION FOR THE MINIMUM CASE
11111C              OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
11112C              F(X,G) = 1 - EXP(-EXP(X))                       G = 0
11113C                     = 1 - EXP(-(1 + GAMMA*X)**(1/GAMMA)]     G <> 0
11114C                                     1 + GAMMA*X >= 0
11115C
11116C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
11117C                                AT WHICH THE CUMULATIVE DISTRIBUTION
11118C                                FUNCTION IS TO BE EVALUATED.
11119C                     --GAMMA  = THE SINGLE PRECISION VALUE
11120C                                OF THE SHAPE PARAMETER.
11121C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
11122C                                DISTRIBUTION FUNCTION VALUE.
11123C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
11124C             FUNCTION VALUE CDF FOR THE GENERALIZED EXTREME VALUE
11125C             DISTRIBUTION WITH SHAPE PARAMETER VALUE = GAMMA.
11126C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
11127C     RESTRICTIONS--RANGE OF X DEPENDS ON SIGN OF GAMMA
11128C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP.
11129C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
11130C     LANGUAGE--ANSI FORTRAN.
11131C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
11132C                 DISTRIBUTIONS--2, 1994, PAGES 75-76
11133C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA,
11134C                 "EXTREME VALUE AND RELATED MODELS WITH APPLICATIONS
11135C                 IN ENGINEERING AND SCIENCE", WILEY, 2005, PP. 64-65.
11136C     WRITTEN BY--JAMES J. FILLIBEN
11137C                 STATISTICAL ENGINEERING LABORATORY (205.03)
11138C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
11139C                 GAITHERSBURG, MD 20899-8980
11140C                 PHONE:  301-975-2855
11141C     ORIGINAL VERSION--OCTOBER   1995.
11142C     UPDATED         --MAY       2005. SUPPORT FOR MINIMUM CASE
11143C
11144C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
11145C
11146C---------------------------------------------------------------------
11147C
11148      DOUBLE PRECISION DX, DG
11149      DOUBLE PRECISION DCDF
11150      DOUBLE PRECISION DTERM1
11151C
11152      INCLUDE 'DPCOP2.INC'
11153C
11154C---------------------------------------------------------------------
11155C
11156C     MAY 2005.  HANDLE MIN AND MAX CASES SEPARATELY.
11157C
11158C     MAXIMUM CASE
11159C
11160      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
11161C
11162C     CHECK THE INPUT ARGUMENTS FOR ERRORS
11163C
11164        IF(GAMMA.GT.0.0)THEN
11165          IF(X.GE.(1.0/GAMMA))THEN
11166            CDF=1.0
11167            GOTO9999
11168          ENDIF
11169        ELSEIF(GAMMA.LT.0.0)THEN
11170          IF(X.LE.(1.0/GAMMA))THEN
11171            CDF=0.0
11172            GOTO9999
11173          ENDIF
11174        ENDIF
11175C
11176        DX=DBLE(X)
11177        DG=DBLE(GAMMA)
11178        DCDF=0.0D0
11179C
11180        IF(GAMMA.EQ.0.0)THEN
11181          IF(DX.GE.40.D0)THEN
11182            DCDF=1.0D0
11183          ELSEIF(DX.LE.-40.D0)THEN
11184            DCDF=0.0D0
11185          ELSE
11186            DTERM1=-DEXP(-DX)
11187            IF(DTERM1.GE.0.0D0)THEN
11188              DCDF=1.0D0
11189            ELSE
11190              DCDF=DEXP(DTERM1)
11191            ENDIF
11192          ENDIF
11193        ELSE
11194          IF(GAMMA.GT.0.0.AND.X.EQ.1.0/GAMMA)THEN
11195            DCDF=1.0D0
11196          ELSEIF(GAMMA.LT.0.0.AND.X.EQ.1.0/GAMMA)THEN
11197            DCDF=0.0D0
11198          ELSE
11199            DTERM1=-(1.D0-DX*DG)**(1.D0/DG)
11200            IF(DTERM1.LT.-40.0D0)THEN
11201              DCDF=0.0D0
11202            ELSEIF(DTERM1.GE.0.0D0)THEN
11203              DCDF=1.0D0
11204            ELSE
11205              DCDF=DEXP(DTERM1)
11206            ENDIF
11207          END IF
11208        END IF
11209        CDF=REAL(DCDF)
11210      ELSE
11211C
11212C     CHECK THE INPUT ARGUMENTS FOR ERRORS
11213C
11214        IF(GAMMA.GT.0.0)THEN
11215          IF(X.LE.(-1.0/GAMMA))THEN
11216            CDF=0.0
11217            GOTO9999
11218          ENDIF
11219        ELSEIF(GAMMA.LT.0.0)THEN
11220          IF(X.GE.(-1.0/GAMMA))THEN
11221            CDF=1.0
11222            GOTO9999
11223          ENDIF
11224        ENDIF
11225C
11226        DX=DBLE(X)
11227        DG=DBLE(GAMMA)
11228        DCDF=0.D0
11229C
11230        IF(GAMMA.EQ.0.0)THEN
11231          DTERM1=DEXP(DX)
11232          DCDF=1.0D0 - DEXP(-DTERM1)
11233        ELSE
11234          IF(GAMMA.GT.0.0.AND.X.EQ.-1.0/GAMMA)THEN
11235            DCDF=0.0D0
11236          ELSEIF(GAMMA.LT.0.0.AND.X.EQ.-1.0/GAMMA)THEN
11237            DCDF=1.0D0
11238          ELSE
11239            DTERM1=-(1.D0+DX*DG)**(1.D0/DG)
11240            DCDF=1.0D0 - DEXP(DTERM1)
11241          END IF
11242        END IF
11243        CDF=REAL(DCDF)
11244      ENDIF
11245C
11246 9999 CONTINUE
11247      RETURN
11248      END
11249      SUBROUTINE GEVCHA(X,GAMMA,MINMAX,CHAZ)
11250C
11251C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE HAZARD
11252C              FUNCTION VALUE FOR THE GENERALIZED EXTREME VALUE
11253C              DISTRIBUTION WITH SINGLE PRECISION
11254C              SHAPE PARAMETER = GAMMA.
11255C              THERE ARE TWO GENERALIZED EXTREME VALUE FAMALIES:
11256C              ONE BASED ON THE MAXIMUM ORDER STATISTIC (THE MOST
11257C              COMMONLY USED, SPECIFIED BY MINMAX=2) AND THE OTHER
11258C              BASED ON THE MINIMUM ORDER STATISTIC (SPECIFIED BY
11259C              SET MINMAX = 1).
11260C
11261C              THE CUMUALTIVE DISTRIBUTION FUNCTION FOR THE MAXIMUM
11262C              CASE OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
11263C              F(X,G) = EXP(-EXP(-X))                          G = 0
11264C                     = EXP(-(1 - GAMMA*X)**(1/GAMMA)]         G <> 0
11265C                                     1 - GAMMA*X >= 0
11266C
11267C              THE CUMULATIVE DISTRIBUTION FUNCTION FOR THE MINIMUM CASE
11268C              OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
11269C              F(X,G) = 1 - EXP(-EXP(X))                       G = 0
11270C                     = 1 - EXP(-(1 + GAMMA*X)**(1/GAMMA)]     G <> 0
11271C                                     1 + GAMMA*X >= 0
11272C
11273C              THE CUMULATIVE HAZARD IS THEN
11274C
11275C              H(X,G) = -LOG(1 - F(X,G))
11276C
11277C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
11278C                                AT WHICH THE CUMULATIVE HAZARD
11279C                                FUNCTION IS TO BE EVALUATED.
11280C                     --GAMMA  = THE SINGLE PRECISION VALUE
11281C                                OF THE SHAPE PARAMETER.
11282C                     --MINMAX = THE INTEGER VALUE THAT SPECIES
11283C                                THE MINIMUM/MAXIMUM CASE.
11284C     OUTPUT ARGUMENTS--CHAZ   = THE SINGLE PRECISION CUMULATIVE
11285C                                HAZARD FUNCTION VALUE.
11286C     OUTPUT--THE SINGLE PRECISION CUMULATIVE HAZARD
11287C             FUNCTION VALUE CDF FOR THE GENERALIZED EXTREME VALUE
11288C             DISTRIBUTION WITH SHAPE PARAMETER VALUE = GAMMA.
11289C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
11290C     RESTRICTIONS--RANGE OF X DEPENDS ON SIGN OF GAMMA
11291C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP.
11292C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
11293C     LANGUAGE--ANSI FORTRAN.
11294C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
11295C                 DISTRIBUTIONS--2, 1994, PAGES 75-76
11296C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA,
11297C                 "EXTREME VALUE AND RELATED MODELS WITH APPLICATIONS
11298C                 IN ENGINEERING AND SCIENCE", WILEY, 2005, PP. 64-65.
11299C     WRITTEN BY--JAMES J. FILLIBEN
11300C                 STATISTICAL ENGINEERING LABORATORY (205.03)
11301C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
11302C                 GAITHERSBURG, MD 20899-8980
11303C                 PHONE:  301-975-2855
11304C     ORIGINAL VERSION--MAY       2005.
11305C
11306C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
11307C
11308C---------------------------------------------------------------------
11309C
11310      DOUBLE PRECISION DX
11311      DOUBLE PRECISION DG
11312      DOUBLE PRECISION DCDF
11313      DOUBLE PRECISION DCHAZ
11314      DOUBLE PRECISION DTERM1
11315C
11316      INCLUDE 'DPCOP2.INC'
11317C
11318C---------------------------------------------------------------------
11319C
11320C     MAY 2005.  HANDLE MIN AND MAX CASES SEPARATELY.
11321C
11322    4 FORMAT('****** ERROR FROM GEVCHAZ--THE CDF VALUE IS 1 WHICH ',
11323     1       'RESULTS IN AN UNDEFINED CUMULATIVE HAZARD.')
11324   46 FORMAT('****** THE VALUE OF THE INPUT ARGUMENT IS  ',G15.7)
11325   47 FORMAT('****** THE VALUE OF THE SHAPE PARAMETER IS ',G15.7)
11326C
11327C     MAXIMUM CASE
11328C
11329      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
11330C
11331C     CHECK THE INPUT ARGUMENTS FOR ERRORS
11332C
11333        IF(GAMMA.GT.0.0)THEN
11334          IF(X.GE.(1.0/GAMMA))THEN
11335            CHAZ=0.0
11336            WRITE(ICOUT,4)
11337            CALL DPWRST('XXX','BUG ')
11338            WRITE(ICOUT,46)X
11339            CALL DPWRST('XXX','BUG ')
11340            WRITE(ICOUT,47)GAMMA
11341            CALL DPWRST('XXX','BUG ')
11342            GOTO9999
11343          ENDIF
11344        ELSEIF(GAMMA.LT.0.0)THEN
11345          IF(X.LE.(1.0/GAMMA))THEN
11346            CHAZ=0.0
11347            GOTO9999
11348          ENDIF
11349        ENDIF
11350C
11351        DX=DBLE(X)
11352        DG=DBLE(GAMMA)
11353        DCDF=0.0D0
11354        DCHAZ=0.0D0
11355C
11356        IF(GAMMA.EQ.0.0)THEN
11357          DTERM1=-DEXP(-DX)
11358          DCDF=DEXP(DTERM1)
11359          IF(DCDF.GE.1.0D0)THEN
11360            CHAZ=0.0
11361            WRITE(ICOUT,4)
11362            CALL DPWRST('XXX','BUG ')
11363            WRITE(ICOUT,46)X
11364            CALL DPWRST('XXX','BUG ')
11365            WRITE(ICOUT,47)GAMMA
11366            CALL DPWRST('XXX','BUG ')
11367            GOTO9999
11368          ELSE
11369            DCHAZ=-DLOG(1.0D0 - DCDF)
11370          ENDIF
11371        ELSE
11372          DTERM1=-(1.D0-DX*DG)**(1.D0/DG)
11373          DCDF=DEXP(DTERM1)
11374          IF(DCDF.GE.1.0D0)THEN
11375            CHAZ=0.0
11376            WRITE(ICOUT,4)
11377            CALL DPWRST('XXX','BUG ')
11378            WRITE(ICOUT,46)X
11379            CALL DPWRST('XXX','BUG ')
11380            WRITE(ICOUT,47)GAMMA
11381            CALL DPWRST('XXX','BUG ')
11382            GOTO9999
11383          ELSE
11384            DCHAZ=-DLOG(1.0D0 - DCDF)
11385          ENDIF
11386        ENDIF
11387      ELSE
11388C
11389C     CHECK THE INPUT ARGUMENTS FOR ERRORS
11390C
11391        IF(GAMMA.GT.0.0)THEN
11392          IF(X.LE.(-1.0/GAMMA))THEN
11393            CHAZ=0.0
11394            GOTO9999
11395          ENDIF
11396        ELSEIF(GAMMA.LT.0.0)THEN
11397          IF(X.GE.(-1.0/GAMMA))THEN
11398            CHAZ=0.0
11399            WRITE(ICOUT,4)
11400            CALL DPWRST('XXX','BUG ')
11401            WRITE(ICOUT,46)X
11402            CALL DPWRST('XXX','BUG ')
11403            WRITE(ICOUT,47)GAMMA
11404            CALL DPWRST('XXX','BUG ')
11405            GOTO9999
11406          ENDIF
11407        ENDIF
11408C
11409        DX=DBLE(X)
11410        DG=DBLE(GAMMA)
11411        DCHAZ=0.D0
11412C
11413        IF(GAMMA.EQ.0.0)THEN
11414          DCHAZ=DEXP(DX)
11415        ELSE
11416          DCHAZ=(1.D0+DX*DG)**(1.D0/DG)
11417        END IF
11418      ENDIF
11419      CHAZ=REAL(DCHAZ)
11420C
11421 9999 CONTINUE
11422      RETURN
11423      END
11424      SUBROUTINE GEVHAZ(X,GAMMA,MINMAX,HAZ)
11425C
11426C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE HAZARD
11427C              FUNCTION VALUE FOR THE GENERALIZED EXTREME VALUE
11428C              DISTRIBUTION WITH SINGLE PRECISION
11429C              SHAPE PARAMETER = GAMMA.
11430C              THERE ARE TWO GENERALIZED EXTREME VALUE FAMALIES:
11431C              ONE BASED ON THE MAXIMUM ORDER STATISTIC (THE MOST
11432C              COMMONLY USED, SPECIFIED BY MINMAX=2) AND THE OTHER
11433C              BASED ON THE MINIMUM ORDER STATISTIC (SPECIFIED BY
11434C              SET MINMAX = 1).
11435C
11436C              THE HAZARD IS DEFINED AS
11437C
11438C              H(X,G) = f(X,G)/(1 - F(X,G))
11439C
11440C              WHERE f AND F ARE THE PROBABILITY DENSITY AND
11441C              CUMULATIVE DISTRIBUTION FUNCTIONS, RESPECTIVELY.
11442C
11443C              FOR THE MAXIMUM CASE, THIS ROUTINE CALLS GEVPDF AND
11444C              GEVCDF AND THEN USES THE ABOVE FORMULA.  FOR THE
11445C              MINIMUM CASE, THE HAZARD FUNCTION REDUCES TO:
11446C
11447C              H(X,G) = (1 + G*X)**((1/G)-1)              G <> 0
11448C              H(X,G) = EXP(X)                            G = 0
11449C
11450C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
11451C                                AT WHICH THE HAZARD FUNCTION IS TO
11452C                                BE EVALUATED.
11453C                     --GAMMA  = THE SINGLE PRECISION VALUE
11454C                                OF THE SHAPE PARAMETER.
11455C                     --MINMAX = THE INTEGER VALUE THAT SPECIFIES
11456C                                THE MINIMUM/MAXIMUM CASE
11457C     OUTPUT ARGUMENTS--HAZ    = THE SINGLE PRECISION HAZARD
11458C                                FUNCTION VALUE.
11459C     OUTPUT--THE SINGLE PRECISION HAZARD FUNCTION VALUE HAZ FOR THE
11460C             GENERALIZED EXTREME VALUE DISTRIBUTION WITH
11461C             SHAPE PARAMETER VALUE = GAMMA.
11462C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
11463C     RESTRICTIONS--RANGE OF X DEPENDS ON SIGN OF GAMMA
11464C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP.
11465C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
11466C     LANGUAGE--ANSI FORTRAN.
11467C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
11468C                 DISTRIBUTIONS--2, 1994, PAGES 75-76
11469C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA,
11470C                 "EXTREME VALUE AND RELATED MODELS WITH APPLICATIONS
11471C                 IN ENGINEERING AND SCIENCE", WILEY, 2005, PP. 64-65.
11472C     WRITTEN BY--JAMES J. FILLIBEN
11473C                 STATISTICAL ENGINEERING LABORATORY (205.03)
11474C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
11475C                 GAITHERSBURG, MD 20899-8980
11476C                 PHONE:  301-975-2855
11477C     ORIGINAL VERSION--MAY       2005.
11478C
11479C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
11480C
11481C---------------------------------------------------------------------
11482C
11483      DOUBLE PRECISION DX
11484      DOUBLE PRECISION DG
11485      DOUBLE PRECISION DHAZ
11486C
11487      INCLUDE 'DPCOP2.INC'
11488C
11489C---------------------------------------------------------------------
11490C
11491C     MAY 2005.  HANDLE MIN AND MAX CASES SEPARATELY.
11492C
11493C     MAXIMUM CASE
11494C
11495      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
11496C
11497C     CHECK THE INPUT ARGUMENTS FOR ERRORS
11498C
11499        IF(GAMMA.GT.0.0)THEN
11500          IF(X.GT.(1.0/GAMMA))THEN
11501            WRITE(ICOUT,4)
11502            CALL DPWRST('XXX','BUG ')
11503            WRITE(ICOUT,46)X
11504            CALL DPWRST('XXX','BUG ')
11505            WRITE(ICOUT,47)GAMMA
11506            CALL DPWRST('XXX','BUG ')
11507            HAZ=0.0
11508            GOTO9999
11509          ENDIF
11510        ELSEIF(GAMMA.LT.0.0)THEN
11511          IF(X.LT.(1.0/GAMMA))THEN
11512            WRITE(ICOUT,14)
11513            CALL DPWRST('XXX','BUG ')
11514            WRITE(ICOUT,46)X
11515            CALL DPWRST('XXX','BUG ')
11516            WRITE(ICOUT,47)GAMMA
11517            CALL DPWRST('XXX','BUG ')
11518            HAZ=0.0
11519            GOTO9999
11520          ENDIF
11521        ENDIF
11522    4   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVHAZ ',
11523     1         'IS GREATER THAN 1/GAMMA.')
11524   14   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVHAZ ',
11525     1         'IS LESS THAN 1/GAMMA.')
11526   16   FORMAT('***** ERROR--FOR THE GEVHAZ FUNCTION, THE ',
11527     1         'CDF IS EQUAL TO 1.')
11528   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
11529   47   FORMAT('***** THE VALUE OF GAMMA IS ',G15.7)
11530C
11531        CALL GEVCDF(X,GAMMA,MINMAX,CDF)
11532        IF(CDF.GE.1.0)THEN
11533          WRITE(ICOUT,16)
11534          CALL DPWRST('XXX','BUG ')
11535          WRITE(ICOUT,46)X
11536          CALL DPWRST('XXX','BUG ')
11537          WRITE(ICOUT,47)GAMMA
11538          CALL DPWRST('XXX','BUG ')
11539          HAZ=0.0
11540          GOTO9999
11541        ENDIF
11542        CALL GEVPDF(X,GAMMA,MINMAX,PDF)
11543        HAZ=PDF/(1.0 - CDF)
11544      ELSE
11545C
11546C     CHECK THE INPUT ARGUMENTS FOR ERRORS
11547C
11548        IF(GAMMA.GT.0.0)THEN
11549          IF(X.LE.(-1.0/GAMMA))THEN
11550            WRITE(ICOUT,24)
11551            CALL DPWRST('XXX','BUG ')
11552            WRITE(ICOUT,46)X
11553            CALL DPWRST('XXX','BUG ')
11554            WRITE(ICOUT,47)GAMMA
11555            CALL DPWRST('XXX','BUG ')
11556            HAZ=0.0
11557            GOTO9999
11558          ENDIF
11559        ELSEIF(GAMMA.LT.0.0)THEN
11560          IF(X.GE.(-1.0/GAMMA))THEN
11561            WRITE(ICOUT,34)
11562            CALL DPWRST('XXX','BUG ')
11563            WRITE(ICOUT,46)X
11564            CALL DPWRST('XXX','BUG ')
11565            WRITE(ICOUT,47)GAMMA
11566            CALL DPWRST('XXX','BUG ')
11567            HAZ=0.0
11568            GOTO9999
11569          ENDIF
11570        ENDIF
11571   24   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVHAZ ',
11572     1         'IS LESS THAN -1/GAMMA.')
11573   34   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVHAZ ',
11574     1         'IS GREATER THAN -1/GAMMA.')
11575C
11576        DX=DBLE(X)
11577        DG=DBLE(GAMMA)
11578        DHAZ=0.D0
11579C
11580        IF(GAMMA.EQ.0.0)THEN
11581          DHAZ=DEXP(DX)
11582        ELSE
11583          DHAZ=(1.0D0+DX*DG)**((1.D0/DG)-1.0)
11584        END IF
11585        HAZ=REAL(DHAZ)
11586      ENDIF
11587C
11588 9999 CONTINUE
11589      RETURN
11590      END
11591      SUBROUTINE GEVLI1(Y,N,MINMAX,ALOC,SCALE,SHAPE,
11592     1                  ALIK,AIC,AICC,BIC,
11593     1                  ISUBRO,IBUGA3,IERROR)
11594C
11595C     PURPOSE--THIS ROUTINE COMPUTES THE LIKELIHOOD FUNCTION FOR THE
11596C              GENERALIZED EXTREME VALUE DISTRIBUTION.  THIS IS FOR THE
11597C              RAW DATA CASE (I.E., NO GROUPING AND NO CENSORING).
11598C
11599C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
11600C              PERFORMED.
11601C
11602C     REFERENCE--CASTILLO, HADI, BALAKRISHNAN, SARABIA, "EXTREME
11603C                VALUE AND RELATED MODELS WITH APPLICATIONS IN
11604C                ENGINEERING AND SCIENCE", WILEY, 2005.
11605C     WRITTEN BY--ALAN HECKERT
11606C                 STATISTICAL ENGINEERING DIVISION
11607C                 INFORMATION TECHNOLOGY LABORATORY
11608C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
11609C                 GAITHERSBURG, MD 20899-8980
11610C                 PHONE--301-975-2899
11611C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
11612C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
11613C     LANGUAGE--ANSI FORTRAN (1977)
11614C     VERSION NUMBER--2010/07
11615C     ORIGINAL VERSION--JULY      2010.
11616C
11617C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
11618C
11619      CHARACTER*4 ISUBRO
11620      CHARACTER*4 IBUGA3
11621      CHARACTER*4 IERROR
11622C
11623      CHARACTER*4 IWRITE
11624C
11625      CHARACTER*4 ISUBN1
11626      CHARACTER*4 ISUBN2
11627      CHARACTER*4 ISTEPN
11628C
11629      DOUBLE PRECISION DX
11630      DOUBLE PRECISION DZ
11631      DOUBLE PRECISION DS
11632      DOUBLE PRECISION DU
11633      DOUBLE PRECISION DG
11634      DOUBLE PRECISION DN
11635      DOUBLE PRECISION DNP
11636      DOUBLE PRECISION DLIK
11637      DOUBLE PRECISION DSUM1
11638      DOUBLE PRECISION DSUM2
11639      DOUBLE PRECISION DTERM1
11640      DOUBLE PRECISION DTERM2
11641      DOUBLE PRECISION DTERM3
11642C
11643C---------------------------------------------------------------------
11644C
11645      DIMENSION Y(*)
11646C
11647C-----COMMON----------------------------------------------------------
11648C
11649      INCLUDE 'DPCOP2.INC'
11650C
11651C-----START POINT-----------------------------------------------------
11652C
11653      ISUBN1='WEIL'
11654      ISUBN2='I1  '
11655      IERROR='NO'
11656C
11657      ALIK=CPUMIN
11658      AIC=CPUMIN
11659      AICC=CPUMIN
11660      BIC=CPUMIN
11661C
11662      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VLI1')THEN
11663        WRITE(ICOUT,999)
11664  999   FORMAT(1X)
11665        CALL DPWRST('XXX','WRIT')
11666        WRITE(ICOUT,51)
11667   51   FORMAT('**** AT THE BEGINNING OF GEVLI1--')
11668        CALL DPWRST('XXX','WRIT')
11669        WRITE(ICOUT,52)IBUGA3,ISUBRO,N,ALOC,SCALE,SHAPE
11670   52   FORMAT('IBUGA3,ISUBRO,N,ALOC,SCALE,SHAPE = ',2(A4,2X),I8,3G15.7)
11671        CALL DPWRST('XXX','WRIT')
11672        DO56I=1,MIN(N,100)
11673          WRITE(ICOUT,57)I,Y(I)
11674   57     FORMAT('I,Y(I) = ',I8,G15.7)
11675          CALL DPWRST('XXX','WRIT')
11676   56   CONTINUE
11677      ENDIF
11678C
11679C               ******************************************
11680C               **  STEP 1--                            **
11681C               **  COMPUTE LIKELIHOOD FUNCTION         **
11682C               ******************************************
11683C
11684      ISTEPN='1'
11685      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VLI1')
11686     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
11687C
11688      IERFLG=0
11689      IERROR='NO'
11690      IWRITE='OFF'
11691C
11692C     FOR THE MAXIMUM CASE, THE LOG-LIKELIHOOD FUNCTION IS
11693C     (U = LOCATION, S = SCALE, G = SHAPE):
11694C
11695C        -N*LOG(S) - (1- G)*SUM[i=1 to N][Z(i)] - SUM[i=1 to N][EXP(-Z(i))]
11696C
11697C     WHERE
11698C
11699C        Z(i) = (1/G)*LOG(1 - G*(X(i) - U)/S)
11700C
11701C     FOR THE MINIMUM CASE, JUST TAKE X(I) = -X(I) AND USE ABOVE FORMULA.
11702C
11703C     IF SHAPE = 0, THEN LOG-LIKELIHOOD REDUCES TO
11704C
11705C        -N*LOG(S) - SUM[i=1 to N][(X(i)-U)/S] - SUM[i=1 to N][EXP(-(X(i)-U)/S)]
11706C
11707      DN=DBLE(N)
11708      DS=DBLE(SCALE)
11709      DU=DBLE(ALOC)
11710      DG=DBLE(SHAPE)
11711      IF(MINMAX.EQ.1)THEN
11712        DO100I=1,N
11713          Y(I)=-Y(I)
11714  100   CONTINUE
11715      ENDIF
11716C
11717      DTERM1=-DN*DLOG(DS)
11718      DTERM2=1.0D0 - DG
11719      DSUM1=0.0D0
11720      DSUM2=0.0D0
11721      IF(SHAPE.EQ.0.0)THEN
11722        DO1010I=1,N
11723          DX=DBLE((Y(I) - DU)/DS)
11724          DSUM1=DSUM1 + DX
11725          DSUM2=DSUM2 + DEXP(-DX)
11726 1010   CONTINUE
11727        DLIK=DTERM1 - DSUM1 - DSUM2
11728      ELSE
11729        DO1020I=1,N
11730          DX=DBLE(Y(I))
11731          DTERM3=1.0D0 - DG*(DX - DU)/DS
11732          IF(DTERM3.LE.0.0D0)THEN
11733            IERROR='YES'
11734            GOTO9000
11735          ENDIF
11736          DZ=-(1.0D0/DG)*DLOG(1.0D0 - DG*(DX - DU)/DS)
11737          DSUM1=DSUM1 + DZ
11738          DSUM2=DSUM2 + DEXP(-DZ)
11739 1020   CONTINUE
11740        DLIK=DTERM1 - DTERM2*DSUM1 - DSUM2
11741      ENDIF
11742C
11743      ALIK=REAL(DLIK)
11744      DNP=3.0D0
11745      AIC=REAL(-2.0D0*DLIK + 2.0D0*DNP)
11746      DTERM3=(2.0D0*DNP*(DNP+1.0D0))/(DN-DNP-1.0D0)
11747      AICC=REAL(-2.0D0*DLIK + 2.0D0*DNP + DTERM3)
11748      BIC=REAL(-2.0D0*DLIK + DNP*LOG(DN))
11749C
11750C     FOR MINIMUM CASE, CONVERT Y BACK TO ORIGINAL VALUES
11751C
11752      IF(MINMAX.EQ.1)THEN
11753        DO8010I=1,N
11754          Y(I)=-Y(I)
11755 8010   CONTINUE
11756      ENDIF
11757C
11758 9000 CONTINUE
11759      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VLI1')THEN
11760        WRITE(ICOUT,999)
11761        CALL DPWRST('XXX','WRIT')
11762        WRITE(ICOUT,9011)
11763 9011   FORMAT('**** AT THE END OF GEVLI1--')
11764        CALL DPWRST('XXX','WRIT')
11765        WRITE(ICOUT,9013)DSUM1,DSUM2,DTERM1,DTERM2,DTERM3
11766 9013   FORMAT('DSUM1,DSUM2,DTERM1,DTERM2,DTERM3 = ',4G15.7)
11767        CALL DPWRST('XXX','WRIT')
11768        WRITE(ICOUT,9014)ALIK,AIC,AICC,BIC
11769 9014   FORMAT('ALIK,AIC,AICC,BIC = ',4G15.7)
11770        CALL DPWRST('XXX','WRIT')
11771      ENDIF
11772C
11773      RETURN
11774      END
11775      SUBROUTINE GEVML1(Y,N,MAXNXT,MINMAX,ICASPL,MLFLAG,IGEPDF,
11776     1                  ISEED,IDFTTY,IGEVML,
11777     1                  TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,
11778     1                  DTEMP1,XMOM,NMOM,VARCOV,
11779     1                  XMEAN,XSD,XVAR,XMIN,XMAX,
11780     1                  ALOCLM,SCALLM,SHAPLM,
11781     1                  ALOCEP,SCALEP,SHAPEP,
11782     1                  ALOCML,SCALML,SHAPML,
11783     1                  ISUBRO,IBUGA3,IERROR)
11784C
11785C     PURPOSE--THIS ROUTINE COMPUTES THE MAXIMUM LIKELIHOOD ESTIMATES
11786C              FOR THE 3-PARAMETER GENERALIZED EXTREME VALUE
11787C              DISTRIBUTION FOR THE RAW DATA CASE (I.E., NO CENSORING
11788C              AND NO GROUPING).  THIS ROUTINE RETURNS ONLY THE POINT
11789C              ESTIMATES (CONFIDENCE INTERVALS WILL BE COMPUTED IN A
11790C              SEPARATE ROUTINE).
11791C
11792C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
11793C              PERFORMED.
11794C
11795C              PUT THIS IN A SEPARATE ROUTINE AS IT MAY BE CALLED
11796C              FROM MULTIPLE PLACES (DPMLW1 WILL GENERATE THE OUTPUT
11797C              FOR THE GENERALIZED EXTREME VALUE MLE COMMAND).
11798C
11799C              THE FOLLOWING METHODS ARE SUPPORTED:
11800C
11801C                  1) L-MOMENTS
11802C                  2) ELEMENTAL PERCENTILES
11803C                  3) MAXIMUM LIKELIHOOD
11804C
11805C               NOTE THAT L-MOMENT AND MAXIMUM LIKELIHOOD ARE ONLY
11806C               SUPOORTED FOR CERTAIN RANGES OF THE SHAPE PARAMETER.
11807C               ELEMENTAL PERCENTILES DOES NOT HAVE THIS RESTRICTION.
11808C
11809C               CURRENTLY HAVING SOME ISSUES GETTING THE ML CODE
11810C               TO WORK.
11811C
11812C     REFERENCE--JOHNSON, KOTZ, AND BALAKRISHNAN.  "CONTINUOUS
11813C                UNIVARIATE DISTRIBUTIONS, VOLUME I", SECOND
11814C                EDITION, WILEY, 1994, PP. 614-619.
11815C              --HOSKING, ALGORITHM AS215   APPL. STATIST. (1985)
11816C                VOL. 34, NO. 3, Modifications in AS R76 (1989)
11817C                have been incorporated.
11818C              --CASTILLO, HADI, BALAKRISHNAN, SARABIA, "EXTREME
11819C                VALUE AND RELATED MODELS WITH APPLICATIONS IN
11820C                ENGINEERING AND SCIENCE", WILEY, 2005.
11821C     WRITTEN BY--ALAN HECKERT
11822C                 STATISTICAL ENGINEERING DIVISION
11823C                 INFORMATION TECHNOLOGY LABORATORY
11824C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
11825C                 GAITHERSBURG, MD 20899-8980
11826C                 PHONE--301-975-2899
11827C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
11828C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
11829C     LANGUAGE--ANSI FORTRAN (1977)
11830C     VERSION NUMBER--2010/07
11831C     ORIGINAL VERSION--JULY      2010. EXTRACTED AS A SEPARATE
11832C                                       SUBROUTINE (FROM DPMLGV)
11833C     UPDATED         --APRIL     2011. IDFTTY TO SUPPRESS MOMENT
11834C                                       OR ML METHODS
11835C     UPDATED         --OCTOBER   2014. IGEVML SWITCH
11836C
11837C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
11838C
11839      DIMENSION Y(*)
11840      DIMENSION TEMP1(*)
11841      DIMENSION TEMP2(*)
11842      DIMENSION TEMP3(*)
11843      DIMENSION TEMP4(*)
11844      DIMENSION TEMP5(*)
11845      DOUBLE PRECISION DTEMP1(*)
11846      DOUBLE PRECISION XMOM(*)
11847      DOUBLE PRECISION XPAR(3)
11848      DOUBLE PRECISION VARCOV(*)
11849C
11850      CHARACTER*4 IGEPDF
11851      CHARACTER*4 IDFTTY
11852      CHARACTER*4 IGEVML
11853      CHARACTER*4 ICASPL
11854      CHARACTER*4 ISUBRO
11855      CHARACTER*4 IBUGA3
11856      CHARACTER*4 IERROR
11857C
11858      LOGICAL MLFLAG
11859C
11860      CHARACTER*4 IWRITE
11861      CHARACTER*40 IDIST
11862C
11863      CHARACTER*4 ISUBN1
11864      CHARACTER*4 ISUBN2
11865      CHARACTER*4 ISTEPN
11866C
11867C-----COMMON----------------------------------------------------------
11868C
11869      INCLUDE 'DPCOP2.INC'
11870C
11871C-----START POINT-----------------------------------------------------
11872C
11873      ISUBN1='GEVM'
11874      ISUBN2='L1  '
11875      IERROR='NO'
11876      IWRITE='OFF'
11877C
11878      AN=REAL(N)
11879      ALOCLM=CPUMIN
11880      SCALLM=CPUMIN
11881      SHAPLM=CPUMIN
11882      ALOCEP=CPUMIN
11883      SCALEP=CPUMIN
11884      SHAPEP=CPUMIN
11885      ALOCML=CPUMIN
11886      SCALMO=CPUMIN
11887      SHAPML=CPUMIN
11888C
11889      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VML1')THEN
11890        WRITE(ICOUT,999)
11891  999   FORMAT(1X)
11892        CALL DPWRST('XXX','WRIT')
11893        WRITE(ICOUT,51)
11894   51   FORMAT('**** AT THE BEGINNING OF GEVML1--')
11895        CALL DPWRST('XXX','WRIT')
11896        WRITE(ICOUT,52)IBUGA3,ISUBRO,ICASPL,MINMAX
11897   52   FORMAT('IBUGA3,ISUBRO,ICASPL,MINMAX = ',3(A4,2X),I5)
11898        CALL DPWRST('XXX','WRIT')
11899        DO56I=1,MIN(N,100)
11900          WRITE(ICOUT,57)I,Y(I)
11901   57     FORMAT('I,Y(I) = ',I8,G15.7)
11902          CALL DPWRST('XXX','WRIT')
11903   56   CONTINUE
11904      ENDIF
11905C
11906C               **************************************************
11907C               **  STEP 2--                                   **
11908C               **  CARRY OUT CALCULATIONS                     **
11909C               **  FOR GENERALIZED EXTREME VALUE MLE ESTIMATE **
11910C               *************************************************
11911C
11912      ISTEPN='2'
11913      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VML1')
11914     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
11915C
11916      IDIST='GENERALIZED EXTREME VALUE'
11917      IFLAG=0
11918      CALL SUMRAW(Y,N,IDIST,IFLAG,
11919     1            XMEAN,XVAR,XSD,XMIN,XMAX,
11920     1            ISUBRO,IBUGA3,IERROR)
11921C
11922      IF(MINMAX.EQ.1)THEN
11923        DO2002I=1,N
11924          Y(I)=-Y(I)
11925 2002   CONTINUE
11926      ENDIF
11927      CALL SORT(Y,N,Y)
11928C
11929C     COMPUTE L-MOMENT ESTIMATORS
11930C
11931      NMOM=3
11932      DO2110I=1,N
11933        DTEMP1(I)=DBLE(Y(I))
11934 2110 CONTINUE
11935      CALL SAMLMU(DTEMP1,N,XMOM,NMOM)
11936      CALL GEVPEL(XMOM,XPAR)
11937      ALOCLM=REAL(XPAR(1))
11938      SCALLM=REAL(XPAR(2))
11939      SHAPLM=REAL(XPAR(3))
11940C
11941      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VML1')THEN
11942        WRITE(ICOUT,2012)ALOCLM,SCALLM,SHAPLM
11943 2012   FORMAT('ALOCLM,SCALLM,SHAPLM = ',3G15.7)
11944        CALL DPWRST('XXX','WRIT')
11945        WRITE(ICOUT,52)IBUGA3,ISUBRO,MINMAX
11946      ENDIF
11947C
11948      ITEMP=2
11949      NSAMP=20*N
11950      IF(NSAMP.GT.5000)NSAMP=5000
11951      CALL DPEPM2(Y,N,ICASPL,MAXNXT,MINMAX,IGEPDF,
11952     1            ISEED,NSAMP,
11953     1            TEMP1,TEMP2,TEMP3,TEMP4,TEMP5,
11954     1            ALOCEP,SCALEP,SHAPEP,
11955     1            IBUGA3,ISUBRO,IERROR)
11956C
11957      IF(IDFTTY.EQ.'EPER')GOTO9000
11958C
11959      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VML1')THEN
11960        WRITE(ICOUT,2022)ALOCEP,SCALEP,SHAPEP
11961 2022   FORMAT('ALOCEP,SCALEP,SHAPEP = ',3G15.7)
11962        CALL DPWRST('XXX','WRIT')
11963        WRITE(ICOUT,52)IBUGA3,ISUBRO,MINMAX
11964      ENDIF
11965C
11966      IF(SHAPLM.NE.CPUMIN)THEN
11967        XPAR(1)=DBLE(ALOCLM)
11968        XPAR(2)=DBLE(SCALLM)
11969        XPAR(3)=DBLE(SHAPLM)
11970      ELSE
11971        XPAR(1)=DBLE(ALOCEP)
11972        XPAR(2)=DBLE(SCALEP)
11973        XPAR(3)=DBLE(SHAPEP)
11974      ENDIF
11975C
11976C     NOTE: ONLY ATTEMP MLE IF L-MOMENT ESTIMATES IN THE
11977C           RANGE -0.5 TO 0.5.
11978C
11979C     NOTE: OUR EXPERIENCE WITH THE HOSKING ROUTINE IS THAT THE
11980C           ML ESTIMATES ARE NOT VERY STABLE.  SO SUPPRESS
11981C           UNLESS THE IGEVML SWITCH IS EXPLICITLY TURNED ON.
11982C
11983      IF(IGEVML.EQ.'OFF')GOTO9000
11984C
11985      IF(MLFLAG .AND. SHAPLM.GE.-0.5 .AND. SHAPLM.LE.0.5)THEN
11986        MONIT=0
11987CCCCC   MONIT=1
11988        IFAULT=0
11989        DO2130I=1,N
11990          DTEMP1(I)=DBLE(Y(I))
11991 2130   CONTINUE
11992C
11993        CALL MLEGEV(DTEMP1,N,XPAR,VARCOV,MONIT,IFAULT)
11994C
11995C       RETURN ML VALUES EVEN IF ERROR RETURNED FROM FIT
11996C       PROCEDURE
11997C
11998CCCCC   IF(IFAULT.EQ.0)THEN
11999          SHAPML=REAL(XPAR(3))
12000          SCALML=REAL(XPAR(2))
12001          ALOCML=REAL(XPAR(1))
12002CCCCC   ENDIF
12003C
12004        IF(IFAULT.EQ.1)THEN
12005          WRITE(ICOUT,999)
12006          CALL DPWRST('XXX','BUG ')
12007          WRITE(ICOUT,1111)
12008 1111     FORMAT('****** ERROR IN GENERALIZED EXTREME VALUE ',
12009     1           'MAXIMUM LIKELIHOOD--')
12010          CALL DPWRST('XXX','BUG ')
12011          WRITE(ICOUT,1013)N
12012 1013     FORMAT('      EXTREME VALUE REQUIRES N > 2.  N = ',I8)
12013          CALL DPWRST('XXX','BUG ')
12014          IERROR='YES'
12015        ELSEIF(IFAULT.EQ.2)THEN
12016          WRITE(ICOUT,999)
12017          CALL DPWRST('XXX','BUG ')
12018          WRITE(ICOUT,1111)
12019          CALL DPWRST('XXX','BUG ')
12020          WRITE(ICOUT,1023)
12021 1023     FORMAT('      MAXIMUM NUMBER OF ITERATIONS EXCEEDED.')
12022          CALL DPWRST('XXX','BUG ')
12023CCCCC     IERROR='YES'
12024        ELSEIF(IFAULT.EQ.3)THEN
12025          WRITE(ICOUT,999)
12026          CALL DPWRST('XXX','BUG ')
12027          WRITE(ICOUT,1111)
12028          CALL DPWRST('XXX','BUG ')
12029          WRITE(ICOUT,1033)
12030 1033     FORMAT('      MAXIMUM NUMBER OF EVALUATIONS FOR LOG ',
12031     1           'LIKELIHOOD EXCEEDED.')
12032          CALL DPWRST('XXX','BUG ')
12033          IERROR='YES'
12034        ELSEIF(IFAULT.EQ.4)THEN
12035          WRITE(ICOUT,999)
12036          CALL DPWRST('XXX','BUG ')
12037          WRITE(ICOUT,1111)
12038          CALL DPWRST('XXX','BUG ')
12039          WRITE(ICOUT,1043)
12040 1043     FORMAT('      MAXIMUM NUMBER OF STEP LENGTH REDUCTIONS ',
12041     1           'EXCEEDED.')
12042          CALL DPWRST('XXX','BUG ')
12043          IERROR='YES'
12044        ENDIF
12045      ENDIF
12046C
12047C     FOR MINIMUM CASE, NEED TO REVERSE SIGN OF LOCATION
12048C     ESTIMATE.  ALSO, CONVERT Y BACK TO ORIGINAL DATA.
12049C
12050      IF(MINMAX.EQ.1)THEN
12051        IF(ALOCLM.NE.CPUMIN)ALOCLM=-ALOCLM
12052        IF(ALOCEP.NE.CPUMIN)ALOCEP=-ALOCEP
12053        IF(ALOCML.NE.CPUMIN)ALOCML=-ALOCML
12054        DO8010I=1,N
12055          Y(I)=-Y(I)
12056 8010   CONTINUE
12057      ENDIF
12058C
12059 9000 CONTINUE
12060      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'VML1')THEN
12061        WRITE(ICOUT,999)
12062        CALL DPWRST('XXX','WRIT')
12063        WRITE(ICOUT,9011)
12064 9011   FORMAT('**** AT THE END OF GEVML1--')
12065        CALL DPWRST('XXX','WRIT')
12066        WRITE(ICOUT,9013)N,XMEAN,XSD,XMIN,XMAX
12067 9013   FORMAT('N,XMEAN,XSD,XMIN,XMAX = ',I8,4G15.7)
12068        CALL DPWRST('XXX','WRIT')
12069        WRITE(ICOUT,9017)ALOCLM,SCALLM,SHAPLM
12070 9017   FORMAT('ALOCLM,SCALLM,SHAPLM =  ',3G15.7)
12071        CALL DPWRST('XXX','WRIT')
12072        WRITE(ICOUT,9018)ALOCEP,SCALEP,SHAPEP
12073 9018   FORMAT('ALOCEP,SCALEP,SHAPEP =  ',3G15.7)
12074        CALL DPWRST('XXX','WRIT')
12075        WRITE(ICOUT,9019)ALOCML,SCALML,SHAPML
12076 9019   FORMAT('ALOCML,SCALML,SHAPML =  ',3G15.7)
12077        CALL DPWRST('XXX','WRIT')
12078      ENDIF
12079C
12080      RETURN
12081      END
12082      SUBROUTINE GEVPDF(X,GAMMA,MINMAX,PDF)
12083C
12084C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
12085C              FUNCTION VALUE FOR THE GENERALIZED EXTREME VALUE
12086C              DISTRIBUTION WITH SINGLE PRECISION
12087C              SHAPE PARAMETER = GAMMA.
12088C              THERE ARE TWO GENERALIZED EXTREME VALUE FAMALIES:
12089C              ONE BASED ON THE MAXIMUM ORDER STATISTIC (THE MOST
12090C              COMMONLY USED, SPECIFIED BY MINMAX=2) AND THE OTHER
12091C              BASED ON THE MINIMUM ORDER STATISTIC (SPECIFIED BY
12092C              SET MINMAX = 1).
12093C
12094C              THE PROBABILITY DENSITY FUNCTION FOR THE MAXIMUM CASE
12095C              OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
12096C              F(X,G) = EXP(-EXP(-X))*EXP(-X)        G = 0
12097C                     = EXP(-(1-G*X)**(1/G))*(1-G*X)**((1/G)-1) G<>0
12098C                                     X<=1/G   FOR G > 0
12099C                                     X>=1/G   FOR G < 0
12100C
12101C              THE PROBABILITY DENSITY FUNCTION FOR THE MINIMUM CASE
12102C              OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
12103C              F(X,G) = EXP(-EXP(X))*EXP(X)        G = 0
12104C                     = EXP(-(1+G*X)**(1/G))*(1+G*X)**((1/G)-1) G<>0
12105C                                     X>=1/G   FOR G > 0
12106C                                     X<=1/G   FOR G < 0
12107C
12108C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
12109C                                AT WHICH THE PROBABILITY DENSITY
12110C                                FUNCTION IS TO BE EVALUATED.
12111C                     --GAMMA  = THE SINGLE PRECISION VALUE
12112C                                OF THE SHAPE PARAMETER.
12113C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
12114C                                DENSITY FUNCTION VALUE.
12115C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
12116C             FUNCTION VALUE PDF FOR THE GENERALIZED EXTREME VALUE
12117C             DISTRIBUTION WITH SHAPE PARAMETER VALUE = GAMMA.
12118C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
12119C     RESTRICTIONS--RANGE OF X DEPENDS ON SIGN OF GAMMA
12120C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP.
12121C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
12122C     LANGUAGE--ANSI FORTRAN.
12123C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
12124C                 DISTRIBUTIONS--2, 1994, PAGES 75-76
12125C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA,
12126C                 "EXTREME VALUE AND RELATED MODELS WITH APPLICATIONS
12127C                 IN ENGINEERING AND SCIENCE", WILEY, 2005, PP. 64-65.
12128C     WRITTEN BY--JAMES J. FILLIBEN
12129C                 STATISTICAL ENGINEERING LABORATORY (205.03)
12130C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
12131C                 GAITHERSBURG, MD 20899-8980
12132C                 PHONE:  301-975-2855
12133C     ORIGINAL VERSION--APRIL     1994.
12134C     UPDATED         --MAY       2005. SUPPORT FOR MINIMUM CASE
12135C
12136C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
12137C
12138C---------------------------------------------------------------------
12139C
12140      DOUBLE PRECISION DX, DG
12141      DOUBLE PRECISION DPDF
12142      DOUBLE PRECISION DTERM1, DTERM2, DTERM3
12143C
12144      INCLUDE 'DPCOP2.INC'
12145C
12146C---------------------------------------------------------------------
12147C
12148C
12149C     MAY 2005.  HANDLE MIN AND MAX CASES SEPARATELY.
12150C
12151C     MAXIMUM CASE
12152C
12153      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
12154C
12155C       CHECK THE INPUT ARGUMENTS FOR ERRORS
12156C
12157        IF(GAMMA.GT.0.0)THEN
12158          IF(X.GT.(1.0/GAMMA))THEN
12159            WRITE(ICOUT,4)
12160            CALL DPWRST('XXX','BUG ')
12161            WRITE(ICOUT,46)X
12162            CALL DPWRST('XXX','BUG ')
12163            WRITE(ICOUT,47)GAMMA
12164            CALL DPWRST('XXX','BUG ')
12165            PDF=0.0
12166            GOTO9999
12167          ENDIF
12168        ELSEIF(GAMMA.LT.0.0)THEN
12169          IF(X.LT.(1.0/GAMMA))THEN
12170            WRITE(ICOUT,14)
12171            CALL DPWRST('XXX','BUG ')
12172            WRITE(ICOUT,46)X
12173            CALL DPWRST('XXX','BUG ')
12174            WRITE(ICOUT,47)GAMMA
12175            CALL DPWRST('XXX','BUG ')
12176            PDF=0.0
12177            GOTO9999
12178          ENDIF
12179        ENDIF
12180    4   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVPDF ',
12181     1         'IS GREATER THAN 1/GAMMA.')
12182   14   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVPDF ',
12183     1         'IS LESS THAN 1/GAMMA.')
12184   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
12185   47   FORMAT('***** THE VALUE OF GAMMA IS ',G15.7)
12186C
12187        DX=DBLE(X)
12188        DG=DBLE(GAMMA)
12189C
12190        IF(GAMMA.EQ.0.0)THEN
12191          DTERM1=-DX
12192          IF(ABS(DTERM1).GE.500.D0)THEN
12193            PDF=0.0
12194          ELSE
12195            DTERM2=-DEXP(-DX) - DX
12196            DPDF=0.D0
12197            IF(DABS(DTERM2).LE.500.D0)DPDF=DEXP(DTERM2)
12198            PDF=REAL(DPDF)
12199          ENDIF
12200        ELSE
12201          DTERM1=-(1.D0-DX*DG)**(1.D0/DG)
12202          DTERM2=((1.D0/DG)-1.D0)*DLOG(1.D0-DX*DG)
12203          DTERM3=DTERM1+DTERM2
12204          DPDF=0.D0
12205          IF(DABS(DTERM3).LE.500.D0)DPDF=DEXP(DTERM3)
12206          PDF=REAL(DPDF)
12207        END IF
12208C
12209C  MINIMUM CASE
12210C
12211      ELSE
12212C
12213C       CHECK THE INPUT ARGUMENTS FOR ERRORS
12214C
12215        IF(GAMMA.GT.0.0)THEN
12216          IF(X.LT.(-1.0/GAMMA))THEN
12217            WRITE(ICOUT,24)
12218            CALL DPWRST('XXX','BUG ')
12219            WRITE(ICOUT,46)X
12220            CALL DPWRST('XXX','BUG ')
12221            WRITE(ICOUT,47)GAMMA
12222            CALL DPWRST('XXX','BUG ')
12223            PDF=0.0
12224            GOTO9999
12225          ENDIF
12226        ELSEIF(GAMMA.LT.0.0)THEN
12227          IF(X.GT.(-1.0/GAMMA))THEN
12228            WRITE(ICOUT,34)
12229            CALL DPWRST('XXX','BUG ')
12230            WRITE(ICOUT,46)X
12231            CALL DPWRST('XXX','BUG ')
12232            WRITE(ICOUT,47)GAMMA
12233            CALL DPWRST('XXX','BUG ')
12234            PDF=0.0
12235            GOTO9999
12236          ENDIF
12237        ENDIF
12238   24   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVPDF ',
12239     1         'IS LESS THAN -1/GAMMA.')
12240   34   FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT TO GEVPDF ',
12241     1         'IS GREATER THAN -1/GAMMA.')
12242C
12243        DX=DBLE(X)
12244        DG=DBLE(GAMMA)
12245C
12246        IF(GAMMA.EQ.0.0)THEN
12247          DTERM1=-DX
12248          IF(ABS(DTERM1).GE.500.D0)THEN
12249            PDF=0.0
12250          ELSE
12251            DTERM2=-DEXP(DX) + DX
12252            DPDF=0.D0
12253            IF(DABS(DTERM2).LE.500.D0)DPDF=DEXP(DTERM2)
12254            PDF=REAL(DPDF)
12255          ENDIF
12256        ELSE
12257          DTERM1=-(1.D0+DX*DG)**(1.D0/DG)
12258          DTERM2=((1.D0/DG)-1.D0)*DLOG(1.D0+DX*DG)
12259          DTERM3=DTERM1+DTERM2
12260          DPDF=0.D0
12261          IF(DABS(DTERM3).LE.500.D0)DPDF=DEXP(DTERM3)
12262          PDF=REAL(DPDF)
12263        END IF
12264      ENDIF
12265C
12266 9999 CONTINUE
12267      RETURN
12268      END
12269C===================================================== PELGEV.FOR
12270      SUBROUTINE GEVPEL(XMOM,PARA)
12271C***********************************************************************
12272C*                                                                     *
12273C*  FORTRAN CODE WRITTEN FOR INCLUSION IN IBM RESEARCH REPORT RC20525, *
12274C*  'FORTRAN ROUTINES FOR USE WITH THE METHOD OF L-MOMENTS, VERSION 3' *
12275C*                                                                     *
12276C*  J. R. M. HOSKING                                                   *
12277C*  IBM RESEARCH DIVISION                                              *
12278C*  T. J. WATSON RESEARCH CENTER                                       *
12279C*  YORKTOWN HEIGHTS                                                   *
12280C*  NEW YORK 10598, U.S.A.                                             *
12281C*                                                                     *
12282C*  VERSION 3     AUGUST 1996                                          *
12283C*                                                                     *
12284C***********************************************************************
12285C
12286C  PARAMETER ESTIMATION VIA L-MOMENTS FOR THE GENERALIZED EXTREME-VALUE
12287C  DISTRIBUTION
12288C
12289C  PARAMETERS OF ROUTINE:
12290C  XMOM   * INPUT* ARRAY OF LENGTH 3. CONTAINS THE L-MOMENTS LAMBDA-1,
12291C                  LAMBDA-2, TAU-3.
12292C  PARA   *OUTPUT* ARRAY OF LENGTH 3. ON EXIT, CONTAINS THE PARAMETERS
12293C                  IN THE ORDER XI, ALPHA, K (LOCATION, SCALE, SHAPE).
12294C
12295C  OTHER ROUTINES USED: DLGAMA (RENAMED TO: DLGADP)
12296C
12297C  METHOD: FOR  -0.8 LE TAU3 LT 1,  K IS APPROXIMATED BY RATIONAL
12298C  FUNCTIONS AS IN DONALDSON (1996, COMMUN. STATIST. SIMUL. COMPUT.).
12299C  IF TAU3 IS OUTSIDE THIS RANGE, NEWTON-RAPHSON ITERATION IS USED.
12300C
12301      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
12302      DOUBLE PRECISION XMOM(3),PARA(3)
12303      DOUBLE PRECISION DLNGAM
12304      EXTERNAL DLNGAM
12305C
12306      INCLUDE 'DPCOP2.INC'
12307C
12308      DATA ZERO/0D0/,HALF/0.5D0/,ONE/1D0/,TWO/2D0/,THREE/3D0/
12309      DATA P8/0.8D0/,P97/0.97D0/
12310C
12311C         SMALL IS USED TO TEST WHETHER K IS EFFECTIVELY ZERO
12312C         EPS,MAXIT CONTROL THE TEST FOR CONVERGENCE OF N-R ITERATION
12313C
12314      DATA SMALL/1D-5/,EPS/1D-6/,MAXIT/20/
12315C
12316C         EU IS EULER'S CONSTANT
12317C         DL2 IS LOG(2), DL3 IS LOG(3)
12318C
12319      DATA EU/0.57721566D0/,DL2/0.69314718D0/,DL3/1.0986123D0/
12320C
12321C         COEFFICIENTS OF RATIONAL-FUNCTION APPROXIMATIONS FOR K
12322C
12323      DATA A0,A1,A2/ 0.28377530D0,-1.21096399D0,-2.50728214D0/
12324      DATA A3,A4   /-1.13455566D0,-0.07138022D0/
12325      DATA B1,B2,B3/ 2.06189696D0, 1.31912239D0, 0.25077104D0/
12326      DATA C1,C2,C3/ 1.59921491D0,-0.48832213D0, 0.01573152D0/
12327      DATA D1,D2   /-0.64363929D0, 0.08985247D0/
12328C
12329      T3=XMOM(3)
12330      IF(XMOM(2).LE.ZERO)THEN
12331        WRITE(ICOUT,999)
12332  999   FORMAT(1X)
12333        CALL DPWRST('XXX','BUG ')
12334        WRITE(ICOUT,7000)
12335 7000   FORMAT('****** ERROR IN GENERALIZED EXTREME VALUE L-MOMENTS')
12336        CALL DPWRST('XXX','BUG ')
12337        WRITE(ICOUT,7003)
12338 7003   FORMAT('       L-MOMENTS INVALID.')
12339        CALL DPWRST('XXX','BUG ')
12340        PARA(1)=CPUMIN
12341        PARA(2)=CPUMIN
12342        PARA(3)=CPUMIN
12343        GOTO9000
12344      ELSEIF(DABS(T3).GE.ONE)THEN
12345        WRITE(ICOUT,999)
12346        CALL DPWRST('XXX','BUG ')
12347        WRITE(ICOUT,7000)
12348        CALL DPWRST('XXX','BUG ')
12349        WRITE(ICOUT,7003)
12350        CALL DPWRST('XXX','BUG ')
12351        PARA(1)=CPUMIN
12352        PARA(2)=CPUMIN
12353        PARA(3)=CPUMIN
12354        GOTO9000
12355      ENDIF
12356C
12357C
12358      PARA(1)=0.0D0
12359      PARA(2)=1.0D0
12360      PARA(3)=0.0D0
12361      IF(T3.LE.ZERO)GOTO 10
12362C
12363C         RATIONAL-FUNCTION APPROXIMATION FOR TAU3 BETWEEN 0 AND 1
12364C
12365      Z=ONE-T3
12366      G=(-ONE+Z*(C1+Z*(C2+Z*C3)))/(ONE+Z*(D1+Z*D2))
12367      IF(DABS(G).LT.SMALL)GOTO 50
12368      GOTO 40
12369C
12370C         RATIONAL-FUNCTION APPROXIMATION FOR TAU3 BETWEEN -0.8 AND 0
12371C
12372   10 CONTINUE
12373      G=(A0+T3*(A1+T3*(A2+T3*(A3+T3*A4))))/(ONE+T3*(B1+T3*(B2+T3*B3)))
12374      IF(T3.GE.-P8)GOTO 40
12375C
12376C         NEWTON-RAPHSON ITERATION FOR TAU3 LESS THAN -0.8
12377C
12378      IF(T3.LE.-P97)G=ONE-DLOG(ONE+T3)/DL2
12379      T0=(T3+THREE)*HALF
12380      DO 20 IT=1,MAXIT
12381        X2=TWO**(-G)
12382        X3=THREE**(-G)
12383        XX2=ONE-X2
12384        XX3=ONE-X3
12385        T=XX3/XX2
12386        DERIV=(XX2*X3*DL3-XX3*X2*DL2)/(XX2*XX2)
12387        GOLD=G
12388        G=G-(T-T0)/DERIV
12389        IF(DABS(G-GOLD).LE.EPS*G)GOTO 30
12390   20 CONTINUE
12391      WRITE(ICOUT,999)
12392      CALL DPWRST('XXX','BUG ')
12393      WRITE(ICOUT,7000)
12394      CALL DPWRST('XXX','BUG ')
12395      WRITE(ICOUT,7010)
12396 7010 FORMAT('****** WARNING FROM GENERALIZED EXTREME VALUE ',
12397     1      'L-MOMENTS')
12398      CALL DPWRST('XXX','BUG ')
12399      WRITE(ICOUT,7013)
12400 7013 FORMAT('       ITERATION HAS NOT CONVERGED.  RESULTS MAY ',
12401     1       'BE UNRELIABLE.')
12402      CALL DPWRST('XXX','BUG ')
12403   30 CONTINUE
12404C
12405C         ESTIMATE ALPHA,XI
12406C
12407   40 CONTINUE
12408      PARA(3)=G
12409CCCCC GAM=DEXP(DLGAMA(ONE+G))
12410      GAM=DEXP(DLNGAM(ONE+G))
12411      PARA(2)=XMOM(2)*G/(GAM*(ONE-TWO**(-G)))
12412      PARA(1)=XMOM(1)-PARA(2)*(ONE-GAM)/G
12413      GOTO9000
12414C
12415C         ESTIMATED K EFFECTIVELY ZERO
12416C
12417   50 CONTINUE
12418      PARA(3)=ZERO
12419      PARA(2)=XMOM(2)/DL2
12420      PARA(1)=XMOM(1)-EU*PARA(2)
12421C
12422 9000 CONTINUE
12423      RETURN
12424      END
12425      SUBROUTINE GEVPPF(P,GAMMA,MINMAX,PPF)
12426C
12427C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
12428C              FUNCTION VALUE FOR THE GENERALIZED EXTREME VALUE
12429C              DISTRIBUTION WITH SINGLE PRECISION
12430C              SHAPE PARAMETER = GAMMA.
12431C              THERE ARE TWO GENERALIZED EXTREME VALUE FAMALIES:
12432C              ONE BASED ON THE MAXIMUM ORDER STATISTIC (THE MOST
12433C              COMMONLY USED, SPECIFIED BY MINMAX=2) AND THE OTHER
12434C              BASED ON THE MINIMUM ORDER STATISTIC (SPECIFIED BY
12435C              SET MINMAX = 1).
12436C
12437C              THE PERCENT POINT FUNCTION FOR THE MAXIMUM CASE
12438C              OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
12439C              G(P,G) = -LOG(-(LOG(P)))               G = 0
12440C                     = (1 - (-LOG(P)**G)/G           G <> 0
12441C
12442C              THE PERCENT POINT FUNCTION FOR THE MINIMUM CASE
12443C              OF THE GENERALIZED EXTREME VALUE DISTRIBUTION IS:
12444C              G(P,G) = LOG(-(LOG(1-P)))              G = 0
12445C                     = -(1 - (-LOG(1-P)**G)/G        G <> 0
12446C
12447C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE
12448C                                (BETWEEN 0.0 (EXCLUSIVELY)
12449C                                AND 1.0 (EXCLUSIVELY))
12450C                                AT WHICH THE PERCENT POINT
12451C                                FUNCTION IS TO BE EVALUATED.
12452C                     --GAMMA  = THE SINGLE PRECISION VALUE
12453C                                OF THE TAIL LENGTH PARAMETER.
12454C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT
12455C                                POINT FUNCTION VALUE.
12456C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION .
12457C             VALUE PPF FOR THE GENERALIZED EXTREME VALUE DISTRIBUTION
12458C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
12459C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
12460C     RESTRICTIONS--GAMMA CAN HAVE ANY VALUE
12461C                 --P SHOULD BE BETWEEN 0.0 AND 1.0.
12462C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
12463C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
12464C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
12465C     LANGUAGE--ANSI FORTRAN (1977)
12466C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
12467C                 DISTRIBUTIONS--2, 1994, PAGES 75-76
12468C               --CASTILLO, HADI, BALAKRISHNAN, AND SARABIA,
12469C                 "EXTREME VALUE AND RELATED MODELS WITH APPLICATIONS
12470C                 IN ENGINEERING AND SCIENCE", WILEY, 2005, PP. 64-65.
12471C     WRITTEN BY--JAMES J. FILLIBEN
12472C                 STATISTICAL ENGINEERING DIVISION
12473C                 INFORMATION TECHNOLOGY LABORATORY
12474C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
12475C                 GAITHERSBURG, MD 20899-8980
12476C                 PHONE--301-975-2855
12477C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
12478C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
12479C     LANGUAGE--ANSI FORTRAN (1977)
12480C     VERSION NUMBER--95/10
12481C     ORIGINAL VERSION--OCTOBER   1995.
12482C     UPDATED         --MAY       2005. SUPPORT FOR MINIMUM CASE
12483C
12484C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
12485C
12486C
12487C---------------------------------------------------------------------
12488C
12489      DOUBLE PRECISION DPPF
12490      DOUBLE PRECISION DP
12491      DOUBLE PRECISION DG
12492C
12493      INCLUDE 'DPCOP2.INC'
12494C
12495C-----START POINT-----------------------------------------------------
12496C
12497C     CHECK THE INPUT ARGUMENTS FOR ERRORS
12498C
12499      IF(GAMMA.EQ.0.0)THEN
12500        IF(P.LE.0.0.OR.P.GE.1.0)THEN
12501          WRITE(ICOUT,1)
12502          CALL DPWRST('XXX','BUG ')
12503          WRITE(ICOUT,46)P
12504          CALL DPWRST('XXX','BUG ')
12505          PPF=0.0
12506          GOTO9999
12507        ENDIF
12508      ENDIF
12509C
12510      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
12511        IF(GAMMA.GT.0.0)THEN
12512          IF(P.LE.0.0.OR.P.GT.1.0)THEN
12513            WRITE(ICOUT,1)
12514            CALL DPWRST('XXX','BUG ')
12515            WRITE(ICOUT,46)P
12516            CALL DPWRST('XXX','BUG ')
12517            PPF=0.0
12518            GOTO9999
12519          ENDIF
12520        ELSE
12521          IF(P.LT.0.0.OR.P.GE.1.0)THEN
12522            WRITE(ICOUT,1)
12523            CALL DPWRST('XXX','BUG ')
12524            WRITE(ICOUT,46)P
12525            CALL DPWRST('XXX','BUG ')
12526            PPF=0.0
12527            GOTO9999
12528          ENDIF
12529        ENDIF
12530      ELSE
12531        IF(GAMMA.GT.0.0)THEN
12532          IF(P.LT.0.0.OR.P.GE.1.0)THEN
12533            WRITE(ICOUT,1)
12534            CALL DPWRST('XXX','BUG ')
12535            WRITE(ICOUT,46)P
12536            CALL DPWRST('XXX','BUG ')
12537            PPF=0.0
12538            GOTO9999
12539          ENDIF
12540        ELSE
12541          IF(P.LE.0.0.OR.P.GT.1.0)THEN
12542            WRITE(ICOUT,1)
12543            CALL DPWRST('XXX','BUG ')
12544            WRITE(ICOUT,46)P
12545            CALL DPWRST('XXX','BUG ')
12546            PPF=0.0
12547            GOTO9999
12548          ENDIF
12549        ENDIF
12550      ENDIF
12551C
12552    1 FORMAT('***** ERROR--THE FIRST INPUT ARGUMENT TO GEVPPF ',
12553     1'IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL')
12554   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
12555C
12556      DP=DBLE(P)
12557      DG=DBLE(GAMMA)
12558      DPPF=0.0D0
12559C
12560      IF(MINMAX.EQ.2 .OR. MINMAX.EQ.0)THEN
12561        IF(GAMMA.EQ.0.0)THEN
12562           DPPF=-DLOG(-DLOG(DP))
12563        ELSE IF(GAMMA.GT.0.0.AND.P.EQ.1.0)THEN
12564           DPPF=1.0D0/DG
12565        ELSE IF(GAMMA.LT.0.0.AND.P.EQ.0.0)THEN
12566           DPPF=1.0D0/DG
12567        ELSE
12568           DPPF=(1.0D0 - (-DLOG(DP))**DG)/DG
12569        ENDIF
12570      ELSE
12571        IF(GAMMA.EQ.0.0)THEN
12572           DPPF=DLOG(-DLOG(1.0D0 - DP))
12573        ELSE IF(GAMMA.GT.0.0.AND.P.EQ.0.0)THEN
12574           DPPF=-1.0D0/DG
12575        ELSE IF(GAMMA.LT.0.0.AND.P.EQ.1.0)THEN
12576           DPPF=-1.0D0/DG
12577        ELSE
12578           DPPF=-(1.0D0 - (-DLOG(1.0D0 - DP))**DG)/DG
12579        ENDIF
12580      ENDIF
12581C
12582      PPF=REAL(DPPF)
12583C
12584 9999 CONTINUE
12585      RETURN
12586      END
12587      SUBROUTINE GEVRAN(N,GAMMA,MINMAX,ISEED,X)
12588C
12589C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
12590C              FROM THE GENERALIZED EXTREME VALUE DISTRIBUTION
12591C              WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
12592C              THERE ARE TWO GENERALIZED EXTREME VALUE FAMALIES:
12593C              ONE BASED ON THE MAXIMUM ORDER STATISTIC (THE MOST
12594C              COMMONLY USED, SPECIFIED BY MINMAX=2) AND THE OTHER
12595C              BASED ON THE MINIMUM ORDER STATISTIC (SPECIFIED BY
12596C              SET MINMAX = 1).
12597C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
12598C                                OF RANDOM NUMBERS TO BE
12599C                                GENERATED.
12600C                     --GAMMA  = THE SINGLE PRECISION VALUE OF THE
12601C                                TAIL LENGTH PARAMETER.
12602C                                GAMMA SHOULD BE POSITIVE.
12603C                     --MINMAX = THE INTEGER VALUE WHICH SPECIFIES
12604C                                WHETHER THE MAXIMUM OR THE MINIMUM
12605C                                FAMILY IS BEING GENERATED.
12606C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
12607C                                (OF DIMENSION AT LEAST N)
12608C                                INTO WHICH THE GENERATED
12609C                                RANDOM SAMPLE WILL BE PLACED.
12610C     OUTPUT--A RANDOM SAMPLE OF SIZE N
12611C             FROM THE GENERALIZED EXTREME VALUE DISTRIBUTION
12612C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
12613C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
12614C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
12615C                   OF N FOR THIS SUBROUTINE.
12616C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
12617C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
12618C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
12619C     LANGUAGE--ANSI FORTRAN (1977)
12620C     REFERENCES--CASTILLO, HADI, BALAKRISHNAN, AND SARABIA,
12621C                 "EXTREME VALUE AND RELATED MODELS WITH APPLICATIONS
12622C                 IN ENGINEERING AND SCIENCE", WILEY, 2005, PP. 64-65.
12623C               --JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
12624C                 DISTRIBUTIONS--2, 2ND. ED., 1994.
12625C     WRITTEN BY--JAMES J. FILLIBEN
12626C                 STATISTICAL ENGINEERING DIVISION
12627C                 INFORMATION TECHNOLOGY LABORATORY
12628C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
12629C                 GAITHERSBURG, MD 20899-8980
12630C                 PHONE--301-975-2855
12631C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
12632C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
12633C     LANGUAGE--ANSI FORTRAN (1977)
12634C     VERSION NUMBER--2001.10
12635C     ORIGINAL VERSION--OCTOBER   2001.
12636C     UPDATED         --MAY       2005. SUPPORT FOR MINIMUM CASE
12637C
12638C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
12639C
12640C---------------------------------------------------------------------
12641C
12642      DIMENSION X(*)
12643C
12644C-----COMMON----------------------------------------------------------
12645C
12646      INCLUDE 'DPCOP2.INC'
12647C
12648C-----START POINT-----------------------------------------------------
12649C
12650C     CHECK THE INPUT ARGUMENTS FOR ERRORS
12651C
12652      IF(N.LT.1)THEN
12653        WRITE(ICOUT,5)
12654        CALL DPWRST('XXX','BUG ')
12655        WRITE(ICOUT,6)
12656        CALL DPWRST('XXX','BUG ')
12657        WRITE(ICOUT,47)N
12658        CALL DPWRST('XXX','BUG ')
12659        GOTO9000
12660      ENDIF
12661    5 FORMAT('***** ERROR--THE NUMBER OF REQUESTED GENERALIZED ',
12662     1       'EXTREME VALUE')
12663    6 FORMAT('      RANDOM NUMBERS WAS NOT POSITIVE.')
12664   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
12665C
12666C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
12667C
12668      CALL UNIRAN(N,ISEED,X)
12669C
12670C     GENERATE N GENERALIZED EXTREME VALUE DISTRIBUTION RANDOM NUMBERS
12671C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
12672C
12673      DO100I=1,N
12674        CALL GEVPPF(X(I),GAMMA,MINMAX,XTEMP)
12675        X(I)=XTEMP
12676  100 CONTINUE
12677C
12678 9000 CONTINUE
12679      RETURN
12680      END
12681      SUBROUTINE GEXCDF(X,ALAM1,ALAM12,S,CDF)
12682C
12683C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
12684C              FUNCTION VALUE FOR THE GENERALIZED EXPONENTIAL
12685C              DISTRIBUTION
12686C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X,
12687C              AND HAS THE PROBABILITY DENSITY FUNCTION
12688C              F(X) = (L1+L12*(1-EXP(-S*X)))*
12689C                     EXP[-L1*X-L12*X+(L12/S)*(1-EXP(-S*X))]
12690C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
12691C                                WHICH THE CUMULATIVE DISTRIBUTION
12692C                                FUNCTION IS TO BE EVALUATED.
12693C                     --ALAM1  = POSITIVE SHAPE PARAMETER
12694C                     --ALAM12 = POSITIVE SHAPE PARAMETER
12695C                     --S      = POSITIVE SHAPE PARAMETER
12696C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION PROBABILITY
12697C                                DENSITY FUNCTION VALUE.
12698C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
12699C             FUNCTION VALUE CDF.
12700C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
12701C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
12702C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
12703C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG.
12704C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
12705C     LANGUAGE--ANSI FORTRAN.
12706C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
12707C                 DISTRIBUTIONS--1, 2ND. ED., 1994, PAGES 555.
12708C               --RYU, "AN EXTENSION OF MARSHALL AND OLKIN'S BIVARIATE
12709C                 EXPONENTIAL DISTRIBUTION", JOURNAL OF THE AMERICAN
12710C                 STATISTICAL ASSOCIATION, 1993, PP. 1458-1465.
12711C     WRITTEN BY--JAMES J. FILLIBEN
12712C                 STATISTICAL ENGINEERING LABORATORY
12713C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
12714C                 GAITHERSBURG, MD 20899-8980
12715C                 PHONE:  301-975-2855
12716C     ORIGINAL VERSION--FEBRUARY  1996.
12717C
12718C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
12719C
12720C---------------------------------------------------------------------
12721C
12722      DOUBLE PRECISION DX, DLAM1, DLAM12, DS, DCDF
12723      DOUBLE PRECISION DTERM1
12724C
12725      INCLUDE 'DPCOP2.INC'
12726C
12727C---------------------------------------------------------------------
12728C
12729C     CHECK THE INPUT ARGUMENTS FOR ERRORS
12730C
12731      IF(X.LT.0.0)THEN
12732        WRITE(ICOUT,4)
12733        CALL DPWRST('XXX','BUG ')
12734        WRITE(ICOUT,46)X
12735        CALL DPWRST('XXX','BUG ')
12736        CDF=0.0
12737        GOTO9999
12738      ENDIF
12739      IF(ALAM1.LE.0.0)THEN
12740        WRITE(ICOUT,14)
12741        CALL DPWRST('XXX','BUG ')
12742        WRITE(ICOUT,46)X
12743        CALL DPWRST('XXX','BUG ')
12744        CDF=0.0
12745        GOTO9999
12746      ENDIF
12747      IF(ALAM12.LE.0.0)THEN
12748        WRITE(ICOUT,24)
12749        CALL DPWRST('XXX','BUG ')
12750        WRITE(ICOUT,46)X
12751        CALL DPWRST('XXX','BUG ')
12752        CDF=0.0
12753        GOTO9999
12754      ENDIF
12755      IF(S.LE.0.0)THEN
12756        WRITE(ICOUT,34)
12757        CALL DPWRST('XXX','BUG ')
12758        WRITE(ICOUT,46)X
12759        CALL DPWRST('XXX','BUG ')
12760        CDF=0.0
12761        GOTO9999
12762      ENDIF
12763    4 FORMAT('***** NON-FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
12764     1'TO THE GEXCDF SUBROUTINE IS NEGATIVE')
12765   14 FORMAT('***** FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT ',
12766     1'TO THE GEXCDF SUBROUTINE IS NON-POSITIVE')
12767   24 FORMAT('***** FATAL DIAGNOSTIC--THE THIRD INPUT ARGUMENT ',
12768     1'TO THE GEXCDF SUBROUTINE IS NON-POSITIVE')
12769   34 FORMAT('***** FATAL DIAGNOSTIC--THE FOURTH INPUT ARGUMENT ',
12770     1'TO THE GEXCDF SUBROUTINE IS NON-POSITIVE')
12771   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
12772C
12773C-----START POINT-----------------------------------------------------
12774C
12775      DX=DBLE(X)
12776      DLAM1=DBLE(ALAM1)
12777      DLAM12=DBLE(ALAM12)
12778      DS=DBLE(S)
12779C
12780      IF(X.LE.0.0)THEN
12781        CDF=0.0
12782        GOTO9999
12783      ENDIF
12784C
12785      DTERM1=-DLAM1*X - DLAM12*DX + (DLAM12/DS)*(1.0D0-DEXP(-DS*DX))
12786      IF(DTERM1.LE.-65.0D0)THEN
12787        CDF=1.0
12788      ELSEIF(DTERM1.GE.65.D0)THEN
12789        CDF=1.0
12790        WRITE(ICOUT,101)X
12791        CALL DPWRST('XXX','BUG ')
12792      ELSE
12793        DCDF=1.0D0-DEXP(DTERM1)
12794        CDF=SNGL(DCDF)
12795      ENDIF
12796  101 FORMAT('***** FATAL DIAGNOSTIC--OVERFLOW IN GEXCDF ROUTINE ',
12797     1'FOR X = ',E15.7)
12798C
12799 9999 CONTINUE
12800      RETURN
12801      END
12802      SUBROUTINE GEXPDF(X,ALAM1,ALAM12,S,PDF)
12803C
12804C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
12805C              FUNCTION VALUE FOR THE GENERALIZED EXPONENTIAL
12806C              DISTRIBUTION
12807C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X,
12808C              AND HAS THE PROBABILITY DENSITY FUNCTION
12809C              F(X) = (L1+L12*(1-EXP(-S*X)))*
12810C                     EXP[-L1*X-L12*X+(L12/S)*(1-EXP(-S*X))]
12811C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
12812C                                WHICH THE PROBABILITY DENSITY
12813C                                FUNCTION IS TO BE EVALUATED.
12814C                     --ALAM1  = POSITIVE SHAPE PARAMETER
12815C                     --ALAM12 = POSITIVE SHAPE PARAMETER
12816C                     --S      = POSITIVE SHAPE PARAMETER
12817C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
12818C                                DENSITY FUNCTION VALUE.
12819C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
12820C             FUNCTION VALUE PDF.
12821C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
12822C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
12823C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
12824C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG.
12825C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
12826C     LANGUAGE--ANSI FORTRAN.
12827C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
12828C                 DISTRIBUTIONS--1, 2ND. ED., 1994, PAGES 555.
12829C               --RYU, "AN EXTENSION OF MARSHALL AND OLKIN'S BIVARIATE
12830C                 EXPONENTIAL DISTRIBUTION", JOURNAL OF THE AMERICAN
12831C                 STATISTICAL ASSOCIATION, 1993, PP. 1458-1465.
12832C     WRITTEN BY--JAMES J. FILLIBEN
12833C                 STATISTICAL ENGINEERING LABORATORY
12834C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
12835C                 GAITHERSBURG, MD 20899-8980
12836C                 PHONE:  301-975-2855
12837C     ORIGINAL VERSION--FEBRUARY  1996.
12838C
12839C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
12840C
12841C---------------------------------------------------------------------
12842C
12843      DOUBLE PRECISION DX, DLAM1, DLAM12, DS, DPDF
12844      DOUBLE PRECISION DTERM1, DTERM2, DTERM3
12845C
12846      INCLUDE 'DPCOP2.INC'
12847C
12848C---------------------------------------------------------------------
12849C
12850C     CHECK THE INPUT ARGUMENTS FOR ERRORS
12851C
12852      IF(X.LT.0.0)THEN
12853        WRITE(ICOUT,4)
12854        CALL DPWRST('XXX','BUG ')
12855        WRITE(ICOUT,46)X
12856        CALL DPWRST('XXX','BUG ')
12857        PDF=0.0
12858        GOTO9999
12859      ENDIF
12860      IF(ALAM1.LE.0.0)THEN
12861        WRITE(ICOUT,14)
12862        CALL DPWRST('XXX','BUG ')
12863        WRITE(ICOUT,46)X
12864        CALL DPWRST('XXX','BUG ')
12865        PDF=0.0
12866        GOTO9999
12867      ENDIF
12868      IF(ALAM12.LE.0.0)THEN
12869        WRITE(ICOUT,24)
12870        CALL DPWRST('XXX','BUG ')
12871        WRITE(ICOUT,46)X
12872        CALL DPWRST('XXX','BUG ')
12873        PDF=0.0
12874        GOTO9999
12875      ENDIF
12876      IF(S.LE.0.0)THEN
12877        WRITE(ICOUT,34)
12878        CALL DPWRST('XXX','BUG ')
12879        WRITE(ICOUT,46)X
12880        CALL DPWRST('XXX','BUG ')
12881        PDF=0.0
12882        GOTO9999
12883      ENDIF
12884    4 FORMAT('***** FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
12885     1'TO THE GEXPDF SUBROUTINE IS NEGATIVE')
12886   14 FORMAT('***** FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT ',
12887     1'TO THE GEXPDF SUBROUTINE IS NON-POSITIVE')
12888   24 FORMAT('***** FATAL DIAGNOSTIC--THE THIRD INPUT ARGUMENT ',
12889     1'TO THE GEXPDF SUBROUTINE IS NON-POSITIVE')
12890   34 FORMAT('***** FATAL DIAGNOSTIC--THE FOURTH INPUT ARGUMENT ',
12891     1'TO THE GEXPDF SUBROUTINE IS NON-POSITIVE')
12892   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
12893C
12894C-----START POINT-----------------------------------------------------
12895C
12896      DX=DBLE(X)
12897      DLAM1=DBLE(ALAM1)
12898      DLAM12=DBLE(ALAM12)
12899      DS=DBLE(S)
12900C
12901      DTERM1=DLOG(DLAM1 + DLAM12*(1.0D0-DEXP(-DS*DX)))
12902      DTERM2=-DLAM1*X - DLAM12*DX + (DLAM12/DS)*(1.0D0-DEXP(-DS*DX))
12903      DTERM3=DTERM1+DTERM2
12904      IF(DTERM3.LE.-80.0D0)THEN
12905        PDF=0.0
12906        GOTO9999
12907      ELSEIF(DTERM3.GE.80.D0)THEN
12908        PDF=0.0
12909        WRITE(ICOUT,101)X
12910        CALL DPWRST('XXX','BUG ')
12911      ELSE
12912        DPDF=DEXP(DTERM3)
12913        PDF=SNGL(DPDF)
12914      ENDIF
12915  101 FORMAT('***** FATAL DIAGNOSTIC--OVERFLOW IN GEXPDF ROUTINE ',
12916     1'FOR X = ',E15.7)
12917C
12918 9999 CONTINUE
12919      RETURN
12920      END
12921      SUBROUTINE GEXPPF(P,ALAM1,ALAM2,S,PPF)
12922C
12923C     PURPOSE         --PERCENT POINT FUNCTION FOR THE GENERALIZED
12924C                       EXPONENTIAL DISTRIBUTION.  USES A BISECTION
12925C                       METHOD.
12926C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE AT
12927C                                WHICH THE PERCENT POINT
12928C                                FUNCTION IS TO BE EVALUATED.
12929C                     --ALAM1  = POSITIVE SHAPE PARAMETER
12930C                     --ALAM12 = POSITIVE SHAPE PARAMETER
12931C                     --S      = POSITIVE SHAPE PARAMETER
12932C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT POINT
12933C                                FUNCTION VALUE.
12934C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION VALUE PPF
12935C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
12936C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
12937C     OTHER DATAPAC   SUBROUTINES NEEDED--GEXCDF.
12938C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE
12939C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
12940C     LANGUAGE--ANSI FORTRAN.
12941C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
12942C                 DISTRIBUTIONS--1, 2ND. ED., 1994, PAGES 555.
12943C               --RYU, "AN EXTENSION OF MARSHALL AND OLKIN'S BIVARIATE
12944C                 EXPONENTIAL DISTRIBUTION", JOURNAL OF THE AMERICAN
12945C                 STATISTICAL ASSOCIATION, 1993, PP. 1458-1465.
12946C     WRITTEN BY--JAMES J. FILLIBEN
12947C                 STATISTICAL ENGINEERING DIVISION
12948C                 INFORMATION TECHNOLOGY LABORATORY
12949C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
12950C                 GAITHERSBURG, MD 20899-8980
12951C                 PHONE--301-975-2855
12952C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
12953C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
12954C     LANGUAGE--ANSI FORTRAN (1977)
12955C     VERSION NUMBER--96/2
12956C     ORIGINAL VERSION--FEBRUARY  1996.
12957C
12958C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
12959C
12960C-----COMMON----------------------------------------------------------
12961C
12962      INCLUDE 'DPCOP2.INC'
12963C
12964      DATA EPS /0.0001/
12965      DATA SIG /1.0E-5/
12966      DATA ZERO /0./
12967      DATA MAXIT /50000/
12968C
12969C-----START POINT-----------------------------------------------------
12970C
12971C     CHECK THE INPUT ARGUMENTS FOR ERRORS
12972C
12973      IF(P.LT.0.0.OR.P.GE.1.0)THEN
12974        WRITE(ICOUT,1)
12975        CALL DPWRST('XXX','BUG ')
12976        WRITE(ICOUT,46)P
12977        CALL DPWRST('XXX','BUG ')
12978        PPF=0.0
12979        GOTO9999
12980      ENDIF
12981      IF(ALAM1.LE.0.0)THEN
12982        WRITE(ICOUT,11)
12983        CALL DPWRST('XXX','BUG ')
12984        WRITE(ICOUT,46)ALAM1
12985        CALL DPWRST('XXX','BUG ')
12986        PPF=0.0
12987        GOTO9999
12988      ENDIF
12989      IF(ALAM2.LE.0.0)THEN
12990        WRITE(ICOUT,12)
12991        CALL DPWRST('XXX','BUG ')
12992        WRITE(ICOUT,46)ALAM2
12993        CALL DPWRST('XXX','BUG ')
12994        PPF=0.0
12995        GOTO9999
12996      ENDIF
12997      IF(S.LE.0.0)THEN
12998        WRITE(ICOUT,35)
12999        CALL DPWRST('XXX','BUG ')
13000        WRITE(ICOUT,46)S
13001        CALL DPWRST('XXX','BUG ')
13002        PPF=0.0
13003        GOTO9999
13004      ENDIF
13005C
13006    1 FORMAT('***** FATAL ERROR--THE 1ST INPUT ARGUMENT TO THE ',
13007     1' GEXPPF SUBROUTINE IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL')
13008   11 FORMAT('***** FATAL ERROR--THE 2ND INPUT ARGUMENT TO THE ',
13009     1' GEXPPF SUBROUTINE IS NON-POSITIVE.')
13010   12 FORMAT('***** FATAL ERROR--THE THIRD INPUT ARGUMENT TO THE ',
13011     1' GEXPPF SUBROUTINE IS NON-POSITIVE.')
13012   35 FORMAT('***** FATAL ERROR--THE FOURTH INPUT ARGUMENT TO THE ',
13013     1' GEXPPF SUBROUTINE IS NEGATIVE *****')
13014   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
13015C
13016C  FIND BRACKETING INTERVAL.  USE 0.
13017C  AS INITIAL GUESS, INCREMENTS OF 10 AROUND IT.
13018C  AFTER SUCCESSFULLY FIND BRACKETING INTERVAL, THEN SWITCH TO
13019C  MORE EFFICIENT BISECTION METHOD.
13020C
13021      XINC=10.0
13022      XL=0.0
13023      ICOUNT=0
13024      MAXCNT=100000
13025C
13026   91 CONTINUE
13027      XR=XL+XINC
13028      IF(XL.LE.0.0)XL=0.0
13029      IF(XR.LE.0.0)XR=XL+1.0
13030      CALL GEXCDF(XL,ALAM1,ALAM2,S,CDFL)
13031      CALL GEXCDF(XR,ALAM1,ALAM2,S,CDFR)
13032      IF(CDFL.LT.P .AND. CDFR.LT.P)THEN
13033        XL=XR
13034      ELSEIF(CDFL.GT.P .AND. CDFR.GT.P)THEN
13035        XL=XL-XINC
13036      ELSE
13037        GOTO99
13038      ENDIF
13039      ICOUNT=ICOUNT+1
13040      IF(ICOUNT.GT.MAXCNT)THEN
13041        WRITE(ICOUT,96)
13042        CALL DPWRST('XXX','BUG ')
13043        PPF=0.0
13044        GOTO9999
13045      ENDIF
13046   96 FORMAT('***** FATAL ERROR--GEXPPF UNABLE TO FIND BRACKETING ',
13047     *       'INTERVAL. *****')
13048      GOTO91
13049C
13050C  BISECTION METHOD
13051C
13052   99 CONTINUE
13053      IC = 0
13054      FXL = -P
13055      FXR = 1.0 - P
13056  105 CONTINUE
13057      X = (XL+XR)*0.5
13058      CALL GEXCDF(X,ALAM1,ALAM2,S,CDF)
13059      P1=CDF
13060      PPF=X
13061      FCS = P1 - P
13062      IF(FCS*FXL.GT.ZERO)GOTO110
13063      XR = X
13064      FXR = FCS
13065      GOTO115
13066  110 CONTINUE
13067      XL = X
13068      FXL = FCS
13069  115 CONTINUE
13070      XRML = XR - XL
13071      IF(XRML.LE.SIG .AND. ABS(FCS).LE.EPS)GOTO9999
13072      IC = IC + 1
13073      IF(IC.LE.MAXIT)GOTO105
13074      IF(ABS(FCS).GT.EPS)THEN
13075        WRITE(ICOUT,130)
13076        CALL DPWRST('XXX','BUG ')
13077      ENDIF
13078  130 FORMAT('***** FATAL ERROR--GEXPPF ROUTINE DID NOT CONVERGE. ***')
13079      GOTO9999
13080C
13081 9999 CONTINUE
13082      RETURN
13083      END
13084      SUBROUTINE GEXRAN(N,ALAM1,ALAM12,S,ISEED,X)
13085C
13086C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
13087C              FROM THE GENERALIZED EXPONENTIAL DISTRIBUTION
13088C              WITH SHAPE PARAMETERS = LAMBDA1, LAMBDA12, S.
13089C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X,
13090C              AND HAS THE PROBABILITY DENSITY FUNCTION
13091C              F(X) = (L1+L12*(1-EXP(-S*X)))*
13092C                     EXP[-L1*X-L12*X+(L12/S)*(1-EXP(-S*X))]
13093C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
13094C                                OF RANDOM NUMBERS TO BE
13095C                                GENERATED.
13096C                     --ALAM1  = THE SINGLE PRECISION VALUE OF THE
13097C                                LAMBDA1 SHAPE PARAMETER.
13098C                                ANU SHOULD BE A POSITIVE INTEGER.
13099C                     --ALAM12 = THE SINGLE PRECISION VALUE OF THE
13100C                                LAMBDA12 SHAPE PARAMETER.
13101C                     --S      = THE SINGLE PRECISION VALUE OF THE
13102C                                S SHAPE PARAMETER.
13103C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
13104C                                (OF DIMENSION AT LEAST N)
13105C                                INTO WHICH THE GENERATED
13106C                                RANDOM SAMPLE WILL BE PLACED.
13107C     OUTPUT--A RANDOM SAMPLE OF SIZE N
13108C             FROM THE GENERALIZED EXPONENTIAL DISTRIBUTION
13109C             WITH SHAPE PARAMETER VALUES = ALAM1, ALAM12, AND S.
13110C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
13111C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
13112C                   OF N FOR THIS SUBROUTINE.
13113C                 --ANU SHOULD BE POSITIVE.
13114C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
13115C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
13116C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
13117C     LANGUAGE--ANSI FORTRAN (1977)
13118C     WRITTEN BY--JAMES J. FILLIBEN
13119C                 STATISTICAL ENGINEERING DIVISION
13120C                 INFORMATION TECHNOLOGY LABORATORY
13121C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13122C                 GAITHERSBURG, MD 20899-8980
13123C                 PHONE--301-975-2855
13124C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13125C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
13126C     LANGUAGE--ANSI FORTRAN (1966)
13127C     VERSION NUMBER--2003.7
13128C     ORIGINAL VERSION--JULY      2003.
13129C
13130C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
13131C
13132C---------------------------------------------------------------------
13133C
13134      DIMENSION X(*)
13135C
13136C-----COMMON----------------------------------------------------------
13137C
13138      INCLUDE 'DPCOP2.INC'
13139C
13140C-----START POINT-----------------------------------------------------
13141C
13142C     CHECK THE INPUT ARGUMENTS FOR ERRORS
13143C
13144      IF(N.LT.1)THEN
13145        WRITE(ICOUT, 5)
13146        CALL DPWRST('XXX','BUG ')
13147        WRITE(ICOUT,47)N
13148        CALL DPWRST('XXX','BUG ')
13149        GOTO9999
13150      ENDIF
13151    5 FORMAT('***** FATAL ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
13152     1       'EXPONENTIAL RANDOM NUMBERS IS NON-POSITIVE.')
13153   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
13154C
13155      IF(ALAM1.LE.0)THEN
13156        WRITE(ICOUT,15)
13157        CALL DPWRST('XXX','BUG ')
13158        WRITE(ICOUT,16)
13159        CALL DPWRST('XXX','BUG ')
13160        WRITE(ICOUT,46)ALAM1
13161        CALL DPWRST('XXX','BUG ')
13162        PDF=0.0
13163        GOTO9999
13164      ENDIF
13165   15 FORMAT('***** FATAL ERROR--THE FIRST SHAPE PARAMETER (LAMBDA1)')
13166   16 FORMAT('      FOR THE  GENERALIZED EXPONENTIAL RANDOM NUMBERS ',
13167     1       'IS NON-POSITIVE')
13168      IF(ALAM12.LE.0)THEN
13169        WRITE(ICOUT,25)
13170        CALL DPWRST('XXX','BUG ')
13171        WRITE(ICOUT,26)
13172        CALL DPWRST('XXX','BUG ')
13173        WRITE(ICOUT,46)ALAM12
13174        CALL DPWRST('XXX','BUG ')
13175        PDF=0.0
13176        GOTO9999
13177      ENDIF
13178   25 FORMAT('***** FATAL ERROR--THE SECOND SHAPE PARAMETER ',
13179     1      '(LAMBDA12) ')
13180   26 FORMAT('      FOR THE  GENERALIZED EXPONENTIAL RANDOM NUMBERS ',
13181     1       'IS NON-POSITIVE')
13182      IF(S.LE.0)THEN
13183        WRITE(ICOUT,35)
13184        CALL DPWRST('XXX','BUG ')
13185        WRITE(ICOUT,36)
13186        CALL DPWRST('XXX','BUG ')
13187        WRITE(ICOUT,46)S
13188        CALL DPWRST('XXX','BUG ')
13189        PDF=0.0
13190        GOTO9999
13191      ENDIF
13192   35 FORMAT('***** FATAL ERROR--THE THIRD SHAPE PARAMETER (S) ')
13193   36 FORMAT('      FOR THE  GENERALIZED EXPONENTIAL RANDOM NUMBERS ',
13194     1       'IS NON-POSITIVE')
13195   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
13196C
13197C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
13198C
13199      CALL UNIRAN(N,ISEED,X)
13200C
13201C     GENERATE N GENERALIZED EXPONENTIAL DISTRIBUTION RANDOM
13202C     NUMBERS USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
13203C
13204      DO100I=1,N
13205        CALL GEXPPF(X(I),ALAM1,ALAM12,S,XTEMP)
13206        X(I)=XTEMP
13207  100 CONTINUE
13208C
13209 9999 CONTINUE
13210      RETURN
13211      END
13212      SUBROUTINE GGDCDF(X,ALPHA,C,CDF)
13213C
13214C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
13215C              FUNCTION VALUE FOR THE GENERALIZED GAMMA DISTRIBUTION
13216C              WITH POSITIVE SHAPE PARAMETERS ALPHA AND C.
13217C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X.
13218C              THE PROBABILITY DENSITY FUNCTION IS GIVEN
13219C              IN THE REFERENCES BELOW.
13220C              THE CDF FOR THE STANDARD FORM OF THE DISTRIBUTION IS
13221C                  F(X,ALPAH,C) = GAMMAIP(X**C,ALPHA)
13222C              WHERE GAMMAIP = GAMMAI(ALPHA,X)/GAMMA(ALPHA).
13223C              THE CDF IS CAN BE COMPUTED WITH THE SLATEC ROUTINE
13224C              DGAMIC.
13225C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
13226C                                WHICH THE CUMULATIVE DISTRIBUTION
13227C                                FUNCTION IS TO BE EVALUATED.
13228C                                X SHOULD BE NON-NEGATIVE.
13229C                     --ALPHA  = A POSITIVE SHAPE PARAMETER
13230C                     --C      = A POSITIVE SHAPE PARAMETER
13231C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
13232C                                DISTRIBUTION FUNCTION VALUE.
13233C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
13234C             FUNCTION VALUE CDF FOR THE GENERALIZED GAMMA DISTRIBUTION
13235C             WITH DEGREES OF FREEDOM PARAMETER = ANU.
13236C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
13237C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
13238C                 --NU SHOULD BE A POSITIVE INTEGER VARIABLE.
13239C     OTHER DATAPAC   SUBROUTINES NEEDED--NORCDF.
13240C     FORTRAN LIBRARY SUBROUTINES NEEDED--DSQRT, DEXP.
13241C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
13242C     LANGUAGE--ANSI FORTRAN (1977)
13243C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
13244C                 DISTRIBUTIONS--1, 1994, PAGE 417.
13245C     WRITTEN BY--JAMES J. FILLIBEN
13246C                 STATISTICAL ENGINEERING DIVISION
13247C                 INFORMATION TECHNOLOGY LABORATORY
13248C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13249C                 GAITHERSBURG, MD 20899-8980
13250C                 PHONE--301-975-2855
13251C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13252C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
13253C     LANGUAGE--ANSI FORTRAN (1966)
13254C     VERSION NUMBER--95/4
13255C     ORIGINAL VERSION--APRIL     1995.
13256C
13257C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
13258C
13259C---------------------------------------------------------------------
13260C
13261      DOUBLE PRECISION DX, DALPHA, DC
13262      DOUBLE PRECISION DTERM1
13263      DOUBLE PRECISION DCDF
13264      DOUBLE PRECISION DGAMIP
13265C
13266C-----COMMON----------------------------------------------------------
13267C
13268      INCLUDE 'DPCOMC.INC'
13269      INCLUDE 'DPCOP2.INC'
13270C
13271C-----DATA STATEMENTS-------------------------------------------------
13272C
13273C-----START POINT-----------------------------------------------------
13274C
13275C     CHECK THE INPUT ARGUMENTS FOR ERRORS
13276C
13277      IF(X.LT.0.0)THEN
13278        WRITE(ICOUT,4)
13279        CALL DPWRST('XXX','BUG ')
13280        WRITE(ICOUT,46)X
13281        CALL DPWRST('XXX','BUG ')
13282        CDF=0.0
13283        GOTO9999
13284      ENDIF
13285      IF(ALPHA.LE.0)THEN
13286        WRITE(ICOUT,15)
13287        CALL DPWRST('XXX','BUG ')
13288        WRITE(ICOUT,46)ALPHA
13289        CALL DPWRST('XXX','BUG ')
13290        CDF=0.0
13291        GOTO9999
13292      ENDIF
13293      IF(C.EQ.0)THEN
13294        WRITE(ICOUT,16)
13295        CALL DPWRST('XXX','BUG ')
13296        CDF=0.0
13297        GOTO9999
13298      ENDIF
13299    4 FORMAT('***** NON-FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
13300     1'TO THE GGDCDF SUBROUTINE IS NEGATIVE *****')
13301   15 FORMAT('***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE ',
13302     1'GGDCDF SUBROUTINE IS NON-POSITIVE *****')
13303   16 FORMAT('***** FATAL ERROR--THE THIRD INPUT ARGUMENT TO THE ',
13304     1'GGDCDF SUBROUTINE IS ZERO *****')
13305   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
13306C
13307      IF(X.LE.R1MACH(1))THEN
13308        CDF=0.0
13309        RETURN
13310      ENDIF
13311C
13312      DX=DBLE(X)
13313      DALPHA=DBLE(ALPHA)
13314      DC=DBLE(C)
13315C
13316      DTERM1=DX**DC
13317      DCDF=DGAMIP(DALPHA,DTERM1)
13318      IF(C.LT.0)DCDF=1.0D0-DCDF
13319      CDF=REAL(DCDF)
13320C
13321 9999 CONTINUE
13322      RETURN
13323      END
13324      SUBROUTINE GG2CDF(DX,DALPHA,DC,DCDF)
13325C
13326C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
13327C              FUNCTION VALUE FOR THE GENERALIZED GAMMA DISTRIBUTION
13328C              WITH POSITIVE SHAPE PARAMETERS ALPHA AND C.
13329C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X.
13330C              THE PROBABILITY DENSITY FUNCTION IS GIVEN
13331C              IN THE REFERENCES BELOW.
13332C              THE CDF FOR THE STANDARD FORM OF THE DISTRIBUTION IS
13333C                  F(X,ALPAH,C) = GAMMAIP(X**C,ALPHA)
13334C              WHERE GAMMAIP = GAMMAI(ALPHA,X)/GAMMA(ALPHA).
13335C              THE CDF IS CAN BE COMPUTED WITH THE SLATEC ROUTINE
13336C              DGAMIC.
13337C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
13338C                                WHICH THE CUMULATIVE DISTRIBUTION
13339C                                FUNCTION IS TO BE EVALUATED.
13340C                                X SHOULD BE NON-NEGATIVE.
13341C                     --ALPHA  = A POSITIVE SHAPE PARAMETER
13342C                     --C      = A POSITIVE SHAPE PARAMETER
13343C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
13344C                                DISTRIBUTION FUNCTION VALUE.
13345C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
13346C             FUNCTION VALUE CDF FOR THE GENERALIZED GAMMA DISTRIBUTION
13347C             WITH DEGREES OF FREEDOM PARAMETER = ANU.
13348C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
13349C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
13350C                 --NU SHOULD BE A POSITIVE INTEGER VARIABLE.
13351C     OTHER DATAPAC   SUBROUTINES NEEDED--NORCDF.
13352C     FORTRAN LIBRARY SUBROUTINES NEEDED--DSQRT, DEXP.
13353C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
13354C     LANGUAGE--ANSI FORTRAN (1977)
13355C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
13356C                 DISTRIBUTIONS--1, 1994, PAGE 417.
13357C     WRITTEN BY--JAMES J. FILLIBEN
13358C                 STATISTICAL ENGINEERING DIVISION
13359C                 INFORMATION TECHNOLOGY LABORATORY
13360C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13361C                 GAITHERSBURG, MD 20899-8980
13362C                 PHONE--301-975-2855
13363C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13364C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
13365C     LANGUAGE--ANSI FORTRAN (1966)
13366C     VERSION NUMBER--95/4
13367C     ORIGINAL VERSION--APRIL     1995.
13368C
13369C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
13370C
13371C---------------------------------------------------------------------
13372C
13373      DOUBLE PRECISION DX, DALPHA, DC
13374      DOUBLE PRECISION DTERM1
13375      DOUBLE PRECISION DCDF
13376      DOUBLE PRECISION DGAMIP
13377C
13378C-----COMMON----------------------------------------------------------
13379C
13380      INCLUDE 'DPCOMC.INC'
13381      INCLUDE 'DPCOP2.INC'
13382C
13383C-----DATA STATEMENTS-------------------------------------------------
13384C
13385C-----START POINT-----------------------------------------------------
13386C
13387C     CHECK THE INPUT ARGUMENTS FOR ERRORS
13388C
13389      IF(DX.LT.0.0D0)THEN
13390        WRITE(ICOUT,4)
13391        CALL DPWRST('XXX','BUG ')
13392        WRITE(ICOUT,46)DX
13393        CALL DPWRST('XXX','BUG ')
13394        DCDF=0.0
13395        GOTO9999
13396      ENDIF
13397      IF(DALPHA.LE.0.0D0)THEN
13398        WRITE(ICOUT,15)
13399        CALL DPWRST('XXX','BUG ')
13400        WRITE(ICOUT,46)DALPHA
13401        CALL DPWRST('XXX','BUG ')
13402        DCDF=0.0D0
13403        GOTO9999
13404      ENDIF
13405      IF(DC.EQ.0.0D0)THEN
13406        WRITE(ICOUT,16)
13407        CALL DPWRST('XXX','BUG ')
13408        DCDF=0.0D0
13409        GOTO9999
13410      ENDIF
13411    4 FORMAT('***** NON-FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
13412     1'TO THE GGDCDF SUBROUTINE IS NEGATIVE *****')
13413   15 FORMAT('***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE ',
13414     1'GGDCDF SUBROUTINE IS NON-POSITIVE *****')
13415   16 FORMAT('***** FATAL ERROR--THE THIRD INPUT ARGUMENT TO THE ',
13416     1'GGDCDF SUBROUTINE IS ZERO *****')
13417   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',D15.8,' *****')
13418C
13419      IF(DX.LE.D1MACH(1))THEN
13420        DCDF=0.0D0
13421        RETURN
13422      ENDIF
13423C
13424      DTERM1=DX**DC
13425      DCDF=DGAMIP(DALPHA,DTERM1)
13426      IF(DC.LT.0.0D0)DCDF=1.0D0-DCDF
13427C
13428 9999 CONTINUE
13429      RETURN
13430      END
13431      SUBROUTINE GGDCHA(X,ALPHA,C,HAZ)
13432C
13433C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE HAZARD
13434C              FUNCTION VALUE FOR THE GENERALIZED GAMMA DISTRIBUTION
13435C              WITH POSITIVE SHAPE PARAMETERS ALPHA AND C.
13436C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X.
13437C              THE PDF FOR THE STANDARD FORM OF THE DISTRIBUTION IS
13438C                  F(X,ALPAH,C) = C*X**(C*ALPHA-1)*EXP(-(X**C))/
13439C                                   GAMMA(ALPHA)
13440C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
13441C                                WHICH THE CUMULATIVE HAZARD
13442C                                FUNCTION IS TO BE EVALUATED.
13443C                                X SHOULD BE NON-NEGATIVE.
13444C                     --ALPHA  = A POSITIVE SHAPE PARAMETER
13445C                     --C      = A SHAPE PARAMETER
13446C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION CUMULATIVE HAZARD
13447C                                FUNCTION VALUE.
13448C     OUTPUT--THE SINGLE PRECISION HAZARD
13449C             FUNCTION VALUE PDF FOR THE GENERALIZED GAMMA DISTRIBUTION
13450C             WITH SHAPE PARAMETERS C AND ALPHA.
13451C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
13452C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
13453C                 --ALPHA AND C SHOULD BE POSITIVE NUMBERS.
13454C     LANGUAGE--ANSI FORTRAN (1977)
13455C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
13456C                 DISTRIBUTIONS--1, 1994, PAGE 388.
13457C     WRITTEN BY--JAMES J. FILLIBEN
13458C                 STATISTICAL ENGINEERING DIVISION
13459C                 INFORMATION TECHNOLOGY LABORATORY
13460C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13461C                 GAITHERSBURG, MD 20899-8980
13462C                 PHONE--301-975-2855
13463C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13464C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
13465C     LANGUAGE--ANSI FORTRAN (1966)
13466C     VERSION NUMBER--98/4
13467C     ORIGINAL VERSION--APRIL     1998.
13468C
13469C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
13470C
13471C---------------------------------------------------------------------
13472C
13473C---------------------------------------------------------------------
13474C
13475      DOUBLE PRECISION DX, DALPHA, DC
13476      DOUBLE PRECISION DTERM1
13477      DOUBLE PRECISION DCDF
13478      DOUBLE PRECISION DGAMIP
13479C
13480      INCLUDE 'DPCOMC.INC'
13481      INCLUDE 'DPCOP2.INC'
13482C
13483C-----DATA STATEMENTS-------------------------------------------------
13484C
13485C-----START POINT-----------------------------------------------------
13486C
13487C     CHECK THE INPUT ARGUMENTS FOR ERRORS
13488C
13489      IF(X.LT.0.0)THEN
13490        WRITE(ICOUT,4)
13491        CALL DPWRST('XXX','BUG ')
13492        WRITE(ICOUT,46)X
13493        CALL DPWRST('XXX','BUG ')
13494        HAZ=0.0
13495        GOTO9999
13496      ENDIF
13497      IF(ALPHA.LE.0)THEN
13498        WRITE(ICOUT,15)
13499        CALL DPWRST('XXX','BUG ')
13500        WRITE(ICOUT,46)ALPHA
13501        CALL DPWRST('XXX','BUG ')
13502        HAZ=0.0
13503        GOTO9999
13504      ENDIF
13505      IF(C.EQ.0)THEN
13506        WRITE(ICOUT,16)
13507        CALL DPWRST('XXX','BUG ')
13508        HAZ=0.0
13509        GOTO9999
13510      ENDIF
13511    4 FORMAT('***** FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
13512     1'TO THE GGDHAZ SUBROUTINE IS NEGATIVE *****')
13513   15 FORMAT('***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE ',
13514     1'GGDHAZ SUBROUTINE IS NON-POSITIVE *****')
13515   16 FORMAT('***** FATAL ERROR--THE THIRD INPUT ARGUMENT TO THE ',
13516     1'GGDHAZ SUBROUTINE IS ZERO *****')
13517   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
13518C
13519      IF(X.LE.R1MACH(1))THEN
13520        DCDF=0.0D0
13521      ELSE
13522C
13523        DX=DBLE(X)
13524        DALPHA=DBLE(ALPHA)
13525        DC=DBLE(C)
13526        DTERM1=DX**DC
13527        DCDF=DGAMIP(DALPHA,DTERM1)
13528        IF(C.LT.0)DCDF=1.0D0-DCDF
13529      ENDIF
13530      DCDF=1.0D0-DCDF
13531      IF(DCDF.NE.0.0D0)THEN
13532        HAZ=REAL(-DLOG(DCDF))
13533      ELSE
13534        WRITE(ICOUT,9969)X
13535        CALL DPWRST('XXX','BUG ')
13536        HAZ=0.0
13537      ENDIF
13538 9969 FORMAT('*****WARNING: FOR ARGUMENT = ',F15.7,' CDF TERM ',
13539     1'ESSENTIALLY 1, VALUE SET TO 0')
13540C
13541 9999 CONTINUE
13542      RETURN
13543      END
13544      SUBROUTINE GGDHAZ(X,ALPHA,C,HAZ)
13545C
13546C     PURPOSE--THIS SUBROUTINE COMPUTES THE HAZARD
13547C              FUNCTION VALUE FOR THE GENERALIZED GAMMA DISTRIBUTION
13548C              WITH POSITIVE SHAPE PARAMETERS ALPHA AND C.
13549C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X.
13550C              THE PDF FOR THE STANDARD FORM OF THE DISTRIBUTION IS
13551C                  F(X,ALPAH,C) = C*X**(C*ALPHA-1)*EXP(-(X**C))/
13552C                                   GAMMA(ALPHA)
13553C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
13554C                                WHICH THE HAZARD
13555C                                FUNCTION IS TO BE EVALUATED.
13556C                                X SHOULD BE NON-NEGATIVE.
13557C                     --ALPHA  = A POSITIVE SHAPE PARAMETER
13558C                     --C      = A SHAPE PARAMETER
13559C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION HAZARD
13560C                                FUNCTION VALUE.
13561C     OUTPUT--THE SINGLE PRECISION HAZARD
13562C             FUNCTION VALUE PDF FOR THE GENERALIZED GAMMA DISTRIBUTION
13563C             WITH SHAPE PARAMETERS C AND ALPHA.
13564C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
13565C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
13566C                 --ALPHA AND C SHOULD BE POSITIVE NUMBERS.
13567C     LANGUAGE--ANSI FORTRAN (1977)
13568C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
13569C                 DISTRIBUTIONS--1, 1994, PAGE 388.
13570C     WRITTEN BY--JAMES J. FILLIBEN
13571C                 STATISTICAL ENGINEERING DIVISION
13572C                 INFORMATION TECHNOLOGY LABORATORY
13573C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13574C                 GAITHERSBURG, MD 20899-8980
13575C                 PHONE--301-975-2855
13576C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13577C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
13578C     LANGUAGE--ANSI FORTRAN (1966)
13579C     VERSION NUMBER--98/4
13580C     ORIGINAL VERSION--APRIL     1998.
13581C
13582C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
13583C
13584C---------------------------------------------------------------------
13585C
13586C---------------------------------------------------------------------
13587C
13588      DOUBLE PRECISION DX, DALPHA, DC
13589      DOUBLE PRECISION DCDF
13590      DOUBLE PRECISION DGAMIP
13591      DOUBLE PRECISION DTERM1, DTERM2, DTERM3, DTERM4, DTERM5
13592      DOUBLE PRECISION DPDF
13593      DOUBLE PRECISION DLNGAM
13594      DOUBLE PRECISION DUL
13595C
13596      INCLUDE 'DPCOMC.INC'
13597      INCLUDE 'DPCOP2.INC'
13598C
13599C-----DATA STATEMENTS-------------------------------------------------
13600C
13601C-----START POINT-----------------------------------------------------
13602C
13603C     CHECK THE INPUT ARGUMENTS FOR ERRORS
13604C
13605      IF(X.LT.0.0)THEN
13606        WRITE(ICOUT,4)
13607        CALL DPWRST('XXX','BUG ')
13608        WRITE(ICOUT,46)X
13609        CALL DPWRST('XXX','BUG ')
13610        HAZ=0.0
13611        GOTO9999
13612      ENDIF
13613      IF(ALPHA.LE.0)THEN
13614        WRITE(ICOUT,15)
13615        CALL DPWRST('XXX','BUG ')
13616        WRITE(ICOUT,46)ALPHA
13617        CALL DPWRST('XXX','BUG ')
13618        HAZ=0.0
13619        GOTO9999
13620      ENDIF
13621      IF(C.EQ.0)THEN
13622        WRITE(ICOUT,16)
13623        CALL DPWRST('XXX','BUG ')
13624        HAZ=0.0
13625        GOTO9999
13626      ENDIF
13627    4 FORMAT('***** FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
13628     1'TO THE GGDHAZ SUBROUTINE IS NEGATIVE *****')
13629   15 FORMAT('***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE ',
13630     1'GGDHAZ SUBROUTINE IS NON-POSITIVE *****')
13631   16 FORMAT('***** FATAL ERROR--THE THIRD INPUT ARGUMENT TO THE ',
13632     1'GGDHAZ SUBROUTINE IS ZERO *****')
13633   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
13634C
13635      IF(X.LE.R1MACH(1))THEN
13636        DCDF=0.0D0
13637      ELSE
13638C
13639        DX=DBLE(X)
13640        DALPHA=DBLE(ALPHA)
13641        DC=DBLE(C)
13642        DTERM1=DX**DC
13643        DCDF=DGAMIP(DALPHA,DTERM1)
13644        IF(C.LT.0)DCDF=1.0D0-DCDF
13645      ENDIF
13646      DCDF=1.0D0-DCDF
13647      IF(DCDF.NE.0.0D0)THEN
13648        IF(X.LE.R1MACH(1))THEN
13649          DPDF=0.0D0
13650        ELSE
13651C
13652          DX=DBLE(X)
13653          DALPHA=DBLE(ALPHA)
13654          DC=DBLE(C)
13655C
13656          DUL=D1MACH(2)
13657          IF(C.GE.1.0)THEN
13658            IF(DX.GT.DUL**(1.0D0/DC))THEN
13659              WRITE(ICOUT,106)
13660              CALL DPWRST('XXX','BUG ')
13661              WRITE(ICOUT,46)X
13662              CALL DPWRST('XXX','BUG ')
13663              DPDF=0.0
13664            ENDIF
13665          ELSEIF(C.GT.0.0.AND.C.LT.1.0)THEN
13666            IF(DX.GT.DUL**DC)THEN
13667              WRITE(ICOUT,106)
13668              CALL DPWRST('XXX','BUG ')
13669              WRITE(ICOUT,46)X
13670              CALL DPWRST('XXX','BUG ')
13671              DPDF=0.0
13672            ENDIF
13673          ELSE
13674            CONTINUE
13675          ENDIF
13676  106 FORMAT('***** FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
13677     1'TO THE GGDPDF SUBROUTINE GENERATES AN INVALID VALUE *****')
13678C
13679          DTERM1=DLOG(DABS(DC))
13680          DTERM2=(DC*DALPHA-1.0D0)*DLOG(DX)
13681          DTERM3=-(DX**DC)
13682          DTERM4=DLNGAM(DALPHA)
13683          DTERM5=DTERM1+DTERM2+DTERM3-DTERM4
13684          DPDF=0.0D0
13685          IF(DTERM5.GE.-80.0D0)DPDF=DEXP(DTERM5)
13686        ENDIF
13687        HAZ=REAL(DPDF/DCDF)
13688      ELSE
13689        WRITE(ICOUT,9969)X
13690        CALL DPWRST('XXX','BUG ')
13691        HAZ=0.0
13692      ENDIF
13693 9969 FORMAT('*****WARNING: FOR ARGUMENT = ',F15.7,' CDF TERM ',
13694     1'ESSENTIALLY 1, VALUE SET TO 0')
13695C
13696 9999 CONTINUE
13697      RETURN
13698      END
13699      SUBROUTINE GGDFUN (N, X, FVEC, IFLAG, XDATA, NOBS)
13700C
13701C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
13702C              GENERALIZED GAMMA MOMENT EQUATIONS.
13703C
13704C              A*(GAMMA(K+1/C))**2 - GAMMA(K+2/C)*GAMMA(K) = 0
13705C
13706C              XBAR - GAMMA(K+1/C)/(ALPHA*GAMMA(K)) = 0
13707C
13708C              SUM[i=1 to n][X(i)**C] - N*K/(ALPHA**C)
13709C
13710C              WHERE
13711C
13712C
13713C              ALPHA = 1/SCALE
13714C              C, K  = SHAPE PARAMETERS
13715C              A = {N*XBAR**2 + (N-1)*S**2}/{N*XBAR**2 - S**2)
13716C
13717C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
13718C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
13719C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
13720C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
13721C     EXAMPLE--GENERALIZED GAMMA MAXIMUM LIKELIHOOD Y
13722C     REFERENCE--HWANG AND HUANG (2006), "ON NEW MOMENT ESTIMATION
13723C                OF PARAMETERS OF THE GENERALIZED GAMMA DISTRIBUTION
13724C                USING IT'S CHARACTERIZATION", TAIWANESE JOURNAL OF
13725C                MATHEMATICS, VOL.10, NO. 4, PP. 1083-1093.
13726C     WRITTEN BY--JAMES J. FILLIBEN
13727C                 STATISTICAL ENGINEERING DIVISION
13728C                 INFORMATION TECHNOLOGY LABORATORY
13729C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13730C                 GAITHERSBUG, MD 20899-8980
13731C                 PHONE--301-975-2855
13732C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13733C           OF THE NATIONAL BUREAU OF STANDARDS.
13734C     LANGUAGE--ANSI FORTRAN (1977)
13735C     VERSION NUMBER--2007/1
13736C     ORIGINAL VERSION--JANUARY   2007.
13737C
13738C---------------------------------------------------------------------
13739C
13740      DOUBLE PRECISION X(*)
13741      DOUBLE PRECISION FVEC(*)
13742      REAL XDATA(*)
13743C
13744      DOUBLE PRECISION DN
13745      DOUBLE PRECISION DX
13746      DOUBLE PRECISION DC
13747      DOUBLE PRECISION DK
13748      DOUBLE PRECISION DALPHA
13749      DOUBLE PRECISION DSUM1
13750      DOUBLE PRECISION DTERM1
13751      DOUBLE PRECISION DTERM2
13752      DOUBLE PRECISION DTERM3
13753      DOUBLE PRECISION DTERM4
13754      DOUBLE PRECISION DTERM5
13755C
13756      DOUBLE PRECISION DLNGAM
13757      EXTERNAL DLNGAM
13758      DOUBLE PRECISION DGAMMA
13759      EXTERNAL DGAMMA
13760C
13761      DOUBLE PRECISION XBAR
13762      DOUBLE PRECISION S2
13763      DOUBLE PRECISION DA
13764      COMMON/GGDCOM/XBAR,S2,DA
13765C
13766C-----COMMON----------------------------------------------------------
13767C
13768      INCLUDE 'DPCOP2.INC'
13769C
13770C-----START POINT-----------------------------------------------------
13771C
13772C  COMPUTE SOME SUMS
13773C
13774      N=2
13775      IFLAG=0
13776C
13777      DC=X(1)
13778      DK=X(2)
13779      DALPHA=X(3)
13780      DN=DBLE(NOBS)
13781C
13782      DSUM1=0.0D0
13783C
13784      DO200I=1,NOBS
13785        DX=DBLE(XDATA(I))
13786        DSUM1=DSUM1 + DX**DC
13787  200 CONTINUE
13788C
13789      DTERM1=DLNGAM(DK)
13790      DTERM2=DLNGAM(DK + 1.0D0/DC)
13791      DTERM3=DLNGAM(DK + 2.0D0/DC)
13792C
13793      DTERM4=DLOG(DA) + 2.0D0*DTERM2
13794      DTERM5=DTERM3 + DTERM1
13795      FVEC(1)=DEXP(DTERM4) - DEXP(DTERM5)
13796      FVEC(2)=XBAR - DEXP(DTERM2 - DLOG(DALPHA) - DTERM1)
13797      FVEC(3)=DSUM1 - (DN*DK)/(DALPHA**DC)
13798C
13799CCCCC FVEC(1)=DA*DGAMMA(DK+1.0D0/DC)**2 -
13800CCCCC1        DGAMMA(DK+2.0D0/DC)*DGAMMA(DK)
13801CCCCC FVEC(2)=XBAR - DGAMMA(DK+1.0D0/DC)/(DALPHA*DGAMMA(DK))
13802CCCCC FVEC(3)=DSUM1 - (DN*DK)/(DALPHA**DC)
13803CCCCC print *,'fvec(1)=',fvec(1)
13804CCCCC print *,'fvec(2)=',fvec(2)
13805CCCCC print *,'fvec(3)=',fvec(3)
13806C
13807      RETURN
13808      END
13809      SUBROUTINE GGDPDF(X,ALPHA,C,PDF)
13810C
13811C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
13812C              FUNCTION VALUE FOR THE GENERALIZED GAMMA DISTRIBUTION
13813C              WITH POSITIVE SHAPE PARAMETERS ALPHA AND C.
13814C              THIS DISTRIBUTION IS DEFINED FOR ALL NON-NEGATIVE X.
13815C              THE PDF FOR THE STANDARD FORM OF THE DISTRIBUTION IS
13816C                  F(X,ALPAH,C) = C*X**(C*ALPHA-1)*EXP(-(X**C))/
13817C                                   GAMMA(ALPHA)
13818C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
13819C                                WHICH THE PROBABILITY DENSITY
13820C                                FUNCTION IS TO BE EVALUATED.
13821C                                X SHOULD BE NON-NEGATIVE.
13822C                     --ALPHA  = A POSITIVE SHAPE PARAMETER
13823C                     --C      = A POSITIVE SHAPE PARAMETER
13824C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
13825C                                DENSITY FUNCTION VALUE.
13826C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
13827C             FUNCTION VALUE PDF FOR THE GENERALIZED GAMMA DISTRIBUTION
13828C             WITH SHAPE PARAMETERS C AND ALPHA.
13829C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
13830C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
13831C                 --ALPHA AND C SHOULD BE POSITIVE NUMBERS.
13832C     LANGUAGE--ANSI FORTRAN (1977)
13833C     REFERENCES--JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
13834C                 DISTRIBUTIONS--1, 1994, PAGE 388.
13835C     WRITTEN BY--JAMES J. FILLIBEN
13836C                 STATISTICAL ENGINEERING DIVISION
13837C                 INFORMATION TECHNOLOGY LABORATORY
13838C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13839C                 GAITHERSBURG, MD 20899-8980
13840C                 PHONE--301-975-2855
13841C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13842C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
13843C     LANGUAGE--ANSI FORTRAN (1966)
13844C     VERSION NUMBER--95/4
13845C     ORIGINAL VERSION--APRIL     1995.
13846C
13847C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
13848C
13849C---------------------------------------------------------------------
13850C
13851      DOUBLE PRECISION DX, DALPHA, DC
13852      DOUBLE PRECISION DTERM1, DTERM2, DTERM3, DTERM4, DTERM5
13853      DOUBLE PRECISION DPDF
13854      DOUBLE PRECISION DLNGAM
13855      DOUBLE PRECISION DUL
13856C
13857C---------------------------------------------------------------------
13858C
13859      INCLUDE 'DPCOMC.INC'
13860      INCLUDE 'DPCOP2.INC'
13861C
13862C-----DATA STATEMENTS-------------------------------------------------
13863C
13864C-----START POINT-----------------------------------------------------
13865C
13866C     CHECK THE INPUT ARGUMENTS FOR ERRORS
13867C
13868      IF(X.LT.0.0)THEN
13869        WRITE(ICOUT,4)
13870        CALL DPWRST('XXX','BUG ')
13871        WRITE(ICOUT,46)X
13872        CALL DPWRST('XXX','BUG ')
13873        PDF=0.0
13874        GOTO9999
13875      ENDIF
13876      IF(ALPHA.LE.0)THEN
13877        WRITE(ICOUT,15)
13878        CALL DPWRST('XXX','BUG ')
13879        WRITE(ICOUT,46)ALPHA
13880        CALL DPWRST('XXX','BUG ')
13881        PDF=0.0
13882        GOTO9999
13883      ENDIF
13884      IF(C.EQ.0)THEN
13885        WRITE(ICOUT,16)
13886        CALL DPWRST('XXX','BUG ')
13887        PDF=0.0
13888        GOTO9999
13889      ENDIF
13890    4 FORMAT('***** FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
13891     1'TO THE GGDPDF SUBROUTINE IS NEGATIVE *****')
13892   15 FORMAT('***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE ',
13893     1'GGDPDF SUBROUTINE IS NON-POSITIVE *****')
13894   16 FORMAT('***** FATAL ERROR--THE THIRD INPUT ARGUMENT TO THE ',
13895     1'GGDPDF SUBROUTINE IS ZERO *****')
13896   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
13897C
13898      IF(X.LE.R1MACH(1))THEN
13899        PDF=0.0
13900        RETURN
13901      ENDIF
13902C
13903      DX=DBLE(X)
13904      DALPHA=DBLE(ALPHA)
13905      DC=DBLE(C)
13906C
13907      DUL=D1MACH(2)
13908      IF(C.GE.1.0)THEN
13909        IF(DX.GT.DUL**(1.0D0/DC))THEN
13910          WRITE(ICOUT,106)
13911          CALL DPWRST('XXX','BUG ')
13912          WRITE(ICOUT,46)X
13913          CALL DPWRST('XXX','BUG ')
13914          PDF=0.0
13915          GOTO9999
13916        ENDIF
13917      ELSEIF(C.GT.0.0.AND.C.LT.1.0)THEN
13918        IF(DX.GT.DUL**DC)THEN
13919          WRITE(ICOUT,106)
13920          CALL DPWRST('XXX','BUG ')
13921          WRITE(ICOUT,46)X
13922          CALL DPWRST('XXX','BUG ')
13923          PDF=0.0
13924          GOTO9999
13925        ENDIF
13926      ELSE
13927        CONTINUE
13928      ENDIF
13929  106 FORMAT('***** FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT ',
13930     1'TO THE GGDPDF SUBROUTINE GENERATES AN INVALID VALUE *****')
13931C
13932      DTERM1=DLOG(DABS(DC))
13933      DTERM2=(DC*DALPHA-1.0D0)*DLOG(DX)
13934      DTERM3=-(DX**DC)
13935      DTERM4=DLNGAM(DALPHA)
13936      DTERM5=DTERM1+DTERM2+DTERM3-DTERM4
13937      DPDF=0.0D0
13938      IF(DTERM5.GE.-80.0D0)DPDF=DEXP(DTERM5)
13939      PDF=REAL(DPDF)
13940C
13941 9999 CONTINUE
13942      RETURN
13943      END
13944      SUBROUTINE GGDPPF(P,ALPHA,C,PPF)
13945C
13946C     PURPOSE   --PERCENT POINT FUNCTION FOR THE GENERALIZED GAMMA
13947C                 DISTRIBUTION.  USES A BISECTION METHOD.
13948C     WRITTEN BY--JAMES J. FILLIBEN
13949C                 STATISTICAL ENGINEERING DIVISION
13950C                 INFORMATION TECHNOLOGY LABORATORY
13951C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
13952C                 GAITHERSBURG, MD 20899-8980
13953C                 PHONE--301-975-2855
13954C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
13955C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
13956C     LANGUAGE--ANSI FORTRAN (1977)
13957C     VERSION NUMBER--95/4
13958C     ORIGINAL VERSION--APRIL     1995.
13959C     UPDATED         --MARCH     2004. MAKE DOUBLE PRECISION
13960C
13961C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
13962C
13963C---------------------------------------------------------------------
13964C
13965      DOUBLE PRECISION DP
13966      DOUBLE PRECISION DC
13967      DOUBLE PRECISION DALPHA
13968      DOUBLE PRECISION EPS
13969      DOUBLE PRECISION SIG
13970      DOUBLE PRECISION ZERO
13971      DOUBLE PRECISION DMEAN
13972      DOUBLE PRECISION DSD
13973      DOUBLE PRECISION DTERM1
13974      DOUBLE PRECISION DTERM2
13975      DOUBLE PRECISION XL
13976      DOUBLE PRECISION XR
13977      DOUBLE PRECISION XINC
13978      DOUBLE PRECISION X
13979      DOUBLE PRECISION FXL
13980      DOUBLE PRECISION FXR
13981      DOUBLE PRECISION P1
13982      DOUBLE PRECISION FCS
13983      DOUBLE PRECISION XRML
13984      DOUBLE PRECISION DCDF
13985      DOUBLE PRECISION CDFL
13986      DOUBLE PRECISION CDFR
13987      DOUBLE PRECISION DLNGAM
13988C
13989      INCLUDE 'DPCOP2.INC'
13990C
13991      DATA EPS /0.0001D0/
13992      DATA SIG /1.0D-5/
13993      DATA ZERO /0.0D0/
13994      DATA MAXIT /3000/
13995C
13996C-----START POINT-----------------------------------------------------
13997C
13998C     CHECK THE INPUT ARGUMENTS FOR ERRORS
13999C
14000      PPF=0.0
14001      DMEAN=0.0D0
14002C
14003      IF(P.LT.0.0.OR.P.GE.1.0)THEN
14004        WRITE(ICOUT,1)
14005    1   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GGDPPF ',
14006     1         'IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
14007        CALL DPWRST('XXX','BUG ')
14008        WRITE(ICOUT,46)P
14009   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
14010        CALL DPWRST('XXX','BUG ')
14011        GOTO9999
14012      ELSEIF(ALPHA.LE.0)THEN
14013        WRITE(ICOUT,15)
14014   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GGDPPF ',
14015     1         'IS NON-POSITIVE.')
14016        CALL DPWRST('XXX','BUG ')
14017        WRITE(ICOUT,46)ALPHA
14018        CALL DPWRST('XXX','BUG ')
14019        GOTO9999
14020      ELSEIF(C.EQ.0)THEN
14021        WRITE(ICOUT,16)
14022   16   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GGDPPF ',
14023     1         'IS ZERO.')
14024        CALL DPWRST('XXX','BUG ')
14025        GOTO9999
14026      ENDIF
14027C
14028      IF(P.EQ.0.)THEN
14029        PPF=0.
14030        GOTO9999
14031      ENDIF
14032C
14033C  FIND BRACKETING INTERVAL.
14034C
14035      DP=DBLE(P)
14036      DALPHA=DBLE(ALPHA)
14037      DC=DBLE(C)
14038C
14039      XL=0.0D0
14040      IF(DC.LE.0.0D0)THEN
14041        XINC=5.0
14042        XR=XL+XINC
14043      ELSE
14044        DMEAN=DEXP(DLNGAM(DALPHA+1.0D0/DC) - DLNGAM(DALPHA))
14045        XR=DMEAN
14046        DTERM1=DEXP(DLNGAM(DALPHA+2.0D0/DC) - DLNGAM(DALPHA))
14047        DTERM2=2.0D0*(DLNGAM(DALPHA+1.0D0/DC) - DLNGAM(DALPHA))
14048        DSD=DTERM1 - DEXP(DTERM2)
14049        DSD=DSQRT(DSD)
14050        XINC=DSD
14051      ENDIF
14052      ICOUNT=0
14053      MAXCNT=10000
14054C
14055   91 CONTINUE
14056      IF(XL.LE.0.0D0)XL=0.0D0
14057      IF(XR.LE.0.0D0)XR=XL+DMEAN
14058      CALL GG2CDF(XL,DALPHA,DC,CDFL)
14059      CALL GG2CDF(XR,DALPHA,DC,CDFR)
14060      IF(CDFL.LT.DP .AND. CDFR.LT.DP)THEN
14061        XL=XR
14062        XR=XL+XINC
14063      ELSEIF(CDFL.GT.DP .AND. CDFR.GT.DP)THEN
14064        XL=XL-XINC
14065        IF(XL.LT.0.0D0)XL=0.0D0
14066      ELSE
14067        GOTO99
14068      ENDIF
14069      ICOUNT=ICOUNT+1
14070      IF(ICOUNT.GT.MAXCNT)THEN
14071        WRITE(ICOUT,96)
14072        CALL DPWRST('XXX','BUG ')
14073        PPF=0.0
14074        GOTO9999
14075      ENDIF
14076   96 FORMAT('***** FATAL ERROR--GGDPPF UNABLE TO FIND BRACKETING ',
14077     *       'INTERVAL. *****')
14078      GOTO91
14079C
14080C  BISECTION METHOD
14081C
14082   99 CONTINUE
14083      IC = 0
14084      FXL = -DP
14085      FXR = 1.0D0 - DP
14086  105 CONTINUE
14087      X = (XL+XR)*0.5D0
14088      CALL GG2CDF(X,DALPHA,DC,DCDF)
14089      P1=DCDF
14090      PPF=REAL(X)
14091      FCS = P1 - DP
14092      IF(FCS*FXL.GT.ZERO)GOTO110
14093      XR = X
14094      FXR = FCS
14095      GOTO115
14096  110 CONTINUE
14097      XL = X
14098      FXL = FCS
14099  115 CONTINUE
14100      XRML = XR - XL
14101      IF(XRML.LE.SIG .AND. ABS(FCS).LE.EPS)GOTO9999
14102      IC = IC + 1
14103      IF(IC.LE.MAXIT)GOTO105
14104      WRITE(ICOUT,130)
14105      CALL DPWRST('XXX','BUG ')
14106  130 FORMAT('***** FATAL ERROR--GGDPPF ROUTINE DID NOT CONVERGE. ***')
14107      GOTO9999
14108C
14109 9999 CONTINUE
14110      RETURN
14111      END
14112      SUBROUTINE GGDRAN(N,ALPHA,C,ISEED,X)
14113C
14114C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
14115C              FROM THE GENERALIZED GAMMA DISTRIBUTION
14116C              WITH SHAPE PARAMETERS GAMMA AND C.
14117C              THIS DISTRIBUTION IS DEFINED FOR ALL POSITIVE X,
14118C              AND HAS THE PROBABILITY DENSITY FUNCTION
14119C              F(X) = C*X**(ALPHA*C-1)*EXP((-X)**C)/GAMMA(ALPHA)
14120C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
14121C                                OF RANDOM NUMBERS TO BE
14122C                                GENERATED.
14123C                     --ALPHA  = THE SINGLE PRECISION VALUE OF THE
14124C                                FIRST SHAPE PARAMETER.
14125C                                ALPHA SHOULD BE POSITIVE.
14126C                     --C      = THE SINGLE PRECISION VALUE OF THE
14127C                                SECOND SHAPE PARAMETER.
14128C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
14129C                                (OF DIMENSION AT LEAST N)
14130C                                INTO WHICH THE GENERATED
14131C                                RANDOM SAMPLE WILL BE PLACED.
14132C     OUTPUT--A RANDOM SAMPLE OF SIZE N
14133C             FROM THE GAMMA DISTRIBUTION
14134C             WITH TAIL LENGTH PARAMETER VALUE = GAMMA.
14135C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
14136C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
14137C                   OF N FOR THIS SUBROUTINE.
14138C                 --ALPHA SHOULD BE POSITIVE.
14139C                 --C NOT EQUAL TO 0.
14140C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN
14141C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP.
14142C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
14143C     LANGUAGE--ANSI FORTRAN (1977)
14144C     REFERENCES--JAMES E. GENTLE (2003). 'RANDOM NUMBER GENERATION
14145C                 AND MONTE CARLO METHODS', SPRINGER-VERLANG.
14146C                 USE HIS SUGGESTED METHOD OF OBTANING A GAMMA
14147C                 RANDOM VARIABLE AND EXPONENTIATING.
14148C               --"NON-UNIFORM RANDOM VARIATE GENERATION",
14149C                 LUC DEVROYE, SPRINGER-VERLAG, 1986, P. 423.
14150C     WRITTEN BY--JAMES J. FILLIBEN
14151C                 STATISTICAL ENGINEERING DIVISION
14152C                 INFORMATION TECHNOLOGY LABORATORY
14153C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
14154C                 GAITHERSBURG, MD 20899-8980
14155C                 PHONE--301-975-2899
14156C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
14157C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
14158C     LANGUAGE--ANSI FORTRAN (1977)
14159C     VERSION NUMBER--2003/9
14160C     ORIGINAL VERSION--SEPTEMBER 2003.
14161C     FIXED           --APRIL     2004. EXPONENTIATE BY (1/C), NOT C.
14162C
14163C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
14164C
14165C---------------------------------------------------------------------
14166C
14167      DIMENSION X(*)
14168C
14169CCCCC DIMENSION XN(2)
14170CCCCC DIMENSION U(2)
14171C
14172C-----COMMON----------------------------------------------------------
14173C
14174      INCLUDE 'DPCOP2.INC'
14175C
14176C-----DATA STATEMENTS-------------------------------------------------
14177C
14178CCCCC DATA ATHIRD/0.3333333/
14179CCCCC DATA SQRT3 /1.73205081/
14180C
14181C-----START POINT-----------------------------------------------------
14182C
14183C     CHECK THE INPUT ARGUMENTS FOR ERRORS
14184C
14185      IF(N.LT.1)THEN
14186        WRITE(ICOUT, 5)
14187    5   FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
14188     1         'GAMMA RANDOM NUMBERS IS NON-POSITIVE.')
14189        CALL DPWRST('XXX','BUG ')
14190        WRITE(ICOUT,47)N
14191   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
14192        CALL DPWRST('XXX','BUG ')
14193        GOTO9999
14194      ELSEIF(ALPHA.LE.0)THEN
14195        WRITE(ICOUT,15)
14196   15   FORMAT('***** ERROR--THE ALPHA SHAPE PARAMETER FOR THE ',
14197     1         'GENERALIZED GAMMA RANDOM NUMBERS IS NON-POSITIVE.')
14198        CALL DPWRST('XXX','BUG ')
14199        WRITE(ICOUT,46)ALPHA
14200   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
14201        CALL DPWRST('XXX','BUG ')
14202        GOTO9999
14203      ELSEIF(C.EQ.0)THEN
14204        WRITE(ICOUT,16)
14205   16   FORMAT('***** ERROR--THE C SHAPE PARAMETER FOR THE ',
14206     1         'GENERALIZED GAMMA RANDOM NUMBERS IS NON-POSITIVE.')
14207        CALL DPWRST('XXX','BUG ')
14208        WRITE(ICOUT,46)C
14209        CALL DPWRST('XXX','BUG ')
14210        GOTO9999
14211      ENDIF
14212C
14213C     GENERATE N GAMMA DISTRIBUTION RANDOM NUMBERS
14214C     USING AHRENS-DIETER METHOD AND THEN EXPONENTIATE BY (1/C).
14215C
14216      CALL UNIRAN(N,ISEED,X)
14217      DO100I=1,N
14218        ATEMP=SGAMMA(ISEED,ALPHA)
14219        X(I)=ATEMP**(1.0/C)
14220CCCCC   ATEMP=X(I)
14221CCCCC   CALL GGDPPF(ATEMP,ALPHA,C,APPF)
14222CCCCC   X(I)=APPF
14223  100 CONTINUE
14224C
14225 9999 CONTINUE
14226C
14227      RETURN
14228      END
14229      FUNCTION GFUNCT(X,NOBS,BETA,XGM)
14230C
14231C COMPUTE G FUNCTION USED IN ESTIMATING THE SHAPE PARAMETER (BETA)
14232C   XGM IS THE GEOMETRIC MEAN OF THE X'S USED IN ESTIMATING ALPHA
14233C
14234      DIMENSION X(*)
14235C
14236      RN=FLOAT(NOBS)
14237C
14238      ALPHA=FNALPH(X,NOBS,BETA,XGM)
14239      SUMYZ=0.0
14240      DO 10 I=1,NOBS
14241           SUMYZ=SUMYZ+LOG(X(I))*((X(I)/ALPHA)**BETA-1.)
14242   10 CONTINUE
14243C
14244      GFUNCT=(SUMYZ/RN)-1.0/BETA
14245C
14246      RETURN
14247      END
14248      SUBROUTINE GHCDF(X,G,H,CDF)
14249C
14250C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
14251C              FUNCTION VALUE FOR THE G-H DISTRIBUTION
14252C              WITH SHAPE PARAMETERS G AND H.
14253C              THIS DISTRIBUTION IS DEFINED FOR ALL X AND THE
14254C              CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED BY
14255C              NUMERICALLY INVERTING THE PPF FUNCTION.
14256C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
14257C                                WHICH THE CUMULATIVE DISTRIBUTION
14258C                                FUNCTION IS TO BE EVALUATED.
14259C                     --G      = THE SKEWNESS SHAPE PARAMETER
14260C                     --H      = THE KURTOSIS SHAPE PARAMETER
14261C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
14262C                                DISTRIBUTION FUNCTION VALUE.
14263C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
14264C             FUNCTION VALUE CDF.
14265C     PRINTING--NONE.
14266C     RESTRICTIONS--NONE.
14267C     OTHER DATAPAC   SUBROUTINES NEEDED--FZERO.
14268C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
14269C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
14270C     LANGUAGE--ANSI FORTRAN (1977)
14271C     REFERENCES--HOAGLIN, 'SUMMARIZING SHAPES NUMERICALLY: THE
14272C                 G-AND-H DISTRIBUTION", IN "EXPLORING DATA TABLES,
14273C                 TRENDS AND SHAPES", HOAGLIN, MOSTELLER, TUKEY,
14274C                 WILEY, 1985.
14275C     WRITTEN BY--JAMES J. FILLIBEN
14276C                 STATISTICAL ENGINEERING DIVISION
14277C                 INFORMATION TECHNOLOGY LABORATORY
14278C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
14279C                 GAITHERSBURG, MD 20899-8980
14280C                 PHONE--301-975-2855
14281C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
14282C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
14283C     LANGUAGE--ANSI FORTRAN (1977)
14284C     VERSION NUMBER--2003.12
14285C     ORIGINAL VERSION--DECEMBER  2003.
14286C
14287C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
14288C
14289C---------------------------------------------------------------------
14290C
14291      REAL CDF
14292      REAL G
14293      REAL H
14294      REAL PLOW
14295      REAL PUP
14296      REAL XLOW
14297      REAL XUP
14298C
14299      REAL GHFU2
14300      EXTERNAL GHFU2
14301C
14302      REAL X2
14303      COMMON/GH2COM/X2
14304C
14305      REAL G2
14306      REAL H2
14307      COMMON/GHCOM/G2,H2
14308C
14309      DOUBLE PRECISION DP
14310      DOUBLE PRECISION DPPF
14311C
14312      INCLUDE 'DPCOP2.INC'
14313C
14314C-----START POINT-----------------------------------------------------
14315C
14316C               ********************************************
14317C               **  STEP 1--                              **
14318C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
14319C               ********************************************
14320C
14321      CDF=0.0
14322      XUP=0.0
14323      XLOW=0.0
14324      IF(H.LT.0.0)THEN
14325        WRITE(ICOUT, 7)
14326        CALL DPWRST('XXX','BUG ')
14327        WRITE(ICOUT,48)H
14328        CALL DPWRST('XXX','BUG ')
14329        GOTO9000
14330      ENDIF
14331    7 FORMAT('***** ERROR--THE THIRD (H) INPUT ARGUMENT TO THE ',
14332     1'GHCDF SUBROUTINE IS NEGATIVE *****')
14333   48 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',F15.7,' *****')
14334C
14335C  IF G AND H BOTH ZERO, USE NORCDF.
14336C
14337      IF(G.EQ.0.0 .AND. H.EQ.0.0)THEN
14338        CALL NORCDF(X,CDF)
14339        GOTO9000
14340      ENDIF
14341C
14342C  STEP 1: FIND BRACKETING INTERVAL.
14343C
14344C
14345      DP=-1.0D0
14346      CALL GHPPF(0.01,G,H,XCDF01,DP,DPPF)
14347      IF(X.LT.XCDF01)THEN
14348        PLOW=0.0000001
14349        DP=-1.0D0
14350        CALL GHPPF(PLOW,G,H,XLOW,DP,DPPF)
14351        IF(X.LT.XLOW)THEN
14352          CDF=0.0
14353          GOTO9000
14354        ENDIF
14355        PUP=0.015
14356        GOTO1000
14357      ENDIF
14358      DP=-1.0D0
14359      CALL GHPPF(0.1,G,H,XCDF1,DP,DPPF)
14360      IF(X.GE.XCDF01 .AND. X.LE.XCDF1)THEN
14361        PLOW=0.005
14362        PUP=0.15
14363        GOTO1000
14364      ENDIF
14365      DP=-1.0D0
14366      CALL GHPPF(0.9,G,H,XCDF9,DP,DPPF)
14367      IF(X.GE.XCDF1 .AND. X.LE.XCDF9)THEN
14368        PLOW=0.05
14369        PUP=0.95
14370        GOTO1000
14371      ENDIF
14372      DP=-1.0D0
14373      CALL GHPPF(0.95,G,H,XCDF95,DP,DPPF)
14374      IF(X.GE.XCDF95)THEN
14375        PUP=0.9999999
14376        DP=-1.0D0
14377        CALL GHPPF(PUP,G,H,XUP,DP,DPPF)
14378        IF(X.GT.XUP)THEN
14379          CDF=1.0
14380          GOTO9000
14381        ENDIF
14382        PLOW=0.945
14383        GOTO1000
14384      ELSE
14385        PLOW=0.89
14386        PUP=0.96
14387      ENDIF
14388C
14389 1000 CONTINUE
14390      AE=1.E-6
14391      RE=1.E-6
14392      G2=G
14393      H2=H
14394      X2=X
14395      IFLAG=0
14396      CALL FZERO(GHFU2,PLOW,PUP,PUP,RE,AE,IFLAG)
14397C
14398      CDF=PLOW
14399C
14400      IF(IFLAG.EQ.2)THEN
14401C
14402C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
14403CCCCC   WRITE(ICOUT,999)
14404  999   FORMAT(1X)
14405CCCCC   CALL DPWRST('XXX','BUG ')
14406CCCCC   WRITE(ICOUT,111)
14407CC111   FORMAT('***** WARNING FROM GHCDF--')
14408CCCCC   CALL DPWRST('XXX','BUG ')
14409CCCCC   WRITE(ICOUT,113)
14410CC113   FORMAT('      CDF VALUE MAY NOT BE COMPUTED TO DESIRED ',
14411CCCCC1         'TOLERANCE.')
14412CCCCC   CALL DPWRST('XXX','BUG ')
14413      ELSEIF(IFLAG.EQ.3)THEN
14414        WRITE(ICOUT,999)
14415        CALL DPWRST('XXX','BUG ')
14416        WRITE(ICOUT,121)
14417  121   FORMAT('***** WARNING FROM GHCDF--')
14418        CALL DPWRST('XXX','BUG ')
14419        WRITE(ICOUT,123)
14420  123   FORMAT('      CDF VALUE MAY BE NEAR A SINGULAR POINT.')
14421        CALL DPWRST('XXX','BUG ')
14422      ELSEIF(IFLAG.EQ.4)THEN
14423        WRITE(ICOUT,999)
14424        CALL DPWRST('XXX','BUG ')
14425        WRITE(ICOUT,131)
14426  131   FORMAT('***** ERROR FROM GHCDF--')
14427        CALL DPWRST('XXX','BUG ')
14428        WRITE(ICOUT,133)
14429  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
14430        CALL DPWRST('XXX','BUG ')
14431      ELSEIF(IFLAG.EQ.5)THEN
14432        WRITE(ICOUT,999)
14433        CALL DPWRST('XXX','BUG ')
14434        WRITE(ICOUT,141)
14435  141   FORMAT('***** WARNING FROM GHCDF--')
14436        CALL DPWRST('XXX','BUG ')
14437        WRITE(ICOUT,143)
14438  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
14439        CALL DPWRST('XXX','BUG ')
14440      ENDIF
14441C
14442 9000 CONTINUE
14443      RETURN
14444      END
14445      SUBROUTINE GFUNC2(X,N,IR,ALPHA,GAMMA,WEIVAL)
14446C
14447C   COMPUTE FUNCTION USED IN ESTIMATING THE SHAPE
14448C   PARAMETERS FOR A CENSORED WEIBULL DISTRIBUTION.
14449C
14450      DOUBLE PRECISION DN, DG, DIR, DX, DALPHA
14451      DOUBLE PRECISION DSUM1, DSUM2, DSUM3
14452      DOUBLE PRECISION DTERM1, DTERM2, DTERM3, DTERM4
14453      DIMENSION X(*)
14454C
14455C  CALCULATE SOME INTERMEDIATE VALUES
14456C
14457      DN=DBLE(N)
14458      DIR=DBLE(IR)
14459      DG=DBLE(GAMMA)
14460      DALPHA=DBLE(ALPHA)
14461C
14462      DSUM1=0.0
14463      DSUM2=0.0
14464      DSUM3=0.0
14465C
14466      DO100I=1,IR
14467        DX=DBLE(X(I))
14468        DSUM1=DSUM1 + DX**DG
14469        DSUM2=DSUM2 + (DX**DG)*DLOG(DX)
14470        DSUM3=DSUM3 + DLOG(DX)
14471  100 CONTINUE
14472C
14473      DX=DBLE(X(IR))
14474      DTERM1=DSUM2 + DBLE(N-IR)*(DX**DG)*DLOG(DX)
14475      DTERM2=1.0D0/(DSUM1 + DBLE(N-IR)*DX**DG)
14476      DTERM3=DSUM3/DIR
14477      DTERM4=1.0D0/(DTERM1 + DTERM2 - DTERM3)
14478C
14479      WEIVAL=GAMMA - REAL(DTERM4)
14480      ALPHA=FNALP2(X,N,IR,GAMMA)
14481C
14482      RETURN
14483      END
14484      REAL FUNCTION GHFU2(P)
14485C
14486C     PURPOSE--GHCDF CALLS FZERO TO FIND A ROOT FOR THE G-H
14487C              CUMULATIVE DISTRIBUTION FUNCTION.  GHFU2 IS THE
14488C              FUNCTION FOR WHICH THE ZERO IS FOUND.  IT IS:
14489C                 X - GHPPF(P,G,H)
14490C              WHERE X IS THE DESIRED CUMULATIVE DISTRIBUTION POINT.
14491C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE AT
14492C                                WHICH THE PERCENT POINT
14493C                                FUNCTION IS TO BE EVALUATED.
14494C     OUTPUT--THE SINGLE PRECISION FUNCTION VALUE GHFU2.
14495C     PRINTING--NONE.
14496C     RESTRICTIONS--NONE.
14497C     OTHER DATAPAC   SUBROUTINES NEEDED--GHPPF.
14498C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
14499C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
14500C     LANGUAGE--ANSI FORTRAN (1977)
14501C     REFERENCES--HOAGLIN, 'SUMMARIZING SHAPES NUMERICALLY: THE
14502C                 G-AND-H DISTRIBUTION", IN "EXPLORING DATA TABLES,
14503C                 TRENDS AND SHAPES", HOAGLIN, MOSTELLER, TUKEY,
14504C                 WILEY, 1985.
14505C     WRITTEN BY--JAMES J. FILLIBEN
14506C                 STATISTICAL ENGINEERING DIVISION
14507C                 INFORMATION TECHNOLOGY LABORATORY
14508C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
14509C                 GAITHERSBURG, MD 20899-8980
14510C                 PHONE--301-975-2855
14511C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
14512C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
14513C     LANGUAGE--ANSI FORTRAN (1977)
14514C     VERSION NUMBER--2003.12
14515C     ORIGINAL VERSION--DECEMBER  2003.
14516C
14517C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
14518C
14519C---------------------------------------------------------------------
14520C
14521      REAL P
14522C
14523      REAL X
14524      COMMON/GH2COM/X
14525C
14526      DOUBLE PRECISION DP
14527      DOUBLE PRECISION DPPF
14528C
14529      REAL G
14530      REAL H
14531      COMMON/GHCOM/G,H
14532C
14533      INCLUDE 'DPCOP2.INC'
14534C
14535C-----START POINT-----------------------------------------------------
14536C
14537      DP=-1.0D0
14538      CALL GHPPF(P,G,H,PPF,DP,DPPF)
14539      GHFU2=X - PPF
14540C
14541      RETURN
14542      END
14543      REAL FUNCTION GHFU3(X)
14544C
14545C     PURPOSE--GHPDF CALLS DIFF TO FIND A NUMERICAL DERIVATIVE
14546C              FOR THE G-H CUMULATIVE DISTRIBUTION FUNCTION.  GHFU3
14547C              IS A FUNCTION THAT CALL GHCDF.
14548C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
14549C                                WHICH THE DERIVATIVE
14550C                                IS TO BE EVALUATED.
14551C     OUTPUT--THE SINGLE PRECISION FUNCTION VALUE GHFU3.
14552C     PRINTING--NONE.
14553C     RESTRICTIONS--NONE.
14554C     OTHER DATAPAC   SUBROUTINES NEEDED--GHCDF.
14555C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
14556C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
14557C     LANGUAGE--ANSI FORTRAN (1977)
14558C     REFERENCES--HOAGLIN, 'SUMMARIZING SHAPES NUMERICALLY: THE
14559C                 G-AND-H DISTRIBUTION", IN "EXPLORING DATA TABLES,
14560C                 TRENDS AND SHAPES", HOAGLIN, MOSTELLER, TUKEY,
14561C                 WILEY, 1985.
14562C     WRITTEN BY--JAMES J. FILLIBEN
14563C                 STATISTICAL ENGINEERING DIVISION
14564C                 INFORMATION TECHNOLOGY LABORATORY
14565C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
14566C                 GAITHERSBURG, MD 20899-8980
14567C                 PHONE--301-975-2855
14568C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
14569C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
14570C     LANGUAGE--ANSI FORTRAN (1977)
14571C     VERSION NUMBER--2004.3
14572C     ORIGINAL VERSION--MARCH     2004.
14573C
14574C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
14575C
14576C---------------------------------------------------------------------
14577C
14578      REAL G
14579      REAL H
14580      COMMON/GHCOM/G,H
14581C
14582      INCLUDE 'DPCOP2.INC'
14583C
14584C-----START POINT-----------------------------------------------------
14585C
14586      CALL GHCDF(X,G,H,CDF)
14587      GHFU3=CDF
14588C
14589      RETURN
14590      END
14591      SUBROUTINE GHPDF(X,G,H,PDF)
14592C
14593C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
14594C              FUNCTION VALUE FOR THE G-H DISTRIBUTION
14595C              WITH SHAPE PARAMETERS G AND H.
14596C              THIS DISTRIBUTION IS DEFINED FOR ALL X AND THE
14597C              PROBABILITY DENSITY FUNCTION IS COMPUTED BY COMPUTING
14598C              THE NUMERICAL DERIVATIVE OF THE CUMULATIVE DISTRIBUTION
14599C              FUNCTION.
14600C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
14601C                                WHICH THE PROBABILITY DENSITY
14602C                                FUNCTION IS TO BE EVALUATED.
14603C                     --G      = THE SKEWNESS SHAPE PARAMETER
14604C                     --H      = THE KURTOSIS SHAPE PARAMETER
14605C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
14606C                                DENSITY FUNCTION VALUE.
14607C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
14608C             FUNCTION VALUE PDF.
14609C     PRINTING--NONE.
14610C     RESTRICTIONS--NONE.
14611C     OTHER DATAPAC   SUBROUTINES NEEDED--FZERO.
14612C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
14613C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
14614C     LANGUAGE--ANSI FORTRAN (1977)
14615C     REFERENCES--HOAGLIN, 'SUMMARIZING SHAPES NUMERICALLY: THE
14616C                 G-AND-H DISTRIBUTION", IN "EXPLORING DATA TABLES,
14617C                 TRENDS AND SHAPES", HOAGLIN, MOSTELLER, TUKEY,
14618C                 WILEY, 1985.
14619C     WRITTEN BY--JAMES J. FILLIBEN
14620C                 STATISTICAL ENGINEERING DIVISION
14621C                 INFORMATION TECHNOLOGY LABORATORY
14622C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
14623C                 GAITHERSBURG, MD 20899-8980
14624C                 PHONE--301-975-2855
14625C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
14626C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
14627C     LANGUAGE--ANSI FORTRAN (1977)
14628C     VERSION NUMBER--2004.3
14629C     ORIGINAL VERSION--MARCH     2004.
14630C
14631C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
14632C
14633C---------------------------------------------------------------------
14634C
14635      REAL PDF
14636      REAL G
14637      REAL H
14638C
14639      REAL GHFU3
14640      EXTERNAL GHFU3
14641C
14642      REAL G2
14643      REAL H2
14644      COMMON/GHCOM/G2,H2
14645C
14646      CHARACTER*4 IERROR
14647C
14648      INCLUDE 'DPCOP2.INC'
14649C
14650C-----START POINT-----------------------------------------------------
14651C
14652C               ********************************************
14653C               **  STEP 1--                              **
14654C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
14655C               ********************************************
14656C
14657      IERROR='OFF'
14658      PDF=0.0
14659      IF(H.LT.0.0)THEN
14660        WRITE(ICOUT, 7)
14661        CALL DPWRST('XXX','BUG ')
14662        WRITE(ICOUT,48)H
14663        CALL DPWRST('XXX','BUG ')
14664        GOTO9000
14665      ENDIF
14666    7 FORMAT('***** ERROR--THE THIRD (H) INPUT ARGUMENT TO THE ',
14667     1'GHPDF SUBROUTINE IS NEGATIVE *****')
14668   48 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',F15.7,' *****')
14669C
14670C  IF G AND H BOTH ZERO, USE NORPDF.
14671C
14672      IF(G.EQ.0.0 .AND. H.EQ.0.0)THEN
14673        CALL NORPDF(X,PDF)
14674        GOTO9000
14675      ENDIF
14676C
14677C  FIND NUMERIC DERIVATIVE OF CDF ROUTINE
14678C
14679      IORD=1
14680      EPS=0.0001
14681      ACCUR=0.0
14682      IFAIL=0
14683      X0 = X
14684      XMIN=CPUMIN
14685      XMAX=CPUMAX
14686      G2=G
14687      H2=H
14688C
14689      CALL DIFF(IORD,X0,XMIN,XMAX,GHFU3,EPS,ACCUR,PDF,ERROR,IFAIL)
14690C
14691        IF(IFAIL.EQ.1)THEN
14692  999     FORMAT(1X)
14693          WRITE(ICOUT,999)
14694          CALL DPWRST('XXX','BUG ')
14695          WRITE(ICOUT,301)
14696  301     FORMAT('***** WARNING IN NUMERICAL DERIVATIVE FOR GHPDF--')
14697          CALL DPWRST('XXX','BUG ')
14698          WRITE(ICOUT,303)
14699  303     FORMAT('      THE ESTIMATED ERROR IN THE RESULT EXCEEDS THE')
14700          CALL DPWRST('XXX','BUG ')
14701          WRITE(ICOUT,305)
14702  305     FORMAT('      REQUESTED ERROR, BUT THE MOST ACCURATE RESULT')
14703          CALL DPWRST('XXX','BUG ')
14704          WRITE(ICOUT,307)
14705  307     FORMAT('      POSSIBLE HAS BEEN RETURNED.')
14706          CALL DPWRST('XXX','BUG ')
14707        ELSEIF(IFAIL.EQ.2)THEN
14708          WRITE(ICOUT,999)
14709          CALL DPWRST('XXX','BUG ')
14710          WRITE(ICOUT,311)
14711  311     FORMAT('***** ERROR IN NUMERICAL DERIVATIVE FOR GHPDF--')
14712          CALL DPWRST('XXX','BUG ')
14713          WRITE(ICOUT,313)
14714  313     FORMAT('      ERROR IN THE INPUT TO THE DIFF ROUTINE.')
14715          CALL DPWRST('XXX','BUG ')
14716          PDF=0.0
14717          ERROR=0.0
14718          IERROR='YES'
14719          GOTO9000
14720        ELSEIF(IFAIL.EQ.3)THEN
14721          WRITE(ICOUT,999)
14722          CALL DPWRST('XXX','BUG ')
14723          WRITE(ICOUT,321)
14724  321     FORMAT('***** ERROR IN NUMERICAL DERIVATIVE FOR GHPDF--')
14725          CALL DPWRST('XXX','BUG ')
14726          WRITE(ICOUT,323)
14727  323     FORMAT('      THE INTERVAL FOR DIFFERENTIATION, (',G15.7,
14728     1           ',',G15.7,')')
14729          CALL DPWRST('XXX','BUG ')
14730          WRITE(ICOUT,325)
14731  325     FORMAT('      IS TOO SMALL.')
14732          CALL DPWRST('XXX','BUG ')
14733          PDF=0.0
14734          ERROR=0.0
14735          IERROR='YES'
14736          GOTO9000
14737        ENDIF
14738C
14739 9000 CONTINUE
14740      RETURN
14741      END
14742      SUBROUTINE GHPPF(P,G,H,PPF,DP,DPPF)
14743C
14744C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
14745C              FUNCTION FROM THE THE G AND H DISTIBUTION WITH
14746C              LOCATION = 0 AND SCALE = 1.  THE PERCENT POINT
14747C              FUNCTION IS DEFINED AS:
14748C              G(P,G,H) = [(EXP(G*Zp)-1)/G]*EXP(H*Zp**2/2)
14749C              WHERE Zp IS THE PERCENT POINT FUNCTION OF THE STANDARD
14750C              NORMAL DISTRIBUTION AND
14751C              G AND H ARE SHAPE PARAMETERS (G CONTROLS SKEWNESS
14752C              (0 = SYMMETRIC) AND H CONTROLS HOW HEAVY THE TAILS
14753C              ARE.  G=H=0 IMPLIES A STANDARD NORMAL DISTRIBUTION.
14754C              WHEN G=0, THE PERCENT POINT FUNCTION IS DEFINED AS:
14755C              F(X) = Z*EXP(H*Z**2/2)
14756C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE AT
14757C                                WHICH THE PERCENT POINT
14758C                                FUNCTION IS TO BE EVALUATED.
14759C                     --G      = FIRST SHAPE PARAMETER (DETERMINES
14760C                                SKEWNESS WITH G=0 BEING SYMMETRIC)
14761C                     --H      = SECOND SHAPE PARAMETER (DETERMINES
14762C                                "HEAVY TAILEDNESS"
14763C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT POINT
14764C                                FUNCTION VALUE.
14765C     NOTE--SAVE DOUBLE PRECISION VALUES FOR P AND PPF (DP, DPPF)
14766C           FOR USE BY THE GHCDF FUNCTION
14767C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION VALUE PPF.
14768C     PRINTING--NONE.
14769C     RESTRICTIONS--NONE.
14770C     OTHER DATAPAC   SUBROUTINES NEEDED--NODPPF.
14771C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP.
14772C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
14773C     LANGUAGE--ANSI FORTRAN (1977)
14774C     REFERENCES--HOAGLIN, 'SUMMARIZING SHAPES NUMERICALLY: THE
14775C                 G-AND-H DISTRIBUTION", IN "EXPLORING DATA TABLES,
14776C                 TRENDS AND SHAPES", HOAGLIN, MOSTELLER, TUKEY,
14777C                 WILEY, 1985.
14778C     WRITTEN BY--JAMES J. FILLIBEN
14779C                 STATISTICAL ENGINEERING DIVISION
14780C                 INFORMATION TECHNOLOGY LABORATORY
14781C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
14782C                 GAITHERSBURG, MD 20899-8980
14783C                 PHONE--301-975-2855
14784C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
14785C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
14786C     LANGUAGE--ANSI FORTRAN (1977)
14787C     VERSION NUMBER--2003.1
14788C     ORIGINAL VERSION--JANUARY   2003.
14789C
14790C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
14791C
14792C---------------------------------------------------------------------
14793C
14794      REAL H
14795      DOUBLE PRECISION DTERM1
14796      DOUBLE PRECISION DTERM2
14797      DOUBLE PRECISION DTERM3
14798      DOUBLE PRECISION DP
14799      DOUBLE PRECISION DG
14800      DOUBLE PRECISION DH
14801      DOUBLE PRECISION DPPF
14802C
14803      INCLUDE 'DPCOP2.INC'
14804C
14805C-----START POINT-----------------------------------------------------
14806C
14807C     CHECK THE INPUT ARGUMENTS FOR ERRORS
14808C
14809      IF(P.LE.0.0 .OR. P.GE.1.0)THEN
14810        WRITE(ICOUT,5)
14811        CALL DPWRST('XXX','BUG ')
14812        WRITE(ICOUT,48)P
14813        CALL DPWRST('XXX','BUG ')
14814        GOTO9999
14815CCCCC ELSEIF(G.LT.0.0)THEN
14816CCCCC   WRITE(ICOUT, 6)
14817CCCCC   CALL DPWRST('XXX','BUG ')
14818CCCCC   WRITE(ICOUT,48)G
14819CCCCC   CALL DPWRST('XXX','BUG ')
14820CCCCC   GOTO9999
14821      ELSEIF(H.LT.0.0)THEN
14822        WRITE(ICOUT, 7)
14823        CALL DPWRST('XXX','BUG ')
14824        WRITE(ICOUT,48)H
14825        CALL DPWRST('XXX','BUG ')
14826        GOTO9999
14827      ENDIF
14828    5 FORMAT('***** ERROR--THE FIRST (P) ARGUMENT TO GHPPF ',
14829     1       'IS OUTSIDE THE (0,1) INTERVAL')
14830CCCC6 FORMAT('***** FATAL ERROR--THE SECOND (G) INPUT ARGUMENT TO THE ',
14831CCCC 1'GHPPF SUBROUTINE IS NEGATIVE *****')
14832    7 FORMAT('***** ERROR--THE THIRD (H) ARGUMENT TO GHPPF ',
14833     1       'IS NEGATIVE')
14834   48 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
14835C
14836C     TRANSFORM THE NORMAL PPF
14837C
14838      IF(DP.LT.0.0D0)THEN
14839        DP=DBLE(P)
14840      ENDIF
14841      DG=DBLE(G)
14842      DH=DBLE(H)
14843C
14844      CALL NODPPF(DP,DTERM3)
14845      IF(G.EQ.0.0 .AND. H.EQ.0.0)THEN
14846        PPF=REAL(DTERM3)
14847      ELSEIF(G.EQ.0.0)THEN
14848        DPPF=DTERM3*DEXP(DH*DTERM3*DTERM3/2.0D0)
14849        PPF=REAL(DPPF)
14850      ELSEIF(H.EQ.0.0)THEN
14851        DPPF=(DEXP(DG*DTERM3)-1.0D0)/DG
14852        PPF=REAL(DPPF)
14853      ELSE
14854        DTERM1=(DEXP(DG*DTERM3)-1.0D0)/DG
14855        DTERM2=DEXP(DH*DTERM3*DTERM3/2.0D0)
14856        DPPF=DTERM1*DTERM2
14857        PPF=REAL(DPPF)
14858      ENDIF
14859C
14860 9999 CONTINUE
14861      RETURN
14862      END
14863      SUBROUTINE GHRAN(N,G,H,ISEED,X)
14864C
14865C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
14866C              FROM THE THE G AND H DISTIBUTION WITH LOCATION = 0
14867C              AND SCALE = 1.  THIS DISTRIBUTION IS DEFINED FOR ALL
14868C              X AND HAS THE PROBABILITY DENSITY FUNCTION
14869C              F(X) = [(EXP(G*Z)-1)/g]*EXP(H*Z**2/2)
14870C              WHERE Z IS A STANDARD NORMAL DISTRIBUTION AND
14871C              G AND H ARE SHAPE PARAMETERS (G CONTROLS SKEWNESS
14872C              (0 = SYMMETRIC) AND H CONTROLS HOW HEAVY THE TAILS
14873C              ARE.  G=H=0 IMPLIES A STANDARD NORMAL DISTRIBUTION.
14874C              WHEN G = 0, THE FUNCTION IS:
14875C              F(X) = Z*EXP(H*Z**2/2)
14876C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
14877C                                OF RANDOM NUMBERS TO BE
14878C                                GENERATED.
14879C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
14880C                                (OF DIMENSION AT LEAST N)
14881C                                INTO WHICH THE GENERATED
14882C                                RANDOM SAMPLE WILL BE PLACED.
14883C                     --G      = A SINGLE PRECISON SCALAR THAT DEFINES
14884C                                THE SKEWNESS SHAPE PARAMETER.
14885C                     --H      = A SINGLE PRECISON SCALAR THAT DEFINES
14886C                                THE "HEAVY-TAILEDNESS" SHAPE
14887C                                PARAMETER.
14888C     OUTPUT--A RANDOM SAMPLE OF SIZE N FROM THE G-AND-H DISTRIBUTION
14889C             WITH LOCATION = 0 AND SCALE = 1.
14890C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
14891C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
14892C                   OF N FOR THIS SUBROUTINE.
14893C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
14894C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG, SQRT, SIN, COS.
14895C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
14896C     LANGUAGE--ANSI FORTRAN (1977)
14897C     METHOD--TRANSFORM NORMAL RANDOM NUMBERS
14898C     REFERENCES--HOAGLIN, 'SUMMARIZING SHAPES NUMERICALLY: THE
14899C                 G-AND-H DISTRIBUTION", IN "EXPLORING DATA TABLES,
14900C                 TRENDS AND SHAPES", HOAGLIN, MOSTELLER, TUKEY,
14901C                 WILEY, 1985.
14902C     WRITTEN BY--JAMES J. FILLIBEN
14903C                 STATISTICAL ENGINEERING DIVISION
14904C                 INFORMATION TECHNOLOGY LABORATORY
14905C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
14906C                 GAITHERSBURG, MD 20899-8980
14907C                 PHONE--301-975-2855
14908C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
14909C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
14910C     LANGUAGE--ANSI FORTRAN (1966)
14911C     VERSION NUMBER--2003.1
14912C     ORIGINAL VERSION--JANUARY   2003.
14913C
14914C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
14915C
14916C---------------------------------------------------------------------
14917C
14918      DIMENSION X(*)
14919      REAL G
14920      REAL H
14921      DOUBLE PRECISION DQ
14922      DOUBLE PRECISION DPPF
14923C
14924C-----COMMON----------------------------------------------------------
14925C
14926      INCLUDE 'DPCOP2.INC'
14927C
14928C-----START POINT-----------------------------------------------------
14929C
14930C     CHECK THE INPUT ARGUMENTS FOR ERRORS
14931C
14932      IF(N.LT.1)THEN
14933        WRITE(ICOUT,5)
14934    5   FORMAT('***** ERROR--THE FIRST (N) ARGUMENT TO ',
14935     1         'GHRAN IS NON-POSITIVE.')
14936        CALL DPWRST('XXX','BUG ')
14937        WRITE(ICOUT,47)N
14938   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
14939        CALL DPWRST('XXX','BUG ')
14940        GOTO9999
14941CCCCC ELSEIF(G.LT.0.0)THEN
14942CCCCC   WRITE(ICOUT, 6)
14943CCCC6   FORMAT('***** ERROR--THE SECOND (G) ARGUMENT TO GHRAN ',
14944CCCCC1         'IS NEGATIVE.')
14945CCCCC   CALL DPWRST('XXX','BUG ')
14946CCCCC   WRITE(ICOUT,48)G
14947CCCCC   CALL DPWRST('XXX','BUG ')
14948CCCCC   GOTO9999
14949      ELSEIF(H.LT.0.0)THEN
14950        WRITE(ICOUT, 7)
14951    7   FORMAT('***** ERROR--THE THIRD (H) ARGUMENT TO GHRAN ',
14952     1         'IS NEGATIVE.')
14953        CALL DPWRST('XXX','BUG ')
14954        WRITE(ICOUT,48)H
14955   48   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',F10.5,'.')
14956        CALL DPWRST('XXX','BUG ')
14957        GOTO9999
14958      ENDIF
14959C
14960C     GENERATE N UNIFORM NUMBERS;
14961C
14962      CALL UNIRAN(N,ISEED,X)
14963C
14964C     GENERATE N G-AND-H RANDON NUMBERS USING THE PERCENT POINT
14965C     FUNCTION TRANSFORMATION.
14966C
14967      DO100I=1,N
14968        Q=X(I)
14969        DQ=DBLE(-1.0D0)
14970        CALL GHPPF(Q,G,H,PPF,DQ,DPPF)
14971        X(I)=PPF
14972  100 CONTINUE
14973C
14974 9999 CONTINUE
14975      RETURN
14976      END
14977      SUBROUTINE GIGCDF(X,LAMBDA,CHI,PSI,CDF)
14978C
14979CCCCC NOTE 7/2008: MODIFY PARAMERIZATION,
14980C
14981CCCCC SUBROUTINE GIGCDF(DX,CHI,LAMBDA,THETA,DCDF)
14982C
14983C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
14984C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSSIAN
14985C              DISTRIBUTION.
14986C
14987C
14988C              THE PROBABILITY DENSITY FUNCTION IS:
14989C
14990C              f(X;LAMBDA,CHI,PSI) = SQRT(PSI/CHI)*X**(LAMBDA-1)*
14991C                                    EXP[-0.5*(LAMBDA/X + PSI*X)]/
14992C                                    {2*K1(SQRT(XHI*PSI))}
14993C                                    X > 0;
14994C                                    CHI > 0; PSI > 0
14995C
14996C              FOLLOWING IS PREVIOUS PARAMETERIZATION (BASED ON
14997C              PARAMETERIZATION GIVEN IN JOHNSON, KOTZ, AND
14998C              BALAKRISHNAN.  NOTE THAT THESE DEFINITIONS ARE
14999C              ACTUALLY EQUIVALENT.  I MADE THE SWITCH BECAUSE
15000C              THE NEW PARAMETERIZATION SEEMS TO BE THE MORE
15001C              COMMONLY USED.
15002C
15003C              SPECIFICALLY, THE RELATIONSHIP BETWEEN THE
15004C              PARAMETERIZATIONS IS:
15005C
15006C              NEW          OLD
15007C              ================
15008C              LAMBDA       THETA
15009C              PSI          LAMBDA
15010C              CHI          CHI
15011C
15012C              IT HAS SHAPE PARAMETERS CHI, LAMBDA,
15013C              AND THETA.  THIS DISTRIBUTION IS DEFINED FOR POSITIVE
15014C              X AND HAS THE PROBABILITY DENSITY FUNCTION
15015C                 f(X,CHI,LAMBDA,THETA) = C*X**(THETA-1)*
15016C                                         EXP(-(1/2)*(LAMBDA*X+CHI/X))
15017C                                         X > 0; CHI, LAMBDA > 0;
15018C                                         -INF < THETA < INF
15019C
15020C              WITH
15021C
15022C                 C = (LAMBDA/X)**(THETA/2)/[2*K(0)(SQRT(CHI*LAMBDA))]
15023C                     CHI, LAMBDA > 0
15024C
15025C                   = LAMBDA**THETA/[2**THETA*GAMMA(THETA)]
15026C                     CHI = 0; LAMBDA, THETA > 0
15027C
15028C                   = 2**THETA/[X**THETA*GAMMA(-THETA)]
15029C                     CHI > 0; LAMBDA=0; THETA < 0
15030C
15031C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
15032C              OF THE THIRD KIND.
15033C
15034C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED
15035C              BY NUMERICALLY INTEGRATING THE PROBABILITY DENSITY
15036C              FUNCTION.
15037C
15038C     INPUT  ARGUMENTS--X       = THE DOUBLE PRECISION VALUE AT
15039C                                 WHICH THE CUMULATIVE DISTRIBUTION
15040C                                 FUNCTION IS TO BE EVALUATED.
15041C                                 X SHOULD BE POSITIVE.
15042C                     --LAMBDA  = THE FIRST SHAPE PARAMETER
15043C                     --CHI     = THE SECOND SHAPE PARAMETER
15044C                     --THETA   = THE THIRD SHAPE PARAMETER
15045C     OUTPUT ARGUMENTS--CDF     = THE DOUBLE PRECISION CUMULATIVE
15046C                                 DISTRIBUTION FUNCTION VALUE.
15047C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
15048C             FUNCTION VALUE CDF FOR THE GENERALIZED INVERSE
15049C             GAUSSIAN DISTRIBUTION WITH SHAPE PARAMETERS LAMBDA,
15050C             CHI, AND PSI.
15051C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
15052C     RESTRICTIONS--NONE.
15053C     OTHER DATAPAC   SUBROUTINES NEEDED--DQAGI.
15054C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
15055C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
15056C     LANGUAGE--ANSI FORTRAN (1977)
15057C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
15058C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
15059C                 WILEY, PP. pp. 284-285.
15060C               --PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
15061C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
15062C     WRITTEN BY--JAMES J. FILLIBEN
15063C                 STATISTICAL ENGINEERING DIVISION
15064C                 INFORMATION TECHNOLOGY LABORATORY
15065C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
15066C                 GAITHERSBURG, MD 20899-8980
15067C                 PHONE--301-975-2855
15068C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
15069C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
15070C     LANGUAGE--ANSI FORTRAN (1977)
15071C     VERSION NUMBER--2004.8
15072C     ORIGINAL VERSION--AUGUST    2004.
15073C     UPDATED         --JULY      2008. MODIFY PARAMETERIZATION
15074C
15075C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
15076C
15077C---------------------------------------------------------------------
15078C
15079      INTEGER LIMIT
15080      INTEGER LENW
15081      PARAMETER(LIMIT=100)
15082      PARAMETER(LENW=4*LIMIT)
15083      INTEGER INF
15084      INTEGER NEVAL
15085      INTEGER IER
15086      INTEGER LAST
15087      INTEGER IWORK(LIMIT)
15088      DOUBLE PRECISION CHI
15089      DOUBLE PRECISION LAMBDA
15090      DOUBLE PRECISION PSI
15091      DOUBLE PRECISION EPSABS
15092      DOUBLE PRECISION EPSREL
15093      DOUBLE PRECISION CDF
15094      DOUBLE PRECISION X
15095      DOUBLE PRECISION ABSERR
15096      DOUBLE PRECISION WORK(LENW)
15097C
15098      DOUBLE PRECISION GIGFUN
15099      EXTERNAL GIGFUN
15100C
15101      DOUBLE PRECISION DCHI
15102      DOUBLE PRECISION DLMBDA
15103      DOUBLE PRECISION DPSI
15104      COMMON/GIGCOM/DCHI,DLMBDA,DPSI
15105C
15106C-----COMMON----------------------------------------------------------
15107C
15108      INCLUDE 'DPCOP2.INC'
15109C
15110C-----DATA STATEMENTS-------------------------------------------------
15111C
15112C-----START POINT-----------------------------------------------------
15113C
15114C               ********************************************
15115C               **  STEP 1--                              **
15116C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
15117C               ********************************************
15118C
15119      IFLAG=0
15120      CDF=0.0D0
15121      CDF2=0.0D0
15122C
15123      IF(X.LE.0.0D0)THEN
15124        WRITE(ICOUT,4)
15125        CALL DPWRST('XXX','WRIT')
15126        WRITE(ICOUT,48)X
15127        CALL DPWRST('XXX','WRIT')
15128        GOTO9000
15129    4 FORMAT('***** ERROR: THE VALUE OF THE FIRST ARGUMENT (X) TO ',
15130     1       'GIGCDF IS NON-POSITIVE.')
15131C
15132      ELSEIF(CHI.LT.0.0D0)THEN
15133        WRITE(ICOUT,5)
15134        CALL DPWRST('XXX','WRIT')
15135        WRITE(ICOUT,48)CHI
15136        CALL DPWRST('XXX','WRIT')
15137        GOTO9000
15138    5   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
15139     1         '(CHI) TO GIGCDF IS NEGATIVE.')
15140C
15141      ELSEIF(PSI.LT.0.0D0)THEN
15142        WRITE(ICOUT,6)
15143        CALL DPWRST('XXX','WRIT')
15144        WRITE(ICOUT,48)PSI
15145        CALL DPWRST('XXX','WRIT')
15146        GOTO9000
15147    6   FORMAT('***** ERROR: THE VALUE OF THE THIRD SHAPE PARAMETER ',
15148     1         '(PSI) TO GIGCDF IS NEGATIVE.')
15149C
15150      ELSEIF(CHI.EQ.0.0D0)THEN
15151        IF(LAMBDA.LE.0.0D0 .OR. PSI.LE.0.0D0)THEN
15152          WRITE(ICOUT,7)
15153          CALL DPWRST('XXX','WRIT')
15154          WRITE(ICOUT,8)
15155          CALL DPWRST('XXX','WRIT')
15156          WRITE(ICOUT,49)LAMBDA
15157          CALL DPWRST('XXX','WRIT')
15158          WRITE(ICOUT,50)PSI
15159          CALL DPWRST('XXX','WRIT')
15160          GOTO9000
15161        ELSE
15162          IFLAG=1
15163        ENDIF
15164    7   FORMAT('***** ERROR: IF VALUE OF SECOND SHAPE PARAMETER ',
15165     1       '(CHI) TO GIGCDF IS EQUAL ZERO,')
15166    8 FORMAT('      THEN FIRST (LAMBDA) AND THIRD (PSI) SHAPE ',
15167     1       'PARAMETERS MUST BE POSITIVE.')
15168   49 FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
15169   50 FORMAT('      VALUE OF THIRD SHAPE PARAMETER IS: ',G15.7)
15170C
15171      ELSEIF(PSI.EQ.0.0D0)THEN
15172        IF(LAMBDA.GE.0.0D0 .OR. CHI.LE.0.0D0)THEN
15173          WRITE(ICOUT,9)
15174          CALL DPWRST('XXX','WRIT')
15175          WRITE(ICOUT,10)
15176          CALL DPWRST('XXX','WRIT')
15177          WRITE(ICOUT,11)
15178          CALL DPWRST('XXX','WRIT')
15179          WRITE(ICOUT,51)CHI
15180          CALL DPWRST('XXX','WRIT')
15181          WRITE(ICOUT,52)PSI
15182          CALL DPWRST('XXX','WRIT')
15183          GOTO9000
15184        ELSE
15185          IFLAG=2
15186        ENDIF
15187    9   FORMAT('***** ERROR: IF VALUE OF THIRD SHAPE PARAMETER ',
15188     1       '(PSI) TO GIGCDF ROUTINE IS EQUAL ZERO,')
15189   10   FORMAT('      THEN FIRST SHAPE PARAMETER (LAMBDA) PARAMETER ',
15190     1       'MUST BE NEGATIVE AND')
15191   11   FORMAT('      THE SECOND SHAPE PARAMETER (CHI) MUST BE ',
15192     1       'POSITIVEE.')
15193   51   FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
15194   52   FORMAT('      VALUE OF SECOND SHAPE PARAMETER IS: ',G15.7)
15195      ENDIF
15196C
15197   48 FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
15198C
15199C               ************************************
15200C               **  STEP 1--                      **
15201C               **  COMPUTE THE CDF     FUNCTION  **
15202C               ************************************
15203C
15204C
15205C     BOUNDARY CASE I: GAMMA DISTRIBUTION WITH SHAPE PARAMETER
15206C                      LAMBDA AND SCALE PARAMETER PSI/2.
15207C
15208      IF(IFLAG.EQ.1)THEN
15209C
15210        SCALE=REAL(PSI/2.0D0)
15211        X2=REAL(X)/SCALE
15212        CALL GAMCDF(X2,REAL(LAMBDA),CDF2)
15213        CDF=DBLE(CDF2)
15214        GOTO9000
15215C
15216C     BOUNDARY CASE II: INVERTED GAMMA DISTRIBUTION WITH SHAPE PARAMETER
15217C                       -LAMBDA AND SCALE PARAMETER CHI/2.
15218C
15219      ELSEIF(IFLAG.EQ.2)THEN
15220C
15221        SCALE=REAL(CHI/2.0D0)
15222        X2=REAL(X)/SCALE
15223        CALL IGACDF(X2,REAL(-LAMBDA),PDF2)
15224        CDF=DBLE(CDF2)
15225        GOTO9000
15226      ENDIF
15227C
15228      EPSABS=0.0D0
15229      EPSREL=1.0D-7
15230      IER=0
15231      DCHI=CHI
15232      DLMBDA=LAMBDA
15233      DPSI=PSI
15234      CDF=0.0D0
15235C
15236      INF=1
15237C
15238      CALL DQAGI(GIGFUN,X,INF,EPSABS,EPSREL,CDF,ABSERR,NEVAL,
15239     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
15240      CDF=1.0D0 - CDF
15241C
15242      IF(IER.EQ.1)THEN
15243        WRITE(ICOUT,999)
15244  999   FORMAT(1X)
15245        CALL DPWRST('XXX','BUG ')
15246        WRITE(ICOUT,111)
15247  111   FORMAT('***** ERROR FROM GIGCDF--')
15248        CALL DPWRST('XXX','BUG ')
15249        WRITE(ICOUT,113)
15250  113   FORMAT('      MAXIMUM NUMBER OF SUBDIVISIONS EXCEEDED.')
15251        CALL DPWRST('XXX','BUG ')
15252      ELSEIF(IER.EQ.2)THEN
15253        WRITE(ICOUT,999)
15254        CALL DPWRST('XXX','BUG ')
15255        WRITE(ICOUT,111)
15256        CALL DPWRST('XXX','BUG ')
15257        WRITE(ICOUT,123)
15258  123   FORMAT('      ROUNDOFF ERROR PREVENTS REQUESTED TOLERANCE ',
15259     1         'FROM BEING ACHIEVED.')
15260        CALL DPWRST('XXX','BUG ')
15261      ELSEIF(IER.EQ.3)THEN
15262        WRITE(ICOUT,999)
15263        CALL DPWRST('XXX','BUG ')
15264        WRITE(ICOUT,111)
15265        CALL DPWRST('XXX','BUG ')
15266        WRITE(ICOUT,133)
15267  133   FORMAT('      BAD INTEGRAND BEHAVIOUR DETECTED.')
15268        CALL DPWRST('XXX','BUG ')
15269      ELSEIF(IER.EQ.4)THEN
15270        WRITE(ICOUT,999)
15271        CALL DPWRST('XXX','BUG ')
15272        WRITE(ICOUT,111)
15273        CALL DPWRST('XXX','BUG ')
15274        WRITE(ICOUT,143)
15275  143   FORMAT('      INTEGRATION DID NOT CONVERGE.')
15276        CALL DPWRST('XXX','BUG ')
15277      ELSEIF(IER.EQ.5)THEN
15278        WRITE(ICOUT,999)
15279        CALL DPWRST('XXX','BUG ')
15280        WRITE(ICOUT,111)
15281        CALL DPWRST('XXX','BUG ')
15282        WRITE(ICOUT,153)
15283  153   FORMAT('      THE INTEGRATION IS PROBABLY DIVERGENT.')
15284        CALL DPWRST('XXX','BUG ')
15285      ELSEIF(IER.EQ.6)THEN
15286        WRITE(ICOUT,999)
15287        CALL DPWRST('XXX','BUG ')
15288        WRITE(ICOUT,111)
15289        CALL DPWRST('XXX','BUG ')
15290        WRITE(ICOUT,163)
15291  163   FORMAT('      INVALID INPUT TO THE INTEGRATION ROUTINE.')
15292        CALL DPWRST('XXX','BUG ')
15293      ENDIF
15294C
15295 9000 CONTINUE
15296      RETURN
15297      END
15298      DOUBLE PRECISION FUNCTION GIGFUN(DX)
15299C
15300C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
15301C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSIAN
15302C              DISTRIBUTION WITH SHAPE PARAMETERS CHI, LAMBDA, AND
15303C              PSI.  THIS DISTRIBUTION IS DEFINED FOR POSITIVE X.
15304C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
15305C              THE GIGPDF ROUTINE IS CALLED TO COMPUTE THE
15306C              PROBABILITY DENSITY (CHECK FOR THE FORMULA IN THAT
15307C              ROUTINE).  DEFINE AS FUNCTION TO BE USED FOR INTEGRATION
15308C              CODE CALLED BY GIGCDF.  THIS ROUTINE USES
15309C              DOUBLE PRECISION ARITHMETIC.
15310C     INPUT  ARGUMENTS--DX      = THE DOUBLE PRECISION VALUE AT
15311C                                 WHICH THE PROBABILITY DENSITY
15312C                                 FUNCTION IS TO BE EVALUATED.
15313C     OUTPUT ARGUMENTS--GIGFUN  = THE DOUBLE PRECISION PROBABILITY
15314C                                 DENSITY FUNCTION VALUE.
15315C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
15316C             FUNCTION VALUE PDF FOR THE GENERALIZED INVERSE
15317C             GAUSSIAN DISTRIBUTION WITH SHAPE PARAMETERS CHI, LAMBDA,
15318C             AND THETA.
15319C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
15320C     RESTRICTIONS--NONE.
15321C     OTHER DATAPAC   SUBROUTINES NEEDED--GIGPDF.
15322C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
15323C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
15324C     LANGUAGE--ANSI FORTRAN (1977)
15325C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
15326C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
15327C                 WILEY, PP. 284-285.
15328C     WRITTEN BY--JAMES J. FILLIBEN
15329C                 STATISTICAL ENGINEERING DIVISION
15330C                 INFORMATION TECHNOLOGY LABORATORY
15331C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
15332C                 GAITHERSBURG, MD 20899-8980
15333C                 PHONE--301-975-2855
15334C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
15335C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
15336C     LANGUAGE--ANSI FORTRAN (1977)
15337C     VERSION NUMBER--2004.8
15338C     ORIGINAL VERSION--AUGUST    2004.
15339C
15340C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
15341C
15342C---------------------------------------------------------------------
15343C
15344      DOUBLE PRECISION DTERM
15345C
15346      DOUBLE PRECISION DX
15347      DOUBLE PRECISION DCHI
15348      DOUBLE PRECISION DLMBDA
15349      DOUBLE PRECISION DPSI
15350      COMMON/GIGCOM/DCHI,DLMBDA,DPSI
15351C
15352C-----COMMON----------------------------------------------------------
15353C
15354      INCLUDE 'DPCOP2.INC'
15355C
15356C-----DATA STATEMENTS-------------------------------------------------
15357C
15358C-----START POINT-----------------------------------------------------
15359C
15360C               ************************************
15361C               **  STEP 1--                      **
15362C               **  COMPUTE THE DENSITY FUNCTION  **
15363C               ************************************
15364C
15365      CALL GIGPDF(DX,DCHI,DLMBDA,DPSI,DTERM)
15366      GIGFUN=DTERM
15367C
15368      RETURN
15369      END
15370      DOUBLE PRECISION FUNCTION GIGFU2(DX)
15371C
15372C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
15373C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSIAN
15374C              DISTRIBUTION WITH SHAPE PARAMETERS CHI, LAMBDA, AND
15375C              PSI.  THIS DISTRIBUTION IS DEFINED FOR POSITIVE X.
15376C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
15377C              THE GIGPDF ROUTINE IS CALLED TO COMPUTE THE
15378C              PROBABILITY DENSITY (CHECK FOR THE FORMULA IN THAT
15379C              ROUTINE).  DEFINE AS FUNCTION TO BE USED FOR INTEGRATION
15380C              CODE CALLED BY GIGCDF.  THIS ROUTINE USES
15381C              DOUBLE PRECISION ARITHMETIC.
15382C     INPUT  ARGUMENTS--DX      = THE DOUBLE PRECISION VALUE AT
15383C                                 WHICH THE PROBABILITY DENSITY
15384C                                 FUNCTION IS TO BE EVALUATED.
15385C     OUTPUT ARGUMENTS--GIGFU2  = THE DOUBLE PRECISION PROBABILITY
15386C                                 DENSITY FUNCTION VALUE.
15387C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
15388C             FUNCTION VALUE PDF FOR THE GENERALIZED INVERSE
15389C             GAUSSIAN DISTRIBUTION WITH SHAPE PARAMETERS CHI, LAMBDA,
15390C             AND THETA.
15391C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
15392C     RESTRICTIONS--NONE.
15393C     OTHER DATAPAC   SUBROUTINES NEEDED--GIGPDF.
15394C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
15395C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
15396C     LANGUAGE--ANSI FORTRAN (1977)
15397C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
15398C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
15399C                 WILEY, PP. 284-285.
15400C     WRITTEN BY--JAMES J. FILLIBEN
15401C                 STATISTICAL ENGINEERING DIVISION
15402C                 INFORMATION TECHNOLOGY LABORATORY
15403C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
15404C                 GAITHERSBURG, MD 20899-8980
15405C                 PHONE--301-975-2855
15406C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
15407C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
15408C     LANGUAGE--ANSI FORTRAN (1977)
15409C     VERSION NUMBER--2004.8
15410C     ORIGINAL VERSION--AUGUST    2004.
15411C
15412C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
15413C
15414C---------------------------------------------------------------------
15415C
15416      DOUBLE PRECISION DX
15417      DOUBLE PRECISION DCDF
15418C
15419      DOUBLE PRECISION DP
15420      COMMON/GIGCO2/DP
15421C
15422      DOUBLE PRECISION DCHI
15423      DOUBLE PRECISION DLMBDA
15424      DOUBLE PRECISION DPSI
15425      COMMON/GIGCOM/DCHI,DLMBDA,DPSI
15426C
15427C-----COMMON----------------------------------------------------------
15428C
15429      INCLUDE 'DPCOP2.INC'
15430C
15431C-----DATA STATEMENTS-------------------------------------------------
15432C
15433C-----START POINT-----------------------------------------------------
15434C
15435C               ************************************
15436C               **  STEP 1--                      **
15437C               **  COMPUTE THE CDF     FUNCTION  **
15438C               ************************************
15439C
15440      CALL GIGCDF(DX,DCHI,DLMBDA,DPSI,DCDF)
15441      GIGFU2=DP - DCDF
15442C
15443      RETURN
15444      END
15445      SUBROUTINE GIGPDF(X,LAMBDA,CHI,PSI,PDF)
15446C
15447CCCCC NOTE 7/2008: MODIFY PARAMETERIZATION.
15448C
15449CCCCC SUBROUTINE GIGPDF(X,CHI,LAMBDA,THETA,PDF)
15450C
15451C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
15452C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSSIAN
15453C              DISTRIBUTION.
15454C
15455C              f(X;LAMBDA,CHI,PSI) = SQRT(PSI/CHI)*X**(LAMBDA-1)*
15456C                                    EXP[-0.5*(LAMBDA/X + PSI*X)]/
15457C                                    {2*K1(SQRT(XHI*PSI))}
15458C                                    X > 0;
15459C                                    CHI > 0; PSI > 0
15460C
15461C              FOLLOWING IS PREVIOUS PARAMETERIZATION (BASED ON
15462C              PARAMETERIZATION GIVEN IN JOHNSON, KOTZ, AND
15463C              BALAKRISHNAN.  NOTE THAT THESE DEFINITIONS ARE
15464C              ACTUALLY EQUIVALENT.  I MADE THE SWITCH BECAUSE
15465C              THE NEW PARAMETERIZATION SEEMS TO BE THE MORE
15466C              COMMONLY USED.
15467C
15468C              SPECIFICALLY, THE RELATIONSHIP BETWEEN THE
15469C              PARAMETERIZATIONS IS:
15470C
15471C              NEW          OLD
15472C              ================
15473C              LAMBDA       THETA
15474C              PSI          LAMBDA
15475C              CHI          CHI
15476C
15477C              IT HAS SHAPE PARAMETERS CHI, LAMBDA,
15478C              AND THETA.  THIS DISTRIBUTION IS DEFINED FOR POSITIVE
15479C              X AND HAS THE PROBABILITY DENSITY FUNCTION
15480C                 f(X,CHI,LAMBDA,THETA) = C*X**(THETA-1)*
15481C                                         EXP(-(1/2)*(LAMBDA*X+CHI/X))
15482C                                         X > 0; CHI, LAMBDA > 0;
15483C                                         -INF < THETA < INF
15484C
15485C              WITH
15486C
15487C                 C = (LAMBDA/X)**(THETA/2)/[2*K(0)(SQRT(CHI*LAMBDA))]
15488C                     CHI, LAMBDA > 0
15489C
15490C                   = LAMBDA**THETA/[2**THETA*GAMMA(THETA)]
15491C                     CHI = 0; LAMBDA, THETA > 0
15492C
15493C                   = 2**THETA/[X**THETA*GAMMA(-THETA)]
15494C                     CHI > 0; LAMBDA=0; THETA < 0
15495C
15496C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
15497C              OF THE THIRD KIND.
15498C
15499C     INPUT  ARGUMENTS--X       = THE DOUBLE PRECISION VALUE AT
15500C                                 WHICH THE PROBABILITY DENSITY
15501C                                 FUNCTION IS TO BE EVALUATED.
15502C                                 X SHOULD BE POSITIVE.
15503C                     --LAMBDA  = THE FIRST SHAPE PARAMETER
15504C                     --CHI     = THE SECOND SHAPE PARAMETER
15505C                     --THETA   = THE THIRD SHAPE PARAMETER
15506C     OUTPUT ARGUMENTS--PDF     = THE DOUBLE PRECISION PROBABILITY
15507C                                 DENSITY FUNCTION VALUE.
15508C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
15509C             VALUE PDF FOR THE GENERALIZED INVERSE GAUSSIAN
15510C             DISTRIBUTION WITH SHAPE PARAMETERS = LAMBDA, CHI, PSI.
15511C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
15512C     RESTRICTIONS--NONE.
15513C     OTHER DATAPAC   SUBROUTINES NEEDED--DBESK.
15514C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG.
15515C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
15516C     LANGUAGE--ANSI FORTRAN (1977)
15517C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
15518C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
15519C                 WILEY, PP. 284-285.
15520C               --PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
15521C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
15522C               --xx
15523C                 "HANDBOOK OF COMPUTATIONAL STATISTICS",
15524C                 SPRINGER-VERLAG, PP.
15525C     WRITTEN BY--JAMES J. FILLIBEN
15526C                 STATISTICAL ENGINEERING DIVISION
15527C                 INFORMATION TECHNOLOGY LABORATORY
15528C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
15529C                 GAITHERSBURG, MD 20899-8980
15530C                 PHONE--301-975-2855
15531C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
15532C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
15533C     LANGUAGE--ANSI FORTRAN (1977)
15534C     VERSION NUMBER--2004.8
15535C     ORIGINAL VERSION--AUGUST    2004.
15536C     UPDATED         --JULY      2008.
15537C
15538C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
15539C
15540C---------------------------------------------------------------------
15541C
15542      DOUBLE PRECISION X
15543      DOUBLE PRECISION CHI
15544      DOUBLE PRECISION LAMBDA
15545      DOUBLE PRECISION PSI
15546      DOUBLE PRECISION PDF
15547      DOUBLE PRECISION ETA
15548      DOUBLE PRECISION OMEGA
15549      DOUBLE PRECISION P1
15550      DOUBLE PRECISION P2
15551      DOUBLE PRECISION C
15552C
15553      DOUBLE PRECISION DTEMP1(10)
15554C
15555C-----COMMON----------------------------------------------------------
15556C
15557      INCLUDE 'DPCOP2.INC'
15558C
15559C-----START POINT-----------------------------------------------------
15560C
15561C               *****************************************
15562C               **  STEP 1--                           **
15563C               **  CHECK FOR VALID PARAMETERS         **
15564C               *****************************************
15565C
15566      IFLAG=0
15567C
15568      IF(X.LE.0.0D0)THEN
15569        WRITE(ICOUT,4)
15570        CALL DPWRST('XXX','WRIT')
15571        WRITE(ICOUT,48)X
15572        CALL DPWRST('XXX','WRIT')
15573        PDF=0.0D0
15574        GOTO9000
15575    4 FORMAT('***** ERROR: THE VALUE OF THE FIRST ARGUMENT (X) TO ',
15576     1       'GIGPDF IS NON-POSITIVE.')
15577C
15578      ELSEIF(CHI.LT.0.0D0)THEN
15579        WRITE(ICOUT,5)
15580        CALL DPWRST('XXX','WRIT')
15581        WRITE(ICOUT,48)CHI
15582        CALL DPWRST('XXX','WRIT')
15583        PDF=0.0D0
15584        GOTO9000
15585    5   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
15586     1         '(CHI) TO GIGPDF IS NEGATIVE.')
15587C
15588      ELSEIF(PSI.LT.0.0D0)THEN
15589        WRITE(ICOUT,6)
15590        CALL DPWRST('XXX','WRIT')
15591        WRITE(ICOUT,48)PSI
15592        CALL DPWRST('XXX','WRIT')
15593        PDF=0.0
15594        GOTO9000
15595    6   FORMAT('***** ERROR: THE VALUE OF THE THIRD SHAPE PARAMETER ',
15596     1         '(PSI) TO GIGPDF IS NEGATIVE.')
15597C
15598      ELSEIF(CHI.EQ.0.0D0)THEN
15599        IF(LAMBDA.LE.0.0D0 .OR. PSI.LE.0.0D0)THEN
15600          WRITE(ICOUT,7)
15601          CALL DPWRST('XXX','WRIT')
15602          WRITE(ICOUT,8)
15603          CALL DPWRST('XXX','WRIT')
15604          WRITE(ICOUT,49)LAMBDA
15605          CALL DPWRST('XXX','WRIT')
15606          WRITE(ICOUT,50)PSI
15607          CALL DPWRST('XXX','WRIT')
15608          PDF=0.0
15609          GOTO9000
15610        ELSE
15611          IFLAG=1
15612        ENDIF
15613    7   FORMAT('***** ERROR: IF VALUE OF SECOND SHAPE PARAMETER ',
15614     1       '(CHI) TO GIGPDF IS EQUAL ZERO,')
15615    8 FORMAT('      THEN FIRST (LAMBDA) AND THIRD (PSI) SHAPE ',
15616     1       'PARAMETERS MUST BE POSITIVE.')
15617   49 FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
15618   50 FORMAT('      VALUE OF THIRD SHAPE PARAMETER IS: ',G15.7)
15619C
15620      ELSEIF(PSI.EQ.0.0D0)THEN
15621        IF(LAMBDA.GE.0.0D0 .OR. CHI.LE.0.0D0)THEN
15622          WRITE(ICOUT,9)
15623          CALL DPWRST('XXX','WRIT')
15624          WRITE(ICOUT,10)
15625          CALL DPWRST('XXX','WRIT')
15626          WRITE(ICOUT,11)
15627          CALL DPWRST('XXX','WRIT')
15628          WRITE(ICOUT,51)CHI
15629          CALL DPWRST('XXX','WRIT')
15630          WRITE(ICOUT,52)PSI
15631          CALL DPWRST('XXX','WRIT')
15632          PDF=0.0
15633          GOTO9000
15634        ELSE
15635          IFLAG=2
15636        ENDIF
15637    9   FORMAT('***** ERROR: IF VALUE OF THIRD SHAPE PARAMETER ',
15638     1       '(PSI) TO GIGPDF ROUTINE IS EQUAL ZERO,')
15639   10   FORMAT('      THEN FIRST SHAPE PARAMETER (LAMBDA) PARAMETER ',
15640     1       'MUST BE NEGATIVE AND')
15641   11   FORMAT('      THE SECOND SHAPE PARAMETER (CHI) MUST BE ',
15642     1       'POSITIVEE.')
15643   51   FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
15644   52   FORMAT('      VALUE OF SECOND SHAPE PARAMETER IS: ',G15.7)
15645      ENDIF
15646C
15647   48 FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
15648C
15649C               *****************************************
15650C               **  STEP 2--                           **
15651C               **  COMPUTE THE DENSITY FUNCTION.  FOR **
15652C               **  BETTER NUMERICAL STABILITY,        **
15653C               **  COMPUTE LOGARIGHMS.                **
15654C               *****************************************
15655C
15656C
15657C
15658CCCCC USE ALGORITHM GIVEN ON PAGE 307 OF PAOLELLA.
15659C
15660      IF(IFLAG.EQ.0)THEN
15661        ETA=DSQRT(CHI/PSI)
15662        OMEGA=DSQRT(CHI*PSI)
15663        IARG1=1
15664        ISCALE=1
15665        CALL DBESK(OMEGA,DABS(LAMBDA),ISCALE,IARG1,DTEMP1,NZERO)
15666        C=1.0D0/(2*ETA**LAMBDA*DTEMP1(IARG1))
15667        P1=C*X**(LAMBDA-1.0D0)
15668        P2=-0.5D0*((CHI/X) + PSI*X)
15669        PDF=P1*EXP(P2)
15670C
15671C     BOUNDARY CASE I: GAMMA DISTRIBUTION WITH SHAPE PARAMETER
15672C                      LAMBDA AND SCALE PARAMETER PSI/2.
15673C
15674      ELSEIF(IFLAG.EQ.1)THEN
15675C
15676        SCALE=REAL(PSI/2.0D0)
15677        X2=REAL(X)/SCALE
15678        CALL GAMPDF(X2,REAL(LAMBDA),PDF2)
15679        PDF=DBLE(PDF2)/SCALE
15680C
15681C     BOUNDARY CASE II: INVERTED GAMMA DISTRIBUTION WITH SHAPE PARAMETER
15682C                       -LAMBDA AND SCALE PARAMETER CHI/2.
15683C
15684      ELSEIF(IFLAG.EQ.2)THEN
15685C
15686        SCALE=REAL(CHI/2.0D0)
15687        X2=REAL(X)/SCALE
15688        CALL IGAPDF(X2,REAL(-LAMBDA),PDF2)
15689        PDF=DBLE(PDF2)/SCALE
15690C
15691      ENDIF
15692C
15693 9000 CONTINUE
15694      RETURN
15695      END
15696      SUBROUTINE GIGPPF(P,CHI,LAMBDA,PSI,PPF)
15697C
15698C     NOTE 7/2008: MODIFY PARAMETERIZATION.
15699C
15700CCCCC SUBROUTINE GIGPPF(P,CHI,LAMBDA,THETA,PPF)
15701C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
15702C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSSIAN
15703C              DISTRIBUTION.
15704C
15705C              f(X;LAMBDA,CHI,PSI) = SQRT(PSI/CHI)*X**(LAMBDA-1)*
15706C                                    EXP[-0.5*(LAMBDA/X + PSI*X)]/
15707C                                    {2*K1(SQRT(XHI*PSI))}
15708C                                    X > 0;
15709C                                    CHI > 0; PSI > 0
15710C
15711C              FOLLOWING IS PREVIOUS PARAMETERIZATION (BASED ON
15712C              PARAMETERIZATION GIVEN IN JOHNSON, KOTZ, AND
15713C              BALAKRISHNAN.  NOTE THAT THESE DEFINITIONS ARE
15714C              ACTUALLY EQUIVALENT.  I MADE THE SWITCH BECAUSE
15715C              THE NEW PARAMETERIZATION SEEMS TO BE THE MORE
15716C              COMMONLY USED.
15717C
15718C              SPECIFICALLY, THE RELATIONSHIP BETWEEN THE
15719C              PARAMETERIZATIONS IS:
15720C
15721C              NEW          OLD
15722C              ================
15723C              LAMBDA       THETA
15724C              PSI          LAMBDA
15725C              CHI          CHI
15726C
15727C              IT HAS SHAPE PARAMETERS CHI, LAMBDA,
15728C              AND THETA.  THIS DISTRIBUTION IS DEFINED FOR POSITIVE
15729C              X AND HAS THE PROBABILITY DENSITY FUNCTION
15730C                 f(X,CHI,LAMBDA,THETA) = C*X**(THETA-1)*
15731C                                         EXP(-(1/2)*(LAMBDA*X+CHI/X))
15732C                                         X > 0; CHI, LAMBDA > 0;
15733C                                         -INF < THETA < INF
15734C
15735C              WITH
15736C
15737C                 C = (LAMBDA/X)**(THETA/2)/[2*K(0)(SQRT(CHI*LAMBDA))]
15738C                     CHI, LAMBDA > 0
15739C
15740C                   = LAMBDA**THETA/[2**THETA*GAMMA(THETA)]
15741C                     CHI = 0; LAMBDA, THETA > 0
15742C
15743C                   = 2**THETA/[X**THETA*GAMMA(-THETA)]
15744C                     CHI > 0; LAMBDA=0; THETA < 0
15745C
15746C              WHERE K(LAMBDA) IS THE MODIFIED BESSEL FUNCTION
15747C              OF THE THIRD KIND.
15748C
15749C              THE PERCENT POINT FUNCTION IS COMPUTED BY
15750C              NUMERICALLY INVERTING THE CDF WITH A BISECTION
15751C              METHOD (THE CDF IS COMPUTED BY
15752C              NUMERICALLY INTEGRATING THE CDF FUNCTION).
15753C
15754C     INPUT  ARGUMENTS--P       = THE DOUBLE PRECISION VALUE AT
15755C                                 WHICH THE PERCENT POINT
15756C                                 FUNCTION IS TO BE EVALUATED.
15757C                                 0 < P < 1
15758C                     --LAMBDA  = THE FIRST SHAPE PARAMETER
15759C                     --CHI     = THE SECOND SHAPE PARAMETER
15760C                     --PSI     = THE THIRD SHAPE PARAMETER
15761C     OUTPUT ARGUMENTS--PPF     = THE DOUBLE PRECISION PERCENT POINT
15762C                                 FUNCTION VALUE.
15763C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION
15764C             VALUE PPF FOR THE GENERALIZED INVERSE GAUSSIAN
15765C             DISTRIBUTION WITH SHAPE PARAMETERS = CHI, LAMBDA, PSI.
15766C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
15767C     RESTRICTIONS--NONE.
15768C     OTHER DATAPAC   SUBROUTINES NEEDED--DFZERO.
15769C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE
15770C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
15771C     LANGUAGE--ANSI FORTRAN (1977)
15772C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
15773C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
15774C                 WILEY, PP. 284-285.
15775C               --PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
15776C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
15777C     WRITTEN BY--JAMES J. FILLIBEN
15778C                 STATISTICAL ENGINEERING DIVISION
15779C                 INFORMATION TECHNOLOGY LABORATORY
15780C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
15781C                 GAITHERSBURG, MD 20899-8980
15782C                 PHONE--301-975-2855
15783C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
15784C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
15785C     LANGUAGE--ANSI FORTRAN (1977)
15786C     VERSION NUMBER--2004.8
15787C     ORIGINAL VERSION--AUGUST    2004.
15788C     UPDATED         --JULY      2008. MODIFY PARAMETERIZATION
15789C
15790C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
15791C
15792C---------------------------------------------------------------------
15793C
15794      DOUBLE PRECISION P
15795      DOUBLE PRECISION PTEMP
15796      DOUBLE PRECISION CHI
15797      DOUBLE PRECISION LAMBDA
15798      DOUBLE PRECISION PSI
15799      DOUBLE PRECISION PPF
15800      DOUBLE PRECISION DMEAN
15801      DOUBLE PRECISION DSD
15802      DOUBLE PRECISION DR
15803      DOUBLE PRECISION DTERM1
15804      DOUBLE PRECISION DTERM2
15805      DOUBLE PRECISION DTERM3
15806C
15807      DOUBLE PRECISION DTEMP1(10)
15808C
15809      DOUBLE PRECISION XUP
15810      DOUBLE PRECISION XUP2
15811      DOUBLE PRECISION XLOW
15812      DOUBLE PRECISION RE
15813      DOUBLE PRECISION AE
15814C
15815      DOUBLE PRECISION GIGFU2
15816      EXTERNAL GIGFU2
15817C
15818      DOUBLE PRECISION DP
15819      COMMON/GIGCO2/DP
15820C
15821      DOUBLE PRECISION DCHI
15822      DOUBLE PRECISION DLMBDA
15823      DOUBLE PRECISION DPSI
15824      COMMON/GIGCOM/DCHI,DLMBDA,DPSI
15825C
15826C-----COMMON----------------------------------------------------------
15827C
15828      INCLUDE 'DPCOP2.INC'
15829C
15830C-----START POINT-----------------------------------------------------
15831C
15832C               *****************************************
15833C               **  STEP 1--                           **
15834C               **  CHECK FOR VALID PARAMETERS         **
15835C               *****************************************
15836C
15837      PPF=0.0D0
15838      IFLAG=0
15839C
15840      IF(P.LE.0.0D0 .OR. P.GE.1.0D0)THEN
15841        WRITE(ICOUT,4)
15842        CALL DPWRST('XXX','WRIT')
15843        WRITE(ICOUT,48)P
15844        CALL DPWRST('XXX','WRIT')
15845        GOTO9000
15846    4   FORMAT('***** ERROR: VALUE OF THE FIRST ARGUMENT (P) TO ',
15847     1       'GIGPPF IS OUTSIDE THE (0,1) INTERVAL.')
15848C
15849      ELSEIF(CHI.LT.0.0D0)THEN
15850        WRITE(ICOUT,5)
15851        CALL DPWRST('XXX','WRIT')
15852        WRITE(ICOUT,48)CHI
15853        CALL DPWRST('XXX','WRIT')
15854        PPF=0.0D0
15855        GOTO9000
15856    5   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
15857     1         '(CHI) TO GIGPPF IS NEGATIVE.')
15858C
15859      ELSEIF(PSI.LT.0.0D0)THEN
15860        WRITE(ICOUT,6)
15861        CALL DPWRST('XXX','WRIT')
15862        WRITE(ICOUT,48)PSI
15863        CALL DPWRST('XXX','WRIT')
15864        PPF=0.0
15865        GOTO9000
15866    6   FORMAT('***** ERROR: THE VALUE OF THE THIRD SHAPE PARAMETER ',
15867     1         '(PSI) TO GIGPPF IS NEGATIVE.')
15868C
15869      ELSEIF(CHI.EQ.0.0D0)THEN
15870        IF(LAMBDA.LE.0.0D0 .OR. PSI.LE.0.0D0)THEN
15871          WRITE(ICOUT,7)
15872          CALL DPWRST('XXX','WRIT')
15873          WRITE(ICOUT,8)
15874          CALL DPWRST('XXX','WRIT')
15875          WRITE(ICOUT,49)LAMBDA
15876          CALL DPWRST('XXX','WRIT')
15877          WRITE(ICOUT,50)PSI
15878          CALL DPWRST('XXX','WRIT')
15879          PPF=0.0
15880          GOTO9000
15881        ELSE
15882          IFLAG=1
15883        ENDIF
15884    7   FORMAT('***** ERROR: IF VALUE OF SECOND SHAPE PARAMETER ',
15885     1       '(CHI) TO GIGPPF IS EQUAL ZERO,')
15886    8 FORMAT('      THEN FIRST (LAMBDA) AND THIRD (PSI) SHAPE ',
15887     1       'PARAMETERS MUST BE POSITIVE.')
15888   49 FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
15889   50 FORMAT('      VALUE OF THIRD SHAPE PARAMETER IS: ',G15.7)
15890C
15891      ELSEIF(PSI.EQ.0.0D0)THEN
15892        IF(LAMBDA.GE.0.0D0 .OR. CHI.LE.0.0D0)THEN
15893          WRITE(ICOUT,9)
15894          CALL DPWRST('XXX','WRIT')
15895          WRITE(ICOUT,10)
15896          CALL DPWRST('XXX','WRIT')
15897          WRITE(ICOUT,11)
15898          CALL DPWRST('XXX','WRIT')
15899          WRITE(ICOUT,51)CHI
15900          CALL DPWRST('XXX','WRIT')
15901          WRITE(ICOUT,52)PSI
15902          CALL DPWRST('XXX','WRIT')
15903          PPF=0.0
15904          GOTO9000
15905        ELSE
15906          IFLAG=2
15907        ENDIF
15908    9   FORMAT('***** ERROR: IF VALUE OF THIRD SHAPE PARAMETER ',
15909     1       '(PSI) TO GIGPPF ROUTINE IS EQUAL ZERO,')
15910   10   FORMAT('      THEN FIRST SHAPE PARAMETER (LAMBDA) PARAMETER ',
15911     1       'MUST BE NEGATIVE AND')
15912   11   FORMAT('      THE SECOND SHAPE PARAMETER (CHI) MUST BE ',
15913     1       'POSITIVEE.')
15914   51   FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
15915   52   FORMAT('      VALUE OF SECOND SHAPE PARAMETER IS: ',G15.7)
15916      ENDIF
15917C
15918   48 FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
15919C
15920C               *****************************************
15921C               **  STEP 2--                           **
15922C               **  COMPUTE THE PERCENT POINT FUNCTION.**
15923C               *****************************************
15924C
15925C     BOUNDARY CASE I: GAMMA DISTRIBUTION WITH SHAPE PARAMETER
15926C                      LAMBDA AND SCALE PARAMETER PSI/2.
15927C
15928      IF(IFLAG.EQ.1)THEN
15929C
15930        SCALE=REAL(PSI/2.0D0)
15931        P2=REAL(P)
15932        CALL GAMPPF(P2,REAL(LAMBDA),PPF2)
15933        PPF=SCALE*PPF2
15934        GOTO9000
15935C
15936C     BOUNDARY CASE II: INVERTED GAMMA DISTRIBUTION WITH SHAPE PARAMETER
15937C                       -LAMBDA AND SCALE PARAMETER CHI/2.
15938C
15939      ELSEIF(IFLAG.EQ.2)THEN
15940C
15941        SCALE=REAL(CHI/2.0D0)
15942        P2=REAL(P)
15943        CALL IGAPPF(P2,REAL(-LAMBDA),PPF2)
15944        PPF=SCALE*PPF2
15945        GOTO9000
15946      ENDIF
15947C
15948C  STEP 1: FIND BRACKETING INTERVAL.  LOWER BOUND IS ZERO.  START
15949C          WITH UPPER BOUND = MEAN:
15950C             MEAN=K(LAMBDA+1)(SQRT(PSI*CHI))*SQRT(CHI/PSI)/
15951C                      K(LAMBDA)(SQRT(PSI*CHI))
15952C          INCREMENT IN INTERVALS OF 1 STANDARD DEVIATION:
15953C             VARIANCE=K(LAMBDA+2)(SQRT(PSI*CHI))*(CHI/PSI)/
15954C                      K(LAMBDA)(SQRT(PSI*CHI))
15955C
15956      XLOW=0.000000001D0
15957      CALL GIGCDF(XLOW,CHI,LAMBDA,PSI,PTEMP)
15958      IF(P.LE.PTEMP)THEN
15959        PPF=XLOW
15960        GOTO9000
15961      ENDIF
15962C
15963      IARG1=1
15964      ISCALE=1
15965      DR=DABS(LAMBDA)
15966      CALL DBESK(DSQRT(PSI*CHI),DR,ISCALE,IARG1,DTEMP1,NZERO)
15967      DTERM1=DTEMP1(1)
15968      DR=DABS(LAMBDA+1.0D0)
15969      CALL DBESK(DSQRT(PSI*CHI),DR,ISCALE,IARG1,DTEMP1,NZERO)
15970      DTERM2=DTEMP1(1)
15971      DR=DABS(LAMBDA+2.0D0)
15972      CALL DBESK(DSQRT(PSI*CHI),DR,ISCALE,IARG1,DTEMP1,NZERO)
15973      DTERM3=DTEMP1(1)
15974      DMEAN=(DTERM2/DTERM1)*DSQRT(CHI/PSI)
15975      DSD=DSQRT((DTERM3/DTERM1)*(CHI/PSI))
15976C
15977      MAXIT=1000
15978      NIT=0
15979C
15980      XUP2=DMEAN
15981  200 CONTINUE
15982        IF(NIT.GT.MAXIT)THEN
15983          PPF=0.0D0
15984          WRITE(ICOUT,999)
15985          CALL DPWRST('XXX','BUG ')
15986          WRITE(ICOUT,131)
15987          CALL DPWRST('XXX','BUG ')
15988          WRITE(ICOUT,133)
15989          CALL DPWRST('XXX','BUG ')
15990          GOTO9000
15991        ENDIF
15992        CALL GIGCDF(XUP2,CHI,LAMBDA,PSI,PTEMP)
15993        IF(PTEMP.GT.P)THEN
15994          XUP=XUP2
15995        ELSE
15996          XLOW=XUP2
15997          XUP2=XUP2 + DSD
15998          NIT=NIT+1
15999          GOTO200
16000        ENDIF
16001C
16002      AE=1.D-7
16003      RE=1.D-7
16004      DCHI=CHI
16005      DLMBDA=LAMBDA
16006      DPSI=PSI
16007      DP=P
16008      CALL DFZERO(GIGFU2,XLOW,XUP,XUP,RE,AE,IFLAG)
16009C
16010      PPF=XLOW
16011C
16012      IF(IFLAG.EQ.2)THEN
16013C
16014C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
16015CCCCC   WRITE(ICOUT,999)
16016  999   FORMAT(1X)
16017CCCCC   CALL DPWRST('XXX','BUG ')
16018CCCCC   WRITE(ICOUT,111)
16019CC111   FORMAT('***** WARNING FROM GIGPPF--')
16020CCCCC   CALL DPWRST('XXX','BUG ')
16021CCCCC   WRITE(ICOUT,113)
16022CC113   FORMAT('      PPF VALUE MAY NOT BE COMPUTED TO DESIRED ',
16023CCCCC1         'TOLERANCE.')
16024CCCCC   CALL DPWRST('XXX','BUG ')
16025      ELSEIF(IFLAG.EQ.3)THEN
16026        WRITE(ICOUT,999)
16027        CALL DPWRST('XXX','BUG ')
16028        WRITE(ICOUT,121)
16029  121   FORMAT('***** WARNING FROM GIGPPF--')
16030        CALL DPWRST('XXX','BUG ')
16031        WRITE(ICOUT,123)
16032  123   FORMAT('      PPF VALUE MAY BE NEAR A SINGULAR POINT.')
16033        CALL DPWRST('XXX','BUG ')
16034      ELSEIF(IFLAG.EQ.4)THEN
16035        WRITE(ICOUT,999)
16036        CALL DPWRST('XXX','BUG ')
16037        WRITE(ICOUT,131)
16038  131   FORMAT('***** ERROR FROM GIGPPF--')
16039        CALL DPWRST('XXX','BUG ')
16040        WRITE(ICOUT,133)
16041  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
16042        CALL DPWRST('XXX','BUG ')
16043      ELSEIF(IFLAG.EQ.5)THEN
16044        WRITE(ICOUT,999)
16045        CALL DPWRST('XXX','BUG ')
16046        WRITE(ICOUT,141)
16047  141   FORMAT('***** WARNING FROM GIGPPF--')
16048        CALL DPWRST('XXX','BUG ')
16049        WRITE(ICOUT,143)
16050  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
16051        CALL DPWRST('XXX','BUG ')
16052      ENDIF
16053C
16054C
16055 9000 CONTINUE
16056      RETURN
16057      END
16058      SUBROUTINE GIGRAN(N,CHI,LAMBDA,PSI,ISEED,X)
16059C
16060CCCCC NOTE 7/2008: MODIFY PARAMETERIZATION.
16061C
16062CCCCC SUBROUTINE GIGRAN(N,CHI,LAMBDA,THETA,ISEED,X)
16063C
16064C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
16065C              FROM THE THE GENERALIZED INVERSE GAUSSIAN DISTIBUTION.
16066C
16067C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
16068C                                OF RANDOM NUMBERS TO BE GENERATED.
16069C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
16070C                                (OF DIMENSION AT LEAST N)
16071C                                INTO WHICH THE GENERATED
16072C                                RANDOM SAMPLE WILL BE PLACED.
16073C                     --LAMBDA = A SINGLE PRECISON SCALAR THAT DEFINES
16074C                                THE FIRST SHAPE PARAMETER.
16075C                     --CHI     = A SINGLE PRECISON SCALAR THAT DEFINES
16076C                                THE SECOND SHAPE PARAMETER.
16077C                     --PSI    = A SINGLE PRECISON SCALAR THAT DEFINES
16078C                                THE THIRD SHAPE PARAMETER.
16079C     OUTPUT--A RANDOM SAMPLE OF SIZE N FROM THE COMPERTZ-MAKEHAM
16080C             DISTRIBUTION WITH LOCATION = 0 AND SCALE = 1.
16081C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
16082C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
16083C                   OF N FOR THIS SUBROUTINE.
16084C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GIGPPF.
16085C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
16086C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
16087C     LANGUAGE--ANSI FORTRAN (1977)
16088C     METHOD--TRANSFORM NORMAL RANDOM NUMBERS
16089C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
16090C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
16091C                 WILEY, PP. 284-285.
16092C               --PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
16093C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
16094C     WRITTEN BY--JAMES J. FILLIBEN
16095C                 STATISTICAL ENGINEERING DIVISION
16096C                 INFORMATION TECHNOLOGY DIVISION
16097C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
16098C                 GAITHERSBURG, MD 20899-8980
16099C                 PHONE--301-975-2855
16100C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
16101C           OF THE NATIONAL BUREAU OF STANDARDS.
16102C     LANGUAGE--ANSI FORTRAN (1977)
16103C     VERSION NUMBER--2004.8
16104C     ORIGINAL VERSION--OCTOBER   2004.
16105C     UPDATED         --JULY      2008. MODIFY PARAMERIZATION
16106C
16107C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
16108C
16109C---------------------------------------------------------------------
16110C
16111      DIMENSION X(*)
16112      REAL CHI
16113      REAL PSI
16114      REAL LAMBDA
16115C
16116      DOUBLE PRECISION DCHI
16117      DOUBLE PRECISION DPSI
16118      DOUBLE PRECISION DLMBDA
16119      DOUBLE PRECISION DPPF
16120      DOUBLE PRECISION DXTEMP
16121C
16122C-----COMMON----------------------------------------------------------
16123C
16124      INCLUDE 'DPCOP2.INC'
16125C
16126C-----START POINT-----------------------------------------------------
16127C
16128C     CHECK THE INPUT ARGUMENTS FOR ERRORS
16129C
16130      IFLAG=0
16131C
16132      IF(N.LT.1)THEN
16133        WRITE(ICOUT, 3)
16134        CALL DPWRST('XXX','BUG ')
16135        WRITE(ICOUT, 4)
16136        CALL DPWRST('XXX','BUG ')
16137        WRITE(ICOUT,47)N
16138        CALL DPWRST('XXX','BUG ')
16139        GOTO9000
16140    3 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
16141     1'INVERSE GAUSIAN')
16142    4 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
16143C
16144      ELSEIF(CHI.LT.0.0D0)THEN
16145        WRITE(ICOUT,5)
16146        CALL DPWRST('XXX','WRIT')
16147        WRITE(ICOUT,48)CHI
16148        CALL DPWRST('XXX','WRIT')
16149        PDF=0.0D0
16150        GOTO9000
16151    5   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
16152     1         '(CHI) IS NEGATIVE.')
16153C
16154      ELSEIF(PSI.LT.0.0D0)THEN
16155        WRITE(ICOUT,6)
16156        CALL DPWRST('XXX','WRIT')
16157        WRITE(ICOUT,48)PSI
16158        CALL DPWRST('XXX','WRIT')
16159        GOTO9000
16160    6   FORMAT('***** ERROR: THE VALUE OF THE THIRD SHAPE PARAMETER ',
16161     1         '(PSI) IS NEGATIVE.')
16162C
16163      ELSEIF(CHI.EQ.0.0D0)THEN
16164        IF(LAMBDA.LE.0.0D0 .OR. PSI.LE.0.0D0)THEN
16165          WRITE(ICOUT,7)
16166          CALL DPWRST('XXX','WRIT')
16167          WRITE(ICOUT,8)
16168          CALL DPWRST('XXX','WRIT')
16169          WRITE(ICOUT,49)LAMBDA
16170          CALL DPWRST('XXX','WRIT')
16171          WRITE(ICOUT,50)PSI
16172          CALL DPWRST('XXX','WRIT')
16173          GOTO9000
16174        ELSE
16175          IFLAG=1
16176        ENDIF
16177    7   FORMAT('***** ERROR: IF VALUE OF SECOND SHAPE PARAMETER ',
16178     1       '(CHI) IS EQUAL ZERO,')
16179    8 FORMAT('      THEN FIRST (LAMBDA) AND THIRD (PSI) SHAPE ',
16180     1       'PARAMETERS MUST BE POSITIVE.')
16181   49 FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
16182   50 FORMAT('      VALUE OF THIRD SHAPE PARAMETER IS: ',G15.7)
16183C
16184      ELSEIF(PSI.EQ.0.0D0)THEN
16185        IF(LAMBDA.GE.0.0D0 .OR. CHI.LE.0.0D0)THEN
16186          WRITE(ICOUT,9)
16187          CALL DPWRST('XXX','WRIT')
16188          WRITE(ICOUT,10)
16189          CALL DPWRST('XXX','WRIT')
16190          WRITE(ICOUT,11)
16191          CALL DPWRST('XXX','WRIT')
16192          WRITE(ICOUT,51)CHI
16193          CALL DPWRST('XXX','WRIT')
16194          WRITE(ICOUT,52)PSI
16195          CALL DPWRST('XXX','WRIT')
16196          GOTO9000
16197        ELSE
16198          IFLAG=2
16199        ENDIF
16200    9   FORMAT('***** ERROR: IF VALUE OF THIRD SHAPE PARAMETER ',
16201     1       '(PSI) IS EQUAL ZERO,')
16202   10   FORMAT('      THEN FIRST SHAPE PARAMETER (LAMBDA) PARAMETER ',
16203     1       'MUST BE NEGATIVE AND')
16204   11   FORMAT('      THE SECOND SHAPE PARAMETER (CHI) MUST BE ',
16205     1       'POSITIVEE.')
16206   51   FORMAT('      VALUE OF FIRST SHAPE PARAMETER IS: ',G15.7)
16207   52   FORMAT('      VALUE OF SECOND SHAPE PARAMETER IS: ',G15.7)
16208      ENDIF
16209C
16210   48 FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
16211   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
16212C
16213C     GENERATE N GENERALIZED INVERSE GAUSSIAN RANDON NUMBERS USING
16214C     THE PERCENT POINT FUNCTION TRANSFORMATION.
16215C
16216      IF(IFLAG.EQ.0)THEN
16217C
16218C       GENERATE N UNIFORM NUMBERS;
16219C
16220        CALL UNIRAN(N,ISEED,X)
16221        DCHI=DBLE(CHI)
16222        DLMBDA=DBLE(LAMBDA)
16223        DPSI=DBLE(PSI)
16224        DO100I=1,N
16225          DXTEMP=DBLE(X(I))
16226          CALL GIGPPF(DXTEMP,DLMBDA,DCHI,DPSI,DPPF)
16227          X(I)=REAL(DPPF)
16228  100   CONTINUE
16229C
16230C     BOUNDARY CASE I: GAMMA DISTRIBUTION WITH SHAPE PARAMETER
16231C                      LAMBDA AND SCALE PARAMETER PSI/2.
16232C
16233      ELSEIF(IFLAG.EQ.1)THEN
16234        CALL GAMRAN(N,LAMBDA,ISEED,X)
16235        SCALE=PSI/2.0
16236        DO210I=1,N
16237          X(I)=SCALE*X(I)
16238  210   CONTINUE
16239C
16240C     BOUNDARY CASE II: INVERTED GAMMA DISTRIBUTION WITH SHAPE PARAMETER
16241C                       -LAMBDA AND SCALE PARAMETER PSI/2.
16242C
16243      ELSEIF(IFLAG.EQ.2)THEN
16244        SHAPE=-LAMBDA
16245        CALL IGARAN(N,SHAPE,ISEED,X)
16246        SCALE=CHI/2.0
16247        DO310I=1,N
16248          X(I)=SCALE*X(I)
16249  310   CONTINUE
16250      ENDIF
16251C
16252 9000 CONTINUE
16253      RETURN
16254      END
16255      SUBROUTINE GI2CDF(X,LAMBDA,OMEGA,CDF)
16256C
16257C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
16258C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSSIAN
16259C              DISTRIBUTION PARAMETERIZED TO HAVE 2 SHAPE PARAMETERS
16260C              (AS OPPOSSED TO 3 SHAPE PARAMETERS IN THE ORIGINAL
16261C              PARAMETERIZATION).
16262C
16263C              f(X;LAMBDA,OMEGA) = X**(LAMBDA-1)*EXP[-0.5*OMEGA((1/X) + X)]/
16264C                                    {2*K(OMEGA,LAMBDA)}
16265C                                    X > 0; OMEGA > 0;
16266C
16267C              WHERE K(X,LAMBDA) IS THE MODIFIED BESSEL FUNCTION
16268C              OF THE THIRD KIND.
16269C
16270C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED
16271C              BY NUMERICALLY INTEGRATING THE PROBABILITY DENSITY
16272C              FUNCTION.
16273C
16274C     INPUT  ARGUMENTS--X       = THE DOUBLE PRECISION VALUE AT
16275C                                 WHICH THE CUMULATIVE DISTRIBUTION
16276C                                 FUNCTION IS TO BE EVALUATED.
16277C                                 X SHOULD BE POSITIVE.
16278C                     --LAMBDA  = THE FIRST SHAPE PARAMETER
16279C                     --OMEGA   = THE SECOND SHAPE PARAMETER
16280C     OUTPUT ARGUMENTS--CDF     = THE DOUBLE PRECISION CUMULATIVE
16281C                                 DISTRIBUTION FUNCTION VALUE.
16282C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
16283C             FUNCTION VALUE CDF FOR THE GENERALIZED INVERSE
16284C             GAUSSIAN DISTRIBUTION WITH SHAPE PARAMETERS LAMBDA AND OMEGA.
16285C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
16286C     RESTRICTIONS--NONE.
16287C     OTHER DATAPAC   SUBROUTINES NEEDED--DQAGI.
16288C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
16289C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
16290C     LANGUAGE--ANSI FORTRAN (1977)
16291C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
16292C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
16293C                 WILEY, PP. pp. 284-285.
16294C               --PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
16295C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
16296C     WRITTEN BY--JAMES J. FILLIBEN
16297C                 STATISTICAL ENGINEERING DIVISION
16298C                 INFORMATION TECHNOLOGY LABORATORY
16299C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
16300C                 GAITHERSBURG, MD 20899-8980
16301C                 PHONE--301-975-2855
16302C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
16303C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
16304C     LANGUAGE--ANSI FORTRAN (1977)
16305C     VERSION NUMBER--2008.7
16306C     ORIGINAL VERSION--JULY      2008.
16307C
16308C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
16309C
16310C---------------------------------------------------------------------
16311C
16312      INTEGER LIMIT
16313      INTEGER LENW
16314      PARAMETER(LIMIT=100)
16315      PARAMETER(LENW=4*LIMIT)
16316      INTEGER INF
16317      INTEGER NEVAL
16318      INTEGER IER
16319      INTEGER LAST
16320      INTEGER IWORK(LIMIT)
16321      DOUBLE PRECISION LAMBDA
16322      DOUBLE PRECISION OMEGA
16323      DOUBLE PRECISION EPSABS
16324      DOUBLE PRECISION EPSREL
16325      DOUBLE PRECISION CDF
16326      DOUBLE PRECISION X
16327      DOUBLE PRECISION ABSERR
16328      DOUBLE PRECISION WORK(LENW)
16329C
16330      DOUBLE PRECISION GI2FUN
16331      EXTERNAL GI2FUN
16332C
16333      DOUBLE PRECISION DLMBDA
16334      DOUBLE PRECISION DOMEGA
16335      COMMON/GI2COM/DLMBDA,DOMEGA
16336C
16337C-----COMMON----------------------------------------------------------
16338C
16339      INCLUDE 'DPCOP2.INC'
16340C
16341C-----DATA STATEMENTS-------------------------------------------------
16342C
16343C-----START POINT-----------------------------------------------------
16344C
16345C               ********************************************
16346C               **  STEP 1--                              **
16347C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
16348C               ********************************************
16349C
16350      IFLAG=0
16351      CDF=0.0D0
16352C
16353      IF(X.LE.0.0D0)THEN
16354        GOTO9000
16355C
16356      ELSEIF(OMEGA.LE.0.0D0)THEN
16357        WRITE(ICOUT,5)
16358        CALL DPWRST('XXX','WRIT')
16359        WRITE(ICOUT,48)OMEGA
16360        CALL DPWRST('XXX','WRIT')
16361        GOTO9000
16362    5   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
16363     1         '(OMEGA) TO GIGCDF IS NEGATIVE.')
16364C
16365      ENDIF
16366C
16367   48 FORMAT('      THE VALUE OF THE ARGUMENT IS: ',G15.7)
16368C
16369C               ************************************
16370C               **  STEP 1--                      **
16371C               **  COMPUTE THE CDF     FUNCTION  **
16372C               ************************************
16373C
16374      EPSABS=0.0D0
16375      EPSREL=1.0D-7
16376      IER=0
16377      DOMEGA=OMEGA
16378      DLMBDA=LAMBDA
16379      DPSI=PSI
16380      INF=1
16381C
16382      CALL DQAGI(GI2FUN,X,INF,EPSABS,EPSREL,CDF,ABSERR,NEVAL,
16383     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
16384      CDF=1.0D0 - CDF
16385C
16386      IF(IER.EQ.1)THEN
16387        WRITE(ICOUT,999)
16388  999   FORMAT(1X)
16389        CALL DPWRST('XXX','BUG ')
16390        WRITE(ICOUT,111)
16391  111   FORMAT('***** ERROR FROM GI2CDF--')
16392        CALL DPWRST('XXX','BUG ')
16393        WRITE(ICOUT,113)
16394  113   FORMAT('      MAXIMUM NUMBER OF SUBDIVISIONS EXCEEDED.')
16395        CALL DPWRST('XXX','BUG ')
16396      ELSEIF(IER.EQ.2)THEN
16397        WRITE(ICOUT,999)
16398        CALL DPWRST('XXX','BUG ')
16399        WRITE(ICOUT,111)
16400        CALL DPWRST('XXX','BUG ')
16401        WRITE(ICOUT,123)
16402  123   FORMAT('      ROUNDOFF ERROR PREVENTS REQUESTED TOLERANCE ',
16403     1         'FROM BEING ACHIEVED.')
16404        CALL DPWRST('XXX','BUG ')
16405      ELSEIF(IER.EQ.3)THEN
16406        WRITE(ICOUT,999)
16407        CALL DPWRST('XXX','BUG ')
16408        WRITE(ICOUT,111)
16409        CALL DPWRST('XXX','BUG ')
16410        WRITE(ICOUT,133)
16411  133   FORMAT('      BAD INTEGRAND BEHAVIOUR DETECTED.')
16412        CALL DPWRST('XXX','BUG ')
16413      ELSEIF(IER.EQ.4)THEN
16414        WRITE(ICOUT,999)
16415        CALL DPWRST('XXX','BUG ')
16416        WRITE(ICOUT,111)
16417        CALL DPWRST('XXX','BUG ')
16418        WRITE(ICOUT,143)
16419  143   FORMAT('      INTEGRATION DID NOT CONVERGE.')
16420        CALL DPWRST('XXX','BUG ')
16421      ELSEIF(IER.EQ.5)THEN
16422        WRITE(ICOUT,999)
16423        CALL DPWRST('XXX','BUG ')
16424        WRITE(ICOUT,111)
16425        CALL DPWRST('XXX','BUG ')
16426        WRITE(ICOUT,153)
16427  153   FORMAT('      THE INTEGRATION IS PROBABLY DIVERGENT.')
16428        CALL DPWRST('XXX','BUG ')
16429      ELSEIF(IER.EQ.6)THEN
16430        WRITE(ICOUT,999)
16431        CALL DPWRST('XXX','BUG ')
16432        WRITE(ICOUT,111)
16433        CALL DPWRST('XXX','BUG ')
16434        WRITE(ICOUT,163)
16435  163   FORMAT('      INVALID INPUT TO THE INTEGRATION ROUTINE.')
16436        CALL DPWRST('XXX','BUG ')
16437      ENDIF
16438C
16439 9000 CONTINUE
16440      RETURN
16441      END
16442      DOUBLE PRECISION FUNCTION GI2FUN(DX)
16443C
16444C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
16445C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSIAN
16446C              DISTRIBUTION WITH SHAPE PARAMETERS LAMBDA AND
16447C              OMEGA.  THIS DISTRIBUTION IS DEFINED FOR POSITIVE X.
16448C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
16449C              THE GI2PDF ROUTINE IS CALLED TO COMPUTE THE
16450C              PROBABILITY DENSITY (CHECK FOR THE FORMULA IN THAT
16451C              ROUTINE).  DEFINE AS FUNCTION TO BE USED FOR INTEGRATION
16452C              CODE CALLED BY GI2CDF.  THIS ROUTINE USES
16453C              DOUBLE PRECISION ARITHMETIC.
16454C     INPUT  ARGUMENTS--DX      = THE DOUBLE PRECISION VALUE AT
16455C                                 WHICH THE PROBABILITY DENSITY
16456C                                 FUNCTION IS TO BE EVALUATED.
16457C     OUTPUT ARGUMENTS--GI2FUN  = THE DOUBLE PRECISION PROBABILITY
16458C                                 DENSITY FUNCTION VALUE.
16459C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
16460C             FUNCTION VALUE PDF FOR THE GENERALIZED INVERSE
16461C             GAUSSIAN DISTRIBUTION WITH SHAPE PARAMETERS LAMBDA
16462C             AND OMEGA.
16463C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
16464C     RESTRICTIONS--NONE.
16465C     OTHER DATAPAC   SUBROUTINES NEEDED--GI2PDF.
16466C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
16467C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
16468C     LANGUAGE--ANSI FORTRAN (1977)
16469C     REFERENCES--PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
16470C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
16471C               --GENTLE, HARDLE, MORI (EDS.) (2004),
16472C                 "HANDBOOK OF COMPUTATIONAL STATISTICS: CONCEPTS AND
16473C                 METHODS", SPRINGER-VERLAG, PP. 933.
16474C     WRITTEN BY--JAMES J. FILLIBEN
16475C                 STATISTICAL ENGINEERING DIVISION
16476C                 INFORMATION TECHNOLOGY LABORATORY
16477C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
16478C                 GAITHERSBURG, MD 20899-8980
16479C                 PHONE--301-975-2855
16480C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
16481C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
16482C     LANGUAGE--ANSI FORTRAN (1977)
16483C     VERSION NUMBER--2008.7
16484C     ORIGINAL VERSION--JULY      2008.
16485C
16486C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
16487C
16488C---------------------------------------------------------------------
16489C
16490      DOUBLE PRECISION DTERM
16491C
16492      DOUBLE PRECISION DX
16493      DOUBLE PRECISION DLMBDA
16494      DOUBLE PRECISION DOMEGA
16495      COMMON/GI2COM/DLMBDA,DOMEGA
16496C
16497C-----COMMON----------------------------------------------------------
16498C
16499      INCLUDE 'DPCOP2.INC'
16500C
16501C-----DATA STATEMENTS-------------------------------------------------
16502C
16503C-----START POINT-----------------------------------------------------
16504C
16505C               ************************************
16506C               **  STEP 1--                      **
16507C               **  COMPUTE THE DENSITY FUNCTION  **
16508C               ************************************
16509C
16510      CALL GI2PDF(DX,DLMBDA,DOMEGA,DTERM)
16511      GI2FUN=DTERM
16512C
16513      RETURN
16514      END
16515      DOUBLE PRECISION FUNCTION GI2FU2(DX)
16516C
16517C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
16518C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSIAN
16519C              DISTRIBUTION WITH SHAPE PARAMETERS LAMBDA AND
16520C              OMEGA.  THIS DISTRIBUTION IS DEFINED FOR POSITIVE X.
16521C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
16522C              THE GI2PDF ROUTINE IS CALLED TO COMPUTE THE
16523C              PROBABILITY DENSITY (CHECK FOR THE FORMULA IN THAT
16524C              ROUTINE).  DEFINE AS FUNCTION TO BE USED FOR INTEGRATION
16525C              CODE CALLED BY GI2CDF.  THIS ROUTINE USES
16526C              DOUBLE PRECISION ARITHMETIC.
16527C     INPUT  ARGUMENTS--DX      = THE DOUBLE PRECISION VALUE AT
16528C                                 WHICH THE PROBABILITY DENSITY
16529C                                 FUNCTION IS TO BE EVALUATED.
16530C     OUTPUT ARGUMENTS--GI2FU2  = THE DOUBLE PRECISION PROBABILITY
16531C                                 DENSITY FUNCTION VALUE.
16532C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
16533C             FUNCTION VALUE PDF FOR THE GENERALIZED INVERSE
16534C             GAUSSIAN DISTRIBUTION WITH SHAPE PARAMETERS LAMBDA
16535C             AND OMEGA.
16536C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
16537C     RESTRICTIONS--NONE.
16538C     OTHER DATAPAC   SUBROUTINES NEEDED--GI2PDF.
16539C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
16540C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
16541C     LANGUAGE--ANSI FORTRAN (1977)
16542C     REFERENCES--PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
16543C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
16544C               --GENTLE, HARDLE, MORI (EDS.) (2004),
16545C                 "HANDBOOK OF COMPUTATIONAL STATISTICS: CONCEPTS AND
16546C                 METHODS", SPRINGER-VERLAG, PP. 933.
16547C     WRITTEN BY--JAMES J. FILLIBEN
16548C                 STATISTICAL ENGINEERING DIVISION
16549C                 INFORMATION TECHNOLOGY LABORATORY
16550C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
16551C                 GAITHERSBURG, MD 20899-8980
16552C                 PHONE--301-975-2855
16553C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
16554C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
16555C     LANGUAGE--ANSI FORTRAN (1977)
16556C     VERSION NUMBER--2008.7
16557C     ORIGINAL VERSION--JULY      2008.
16558C
16559C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
16560C
16561C---------------------------------------------------------------------
16562C
16563      DOUBLE PRECISION DX
16564      DOUBLE PRECISION DCDF
16565C
16566      DOUBLE PRECISION DP
16567      COMMON/GI2CO2/DP
16568C
16569      DOUBLE PRECISION DLMBDA
16570      DOUBLE PRECISION DOMEGA
16571      COMMON/GI2COM/DLMBDA,DOMEGA
16572C
16573C-----COMMON----------------------------------------------------------
16574C
16575      INCLUDE 'DPCOP2.INC'
16576C
16577C-----DATA STATEMENTS-------------------------------------------------
16578C
16579C-----START POINT-----------------------------------------------------
16580C
16581C               ************************************
16582C               **  STEP 1--                      **
16583C               **  COMPUTE THE CDF     FUNCTION  **
16584C               ************************************
16585C
16586      CALL GI2CDF(DX,DLMBDA,DOMEGA,DCDF)
16587      GI2FU2=DP - DCDF
16588C
16589      RETURN
16590      END
16591      SUBROUTINE GI2PDF(X,LAMBDA,OMEGA,PDF)
16592C
16593C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
16594C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSSIAN
16595C              DISTRIBUTION PARAMETERIZED TO HAVE 2 SHAPE PARAMETERS
16596C              (AS OPPOSSED TO 3 SHAPE PARAMETERS IN THE ORIGINAL
16597C              PARAMETERIZATION).
16598C
16599C              f(X;LAMBDA,OMEGA) = X**(LAMBDA-1)*EXP[-0.5*OMEGA((1/X) + X)]/
16600C                                    {2*K(OMEGA,LAMBDA)}
16601C                                    X > 0; OMEGA > 0;
16602C
16603C              WHERE K(X,LAMBDA) IS THE MODIFIED BESSEL FUNCTION
16604C              OF THE THIRD KIND.
16605C
16606C     INPUT  ARGUMENTS--X       = THE DOUBLE PRECISION VALUE AT
16607C                                 WHICH THE PROBABILITY DENSITY
16608C                                 FUNCTION IS TO BE EVALUATED.
16609C                                 X SHOULD BE POSITIVE.
16610C                     --LAMBDA  = THE FIRST SHAPE PARAMETER
16611C                     --OMEGA   = THE SECOND SHAPE PARAMETER
16612C     OUTPUT ARGUMENTS--PDF     = THE DOUBLE PRECISION PROBABILITY
16613C                                 DENSITY FUNCTION VALUE.
16614C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
16615C             VALUE PDF FOR THE GENERALIZED INVERSE GAUSSIAN
16616C             DISTRIBUTION WITH SHAPE PARAMETERS = LAMBDA AND OMEGA.
16617C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
16618C     RESTRICTIONS--NONE.
16619C     OTHER DATAPAC   SUBROUTINES NEEDED--DBESK.
16620C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP.
16621C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
16622C     LANGUAGE--ANSI FORTRAN (1977)
16623C     REFERENCES--PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
16624C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
16625C               --GENTLE, HARDLE, MORI (EDS.) (2004),
16626C                 "HANDBOOK OF COMPUTATIONAL STATISTICS: CONCEPTS AND
16627C                 METHODS", SPRINGER-VERLAG, PP. 933.
16628C     WRITTEN BY--JAMES J. FILLIBEN
16629C                 STATISTICAL ENGINEERING DIVISION
16630C                 INFORMATION TECHNOLOGY LABORATORY
16631C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
16632C                 GAITHERSBURG, MD 20899-8980
16633C                 PHONE--301-975-2855
16634C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
16635C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
16636C     LANGUAGE--ANSI FORTRAN (1977)
16637C     VERSION NUMBER--2008.7
16638C     ORIGINAL VERSION--JULY      2008.
16639C
16640C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
16641C
16642C---------------------------------------------------------------------
16643C
16644      DOUBLE PRECISION X
16645      DOUBLE PRECISION OMEGA
16646      DOUBLE PRECISION LAMBDA
16647      DOUBLE PRECISION PDF
16648      DOUBLE PRECISION P1
16649      DOUBLE PRECISION P2
16650      DOUBLE PRECISION C
16651C
16652      DOUBLE PRECISION DTEMP1(10)
16653C
16654C-----COMMON----------------------------------------------------------
16655C
16656      INCLUDE 'DPCOP2.INC'
16657C
16658C-----START POINT-----------------------------------------------------
16659C
16660C               *****************************************
16661C               **  STEP 1--                           **
16662C               **  CHECK FOR VALID PARAMETERS         **
16663C               *****************************************
16664C
16665      IFLAG=0
16666      PDF=0.0D0
16667C
16668      IF(X.LE.0.0D0)THEN
16669        WRITE(ICOUT,4)
16670        CALL DPWRST('XXX','WRIT')
16671        WRITE(ICOUT,48)X
16672        CALL DPWRST('XXX','WRIT')
16673        GOTO9000
16674    4 FORMAT('***** ERROR: THE VALUE OF THE FIRST ARGUMENT (X) TO ',
16675     1       'GIGPDF IS NON-POSITIVE.')
16676C
16677      ELSEIF(OMEGA.LE.0.0D0)THEN
16678        WRITE(ICOUT,5)
16679        CALL DPWRST('XXX','WRIT')
16680        WRITE(ICOUT,48)OMEGA
16681        CALL DPWRST('XXX','WRIT')
16682        GOTO9000
16683    5   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
16684     1         '(OMEGA) TO GIGPDF IS NEGATIVE.')
16685C
16686      ENDIF
16687C
16688   48 FORMAT('      THE VALUE OF THE ARGUMENT IS: ',G15.7)
16689C
16690C               *****************************************
16691C               **  STEP 2--                           **
16692C               **  COMPUTE THE DENSITY FUNCTION.  FOR **
16693C               **  BETTER NUMERICAL STABILITY,        **
16694C               **  COMPUTE LOGARIGHMS.                **
16695C               *****************************************
16696C
16697C
16698C
16699      IARG1=1
16700      ISCALE=1
16701      CALL DBESK(OMEGA,DABS(LAMBDA),ISCALE,IARG1,DTEMP1,NZERO)
16702      C=1.0D0/(2*DTEMP1(IARG1))
16703      P1=C*X**(LAMBDA-1.0D0)
16704      P2=-0.5D0*OMEGA*((1.0D0/X) + X)
16705      PDF=P1*EXP(P2)
16706C
16707 9000 CONTINUE
16708      RETURN
16709      END
16710      SUBROUTINE GI2PPF(P,LAMBDA,OMEGA,PPF)
16711C
16712C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
16713C              FUNCTION VALUE FOR THE GENERALIZED INVERSE GAUSSIAN
16714C              DISTRIBUTION PARAMETERIZED TO HAVE 2 SHAPE PARAMETERS
16715C              (AS OPPOSSED TO 3 SHAPE PARAMETERS IN THE ORIGINAL
16716C              PARAMETERIZATION).
16717C
16718C              f(X;LAMBDA,OMEGA) = X**(LAMBDA-1)*EXP[-0.5*OMEGA((1/X) + X)]/
16719C                                    {2*K(OMEGA,LAMBDA)}
16720C                                    X > 0; OMEGA > 0;
16721C
16722C              WHERE K(X,LAMBDA) IS THE MODIFIED BESSEL FUNCTION
16723C              OF THE THIRD KIND.
16724C
16725C              THE PERCENT POINT FUNCTION IS COMPUTED BY
16726C              INVERTING THE CDF FUNCTION WITH A BISECTION
16727C              METHOD (THE CDF IS COMPUTED BY
16728C              NUMERICALLY INTEGRATING THE CDF FUNCTION).
16729C
16730C     INPUT  ARGUMENTS--P       = THE DOUBLE PRECISION VALUE AT
16731C                                 WHICH THE PERCENT POINT
16732C                                 FUNCTION IS TO BE EVALUATED.
16733C                                 0 < P < 1
16734C                     --LAMBDA  = THE FIRST SHAPE PARAMETER
16735C                     --OMEGA   = THE SECOND SHAPE PARAMETER
16736C     OUTPUT ARGUMENTS--PPF     = THE DOUBLE PRECISION PERCENT POINT
16737C                                 FUNCTION VALUE.
16738C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION
16739C             VALUE PPF FOR THE GENERALIZED INVERSE GAUSSIAN
16740C             DISTRIBUTION WITH SHAPE PARAMETERS LAMBDA AND OMEGA.
16741C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
16742C     RESTRICTIONS--NONE.
16743C     OTHER DATAPAC   SUBROUTINES NEEDED--DFZERO.
16744C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE
16745C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
16746C     LANGUAGE--ANSI FORTRAN (1977)
16747C     REFERENCES--PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
16748C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
16749C               --GENTLE, HARDLE, MORI (EDS.) (2004),
16750C                 "HANDBOOK OF COMPUTATIONAL STATISTICS: CONCEPTS AND
16751C                 METHODS", SPRINGER-VERLAG, PP. 933.
16752C     WRITTEN BY--JAMES J. FILLIBEN
16753C                 STATISTICAL ENGINEERING DIVISION
16754C                 INFORMATION TECHNOLOGY LABORATORY
16755C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
16756C                 GAITHERSBURG, MD 20899-8980
16757C                 PHONE--301-975-2855
16758C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
16759C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
16760C     LANGUAGE--ANSI FORTRAN (1977)
16761C     VERSION NUMBER--2008.7
16762C     ORIGINAL VERSION--JULY      2008.
16763C
16764C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
16765C
16766C---------------------------------------------------------------------
16767C
16768      DOUBLE PRECISION P
16769      DOUBLE PRECISION PTEMP
16770      DOUBLE PRECISION LAMBDA
16771      DOUBLE PRECISION OMEGA
16772      DOUBLE PRECISION PPF
16773      DOUBLE PRECISION DMEAN
16774      DOUBLE PRECISION DSD
16775      DOUBLE PRECISION DR
16776      DOUBLE PRECISION DTERM1
16777      DOUBLE PRECISION DTERM2
16778      DOUBLE PRECISION DTERM3
16779C
16780      DOUBLE PRECISION DTEMP1(10)
16781C
16782      DOUBLE PRECISION XUP
16783      DOUBLE PRECISION XUP2
16784      DOUBLE PRECISION XLOW
16785      DOUBLE PRECISION RE
16786      DOUBLE PRECISION AE
16787C
16788      DOUBLE PRECISION GI2FU2
16789      EXTERNAL GI2FU2
16790C
16791      DOUBLE PRECISION DP
16792      COMMON/GI2CO2/DP
16793C
16794      DOUBLE PRECISION DLMBDA
16795      DOUBLE PRECISION DOMEGA
16796      COMMON/GI2COM/DLMBDA,DOMEGA
16797C
16798C-----COMMON----------------------------------------------------------
16799C
16800      INCLUDE 'DPCOP2.INC'
16801C
16802C-----START POINT-----------------------------------------------------
16803C
16804C               *****************************************
16805C               **  STEP 1--                           **
16806C               **  CHECK FOR VALID PARAMETERS         **
16807C               *****************************************
16808C
16809      PPF=0.0D0
16810C
16811      IF(P.LE.0.0D0 .OR. P.GE.1.0D0)THEN
16812        WRITE(ICOUT,4)
16813        CALL DPWRST('XXX','WRIT')
16814        WRITE(ICOUT,48)P
16815        CALL DPWRST('XXX','WRIT')
16816        GOTO9000
16817    4   FORMAT('***** ERROR: VALUE OF THE FIRST ARGUMENT (P) TO ',
16818     1       'GIGPPF IS OUTSIDE THE (0,1) INTERVAL.')
16819      ELSEIF(OMEGA.LE.0.0D0)THEN
16820        WRITE(ICOUT,5)
16821        CALL DPWRST('XXX','WRIT')
16822        WRITE(ICOUT,48)OMEGA
16823        CALL DPWRST('XXX','WRIT')
16824        GOTO9000
16825    5   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
16826     1         '(OMEGA) TO GIGPDF IS NON-POSITIVE.')
16827C
16828      ENDIF
16829C
16830   48 FORMAT('      THE VALUE OF THE ARGUMENT IS: ',G15.7)
16831C
16832C               *****************************************
16833C               **  STEP 2--                           **
16834C               **  COMPUTE THE PERCENT POINT FUNCTION.**
16835C               *****************************************
16836C
16837C  STEP 1: FIND BRACKETING INTERVAL.  LOWER BOUND IS ZERO.  START
16838C          WITH UPPER BOUND = MEAN:
16839C
16840C          MEAN=K(LAMBDA+1)(OMEGA)/K(LAMBDA)(OMEGA)
16841C
16842C          INCREMENT IN INTERVALS OF 1 STANDARD DEVIATION:
16843C
16844C          VARIANCE=
16845C          {K(LAMBDA+2)(OMEGA)*K(LAMBDA)(OMEGA) - K(LAMBDA+1)(OMEGA)**2}/
16846C          K(LAMBDA)(OMEGA)**2
16847C
16848      XLOW=0.000000001D0
16849      CALL GI2CDF(XLOW,LAMBDA,OMEGA,PTEMP)
16850      IF(P.LE.PTEMP)THEN
16851        PPF=XLOW
16852        GOTO9000
16853      ENDIF
16854C
16855      IARG1=1
16856      ISCALE=1
16857      DR=DABS(LAMBDA)
16858      CALL DBESK(OMEGA,DR,ISCALE,IARG1,DTEMP1,NZERO)
16859      DTERM1=DTEMP1(1)
16860      DR=DABS(LAMBDA+1.0D0)
16861      CALL DBESK(OMEGA,DR,ISCALE,IARG1,DTEMP1,NZERO)
16862      DTERM2=DTEMP1(1)
16863      DR=DABS(LAMBDA+2.0D0)
16864      CALL DBESK(OMEGA,DR,ISCALE,IARG1,DTEMP1,NZERO)
16865      DTERM3=DTEMP1(1)
16866      DMEAN=DTERM2/DTERM1
16867      DSD=DSQRT((DTERM1*DTERM3 - DTERM2**2)/DTERM1**2)
16868C
16869      MAXIT=1000
16870      NIT=0
16871C
16872      XUP2=DMEAN
16873  200 CONTINUE
16874        IF(NIT.GT.MAXIT)THEN
16875          PPF=0.0D0
16876          WRITE(ICOUT,999)
16877          CALL DPWRST('XXX','BUG ')
16878          WRITE(ICOUT,131)
16879          CALL DPWRST('XXX','BUG ')
16880          WRITE(ICOUT,133)
16881          CALL DPWRST('XXX','BUG ')
16882          GOTO9000
16883        ENDIF
16884        CALL GI2CDF(XUP2,LAMBDA,OMEGA,PTEMP)
16885        IF(PTEMP.GT.P)THEN
16886          XUP=XUP2
16887        ELSE
16888          XLOW=XUP2
16889          XUP2=XUP2 + DSD
16890          NIT=NIT+1
16891          GOTO200
16892        ENDIF
16893C
16894      AE=1.D-7
16895      RE=1.D-7
16896      DLMBDA=LAMBDA
16897      DOMEGA=OMEGA
16898      DP=P
16899      CALL DFZERO(GI2FU2,XLOW,XUP,XUP,RE,AE,IFLAG)
16900C
16901      PPF=XLOW
16902C
16903      IF(IFLAG.EQ.2)THEN
16904C
16905C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
16906CCCCC   WRITE(ICOUT,999)
16907  999   FORMAT(1X)
16908CCCCC   CALL DPWRST('XXX','BUG ')
16909CCCCC   WRITE(ICOUT,111)
16910CC111   FORMAT('***** WARNING FROM GIGPPF--')
16911CCCCC   CALL DPWRST('XXX','BUG ')
16912CCCCC   WRITE(ICOUT,113)
16913CC113   FORMAT('      PPF VALUE MAY NOT BE COMPUTED TO DESIRED ',
16914CCCCC1         'TOLERANCE.')
16915CCCCC   CALL DPWRST('XXX','BUG ')
16916      ELSEIF(IFLAG.EQ.3)THEN
16917        WRITE(ICOUT,999)
16918        CALL DPWRST('XXX','BUG ')
16919        WRITE(ICOUT,121)
16920  121   FORMAT('***** WARNING FROM GI2PPF--')
16921        CALL DPWRST('XXX','BUG ')
16922        WRITE(ICOUT,123)
16923  123   FORMAT('      PPF VALUE MAY BE NEAR A SINGULAR POINT.')
16924        CALL DPWRST('XXX','BUG ')
16925      ELSEIF(IFLAG.EQ.4)THEN
16926        WRITE(ICOUT,999)
16927        CALL DPWRST('XXX','BUG ')
16928        WRITE(ICOUT,131)
16929  131   FORMAT('***** ERROR FROM GI2PPF--')
16930        CALL DPWRST('XXX','BUG ')
16931        WRITE(ICOUT,133)
16932  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
16933        CALL DPWRST('XXX','BUG ')
16934      ELSEIF(IFLAG.EQ.5)THEN
16935        WRITE(ICOUT,999)
16936        CALL DPWRST('XXX','BUG ')
16937        WRITE(ICOUT,141)
16938  141   FORMAT('***** WARNING FROM GI2PPF--')
16939        CALL DPWRST('XXX','BUG ')
16940        WRITE(ICOUT,143)
16941  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
16942        CALL DPWRST('XXX','BUG ')
16943      ENDIF
16944C
16945C
16946 9000 CONTINUE
16947      RETURN
16948      END
16949      SUBROUTINE GI2RAN(N,LAMBDA,OMEGA,ISEED,X)
16950C
16951C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
16952C              FROM THE THE GENERALIZED INVERSE GAUSSIAN DISTIBUTION
16953C              PARAMETERIZED WITH TWO SHAPE PARAMETERS.
16954C
16955C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
16956C                                OF RANDOM NUMBERS TO BE GENERATED.
16957C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
16958C                                (OF DIMENSION AT LEAST N)
16959C                                INTO WHICH THE GENERATED
16960C                                RANDOM SAMPLE WILL BE PLACED.
16961C                     --LAMBDA = A SINGLE PRECISON SCALAR THAT DEFINES
16962C                                THE FIRST SHAPE PARAMETER.
16963C                     --OMEGA  = A SINGLE PRECISON SCALAR THAT DEFINES
16964C                                THE SECOND SHAPE PARAMETER.
16965C     OUTPUT--A RANDOM SAMPLE OF SIZE N FROM THE COMPERTZ-MAKEHAM
16966C             DISTRIBUTION WITH LOCATION = 0 AND SCALE = 1.
16967C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
16968C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
16969C                   OF N FOR THIS SUBROUTINE.
16970C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GI2PPF.
16971C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
16972C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
16973C     LANGUAGE--ANSI FORTRAN (1977)
16974C     METHOD--TRANSFORM NORMAL RANDOM NUMBERS
16975C     REFERENCES--PAOLELLA (2007), "INTERMEDIATE PROBABILITY: A
16976C                 COMPUTATIONAL APPROACH", WILEY, CHAPER 9.
16977C               --GENTLE, HARDLE, MORI (EDS.) (2004),
16978C                 "HANDBOOK OF COMPUTATIONAL STATISTICS: CONCEPTS AND
16979C                 METHODS", SPRINGER-VERLAG, PP. 933.
16980C     WRITTEN BY--JAMES J. FILLIBEN
16981C                 STATISTICAL ENGINEERING DIVISION
16982C                 INFORMATION TECHNOLOGY DIVISION
16983C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
16984C                 GAITHERSBURG, MD 20899-8980
16985C                 PHONE--301-975-2855
16986C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
16987C           OF THE NATIONAL BUREAU OF STANDARDS.
16988C     LANGUAGE--ANSI FORTRAN (1977)
16989C     VERSION NUMBER--2008.7
16990C     ORIGINAL VERSION--JULY      2008.
16991C
16992C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
16993C
16994C---------------------------------------------------------------------
16995C
16996      DIMENSION X(*)
16997      REAL OMEGA
16998      REAL LAMBDA
16999C
17000      DOUBLE PRECISION DOMEGA
17001      DOUBLE PRECISION DLMBDA
17002      DOUBLE PRECISION DPPF
17003      DOUBLE PRECISION DXTEMP
17004C
17005C-----COMMON----------------------------------------------------------
17006C
17007      INCLUDE 'DPCOP2.INC'
17008C
17009C-----START POINT-----------------------------------------------------
17010C
17011C     CHECK THE INPUT ARGUMENTS FOR ERRORS
17012C
17013      IFLAG=0
17014C
17015      IF(N.LT.1)THEN
17016        WRITE(ICOUT, 3)
17017        CALL DPWRST('XXX','BUG ')
17018        WRITE(ICOUT, 4)
17019        CALL DPWRST('XXX','BUG ')
17020        WRITE(ICOUT,47)N
17021        CALL DPWRST('XXX','BUG ')
17022        GOTO9000
17023    3 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
17024     1'INVERSE GAUSIAN')
17025    4 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
17026C
17027      ELSEIF(OMEGA.LE.0.0D0)THEN
17028        WRITE(ICOUT,6)
17029        CALL DPWRST('XXX','WRIT')
17030        WRITE(ICOUT,48)OMEGA
17031        CALL DPWRST('XXX','WRIT')
17032        GOTO9000
17033    6   FORMAT('***** ERROR: THE VALUE OF THE SECOND SHAPE PARAMETER ',
17034     1         '(OMEGA) IS NON-POSITIVE.')
17035C
17036      ENDIF
17037C
17038   47 FORMAT('      THE VALUE OF THE ARGUMENT IS: ',I8)
17039   48 FORMAT('      THE VALUE OF THE ARGUMENT IS: ',G15.7)
17040C
17041C     GENERATE N UNIFORM NUMBERS;
17042C
17043      CALL UNIRAN(N,ISEED,X)
17044C
17045C     GENERATE N GENERALIZED INVERSE GAUSSIAN RANDON NUMBERS USING
17046C     THE PERCENT POINT FUNCTION TRANSFORMATION.
17047C
17048C     NOTE: CHECK INTO DAGPUNAR'S GENERATOR.  UNTIL I TRACK THAT
17049C           DOWN, USE THE PERCENT POINT TRANSFORMATION.
17050C
17051      DLMBDA=DBLE(LAMBDA)
17052      DOMEGA=DBLE(OMEGA)
17053      DO100I=1,N
17054        DXTEMP=DBLE(X(I))
17055        CALL GI2PPF(DXTEMP,DLMBDA,DOMEGA,DPPF)
17056        X(I)=REAL(DPPF)
17057  100 CONTINUE
17058C
17059 9000 CONTINUE
17060      RETURN
17061      END
17062      SUBROUTINE GJACC(X,Y,N,ICASPL,IWRITE,STATVA,DIST,
17063     1                 ISUBRO,IBUGA3,IERROR)
17064C
17065C     PURPOSE--THIS SUBROUTINE COMPUTES THE GENERALIZED JACCARD
17066C              COEFFICIENT BETWEEN THE TWO SETS OF DATA IN THE INPUT
17067C              VECTORS X AND Y.  THE SAMPLE GENERALIZED JACCARD
17068C              COEFFICIENT WILL BE A SINGLE PRECISION VALUE CALCULATED
17069C              USING THE FORMULA
17070C
17071C                 J(X,Y) = SUM[i=1 to n][MIN(X(i),Y(i)]/
17072C                          SUM[i=1 to n][MAX(X(i),Y(i)]
17073C
17074C              THE JACCARD DISTANCE IS THEN DEFINED AS 1 - J(X,Y).
17075C
17076C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VECTOR OF UNSORTED
17077C                                OBSERVATIONS WHICH CONSTITUTE THE FIRST
17078C                                SET OF DATA.
17079C                     --Y      = THE SINGLE PRECISION VECTOR OF UNSORTED
17080C                                OBSERVATIONS WHICH CONSTITUTE THE SECOND
17081C                                SET OF DATA.
17082C                     --N      = THE INTEGER NUMBER OF OBSERVATIONS IN
17083C                                THE IN THE VECTORS X AND Y.
17084C     OUTPUT ARGUMENTS--STATVA = THE SINGLE PRECISION VALUE OF THE
17085C                                COMPUTED GENERALIZED JACCARD COEFFICIENT
17086C                                BETWEEN THE 2 SETS OF DATA IN THE INPUT
17087C                                VECTORS X AND Y.  THIS SINGLE PRECISION
17088C                                VALUE WILL BE BETWEEN -1.0 AND 1.0.
17089C                     --DIST   = THE SINGLE PRECISION VALUE OF THE
17090C                                COMPUTED GENERALIZED JACCARD DISTANCE
17091C                                BETWEEN THE 2 SETS OF DATA IN THE INPUT
17092C                                VECTORS X AND Y.  THIS SINGLE PRECISION
17093C                                VALUE WILL BE BETWEEN -1.0 AND 1.0.
17094C     OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE SAMPLE JACCARD
17095C             COEFFICIENT BETWEEN THE 2 SETS OF DATA IN THE INPUT VECTORS
17096C             X AND Y.
17097C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
17098C                   OF N FOR THIS SUBROUTINE.
17099C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
17100C     FORTRAN LIBRARY SUBROUTINES NEEDED--MIN, MAX.
17101C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
17102C     LANGUAGE--ANSI FORTRAN (1977)
17103C     REFERENCES--JACCARD (1912), "THE DISTRIBUTION OF FLORA IN THE
17104C                 ALPINE ZONE", NEW PHYTOLOGIST, VOL. 11, PP. 37-50.
17105C     WRITTEN BY--ALAN HECKERT
17106C                 STATISTICAL ENGINEERING DIVISION
17107C                 INFORMATION TECHNOLOGY LABORATORY
17108C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGYS
17109C                 GAITHERSBURG, MD 20899
17110C                 PHONE--301-975-2899
17111C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
17112C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGYS.
17113C     LANGUAGE--ANSI FORTRAN (1977)
17114C     VERSION NUMBER--2017/08
17115C     ORIGINAL VERSION--AUGUST    2017.
17116C
17117C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
17118C
17119      CHARACTER*4 ICASPL
17120      CHARACTER*4 IWRITE
17121      CHARACTER*4 ISUBRO
17122      CHARACTER*4 IBUGA3
17123      CHARACTER*4 IERROR
17124C
17125      CHARACTER*4 ISUBN1
17126      CHARACTER*4 ISUBN2
17127C
17128C---------------------------------------------------------------------
17129C
17130      DOUBLE PRECISION DX1
17131      DOUBLE PRECISION DY1
17132      DOUBLE PRECISION DSUM1
17133      DOUBLE PRECISION DSUM2
17134C
17135      DIMENSION X(*)
17136      DIMENSION Y(*)
17137C
17138C-----COMMON----------------------------------------------------------
17139C
17140      INCLUDE 'DPCOP2.INC'
17141C
17142C-----START POINT-----------------------------------------------------
17143C
17144      ISUBN1='GJAC'
17145      ISUBN2='C   '
17146      IERROR='NO'
17147C
17148      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'JACC')THEN
17149        WRITE(ICOUT,999)
17150  999   FORMAT(1X)
17151        CALL DPWRST('XXX','BUG ')
17152        WRITE(ICOUT,51)
17153   51   FORMAT('***** AT THE BEGINNING OF GJACC--')
17154        CALL DPWRST('XXX','BUG ')
17155        WRITE(ICOUT,52)IBUGA3,ISUBRO,ICASPL,N
17156   52   FORMAT('IBUGA3,ISUBRO,ICASPL,N = ',3(A4,2X),I8)
17157        CALL DPWRST('XXX','BUG ')
17158        DO55I=1,N
17159         WRITE(ICOUT,56)I,X(I),Y(I)
17160   56    FORMAT('I,X(I),Y(I) = ',I8,2G15.7)
17161         CALL DPWRST('XXX','BUG ')
17162   55   CONTINUE
17163      ENDIF
17164C
17165C               ********************************************
17166C               **  STEP 1--                              **
17167C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
17168C               ********************************************
17169C
17170      IF(N.LT.1)THEN
17171        WRITE(ICOUT,999)
17172        CALL DPWRST('XXX','BUG ')
17173        WRITE(ICOUT,111)
17174  111   FORMAT('***** ERROR IN GENERALIZED JACCARD COEFFICIENT--')
17175        CALL DPWRST('XXX','BUG ')
17176        WRITE(ICOUT,112)
17177  112   FORMAT('      THE NUMBER OF OBSERVATIONS FOR THE RESPONSE')
17178        CALL DPWRST('XXX','BUG ')
17179        WRITE(ICOUT,113)
17180  113   FORMAT('      VARIABLE IS LESS THAN 1.')
17181        CALL DPWRST('XXX','BUG ')
17182        WRITE(ICOUT,117)N
17183  117   FORMAT('      THE NUMBER OF OBSERVATIONS = ',I8,'.')
17184        CALL DPWRST('XXX','BUG ')
17185        IERROR='YES'
17186        GOTO9000
17187      ENDIF
17188C
17189C               **************************************************
17190C               **  STEP 2--                                    **
17191C               **  COMPUTE THE GENERALIZED JACCARD COEFFICIENT **
17192C               **************************************************
17193C
17194      DSUM1=0.0D0
17195      DSUM2=0.0D0
17196      DO200I=1,N
17197        DX1=DBLE(X(I))
17198        DY1=DBLE(Y(I))
17199        IF(X(I).LE.Y(I))THEN
17200          DSUM1=DSUM1+DX1
17201          DSUM2=DSUM2+DY1
17202        ELSE
17203          DSUM1=DSUM1+DY1
17204          DSUM2=DSUM2+DX1
17205        ENDIF
17206  200 CONTINUE
17207C
17208      DSTAT=DSUM1/DSUM2
17209      STATVA=REAL(DSTAT)
17210      DSTAT=1.0D0 - DSTAT
17211      DIST=REAL(DSTAT)
17212C
17213C               *******************************
17214C               **  STEP 3--                 **
17215C               **  WRITE OUT A LINE         **
17216C               **  OF SUMMARY INFORMATION.  **
17217C               *******************************
17218C
17219      IF(IFEEDB.EQ.'ON' .AND. IWRITE.EQ.'ON')THEN
17220        WRITE(ICOUT,999)
17221        CALL DPWRST('XXX','BUG ')
17222        IF(ICASPL.EQ.'GJCO')THEN
17223          WRITE(ICOUT,811)N,STATVA
17224  811     FORMAT('THE GENERALIZED JACCARD COEFFICIENT OF THE ',I8,
17225     1           ' OBSERVATIONS = ',G15.7)
17226          CALL DPWRST('XXX','BUG ')
17227        ELSE
17228          WRITE(ICOUT,813)N,DIST
17229  813     FORMAT('THE GENERALIZED JACCARD DISTANCE OF THE ',I8,
17230     1           ' OBSERVATIONS = ',G15.7)
17231          CALL DPWRST('XXX','BUG ')
17232        ENDIF
17233      ENDIF
17234C
17235C               *****************
17236C               **  STEP 90--  **
17237C               **  EXIT.      **
17238C               *****************
17239C
17240 9000 CONTINUE
17241      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'JACC')THEN
17242        WRITE(ICOUT,999)
17243        CALL DPWRST('XXX','BUG ')
17244        WRITE(ICOUT,9011)
17245 9011   FORMAT('***** AT THE END       OF GJACC--')
17246        CALL DPWRST('XXX','BUG ')
17247        WRITE(ICOUT,9012)IERROR,STATVA,DIST,DSUM1,DSUM2
17248 9012   FORMAT('IERROR,STATVA,DIST,DSUM1,DSUM2 = ',A4,2X,4G15.7)
17249        CALL DPWRST('XXX','BUG ')
17250      ENDIF
17251C
17252      RETURN
17253      END
17254      SUBROUTINE GLDCDF(DX,DL3,DL4,DCDF,IGLDDF,IWRITE)
17255C
17256C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
17257C              FUNCTION VALUE FOR THE GENERALIZED LAMBDA DISTRIBUTION
17258C              WITH SHAPE PARAMETER VALUES = ALAMB3 AND ALAMB4.
17259C
17260C              NOTE THAT THERE ARE TWO COMMON PARAMETERIZATIONS
17261C              OF THIS PPF.
17262C
17263C              THE ORIGINAL RAMBERG AND SCHMEISER PARAMETERIZATION:
17264C
17265C                G(P) = P**LAMBDA3 - (1-P)**LAMBDA4
17266C
17267C              THE FREIMER, MUDHOLKAR, KOLLIA, AND LIN (FMKL)
17268C              PARAMETERIZATION:
17269C
17270C                G(P) = (P**LAMBDA3 - 1)/LAMBDA3  -
17271C                       ((1-P)**LAMBDA4 -1)/LAMBDA4
17272C
17273C              THE IDEF VARIABLE IDENTIFIES THE APPROPRIATE
17274C              DEFINITION TO USE.  THE FMKL DEFINITION IS
17275C              BECOMING THE PREFERRED PARAMETERIZATION) SINCE IT
17276C              DEFINES A VALID PROBABILITY DISTRIBUTION FOR ALL
17277C              VALUES OF LAMBDA3 AND LAMBDA4 (THE RAMBERG
17278C              PARAMETERIZATION HAS REGIONS OF LAMBDA3 AND LAMBDA4
17279C              WHERE A VALID PROBABILITY DISTRIBUTION IS NOT
17280C              DEFINED).
17281C
17282C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
17283C                                WHICH THE CUMULATIVE DISTRIBUTION
17284C                                FUNCTION IS TO BE EVALUATED.
17285C                     --DL3    = THE DOUBLE PRECISION VALUE OF LAMBDA3
17286C                                (THE FIRST SHAPE PARAMETER).
17287C                     --DL4    = THE DOUBLE PRECISION VALUE OF LAMBDA4
17288C                                (THE SECOND SHAPE PARAMETER).
17289C     OUTPUT ARGUMENTS--DCDF   = THE DOUBLE PRECISION CUMULATIVE
17290C                                DISTRIBUTION FUNCTION VALUE.
17291C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
17292C             FUNCTION VALUE DCDF FOR THE GENERALIZED TUKEY LAMBDA
17293C             DISTRIBUTION WITH SHAPE PARAMETERS = ALAMB3 AND ALAMB4.
17294C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
17295C     RESTRICTIONS--CALL GLDCHK TO CHECK FOR VALID VALUES OF THE
17296C                   SHAPE PARAMETERS.
17297C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
17298C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
17299C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
17300C     LANGUAGE--ANSI FORTRAN.
17301C     REFERENCES--KARIAN AND DUDEWICZ, 'FITTING STATISTICAL
17302C                 DISTRIBUTIONS: THE GENERALIZED LAMBDA DISTRIBUTION
17303C                 AND GENERALIZED BOOTSTRAP METHODS', CRC, 2000.
17304C               --STEVE SU, "A DISCRETIZED APPROACH TO FLEXIBLY FIT
17305C                 GENRALIZED LAMBDA DISTRIBUTIONS TO DATA",
17306C                 JOURNAL OF MODERN APPLIED STATISTICAL METHODS,
17307C                 NOVEMBER, 2005,, VOL. 4, NO. 2, 408-424.
17308C     WRITTEN BY--JAMES J. FILLIBEN
17309C                 STATISTICAL ENGINEERING DIVISION
17310C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
17311C                 GAITHERSBURG, MD 20899-8980
17312C                 PHONE:  301-975-2855
17313C     ORIGINAL VERSION--AUGUST    2001.
17314C     UPDATED         --MARCH     2006. FLMK PARAMETERIZATION
17315C                                       MAKE DOUBLE PRECISION
17316C                                       BOUNDS ON CDF FOR CASE
17317C                                       WHERE EITHER LAMBDA3 OR
17318C                                       LAMBDA4 <= 0
17319C
17320C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
17321C
17322C---------------------------------------------------------------------
17323C
17324      DOUBLE PRECISION DX
17325      DOUBLE PRECISION DL3
17326      DOUBLE PRECISION DL4
17327      DOUBLE PRECISION DCDF
17328      DOUBLE PRECISION DZERO
17329      DOUBLE PRECISION DONE
17330      DOUBLE PRECISION DLOWER
17331      DOUBLE PRECISION DUPPER
17332CCCCC DOUBLE PRECISION DEPS
17333      DOUBLE PRECISION PDEL
17334      DOUBLE PRECISION PMIN
17335      DOUBLE PRECISION PMAX
17336      DOUBLE PRECISION PMAXIN
17337      DOUBLE PRECISION PMID
17338      DOUBLE PRECISION PMIDZ
17339      DOUBLE PRECISION XCALC
17340      DOUBLE PRECISION XTEMP1
17341      DOUBLE PRECISION XTEMP2
17342C
17343      CHARACTER*4 IWRITE
17344      CHARACTER*4 IGLDDF
17345C
17346      INCLUDE 'DPCOP2.INC'
17347C
17348      DATA DZERO /0.0D0/
17349      DATA DONE  /1.0D0/
17350CCCCC DATA DEPS  /1.0D-8/
17351C
17352C---------------------------------------------------------------------
17353C
17354C     CHECK THE INPUT ARGUMENTS FOR ERRORS
17355C
17356      DZERO=0.0D0
17357      DONE=1.0D0
17358C
17359C     RAMBERG PARAMETERIZATION NOT CURRENTLY SUPPORTED.  MAY
17360C     ADD LATER.
17361C
17362CCCCC IF(IGLDDF.EQ.'RAMB')THEN
17363CCCCC   CALL GLDCHK(REAL(DL3),REAL(DL4),ALOWER,AUPPER,IFLAG,
17364CCCCC1              ISIGN,IWRITE)
17365CCCCC   DLOWER=DBLE(ALOWER)
17366CCCCC   DUPPER=DBLE(AUPPER)
17367CCCCC   IF(IFLAG.EQ.1)GOTO9000
17368C
17369CCCCC   IF(DX.LE.DLOWER)THEN
17370CCCCC     DCDF=0.0D0
17371CCCCC     GOTO9000
17372CCCCC   ENDIF
17373CCCCC   IF(DX.GE.DUPPER)THEN
17374CCCCC     DCDF=1.0D0
17375CCCCC     GOTO9000
17376CCCCC   ENDIF
17377CCCCC ELSE
17378C
17379C     FOR THE FMKL PARAMETERIZATION:
17380C
17381C     1) IF LAMBDA3 <= 0, THE LOWER TAIL IS UNBOUNDED.
17382C        IF LAMDA3   > 0, THE LOWER TAIL IS BOUNDED AT -1/LAMBDA3
17383C
17384C     2) IF LAMBDA4 <= 0, THE UPPER TAIL IS UNBOUNDED.
17385C        IF LAMDA4   > 0, THE UPPER TAIL IS BOUNDED AT 1/LAMBDA4
17386C
17387        IF(DL3.LE.0.0D0 .AND. DL4.LE.0.0D0)THEN
17388          DLOWER=DBLE(CPUMIN)
17389          DUPPER=DBLE(CPUMAX)
17390          PMIN=0.00001D0
17391          PMAX=0.99999D0
17392        ELSEIF(DL3.LE.0.0D0)THEN
17393          DLOWER=DBLE(CPUMIN)
17394          CALL GLDPPF(DONE,DL3,DL4,DUPPER,IGLDDF,IWRITE)
17395          PMIN=0.00001D0
17396          PMAX=1.0D0
17397        ELSEIF(DL4.LE.0.0D0)THEN
17398          CALL GLDPPF(DZERO,DL3,DL4,DLOWER,IGLDDF,IWRITE)
17399          DUPPER=DBLE(CPUMAX)
17400          PMIN=0.0D0
17401          PMAX=0.99999D0
17402        ELSE
17403          CALL GLDPPF(DZERO,DL3,DL4,DLOWER,IGLDDF,IWRITE)
17404          CALL GLDPPF(DONE,DL3,DL4,DUPPER,IGLDDF,IWRITE)
17405          PMIN=0.0D0
17406          PMAX=1.0D0
17407        ENDIF
17408CCCCC ENDIF
17409C
17410      DCDF=0.0D0
17411C
17412C  STEP 1: DETERMINE IF X IS OUTSIDE BOUNDS
17413C
17414      IF(DX.LE.DLOWER)THEN
17415        DCDF=0.0D0
17416        GOTO9000
17417      ELSEIF(DX.GE.DUPPER)THEN
17418        DCDF=1.0D0
17419        GOTO9000
17420      ENDIF
17421C
17422C  STEP 2: DETERMINE AN APPROPRIATE BRACKETING INTERVAL.
17423C          NOTE THAT THIS IS ONLY AN ISSUE IF ONE OR BOTH OF
17424C          THE SHAPE PARAMETERS IS ZERO.
17425C
17426      ITER=0
17427      PMAXIN=0.000009
17428  100 CONTINUE
17429        CALL GLDPPF(PMIN,DL3,DL4,XTEMP1,IGLDDF,IWRITE)
17430        CALL GLDPPF(PMAX,DL3,DL4,XTEMP2,IGLDDF,IWRITE)
17431        IF((DX.GE.XTEMP1) .AND. DX.LE.XTEMP2)THEN
17432          GOTO200
17433          PMAX=XUP2
17434        ELSEIF(DX.LT.XTEMP1)THEN
17435          PMIN=PMIN/10.0D0
17436        ELSEIF(DX.GT.XTEMP2)THEN
17437          PMAXIN=PMAXIN/10.0D0
17438          PMAX=PMAX + PMAXIN
17439        ENDIF
17440C
17441        ITER=ITER+1
17442        IF(ITER.GT.20)THEN
17443          WRITE(ICOUT,201)
17444  201     FORMAT('***** ERROR FROM GLDCDF--UNABLE TO FIND A ',
17445     1           'BRACKETING INTERVAL')
17446          CALL DPWRST('XXX','BUG ')
17447          GOTO9000
17448        ENDIF
17449C
17450      GOTO100
17451C
17452C  ITERATION LOOP (BISECTION SEARCH OF PPF FUNCTION)
17453C
17454  200 CONTINUE
17455      PLOWER=PMIN
17456      PUPPER=PMAX
17457      PMID=0.5D0
17458      ICOUNT=0
17459C
17460      IWRITE='OFF'
17461  210 CONTINUE
17462      PMIDZ=PMID
17463      CALL GLDPPF(PMIDZ,DL3,DL4,XCALC,IGLDDF,IWRITE)
17464      IF(XCALC.EQ.DX)THEN
17465        DCDF=PMID
17466        GOTO9000
17467      ELSEIF(XCALC.GT.DX)THEN
17468        PMAX=PMID
17469        PMID=(PMID+PMIN)/2.0D0
17470        PDEL=DABS(PMID-PMIN)
17471        ICOUNT=ICOUNT+1
17472        IF(PDEL.LT.0.00000001D0.OR.ICOUNT.GT.1000)THEN
17473          DCDF=PMID
17474          GOTO9000
17475        ENDIF
17476        GOTO210
17477      ELSE
17478        PMIN=PMID
17479        PMID=(PMID+PMAX)/2.0D0
17480        PDEL=DABS(PMID-PMIN)
17481        ICOUNT=ICOUNT+1
17482        IF(PDEL.LT.0.00000001D0.OR.ICOUNT.GT.1000)THEN
17483          DCDF=PMID
17484          GOTO9000
17485        ENDIF
17486        GOTO210
17487      ENDIF
17488C
17489 9000 CONTINUE
17490      RETURN
17491      END
17492      SUBROUTINE GLDCHK(ALAMB3,ALAMB4,ALOWER,AUPPER,IFLAG,ISIGN,
17493     1IWRITE)
17494C
17495C     PURPOSE--THIS SUBROUTINE DETERMINES IF THE SPECIFIED PARAMETERS
17496C              FOR THE GENERALIZD LAMBDA DISTRIBUTION RESULT IN
17497C              A VALID PROBABILITY DISTRIBUTION.  IF SO, IT ALSO
17498C              RETURNS THE LOWER AND UPPER RANGES OF THE PDF FOR
17499C              THE SPECIFIED VALUES.  IN PARTICULAR:
17500C              1) ALAMB3 >= 0, ALAMB4 >= 0:
17501C                 VALID,   (-1,1)
17502C              2) ALAMB3 <= 0, ALAMB4 <= 0:
17503C                 VALID,   (-1,1)
17504C              3) ALAMB3 <= -1, ALAMB4 >= 1:
17505C                 VALID,   (-1,1)
17506C              4) ALAMB3 >= 1, ALAMB4 <= -1:
17507C                 VALID
17508C              5) 0 < ALAMB3 < 1, ALAMB4 < 0:
17509C                 NOT VALID
17510C              6) ALAMB3 < 0, 0 < ALAMB4 < 1:
17511C                 NOT VALID
17512C              7) -1 < ALAMB3 < 0, ALAMB4 > 0:
17513C                 VALID IF
17514C                 [(1-ALAMB3)**(1-ALAMB3)]/
17515C                 [(ALAMB4-ALAMB3)**(ALAMB4-ALAMB3)]*
17516C                 (ALAMB4-1)**(ALAMB4-1) < -ALAMB3/ALAMB4
17517C              8)  ALAMB3 > 1, -1 < ALAMB4 < 0:
17518C                 VALID IF
17519C                 [(1-ALAMB4)**(1-ALAMB4)]/
17520C                 [(ALAMB3-ALAMB4)**(ALAMB3-ALAMB4)]*
17521C                 (ALAMB3-1)**(ALAMB3-1) < -ALAMB4/ALAMB3
17522C
17523C            --THE SUPPORT REGIONS ARE
17524C              1) ALAMB3 > 0, ALAMB4 > 0:     [-1,1]
17525C              2) ALAMB3 > 0, ALAMB4 = 0:     [0,1]
17526C              3) ALAMB3 = 0, ALAMB4 > 0:     [-1,0]
17527C              4) ALAMB3 < 0, ALAMB4 < 0:     (CPUMIN,CPUMAX)
17528C              5) ALAMB3 < 0, ALAMB4 = 0:     (CPUMIN,1]
17529C              6) ALAMB3 = 0, ALAMB4 < 0:     [-1,CPUMAX)
17530C
17531C           --NOTE: SIGN OF SHAPE PARAMETER MUST BE THE SAME AS
17532C                   SIGN RETURNED BY GLDPPF FUNCTION.  RETURN
17533C                   ISIGN AS +1 IF SHAPE MUST BE POSITIVE AND
17534C                   -1 IF SHAPE PARAMETER MUST BE NEGATIVE.
17535C
17536C           --THE ABOVE REGIONS FOR VALID PDFS AND SUPPORT REGIONS
17537C             ARE FROM KARIAN AND DUDEWIZC
17538C             (SEE REFERENCE BELOW)
17539C     INPUT  ARGUMENTS--ALAMB3 = THE SINGLE PRECISION VALUE OF LAMBDA3
17540C                                (THE FIRST SHAPE PARAMETER).
17541C                     --ALAMB4 = THE SINGLE PRECISION VALUE OF LAMBDA3
17542C                                (THE SECOND SHAPE PARAMETER).
17543C     OUTPUT ARGUMENTS--ALOWER = THE SINGLE PRECISION VALUE THAT IS
17544C                                THE MINIMUM OF THE ACCEPTABLE RANGE.
17545C                     --AUPPER = THE SINGLE PRECISION VALUE THAT IS
17546C                                THE MAXIMUM OF THE ACCEPTABLE RANGE.
17547C                     --IFLAG  = THE INTEGER FLAG THAT IS SET TO 0
17548C                                FOR A VALID DISTRIBUTION AND TO 1
17549C                                FOR AN INVALID DISTRIBUTION.
17550C     OUTPUT--THE SINGLE PRECISION PERCENT POINT
17551C             FUNCTION VALUE PPF FOR THE TUKEY LAMBDA DISTRIBUTION
17552C             WITH TAIL LENGTH PARAMETERS = ALAMB3 AND ALAMB4.
17553C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
17554C     RESTRICTIONS--TO BE ADDED.
17555C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
17556C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
17557C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISIONS.
17558C     LANGUAGE--ANSI FORTRAN (1977)
17559C     REFERENCES--KARIAN AND DUDEWICZ, 'FITTING STATISTICAL
17560C                 DISTRIBUTIONS: THE GENERALIZED LAMBDA DISTRIBUTION
17561C                 AND GENERALIZED BOOTSTRAP METHODS', CRC, 2000.
17562C     WRITTEN BY--JAMES J. FILLIBEN
17563C                 STATISTICAL ENGINEERING DIVISION
17564C                 INFORMATION TECHNOLOGY LABORATORY
17565C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
17566C                 GAITHERSBURG, MD 20899-8980
17567C                 PHONE--301-975-2855
17568C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
17569C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
17570C     LANGUAGE--ANSI FORTRAN (1977)
17571C     VERSION NUMBER--2001.8
17572C     ORIGINAL VERSION--AUGUST    2001.
17573C
17574C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
17575C
17576      DOUBLE PRECISION DTERM1
17577      DOUBLE PRECISION DTERM2
17578      DOUBLE PRECISION DTERM3
17579      DOUBLE PRECISION DTERM4
17580      DOUBLE PRECISION DTERM5
17581      DOUBLE PRECISION DLAM3
17582      DOUBLE PRECISION DLAM4
17583      DOUBLE PRECISION DP
17584C
17585      CHARACTER*4 IWRITE
17586C
17587C-----COMMON----------------------------------------------------------
17588C
17589      INCLUDE 'DPCOP2.INC'
17590C
17591C-----START POINT-----------------------------------------------------
17592C
17593C     CHECK FOR VALID PDF FIRST.  ASSUME VALID, THEN CHECK FOR
17594C     INVALID REGIONS AND THEN FOR AMBIGUOUS REGION.  NO NEED
17595C     TO EXPLICITLY CHECK THE FOUR VALID REGIONS.
17596C
17597      IFLAG=0
17598      IF(ALAMB3.GT.0.0 .AND. ALAMB4.GT.0.0)THEN
17599        ISIGN=+1
17600      ELSEIF(ALAMB3.LT.0.0 .AND. ALAMB4.LT.0.0)THEN
17601        ISIGN=-1
17602      ELSE
17603        DLAM3=ALAMB3
17604        DLAM4=ALAMB4
17605        DP=0.5D0
17606        DTERM1=DLAM3*DP**(DLAM3-1.0D0) +
17607     1         DLAM4*(1.0D0-DP)**(DLAM4-1.0D0)
17608        ISIGN=+1
17609        IF(DTERM1.LT.0.0D0)ISIGN=-1
17610      ENDIF
17611      ALOWER=CPUMIN
17612      AUPPER=CPUMAX
17613C
17614      IF(ALAMB3.LT.0.0 .AND. (0.0.LT.ALAMB4 .AND. ALAMB4.LT.1.0))THEN
17615        IFLAG=1
17616        GOTO9000
17617      ENDIF
17618      IF(ALAMB4.LT.0.0 .AND. (0.0.LT.ALAMB3 .AND. ALAMB3.LT.1.0))THEN
17619        IFLAG=1
17620        GOTO9000
17621      ENDIF
17622C
17623      IF(ALAMB4.GT.1.0 .AND. (-1.0.LT.ALAMB3 .AND. ALAMB3.LT.0.0))THEN
17624        DLAM3=DBLE(ALAMB3)
17625        DLAM4=DBLE(ALAMB4)
17626        DTERM1=(1.0D0-DLAM3)**(1.0D0-DLAM3)
17627        DTERM2=(DLAM4-DLAM3)**(DLAM4-DLAM3)
17628        DTERM3=(DLAM4-1.0D0)**(DLAM4-1.0D0)
17629        DTERM4=(DTERM1/DTERM2)*DTERM3
17630        DTERM5=-DLAM3/DLAM4
17631        IF(DTERM4.GE.DTERM5)THEN
17632          IFLAG=1
17633          GOTO9000
17634        ENDIF
17635      ENDIF
17636      IF(ALAMB3.GT.1.0 .AND. (-1.0.LT.ALAMB4 .AND. ALAMB4.LT.0.0))THEN
17637        DLAM3=DBLE(ALAMB3)
17638        DLAM4=DBLE(ALAMB4)
17639        DTERM1=(1.0D0-DLAM4)**(1.0D0-DLAM4)
17640        DTERM2=(DLAM3-DLAM4)**(DLAM3-DLAM4)
17641        DTERM3=(DLAM3-1.0D0)**(DLAM3-1.0D0)
17642        DTERM4=(DTERM1/DTERM2)*DTERM3
17643        DTERM5=-DLAM4/DLAM3
17644        IF(DTERM4.GE.DTERM5)THEN
17645          IFLAG=1
17646          GOTO9000
17647        ENDIF
17648      ENDIF
17649C
17650C     DETERMINE THE VALID SUPPORT REGION
17651C
17652      ALOWER=-1.0
17653      AUPPER=1.0
17654      IF(ALAMB3.GT.0.0 .AND. ALAMB4.EQ.0.0)THEN
17655        ALOWER=0.0
17656        AUPPER=1.0
17657      ELSEIF(ALAMB3.EQ.0.0 .AND. ALAMB4.GT.0.0)THEN
17658        ALOWER=-1.0
17659        AUPPER=0.0
17660      ELSEIF(ALAMB3.LT.0.0 .AND. ALAMB4.LT.0.0)THEN
17661        ALOWER=CPUMIN
17662        AUPPER=CPUMAX
17663      ELSEIF(ALAMB3.LT.0.0 .AND. ALAMB4.EQ.0.0)THEN
17664        ALOWER=CPUMIN
17665        AUPPER=1.0
17666      ELSEIF(ALAMB3.EQ.0.0 .AND. ALAMB4.LT.0.0)THEN
17667        ALOWER=-1.0
17668        AUPPER=CPUMAX
17669      ENDIF
17670C
17671 9000 CONTINUE
17672      IF(IFLAG.EQ.0 .AND. IWRITE.EQ.'ON')THEN
17673        WRITE(ICOUT,9001)
17674        CALL DPWRST('XXX','BUG ')
17675        WRITE(ICOUT,9003)ALAMB3
17676        CALL DPWRST('XXX','BUG ')
17677        WRITE(ICOUT,9005)ALAMB4
17678        CALL DPWRST('XXX','BUG ')
17679      ELSEIF(IFLAG.EQ.1 .AND. IWRITE.EQ.'ON')THEN
17680        WRITE(ICOUT,9011)
17681        CALL DPWRST('XXX','BUG ')
17682        WRITE(ICOUT,9003)ALAMB3
17683        CALL DPWRST('XXX','BUG ')
17684        WRITE(ICOUT,9005)ALAMB4
17685        CALL DPWRST('XXX','BUG ')
17686      ENDIF
17687 9001 FORMAT('***** GIVEN SHAPE PARAMETERS RESULT IN A VALID ',
17688     1       'GENERALIZED LAMBDA DISTRIBUTION.')
17689 9003 FORMAT('      FIRST SHAPE PARAMETER (LAMBDA3)  = ',G15.7)
17690 9005 FORMAT('      SECOND SHAPE PARAMETER (LAMBDA4) = ',G15.7)
17691 9011 FORMAT('***** GIVEN SHAPE PARAMETERS DO NOT RESULT IN A VALID ',
17692     1       'GENERALIZED LAMBDA DISTRIBUTION.')
17693      RETURN
17694      END
17695      SUBROUTINE GLDPDF(DX,DL3,DL4,DPDF,IGLDDF,IWRITE)
17696C
17697C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
17698C              FUNCTION VALUE FOR THE GENERALIZED LAMBDA DISTRIBUTION
17699C              WITH SHAPE PARAMETER VALUES = DL3 (LAMBDA3) AND
17700C              DL4 (LAMBDA4).
17701C
17702C              NOTE THAT THERE ARE TWO COMMON PARAMETERIZATIONS
17703C              OF THIS PPF.
17704C
17705C              THE ORIGINAL RAMBERG AND SCHMEISER PARAMETERIZATION:
17706C
17707C                G(P) = P**LAMBDA3 - (1-P)**LAMBDA4
17708C
17709C              THE FREIMER, MUDHOLKAR, KOLLIA, AND LIN (FMKL)
17710C              PARAMETERIZATION:
17711C
17712C                G(P) = (P**LAMBDA3 - 1)/LAMBDA3  -
17713C                       ((1-P)**LAMBDA4 -1)/LAMBDA4
17714C
17715C              THE IDEF VARIABLE IDENTIFIES THE APPROPRIATE
17716C              DEFINITION TO USE.  THE FMKL DEFINITION IS
17717C              BECOMING THE PREFERRED PARAMETERIZATION) SINCE IT
17718C              DEFINES A VALID PROBABILITY DISTRIBUTION FOR ALL
17719C              VALUES OF LAMBDA3 AND LAMBDA4 (THE RAMBERG
17720C              PARAMETERIZATION HAS REGIONS OF LAMBDA3 AND LAMBDA4
17721C              WHERE A VALID PROBABILITY DISTRIBUTION IS NOT
17722C              DEFINED).
17723C
17724C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
17725C                                WHICH THE CUMULATIVE DISTRIBUTION
17726C                                FUNCTION IS TO BE EVALUATED.
17727C                     --DL3    = THE DOUBLE PRECISION VALUE OF LAMBDA3
17728C                                (THE FIRST SHAPE PARAMETER).
17729C                     --DL4    = THE DOUBLE PRECISION VALUE OF LAMBDA4
17730C                                (THE SECOND SHAPE PARAMETER).
17731C     OUTPUT ARGUMENTS--DPDF   = THE DOUBLE PRECISION PROBABILITY
17732C                                DENSITY FUNCTION VALUE.
17733C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
17734C             VALUE PDF FOR THE GENERALIZED TUKEY LAMBDA DISTRIBUTION
17735C             WITH SHAPE PARAMETERS = DL3 AND DL4.
17736C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
17737C     RESTRICTIONS--CALL GLDCHK TO CHECK FOR VALID VALUES OF THE
17738C                   SHAPE PARAMETERS.
17739C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
17740C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
17741C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
17742C     LANGUAGE--ANSI FORTRAN.
17743C     REFERENCES--KARIAN AND DUDEWICZ, 'FITTING STATISTICAL
17744C                 DISTRIBUTIONS: THE GENERALIZED LAMBDA DISTRIBUTION
17745C                 AND GENERALIZED BOOTSTRAP METHODS', CRC, 2000.
17746C               --STEVE SU, "A DISCRETIZED APPROACH TO FLEXIBLY FIT
17747C                 GENRALIZED LAMBDA DISTRIBUTIONS TO DATA",
17748C                 JOURNAL OF MODERN APPLIED STATISTICAL METHODS,
17749C                 NOVEMBER, 2005,, VOL. 4, NO. 2, 408-424.
17750C     WRITTEN BY--JAMES J. FILLIBEN
17751C                 STATISTICAL ENGINEERING DIVISION
17752C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
17753C                 GAITHERSBURG, MD 20899-8980
17754C                 PHONE:  301-975-2855
17755C     ORIGINAL VERSION--MARCH     2006.
17756C
17757C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
17758C
17759C---------------------------------------------------------------------
17760C
17761      DOUBLE PRECISION DSF
17762      DOUBLE PRECISION DCDF
17763      DOUBLE PRECISION DX
17764      DOUBLE PRECISION DL3
17765      DOUBLE PRECISION DL4
17766      DOUBLE PRECISION DPDF
17767      DOUBLE PRECISION DLOWER
17768      DOUBLE PRECISION DUPPER
17769      DOUBLE PRECISION DZERO
17770      DOUBLE PRECISION DONE
17771C
17772      CHARACTER*4 IGLDDF
17773      CHARACTER*4 IWRITE
17774C
17775      INCLUDE 'DPCOP2.INC'
17776C
17777C---------------------------------------------------------------------
17778C
17779C     CHECK THE INPUT ARGUMENTS FOR ERRORS
17780C
17781      DPDF=0.0D0
17782      DZERO=0.0D0
17783      DONE=1.0D0
17784C
17785CCCCC IF(IGLDDF.EQ.'RAMB')THEN
17786CCCCC   CALL GLDCHK(REAL(DL3),REAL(DL4),ALOWER,AUPPER,IFLAG,
17787CCCCC1              ISIGN,IWRITE)
17788CCCCC   IF(IFLAG.EQ.1)GOTO9000
17789CCCCC   DLOWER=DBLE(ALOWER)
17790CCCCC   DUPPER=DBLE(AUPPER)
17791CCCCC ELSE
17792C
17793C     FOR THE FMKL PARAMETERIZATION:
17794C
17795C     1) IF LAMBDA3 <= 0, THE LOWER TAIL IS UNBOUNDED.
17796C        IF LAMDA3   > 0, THE LOWER TAIL IS BOUNDED AT -1/LAMBDA3
17797C
17798C     2) IF LAMBDA4 <= 0, THE UPPER TAIL IS UNBOUNDED.
17799C        IF LAMDA4   > 0, THE UPPER TAIL IS BOUNDED AT 1/LAMBDA4
17800C
17801        IF(DL3.LE.0.0D0 .AND. DL4.LE.0.0D0)THEN
17802          DLOWER=DBLE(CPUMIN)
17803          DUPPER=DBLE(CPUMAX)
17804        ELSEIF(DL3.LE.0.0D0)THEN
17805          DLOWER=DBLE(CPUMIN)
17806          CALL GLDPPF(DONE,DL3,DL4,DUPPER,IGLDDF,IWRITE)
17807        ELSEIF(DL4.LE.0.0D0)THEN
17808          CALL GLDPPF(DZERO,DL3,DL4,DLOWER,IGLDDF,IWRITE)
17809          DUPPER=DBLE(CPUMAX)
17810        ELSE
17811          CALL GLDPPF(DZERO,DL3,DL4,DLOWER,IGLDDF,IWRITE)
17812          CALL GLDPPF(DONE,DL3,DL4,DUPPER,IGLDDF,IWRITE)
17813        ENDIF
17814CCCCC ENDIF
17815C
17816      IF(DX.LT.DLOWER .OR. DX.GT.DUPPER)THEN
17817        WRITE(ICOUT,2)
17818        CALL DPWRST('XXX','BUG ')
17819        WRITE(ICOUT,3)DLOWER,DUPPER
17820        CALL DPWRST('XXX','BUG ')
17821        WRITE(ICOUT,46)DX
17822        CALL DPWRST('XXX','BUG ')
17823        DPDF=0.0D0
17824        GOTO9000
17825      ENDIF
17826    2 FORMAT('***** ERROR--THE FIRST INPUT ARGUMENT TO GLDPDF',
17827     1       'IS OUTSIDE')
17828    3 FORMAT('      THE ALLOWABLE INTERVAL (',G15.7,',',G15.7,')')
17829   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
17830C
17831C-----START POINT-----------------------------------------------------
17832C
17833C
17834      IWRITE='OFF'
17835C
17836CCCCC IF(IGLDDF.EQ.'RAMB')THEN
17837CCCCC   CALL GLDCDF(DX,DL3,DL4,DCDF,IGLDDF,IWRITE)
17838C
17839CCCCC   DTERM1=0.0D0
17840CCCCC   DTERM2=0.0D0
17841CCCCC   DSF=0.0D0
17842CCCCC   IF(DCDF.GT.0.0D0)THEN
17843CCCCC     DTERM1=DL3*DCDF**DL3-1.0D0
17844CCCCC   ENDIF
17845CCCCC   IF((1.0D0-DCDF).GT.0.0D0)THEN
17846CCCCC     DTERM2=DL4*(1.0D0-DCDF)**(DL4-1.0D0)
17847CCCCC   ENDIF
17848CCCCC   DSF=DTERM1 + DTERM2
17849CCCCC   IF(DSF.NE.0.0D0)THEN
17850CCCCC     DPDF=1.0D0/DSF
17851CCCCC   ENDIF
17852CCCCC ELSE
17853        CALL GLDCDF(DX,DL3,DL4,DCDF,IGLDDF,IWRITE)
17854        DSF=DCDF**(DL3-1.0D0) + (1.0D0 - DCDF)**(DL4-1.0D0)
17855        IF(DSF.NE.0.0D0)THEN
17856          DPDF=1.0D0/DSF
17857        ELSE
17858          DPDF=0.0D0
17859        ENDIF
17860CCCCC ENDIF
17861C
17862 9000 CONTINUE
17863      RETURN
17864      END
17865      SUBROUTINE GLDPPF(DP,DL3,DL4,DPPF,IGLDDF,IWRITE)
17866C
17867C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
17868C              FUNCTION VALUE FOR THE GENERALIZD LAMBDA DISTRIBUTION
17869C              WITH SHAPE PARAMETERS ALAMB3 AND ALAMB4.
17870C              THIS DISTRIBUTION IS DEFINED IN TERMS OF ITS
17871C              PERCENT POINT FUNCTION.
17872C
17873C              NOTE THAT THERE ARE TWO COMMON PARAMETERIZATIONS
17874C              OF THIS PPF.
17875C
17876C              THE ORIGINAL RAMBERG AND SCHMEISER PARAMETERIZATION:
17877C
17878C                G(P) = P**LAMBDA3 - (1-P)**LAMBDA4
17879C
17880C              THE FREIMER, MUDHOLKAR, KOLLIA, AND LIN (FMKL)
17881C              PARAMETERIZATION:
17882C
17883C                G(P) = (P**LAMBDA3 - 1)/LAMBDA3  -
17884C                       ((1-P)**LAMBDA4 -1)/LAMBDA4
17885C
17886C              THE CASES WHERE LAMBDA3 AND LAMBDA4 EQUAL ZERO
17887C              HAVE TO BE HANDLED SEPARATELY.  SPECIFICALLY,
17888C              IF LAMBDA3 = 0, THEN
17889C
17890C                   (P**LAMBDA3 - 1)/LAMBDA3 = LOG(P)
17891C
17892C              IF LAMBDA4 = 0, THEN
17893C
17894C                   ((1-P)**LAMBDA4 - 1)/LAMBDA4 = LOG(1-P)
17895C
17896C              THE IDEF VARIABLE IDENTIFIES THE APPROPRIATE
17897C              DEFINITION TO USE.  THE FMKL DEFINITION IS
17898C              BECOMING THE PREFERRED PARAMETERIZATION) SINCE IT
17899C              DEFINES A VALID PROBABILITY DISTRIBUTION FOR ALL
17900C              VALUES OF LAMBDA3 AND LAMBDA4 (THE RAMBERG
17901C              PARAMETERIZATION HAS REGIONS OF LAMBDA3 AND LAMBDA4
17902C              WHERE A VALID PROBABILITY DISTRIBUTION IS NOT
17903C              DEFINED).
17904C
17905C              CURRENTLY, ONLY THE FMKL PARAMETERIZATION IS
17906C              SUPPORTED.
17907C
17908C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
17909C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
17910C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
17911C     INPUT  ARGUMENTS--P      = THE DOUBLE PRECISION VALUE
17912C                                (BETWEEN 0.0 AND 1.0)
17913C                                AT WHICH THE PERCENT POINT
17914C                                FUNCTION IS TO BE EVALUATED.
17915C                     --DL3    = THE DOUBLE PRECISION VALUE OF LAMBDA3
17916C                                (THE FIRST SHAPE PARAMETER).
17917C                     --DL4    = THE DOUBLE PRECISION VALUE OF LAMBDA3
17918C                                (THE SECOND SHAPE PARAMETER).
17919C     OUTPUT ARGUMENTS--DPPF   = THE DOUBLE PRECISION PERCENT
17920C                                POINT FUNCTION VALUE.
17921C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT
17922C             FUNCTION VALUE PPF FOR THE TUKEY LAMBDA DISTRIBUTION
17923C             WITH TAIL LENGTH PARAMETERS = DL3 AND DL4.
17924C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
17925C     RESTRICTIONS--TO BE ADDED.
17926C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
17927C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
17928C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISIONS.
17929C     LANGUAGE--ANSI FORTRAN (1977)
17930C     REFERENCES--KARIAN AND DUDEWICZ, "FITTING STATISTICAL
17931C                 DISTRIBUTIONS: THE GENERALIZED LAMBDA DISTRIBUTION
17932C                 AND GENERALIZED BOOTSTRAP METHODS", CRC, 2000.
17933C               --STEVE SU, "A DISCRETIZED APPROACH TO FLEXIBLY FIT
17934C                 GENRALIZED LAMBDA DISTRIBUTIONS TO DATA",
17935C                 JOURNAL OF MODERN APPLIED STATISTICAL METHODS,
17936C                 NOVEMBER, 2005,, VOL. 4, NO. 2, 408-424.
17937C     WRITTEN BY--ALAN HECKERT
17938C                 STATISTICAL ENGINEERING DIVISION
17939C                 INFORMATION TECHNOLOGY LABORATORY
17940C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
17941C                 GAITHERSBURG, MD 20899-8980
17942C                 PHONE--301-975-2899
17943C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
17944C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
17945C     LANGUAGE--ANSI FORTRAN (1977)
17946C     VERSION NUMBER--2001.8
17947C     ORIGINAL VERSION--AUGUST    2001.
17948C     UPDATED         --FEBRUARY  2006. SUPPORT FOR FMKL DEFINITION
17949C                                       AND MAKE ROUTINE DOUBLE
17950C                                       PRECISION
17951C
17952C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
17953C
17954C---------------------------------------------------------------------
17955C
17956      DOUBLE PRECISION DP
17957      DOUBLE PRECISION DPPF
17958CCCCC DOUBLE PRECISION DEPS
17959      DOUBLE PRECISION DL3
17960      DOUBLE PRECISION DL4
17961      DOUBLE PRECISION DTERM1
17962      DOUBLE PRECISION DTERM2
17963C
17964      CHARACTER*4 IGLDDF
17965      CHARACTER*4 IWRITE
17966C
17967      INCLUDE 'DPCOBE.INC'
17968      INCLUDE 'DPCOP2.INC'
17969C
17970C-----START POINT-----------------------------------------------------
17971C
17972C     CHECK THE INPUT ARGUMENTS FOR ERRORS
17973C
17974      IF(ISUBG4.EQ.'DPPF')THEN
17975        WRITE(ICOUT,52)IWRITE,IGLDDF,DP,DL3,DL4
17976   52   FORMAT('IWRITE,IGLDDF,DP,DL3,DL4 = ',2(A4,2X),3G15.7)
17977        CALL DPWRST('XXX','BUG ')
17978      ENDIF
17979C
17980CCCCC IF(IGLDDF.EQ.'RAMB')THEN
17981CCCCC   IWRITE='ERRO'
17982CCCCC   CALL GLDCHK(ALAMB3,ALAMB4,ALOWER,AUPPER,IFLAG,ISIGN,IWRITE)
17983CCCCC   DPPF=0.0
17984CCCCC   DEPS=1.0D-12
17985CCCCC   IF(IFLAG.EQ.1)GOTO9000
17986CCCCC   GOTO9000
17987CCCCC ELSE
17988CCCCC   ALOWER=0.0
17989CCCCC   AUPPER=0.0
17990CCCCC ENDIF
17991C
17992C     FOR THE FMKL PARAMETERIZATION:
17993C
17994C     1) IF LAMBDA3 <= 0, THE LOWER TAIL IS UNBOUNDED.
17995C        IF LAMDA3   > 0, THE LOWER TAIL IS BOUNDED AT -1/LAMBDA3
17996C
17997C     2) IF LAMBDA4 <= 0, THE UPPER TAIL IS UNBOUNDED.
17998C        IF LAMDA4   > 0, THE UPPER TAIL IS BOUNDED AT 1/LAMBDA4
17999C
18000      IF(DL3.LE.0.0D0 .AND. DL4.LE.0.0D0)THEN
18001        IF(DP.LE.0.0D0 .OR. DP.GE.1.0D0)THEN
18002          WRITE(ICOUT,1)
18003          CALL DPWRST('XXX','BUG ')
18004          WRITE(ICOUT,46)DP
18005          CALL DPWRST('XXX','BUG ')
18006          GOTO9000
18007        ENDIF
18008      ELSEIF(DL3.LE.0.0D0)THEN
18009        IF(DP.LE.0.0D0 .OR. DP.GT.1.0D0)THEN
18010          WRITE(ICOUT,1)
18011          CALL DPWRST('XXX','BUG ')
18012          WRITE(ICOUT,46)DP
18013          CALL DPWRST('XXX','BUG ')
18014          GOTO9000
18015        ENDIF
18016      ELSEIF(DL4.LE.0.0D0)THEN
18017        IF(DP.LT.0.0D0 .OR. DP.GE.1.0D0)THEN
18018          WRITE(ICOUT,1)
18019          CALL DPWRST('XXX','BUG ')
18020          WRITE(ICOUT,46)DP
18021          CALL DPWRST('XXX','BUG ')
18022          GOTO9000
18023        ENDIF
18024      ELSE
18025        IF(DP.LT.0.0D0 .OR. DP.GT.1.0D0)THEN
18026          WRITE(ICOUT,1)
18027          CALL DPWRST('XXX','BUG ')
18028          WRITE(ICOUT,46)DP
18029          CALL DPWRST('XXX','BUG ')
18030          GOTO9000
18031        ENDIF
18032      ENDIF
18033    1 FORMAT('***** ERROR--THE FIRST INPUT ARGUMENT TO GLDPPF ',
18034     1'IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL')
18035   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
18036C
18037C     CALCULATE THE PPF FUNCTION
18038C
18039CCCCC IF(IGLDDF.EQ.'RAMB')THEN
18040CCCCC   IF(DP.LE.DEPS)THEN
18041CCCCC     DPPF=DBLE(ALOWER)
18042CCCCC   ELSEIF(DP.GE.1.0D0-DEPS)THEN
18043CCCCC     DPPF=DBLE(AUPPER)
18044CCCCC   ELSEIF(DL3.EQ.0.0D0 .AND. DL4.EQ.0.0D0)THEN
18045CCCCC     DPPF=DLOG(DP) - DLOG(1.0D0 - DP)
18046CCCCC   ELSEIF(DL3.EQ.0.0D0)THEN
18047CCCCC     DPPF=DLOG(DP) - (1.0D0-DP)**DL4
18048CCCCC   ELSEIF(DL4.EQ.0.0D0)THEN
18049CCCCC     DPPF=DP**DL3 - DLOG(1.0D0 - DP)
18050CCCCC   ELSE
18051CCCCC     DPPF= DP**DL3 - (1.0D0-DP)**DL4
18052CCCCC   ENDIF
18053CCCCC ELSE
18054        IF(DL3.EQ.0.0D0 .AND. DL4.EQ.0.0D0)THEN
18055          DPPF=DLOG(DP) - DLOG(1.0D0 - DP)
18056        ELSEIF(DL3.EQ.0.0D0)THEN
18057          DPPF=DLOG(DP) - ((1.0D0-DP)**DL4 - 1.0D0)/DL4
18058        ELSEIF(DL4.EQ.0.0D0)THEN
18059          DPPF=(DP**DL3-1.0D0)/DL3 - DLOG(1.0D0 - DP)
18060        ELSE
18061          DTERM1=(DP**DL3-1.0D0)/DL3
18062          DTERM2=((1.0D0-DP)**DL4 - 1.0D0)/DL4
18063          DPPF=DTERM1 - DTERM2
18064        ENDIF
18065CCCCC ENDIF
18066C
18067 9000 CONTINUE
18068      RETURN
18069      END
18070      SUBROUTINE GLDRAN(N,ALAMB3,ALAMB4,ISEED,IGLDDF,X)
18071C
18072C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
18073C              FOR THE GENERALIZD LAMBDA DISTRIBUTION
18074C              WITH SHAPE PARAMETERS ALAMB3 AND ALAMB4.
18075C              THE PERCENT POINT FUNCTION FOR THIS DISTRIBUTION IS
18076C              G(P) = P**LAMBDA3 - (1-Y)**LAMBDA4
18077C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
18078C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
18079C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
18080C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
18081C                                OF RANDOM NUMBERS TO BE
18082C                                GENERATED.
18083C                     --ALAMB3 = THE SINGLE PRECISION VALUE OF LAMBDA
18084C                                (THE FIRST SHAPE PARAMETER).
18085C                     --ALAMB4 = THE SINGLE PRECISION VALUE OF LAMBDA
18086C                                (THE FIRST SHAPE PARAMETER).
18087C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
18088C                                (OF DIMENSION AT LEAST N)
18089C                                INTO WHICH THE GENERATED
18090C                                RANDOM SAMPLE WILL BE PLACED.
18091C     OUTPUT--A RANDOM SAMPLE OF SIZE N
18092C             FROM THE GENERALIZED LAMBDA DISTRIBUTION
18093C             WITH SHAPE PARAMETER VALUES = ALAMB3 AND ALAMB4.
18094C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
18095C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
18096C                   OF N FOR THIS SUBROUTINE.
18097C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
18098C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
18099C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
18100C     LANGUAGE--ANSI FORTRAN (1977)
18101C     REFERENCES--TOCHER, THE ART OF SIMULATION,
18102C                 1963, PAGES 14-15.
18103C               --HAMMERSLEY AND HANDSCOMB, MONTE CARLO METHODS,
18104C                 1964, PAGE 36.
18105C               --FILLIBEN, SIMPLE AND ROBUST LINEAR ESTIMATION
18106C                 OF THE LOCATION PARAMETER OF A SYMMETRIC
18107C                 DISTRIBUTION (UNPUBLISHED PH.D. DISSERTATION,
18108C                 PRINCETON UNIVERSITY), 1969, PAGES 21-44, 53-58.
18109C               --FILLIBEN, 'THE PERCENT POINT FUNCTION',
18110C                 (UNPUBLISHED MANUSCRIPT), 1970, PAGES 28-31.
18111C               --KARIAN AND DUDEWICZ, 'FITTING STATISTICAL
18112C                 DISTRIBUTIONS: THE GENERALIZED LAMBDA DISTRIBUTION
18113C                 AND GENERALIZED BOOTSTRAP METHODS', CRC, 2000.
18114C     WRITTEN BY--JAMES J. FILLIBEN
18115C                 STATISTICAL ENGINEERING DIVISION
18116C                 INFORMATION TECHNOLOGY LABORATORY
18117C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
18118C                 GAITHERSBURG, MD 20899-8980
18119C                 PHONE--301-975-2855
18120C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
18121C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
18122C     LANGUAGE--ANSI FORTRAN (1966)
18123C     VERSION NUMBER--2001.8
18124C     ORIGINAL VERSION--AUGUST    2001.
18125C     UPDATED         --FEBRUARY  2006. SUPPORT FOR FMKL
18126C                                       PARAMETERIZATION
18127C
18128C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
18129C
18130C---------------------------------------------------------------------
18131C
18132      DIMENSION X(*)
18133C
18134      DOUBLE PRECISION DPPF
18135C
18136      CHARACTER*4 IWRITE
18137      CHARACTER*4 IGLDDF
18138C
18139C-----COMMON----------------------------------------------------------
18140C
18141      INCLUDE 'DPCOP2.INC'
18142C
18143C-----START POINT-----------------------------------------------------
18144C
18145C     CHECK THE INPUT ARGUMENTS FOR ERRORS
18146C
18147      IF(IGLDDF.EQ.'RAMB')THEN
18148        IWRITE='ERRO'
18149        CALL GLDCHK(ALAMB3,ALAMB4,ALOWER,AUPPER,IFLAG,ISIGN,IWRITE)
18150        ZSCALE=1.0
18151        IF(ISIGN.LT.0)ZSCALE=-1.0
18152        IF(IFLAG.EQ.1)THEN
18153          DO10I=1,N
18154            X(I)=0.0
18155   10     CONTINUE
18156          GOTO9000
18157        ENDIF
18158      ENDIF
18159C
18160      IF(N.LT.1)THEN
18161        WRITE(ICOUT,5)
18162        CALL DPWRST('XXX','BUG ')
18163        WRITE(ICOUT,6)
18164        CALL DPWRST('XXX','BUG ')
18165        WRITE(ICOUT,47)N
18166        CALL DPWRST('XXX','BUG ')
18167        GOTO9000
18168      ENDIF
18169    5 FORMAT('***** ERROR--A NON-POSITIVE NUMBER OF RANDOM NUMBERS ',
18170     1       'WAS REQUESTED FOR ')
18171    6 FORMAT('      THE GENERALIZED TUKEY-LAMBDA DISTRIBUTION.')
18172   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,' *****')
18173C
18174C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
18175C
18176      CALL UNIRAN(N,ISEED,X)
18177C
18178C     GENERATE N GENERALIZED TUKEY-LAMBDA DISTRIBUTION RANDOM NUMBERS
18179C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
18180C
18181      IWRITE='OFF'
18182      DO100I=1,N
18183        Q=X(I)
18184        CALL GLDPPF(DBLE(Q),DBLE(ALAMB3),DBLE(ALAMB4),DPPF,
18185     1              IGLDDF,IWRITE)
18186        X(I)=REAL(DPPF)
18187  100 CONTINUE
18188C
18189 9000 CONTINUE
18190      RETURN
18191      END
18192      SUBROUTINE GLGCDF(X,P,J,A,CDF)
18193C
18194C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
18195C              FUNCTION VALUE AT THE SINGLE PRECISION VALUE X
18196C              FOR THE GENERALIZED LOST GAMES DISTRIBUTION
18197C              WITH SINGLE PRECISION SHAPE PARAMETERS P, A, AND
18198C              J.  THIS DISTRIBUTION IS DEFINED FOR ALL
18199C              NON-NEGATIVE INTEGER X >= J.
18200C
18201C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED FROM THE
18202C              RECURRENCE RELATION:
18203C
18204C              p(X;P,J,A) =(2*X+A-2*J-1)*(2*X+A-2*J-2)*P*(1-P)*p(X;P,J,A)/
18205C                          {(X-J)*(X+A-J)}
18206C
18207C              P(0;P,J,A)=P**A
18208C
18209C              THIS DISTRIBUTION IS USED TO MODEL THE "GAMBLER'S
18210C              RUIN" PROBLEM.
18211C
18212C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
18213C                                AT WHICH THE CUMULATIVE DISTRIBUTION
18214C                                FUNCTION IS TO BE EVALUATED.
18215C                                X SHOULD BE AN INTEGR >= J.
18216C                     --P      = THE SINGLE PRECISION VALUE
18217C                                OF THE FIRST SHAPE PARAMETER (PROBABILITY OF
18218C                                LOSING AN INDIVIDUAL GAME).
18219C                     --J      = THE INTEGER VALUE OF THE SECOND SHAPE
18220C                                PARAMETER.
18221C                     --A      = THE SINGLE PRECISION VALUE OF THE THIRD SHAPE
18222C                                PARAMETER.
18223C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
18224C                                DISTRIBUTION FUNCTION VALUE
18225C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION
18226C             FUNCTION VALUE CDF FOR THE GENERALIZED LOST GAMES DISTRIBUTION
18227C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
18228C     RESTRICTIONS--X SHOULD BE AN INTEGER >= J
18229C                 --0.5 < P < 1,  AND J >= 0
18230C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
18231C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG
18232C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
18233C     LANGUAGE--ANSI FORTRAN (1977)
18234C     REFERENCES--JOHNSON, KEMP, AND KOTZ (2005).  "UNIVARIATE
18235C                 DISCRETE DISTRIBUTIONS", THIRD EDITION,
18236C                 WILEY, PP. 503-505.
18237C     WRITTEN BY--JAMES J. FILLIBEN
18238C                 STATISTICAL ENGINEERING DIVISION
18239C                 INFORMATION TECHNOLOGY LABORATORY
18240C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
18241C                 GAITHERSBURG, MD 20899-8980
18242C                 PHONE--301-975-2855
18243C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
18244C           OF THE NATIONAL BUREAU OF STANDARDS.
18245C     LANGUAGE--ANSI FORTRAN (1977)
18246C     VERSION NUMBER--2006/11
18247C     ORIGINAL VERSION--NOVEMBER  2006.
18248C
18249C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
18250C
18251C---------------------------------------------------------------------
18252C
18253      DOUBLE PRECISION DX
18254      DOUBLE PRECISION DP
18255      DOUBLE PRECISION DJ
18256      DOUBLE PRECISION DA
18257      DOUBLE PRECISION DPDF
18258      DOUBLE PRECISION DPDFSV
18259      DOUBLE PRECISION DCDF
18260      DOUBLE PRECISION DC1
18261      DOUBLE PRECISION DC2
18262      DOUBLE PRECISION DC3
18263      DOUBLE PRECISION DC4
18264C
18265C-----COMMON----------------------------------------------------------
18266C
18267      INCLUDE 'DPCOP2.INC'
18268C
18269C-----START POINT-----------------------------------------------------
18270C
18271      CDF=0.0
18272C
18273C     CHECK THE INPUT ARGUMENTS FOR ERRORS
18274C
18275      IF(P.LE.0.5 .OR. P.GE.1.0)THEN
18276        WRITE(ICOUT,11)
18277        CALL DPWRST('XXX','BUG ')
18278        WRITE(ICOUT,46)P
18279        CALL DPWRST('XXX','BUG ')
18280        CDF=0.0
18281        GOTO9999
18282      ENDIF
18283   11 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GLGCDF ',
18284     1' IS OUTSIDE THE ALLOWABLE (0.5,1) INTERVAL')
18285C
18286      IF(J.LT.0)THEN
18287        WRITE(ICOUT,12)
18288        CALL DPWRST('XXX','BUG ')
18289        WRITE(ICOUT,47)J
18290        CALL DPWRST('XXX','BUG ')
18291        CDF=0.0
18292        GOTO9999
18293      ENDIF
18294   12 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GLGCDF IS ',
18295     1' NEGATIVE')
18296C
18297      IF(A.LE.0.0)THEN
18298        WRITE(ICOUT,13)
18299        CALL DPWRST('XXX','BUG ')
18300        WRITE(ICOUT,47)A
18301        CALL DPWRST('XXX','BUG ')
18302        CDF=0.0
18303        GOTO9999
18304      ENDIF
18305   13 FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GLGCDF IS ',
18306     1' NEGATIVE')
18307C
18308      INTX=INT(X+0.5)
18309      IF(INTX.LT.J)THEN
18310        WRITE(ICOUT,5)
18311        CALL DPWRST('XXX','BUG ')
18312        WRITE(ICOUT,47)INTX
18313        CALL DPWRST('XXX','BUG ')
18314        WRITE(ICOUT,48)INTX
18315        CALL DPWRST('XXX','BUG ')
18316        CDF=0.0
18317        GOTO9999
18318      ENDIF
18319    5 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GLGCDF IS LESS ',
18320     1'THAN THE THIRD ARUGMENT')
18321C
18322   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
18323   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
18324   48 FORMAT('***** THE VALUE OF THE THIRD ARGUMENT IS ',I8)
18325C
18326      DP=DBLE(P)
18327      DJ=DBLE(J)
18328      DA=DBLE(A)
18329      DCDF=0.0D0
18330C
18331C     USE THE RECURRENCE RELATION DESCRIBED ABOVE.
18332C
18333      DPDF=DA*DLOG(DP)
18334      DPDFSV=DPDF
18335      DCDF=DEXP(DPDF)
18336C
18337      IF(INTX.GT.J)THEN
18338        DO200I=J+1,INTX
18339          DX=DBLE(I)
18340          DC1=DLOG(2.0D0*DX+DA-2.0D0*DJ-1.0D0)
18341          DC2=DLOG(2.0D0*DX+DA-2.0D0*DJ-2.0D0)
18342          DC3=DLOG(DP) + DLOG(1.0D0-DP)
18343          DC4=DLOG(DX-DJ) + DLOG(DX+DA-DJ)
18344          DPDF=DC1 + DC2 + DC3 + DPDFSV - DC4
18345          DCDF=DCDF + DEXP(DPDF)
18346          DPDFSV=DPDF
18347  200   CONTINUE
18348      ENDIF
18349C
18350      CDF=REAL(DCDF)
18351C
18352 9999 CONTINUE
18353
18354      RETURN
18355      END
18356      SUBROUTINE GLGFUN(N,X,FVEC,IFLAG,Y,K)
18357C
18358C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
18359C              GENERALIZED LOST GAMES MAXIMUM LIKELIHOOD EQUATIONS.
18360C
18361C                 N*SUM[x>=0][f(x)*{(a+x)/p - x/(1-p)} = 0
18362C
18363C                 N*SUM[x >= 0][f(x)*{LOG(p) + 1/a + PSI(a+2*x) -
18364C                 PS(a+x-1)}] = 0
18365C
18366C              WITH P AND A DENOTING THE SHAPE PARAMETERS.
18367C
18368C              THIS ROUTINE ASSUMES THE DATA IS IN THE FORM
18369C
18370C                   X(I)  FREQ(I)
18371C
18372C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
18373C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
18374C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
18375C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
18376C              SINCE DNSQE ONLY PASSES ONE ARRAY, WE SPLIT INTO
18377C              TWO PARTS: 1 - MAXNXT/2 ARE THE FREQUENCIES WHILE
18378C              (MAXNXT/2 + 1) - MAXNXT ARE THE CLASS VALUES (I.E.,
18379C              THE X).
18380C     EXAMPLE--GENERALIZED LOST GAMES MAXIMUM LIKELIHOOD Y
18381C     REFERENCES--JOHNSON, KOTZ, AND KEMP (2006).  "UNIVARIATE
18382C                 DISCRETE DISTRIBUTIONS", THIRD EDITION,
18383C                 WILEY, PP. 503-505.
18384C               --KEMP AND KEMP (1992), "A GROUP-DYNAMIC MODEL AND
18385C                 THE LOST-GAMES DISTRIBUTION", COMMUNICATIONS IN
18386C                 STATISTICS--THEORY AND METHODS, 21(3),
18387C                 PP. 791-798.
18388C     WRITTEN BY--JAMES J. FILLIBEN
18389C                 STATISTICAL ENGINEERING DIVISION
18390C                 INFORMATION TECHNOLOGY LABORATORY
18391C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
18392C                 GAITHERSBUG, MD 20899-8980
18393C                 PHONE--301-975-2855
18394C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
18395C           OF THE NATIONAL BUREAU OF STANDARDS.
18396C     LANGUAGE--ANSI FORTRAN (1977)
18397C     VERSION NUMBER--2006/12
18398C     ORIGINAL VERSION--DECEMBER  2006.
18399C
18400C---------------------------------------------------------------------
18401C
18402      DOUBLE PRECISION X(*)
18403      DOUBLE PRECISION FVEC(*)
18404      REAL Y(*)
18405C
18406CCCCC EXTERNAL DPSI
18407C
18408      DOUBLE PRECISION DN
18409      DOUBLE PRECISION DX
18410      DOUBLE PRECISION DX2
18411      DOUBLE PRECISION DP
18412      DOUBLE PRECISION DA
18413      DOUBLE PRECISION DSUM1
18414      DOUBLE PRECISION DSUM2
18415      DOUBLE PRECISION DTERM1
18416      DOUBLE PRECISION DFREQ
18417CCCCC DOUBLE PRECISION DPSI
18418C
18419      DOUBLE PRECISION XBAR,S2,F0
18420      COMMON/GLGCOM/XBAR,S2,F0,MAXNXT,IINDX,NTOT
18421C
18422C-----COMMON----------------------------------------------------------
18423C
18424      INCLUDE 'DPCOP2.INC'
18425C
18426C-----START POINT-----------------------------------------------------
18427C
18428C  COMPUTE SOME SUMS
18429C
18430      N=2
18431      IFLAG=0
18432C
18433      DP=X(1)
18434      DA=X(2)
18435      DN=DBLE(NTOT)
18436C
18437      DSUM1=0.0D0
18438      DSUM2=0.0D0
18439C
18440      DO200I=1,K
18441C
18442        DX=DBLE(Y(IINDX+I))
18443        DFREQ=DBLE(Y(I))
18444        IF(DFREQ.LE.0.0D0)GOTO200
18445C
18446        DTERM1=((DA+DX)/DP) - (DX/(1.0D0-DP))
18447        DSUM1=DSUM1 + (DFREQ/DN)*DTERM1
18448CCCCC   DTERM1=DLOG(DP) + 1.0D0/DA + DPSI(DA+2.0D0*DX) -
18449CCCCC1         DPSI(DA+DX-1.0D0)
18450CCCCC   DSUM2=DSUM2 + (DFREQ/DN)*DTERM1
18451C
18452  200 CONTINUE
18453      FVEC(1)=DN*DSUM1
18454CCCCC FVEC(2)=DN*DSUM2
18455C
18456      DSUM1=0.0D0
18457      DSUM2=0.0D0
18458      DO300I=1,K
18459        DSUM2=0.0D0
18460        DX=DBLE(Y(IINDX+I))
18461        IF(DX.LT.1.99D0)GOTO300
18462        DFREQ=Y(I)
18463        IK=INT(DX-1.0D0 + 0.5D0)
18464        DO400J=1,IK
18465          DX2=DBLE(Y(IINDX+J))
18466          DSUM2=DSUM2 + 1.0D0/(DA+DX+DBLE(J))
18467  400   CONTINUE
18468        DSUM1=DSUM1 + (DFREQ/DN)*DSUM2
18469  300 CONTINUE
18470C
18471      FVEC(2)=DN*DLOG(DP) + DN*(1.0D0 - F0)/DA + DN*DSUM1
18472C
18473      RETURN
18474      END
18475      SUBROUTINE GLGPDF(X,P,J,A,PDF)
18476C
18477C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
18478C              FUNCTION VALUE AT THE SINGLE PRECISION VALUE X
18479C              FOR THE GENERALIZED LOST GAMES DISTRIBUTION
18480C              WITH SINGLE PRECISION SHAPE PARAMETERS P, A, AND
18481C              J.  THIS DISTRIBUTION IS DEFINED FOR ALL
18482C              NON-NEGATIVE INTEGER X >= J AND HAS THE PROBABILITY
18483C              MASS FUNCTION:
18484C
18485C              p(X;P,J,A) = (2*X+A-2*J-1)!A*P**(A+X-J)*
18486C                           (1-P)**(X-J)/{(X+A-J)!*(X-J)!}
18487C                           X = J, J+1, ...
18488C                           A > 0; 0 < P < 1
18489C
18490C              THE PROBABILITIES CAN BE COMPUTED FROM THE FOLLOWING
18491C              RECURRENCE RELATION:
18492C
18493C              p(X;P,J,A) =(2*X+A-2*J-1)*(2*X+A-2*J-2)*P*(1-P)*p(X;P,J,A)/
18494C                          {(X-J)*(X+A-J)}
18495C
18496C              P(0;P,J,A)=P**A
18497C
18498C              THIS DISTRIBUTION IS USED TO MODEL THE "GAMBLER'S
18499C              RUIN" PROBLEM.
18500C
18501C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
18502C                                AT WHICH THE PROBABILITY DENSITY
18503C                                FUNCTION IS TO BE EVALUATED.
18504C                                X SHOULD BE AN INTEGR >= J.
18505C                     --P      = THE SINGLE PRECISION VALUE
18506C                                OF THE FIRST SHAPE PARAMETER (PROBABILITY OF
18507C                                LOSING AN INDIVIDUAL GAME).
18508C                     --J      = THE INTEGER VALUE OF THE SECOND SHAPE
18509C                                PARAMETER.
18510C                     --A      = THE SINGLE PRECISION VALUE OF THE THIRD SHAPE
18511C                                PARAMETER.
18512C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION PROBABILITY
18513C                                DENSITY FUNCTION VALUE
18514C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
18515C             FUNCTION VALUE PDF FOR THE GENERALIZED LOST GAMES
18516C             DISTRIBUTION
18517C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
18518C     RESTRICTIONS--X SHOULD BE AN INTEGER >= J
18519C                 --0.5 < P < 1,  AND J >= 0, A > 0
18520C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
18521C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG
18522C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
18523C     LANGUAGE--ANSI FORTRAN (1977)
18524C     REFERENCES--JOHNSON, KEMP, AND KOTZ (2005).  "UNIVARIATE
18525C                 DISCRETE DISTRIBUTIONS", THIRD EDITION,
18526C                 WILEY, PP. 503-505.
18527C     WRITTEN BY--JAMES J. FILLIBEN
18528C                 STATISTICAL ENGINEERING DIVISION
18529C                 INFORMATION TECHNOLOGY LABORATORY
18530C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
18531C                 GAITHERSBURG, MD 20899-8980
18532C                 PHONE--301-975-2855
18533C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
18534C           OF THE NATIONAL BUREAU OF STANDARDS.
18535C     LANGUAGE--ANSI FORTRAN (1977)
18536C     VERSION NUMBER--2006/11
18537C     ORIGINAL VERSION--NOVEMBER  2006.
18538C
18539C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
18540C
18541C---------------------------------------------------------------------
18542C
18543      DOUBLE PRECISION DX
18544      DOUBLE PRECISION DP
18545      DOUBLE PRECISION DJ
18546      DOUBLE PRECISION DA
18547      DOUBLE PRECISION DPDF
18548      DOUBLE PRECISION DPDFSV
18549      DOUBLE PRECISION DC1
18550      DOUBLE PRECISION DC2
18551      DOUBLE PRECISION DC3
18552      DOUBLE PRECISION DC4
18553C
18554C-----COMMON----------------------------------------------------------
18555C
18556      INCLUDE 'DPCOP2.INC'
18557C
18558      SAVE DPDFSV
18559      SAVE PSV
18560      SAVE ASV
18561      SAVE XSV
18562      SAVE JSV
18563C
18564      DATA DPDFSV /-99.0/
18565      DATA PSV    /-99.0/
18566      DATA ASV    /-99.0/
18567      DATA JSV    /-99/
18568      DATA XSV    /-99.0/
18569C
18570C-----START POINT-----------------------------------------------------
18571C
18572      PDF=0.0
18573      DPDF=0.0D0
18574      INTX=INT(X+0.5)
18575C
18576C     CHECK THE INPUT ARGUMENTS FOR ERRORS
18577C
18578      IF(P.LE.0.5 .OR. P.GE.1.0)THEN
18579        WRITE(ICOUT,11)
18580   11   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GLGPDF ',
18581     1         'IS OUTSIDE THE ALLOWABLE (0.5,1) INTERVAL.')
18582        CALL DPWRST('XXX','BUG ')
18583        WRITE(ICOUT,46)P
18584   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
18585        CALL DPWRST('XXX','BUG ')
18586        GOTO9999
18587      ELSEIF(J.LT.0)THEN
18588        WRITE(ICOUT,12)
18589   12   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GLGPDF IS ',
18590     1         'NEGATIVE')
18591        CALL DPWRST('XXX','BUG ')
18592        WRITE(ICOUT,47)J
18593   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
18594        CALL DPWRST('XXX','BUG ')
18595        GOTO9999
18596      ELSEIF(A.LE.0.0)THEN
18597        WRITE(ICOUT,13)
18598   13   FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GLGPDF IS ',
18599     1         'NEGATIVE.')
18600        CALL DPWRST('XXX','BUG ')
18601        WRITE(ICOUT,46)A
18602        CALL DPWRST('XXX','BUG ')
18603        GOTO9999
18604      ELSEIF(INTX.LT.J)THEN
18605        WRITE(ICOUT,5)
18606    5   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GLGPDF IS LESS ',
18607     1         'THAN THE THIRD ARUGMENT.')
18608        CALL DPWRST('XXX','BUG ')
18609        WRITE(ICOUT,47)INTX
18610        CALL DPWRST('XXX','BUG ')
18611        WRITE(ICOUT,47)INTX
18612        CALL DPWRST('XXX','BUG ')
18613        GOTO9999
18614      ENDIF
18615C
18616C     NOTE: FOR EFFICIENCY, CHECK IF THE CURRENT VALUES OF THE
18617C           PARAMETERS ARE THE SAME AS THE SAVED VALUES AND IF
18618C           THE CURRENT X IS GREATER THAN OR EQUAL THE SAVED X.
18619C
18620      DP=DBLE(P)
18621      DJ=DBLE(J)
18622      DA=DBLE(A)
18623C
18624      IF(P.EQ.PSV .AND. A.EQ.ASV .AND. J.EQ.JSV .AND.
18625     1   X.GE.XSV)THEN
18626C
18627C       USE PARAMETERS FROM PREVIOUS CALL
18628C
18629        IF(X.EQ.XSV)THEN
18630          DPDF=DEXP(DPDFSV)
18631          PDF=REAL(DPDF)
18632          GOTO10000
18633        ELSE
18634          ISTRT=INT(XSV+0.5)
18635          DO100I=ISTRT+1,INTX
18636            DX=DBLE(I)
18637            DC1=DLOG(2.0D0*DX+DA-2.0D0*DJ-1.0D0)
18638            DC2=DLOG(2.0D0*DX+DA-2.0D0*DJ-2.0D0)
18639            DC3=DLOG(DP) + DLOG(1.0D0-DP)
18640            DC4=DLOG(DX-DJ) + DLOG(DX+DA-DJ)
18641            DPDF=DC1 + DC2 + DC3 + DPDFSV - DC4
18642            DPDFSV=DPDF
18643  100     CONTINUE
18644          DPDF=DEXP(DPDF)
18645          PDF=REAL(DPDF)
18646        ENDIF
18647      ELSE
18648C
18649C       NEW PARAMETERS
18650C
18651        DPDF=DA*DLOG(DP)
18652        DPDFSV=DPDF
18653C
18654        IF(INTX.GT.J)THEN
18655          DO200I=J+1,INTX
18656            DX=DBLE(I)
18657            DC1=DLOG(2.0D0*DX+DA-2.0D0*DJ-1.0D0)
18658            DC2=DLOG(2.0D0*DX+DA-2.0D0*DJ-2.0D0)
18659            DC3=DLOG(DP) + DLOG(1.0D0-DP)
18660            DC4=DLOG(DX-DJ) + DLOG(DX+DA-DJ)
18661            DPDF=DC1 + DC2 + DC3 + DPDFSV - DC4
18662            DPDFSV=DPDF
18663  200     CONTINUE
18664        ENDIF
18665        DPDF=DEXP(DPDF)
18666        PDF=REAL(DPDF)
18667      ENDIF
18668      GOTO9000
18669C
18670 9000 CONTINUE
18671      PSV=P
18672      ASV=A
18673      JSV=J
18674      XSV=X
18675      GOTO10000
18676C
18677 9999 CONTINUE
18678      PSV=-99.0
18679      ASV=-99.0
18680      JSV=-99
18681      XSV=-99.0
18682C
1868310000 CONTINUE
18684      RETURN
18685      END
18686      SUBROUTINE GLGPPF(P,PPAR,J,A,PPF)
18687C
18688C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
18689C              FUNCTION VALUE AT THE SINGLE PRECISION VALUE P
18690C              FOR THE GENERALIZED LOST GAMES DISTRIBUTION
18691C              WITH SINGLE PRECISION SHAPE PARAMETERS P, A, AND
18692C              J.  THIS DISTRIBUTION IS DEFINED FOR ALL
18693C              NON-NEGATIVE INTEGER X >= J.
18694C
18695C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED FROM
18696C              THE RECURRENCE RELATION:
18697C
18698C              p(X;P,J,A) =(2*X+A-2*J-1)*(2*X+A-2*J-2)*P*(1-P)*p(X;P,J,A)/
18699C                          {(X-J)*(X+A-J)}
18700C
18701C              P(0;P,J,A)=P**A
18702C
18703C              THE PERCENT POINT FUNCTION IS COMPUTED BY GENERATING
18704C              THE CDF FUNCTION UNTIL THE APPROPRIATE PROBABILITY
18705C              IS REACHED.
18706C
18707C              THIS DISTRIBUTION IS USED TO MODEL THE "GAMBLER'S
18708C              RUIN" PROBLEM.  IT ADDS THE ADDITIONAL PARAMETER, A,
18709C              TO THE LOST GAMES DISTRIBUTION.
18710C
18711C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE
18712C                                AT WHICH THE PERCENT POINT
18713C                                FUNCTION IS TO BE EVALUATED.
18714C                                0 <= P < 1.
18715C                     --PPAR   = THE SINGLE PRECISION VALUE
18716C                                OF THE FIRST SHAPE PARAMETER (PROBABILITY OF
18717C                                LOSING AN INDIVIDUAL GAME).
18718C                     --J      = THE INTEGER VALUE OF THE SECOND SHAPE
18719C                                PARAMETER.
18720C                     --A      = THE SINGLE PRECISION VALUE OF THE THIRD SHAPE
18721C                                PARAMETER.
18722C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT POINT
18723C                                FUNCTION VALUE
18724C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION VALUE
18725C             PPF FOR THE GENERALIZED LOST GAMES DISTRIBUTION
18726C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
18727C     RESTRICTIONS--0 <= P < 1.
18728C                 --0.5 < P < 1,  AND J >= 0
18729C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
18730C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG
18731C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
18732C     LANGUAGE--ANSI FORTRAN (1977)
18733C     REFERENCES--JOHNSON, KEMP, AND KOTZ (2005).  "UNIVARIATE
18734C                 DISCRETE DISTRIBUTIONS", THIRD EDITION,
18735C                 WILEY, PP. 503-505.
18736C     WRITTEN BY--JAMES J. FILLIBEN
18737C                 STATISTICAL ENGINEERING DIVISION
18738C                 INFORMATION TECHNOLOGY LABORATORY
18739C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
18740C                 GAITHERSBURG, MD 20899-8980
18741C                 PHONE--301-975-2855
18742C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
18743C           OF THE NATIONAL BUREAU OF STANDARDS.
18744C     LANGUAGE--ANSI FORTRAN (1977)
18745C     VERSION NUMBER--2006/11
18746C     ORIGINAL VERSION--NOVEMBER  2006.
18747C
18748C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
18749C
18750C---------------------------------------------------------------------
18751C
18752      DOUBLE PRECISION DX
18753      DOUBLE PRECISION DP
18754      DOUBLE PRECISION DPPAR
18755      DOUBLE PRECISION DJ
18756      DOUBLE PRECISION DA
18757      DOUBLE PRECISION DPDF
18758      DOUBLE PRECISION DPDFSV
18759      DOUBLE PRECISION DCDF
18760      DOUBLE PRECISION DC1
18761      DOUBLE PRECISION DC2
18762      DOUBLE PRECISION DC3
18763      DOUBLE PRECISION DC4
18764      DOUBLE PRECISION DEPS
18765C
18766C-----COMMON----------------------------------------------------------
18767C
18768      INCLUDE 'DPCOMC.INC'
18769      INCLUDE 'DPCOP2.INC'
18770C
18771C-----START POINT-----------------------------------------------------
18772C
18773      PPF=0.0
18774C
18775C     CHECK THE INPUT ARGUMENTS FOR ERRORS
18776C
18777      IF(P.LT.0.0 .OR. P.GE.1.0)THEN
18778        WRITE(ICOUT,15)
18779   15   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GLGPPF ',
18780     1         'IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
18781        CALL DPWRST('XXX','BUG ')
18782        WRITE(ICOUT,46)P
18783   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
18784        CALL DPWRST('XXX','BUG ')
18785        GOTO9999
18786      ELSEIF(PPAR.LE.0.5 .OR. PPAR.GE.1.0)THEN
18787        WRITE(ICOUT,11)
18788   11   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GLGPPF ',
18789     1         'IS OUTSIDE THE ALLOWABLE (0.5,1) INTERVAL.')
18790        CALL DPWRST('XXX','BUG ')
18791        WRITE(ICOUT,46)PPAR
18792        CALL DPWRST('XXX','BUG ')
18793        GOTO9999
18794      ELSEIF(J.LT.0)THEN
18795        WRITE(ICOUT,12)
18796   12   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GLGPPF IS ',
18797     1         'NEGATIVE')
18798        CALL DPWRST('XXX','BUG ')
18799        WRITE(ICOUT,47)J
18800   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
18801        CALL DPWRST('XXX','BUG ')
18802        GOTO9999
18803      ELSEIF(A.LE.0.0)THEN
18804        WRITE(ICOUT,13)
18805   13   FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GLGPPF IS ',
18806     1         'NEGATIVE')
18807        CALL DPWRST('XXX','BUG ')
18808        WRITE(ICOUT,46)A
18809        CALL DPWRST('XXX','BUG ')
18810        GOTO9999
18811      ENDIF
18812C
18813      DEPS=1.0D-7
18814      DP=DBLE(P)
18815      DPPAR=DBLE(PPAR)
18816      DJ=DBLE(J)
18817      DA=DBLE(A)
18818      DCDF=0.0D0
18819C
18820C     USE THE RECURRENCE RELATION DESCRIBED ABOVE.
18821C
18822      I=J
18823      DPDF=DA*DLOG(DPPAR)
18824      DPDFSV=DPDF
18825      DCDF=DEXP(DPDF)
18826      IF(DCDF.GE.DP-DEPS)THEN
18827        PPF=REAL(J)
18828        GOTO9999
18829      ENDIF
18830C
18831  100 CONTINUE
18832        I=I+1
18833        IF(DBLE(I).GE.DBLE(I1MACH(9)))THEN
18834          WRITE(ICOUT,55)
18835   55     FORMAT('***** ERROR--THE COMPUTED PERCENT POINT VALUE ',
18836     1           'EXCEEDS THE LARGEST MACHINE INTEGER.')
18837          CALL DPWRST('XXX','BUG ')
18838          PPF=REAL(I)
18839          GOTO9999
18840        ENDIF
18841        DX=DBLE(I)
18842        DC1=DLOG(2.0D0*DX+DA-2.0D0*DJ-1.0D0)
18843        DC2=DLOG(2.0D0*DX+DA-2.0D0*DJ-2.0D0)
18844        DC3=DLOG(DPPAR) + DLOG(1.0D0-DPPAR)
18845        DC4=DLOG(DX-DJ) + DLOG(DX+DA-DJ)
18846        DPDF=DC1 + DC2 + DC3 + DPDFSV - DC4
18847        DCDF=DCDF + DEXP(DPDF)
18848        DPDFSV=DPDF
18849        IF(DCDF.GE.DP-DEPS)THEN
18850          PPF=REAL(I)
18851          GOTO9999
18852        ENDIF
18853      GOTO100
18854C
18855 9999 CONTINUE
18856
18857      RETURN
18858      END
18859      SUBROUTINE GLGRAN(N,P,J,A,ISEED,X)
18860C
18861C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF
18862C              SIZE N FROM THE GENERALIZED LOST GAMES DISTRIBUTION
18863C              WITH SHAPE PARAMETERS P AND IR.
18864C              IR.  THIS DISTRIBUTION IS DEFINED FOR ALL
18865C              NON-NEGATIVE INTEGER X >= J.
18866C              THIS DISTRIBUTION HAS THE PROBABILITY FUNCTION
18867C              p(X;P,J,A) = ...
18868C                           X = J, J+ 1, ...
18869C                           A > 0, 0.5 < P < 1
18870C
18871C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
18872C                                OF RANDOM NUMBERS TO BE
18873C                                GENERATED.
18874C                     --P      = THE SINGLE PRECISION VALUE
18875C                                OF THE FIRST SHAPE PARAMETER.
18876C                     --J      = THE INTEGER VALUE
18877C                                OF THE SECOND SHAPE PARAMETER.
18878C                     --A      = THE SINGLE PRECISION VALUE
18879C                                OF THE THIRD SHAPE PARAMETER.
18880C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
18881C                                (OF DIMENSION AT LEAST N)
18882C                                INTO WHICH THE GENERATED
18883C                                RANDOM SAMPLE WILL BE PLACED.
18884C     OUTPUT--A RANDOM SAMPLE OF SIZE N FROM THE GENERALIZED
18885C             LOST GAMES DISTRIBUTION WITH SHAPE PARAMETERS
18886C             P, J, AND A.
18887C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
18888C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
18889C                   OF N FOR THIS SUBROUTINE.
18890C                 --0.5 < P < 1, J A NON-NEGATIVE INTEGER, A > 0
18891C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, LOSPPF
18892C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
18893C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
18894C     LANGUAGE--ANSI FORTRAN (1977)
18895C     REFERENCES--JOHNSON, KEMP, AND KOTZ (2005).  "UNIVARIATE
18896C                 DISCRETE DISTRIBUTIONS", THIRD EDITION,
18897C                 WILEY, PP. 503-505.
18898C     WRITTEN BY--JAMES J. FILLIBEN
18899C                 STATISTICAL ENGINEERING DIVISION
18900C                 INFORMATION TECHNOLOGY LABORATORY
18901C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
18902C                 GAITHERSBURG, MD 20899-8980
18903C                 PHONE--301-975-2899
18904C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
18905C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
18906C     LANGUAGE--ANSI FORTRAN (1977)
18907C     VERSION NUMBER--2006/11
18908C     ORIGINAL VERSION--NOVEMBER  2006.
18909C
18910C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
18911C
18912C---------------------------------------------------------------------
18913C
18914      INTEGER N
18915      INTEGER J
18916      DIMENSION X(*)
18917C
18918C-----COMMON----------------------------------------------------------
18919C
18920      INCLUDE 'DPCOP2.INC'
18921C
18922C-----DATA STATEMENTS-------------------------------------------------
18923C
18924C-----START POINT-----------------------------------------------------
18925C
18926C     CHECK THE INPUT ARGUMENTS FOR ERRORS
18927C
18928      IF(N.LT.1)THEN
18929        WRITE(ICOUT, 5)
18930        CALL DPWRST('XXX','BUG ')
18931        WRITE(ICOUT,47)N
18932        CALL DPWRST('XXX','BUG ')
18933        GOTO9999
18934      ENDIF
18935    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF ',
18936     1'GENERALIZED LOST GAMES RANDOM NUMBERS IS NON-POSITIVE')
18937C
18938      IF(P.LE.0.5 .OR. P.GE.1.0)THEN
18939        WRITE(ICOUT,11)
18940        CALL DPWRST('XXX','BUG ')
18941        WRITE(ICOUT,12)
18942        CALL DPWRST('XXX','BUG ')
18943        WRITE(ICOUT,46)P
18944        CALL DPWRST('XXX','BUG ')
18945        GOTO9999
18946      ENDIF
18947   11 FORMAT('***** ERROR--THE P PARAMETER FOR THE GENERALIZED ',
18948     1       'LOST GAMES')
18949   12 FORMAT('      RANDOM NUMBERS IS OUTSIDE THE ALLOWABLE (0.5,1) ',
18950     1       'INTERVAL')
18951C
18952      IF(J.LT.0)THEN
18953        WRITE(ICOUT,21)
18954        CALL DPWRST('XXX','BUG ')
18955        WRITE(ICOUT,47)J
18956        CALL DPWRST('XXX','BUG ')
18957        GOTO9999
18958      ENDIF
18959   21 FORMAT('***** ERROR--THE J PARAMETER FOR THE GENERALIZED ',
18960     1       'LOST GAMES RANDOM NUMBERS IS NON-POSITIVE')
18961C
18962      IF(A.LE.0.0)THEN
18963        WRITE(ICOUT,31)
18964        CALL DPWRST('XXX','BUG ')
18965        WRITE(ICOUT,32)
18966        CALL DPWRST('XXX','BUG ')
18967        WRITE(ICOUT,46)A
18968        CALL DPWRST('XXX','BUG ')
18969        GOTO9999
18970      ENDIF
18971   31 FORMAT('***** ERROR--THE A PARAMETER FOR THE GENERALIZED ',
18972     1       'LOST GAMES')
18973   32 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE')
18974C
18975   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
18976   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
18977C
18978      CALL UNIRAN(N,ISEED,X)
18979      DO100I=1,N
18980        XTEMP=X(I)
18981        CALL GLGPPF(XTEMP,P,J,A,PPF)
18982        X(I)=PPF
18983  100 CONTINUE
18984C
18985 9999 CONTINUE
18986C
18987      RETURN
18988      END
18989      SUBROUTINE GLOCDF(X,ALPHA,CDF)
18990C
18991C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
18992C              FUNCTION VALUE FOR THE TYPE 1 GENERALIZED LOGISTIC
18993C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
18994C              THIS DISTRIBUTION IS DEFINED FOR ALL X
18995C              AND HAS THE CUMULATIVE DISTRIBUTION FUNCTION
18996C              F(X) = 1/(1+EXP(-X))**ALPHA
18997C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
18998C                                AT WHICH THE PROBABILITY DENSITY
18999C                                FUNCTION IS TO BE EVALUATED.
19000C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION PROBABILITY
19001C                                DENSITY FUNCTION VALUE.
19002C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
19003C             FUNCTION VALUE CDF FOR THE HALF-LOGISTIC
19004C             DISTRIBUTION
19005C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19006C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
19007C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19008C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19009C     LANGUAGE--ANSI FORTRAN.
19010C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19011C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19012C     WRITTEN BY--JAMES J. FILLIBEN
19013C                 STATISTICAL ENGINEERING LABORATORY
19014C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19015C                 GAITHERSBURG, MD 20899-8980
19016C                 PHONE:  301-975-2855
19017C     ORIGINAL VERSION--DECEMBER  1995.
19018C
19019C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19020C
19021C---------------------------------------------------------------------
19022C
19023      DOUBLE PRECISION DX, DA, DCDF
19024      DOUBLE PRECISION DTERM1
19025C
19026      INCLUDE 'DPCOP2.INC'
19027C
19028C---------------------------------------------------------------------
19029C
19030C     CHECK THE INPUT ARGUMENTS FOR ERRORS
19031C
19032      IF(ALPHA.LE.0.0)THEN
19033        WRITE(ICOUT,4)
19034        CALL DPWRST('XXX','BUG ')
19035        WRITE(ICOUT,5)
19036        CALL DPWRST('XXX','BUG ')
19037        WRITE(ICOUT,46)ALPHA
19038        CALL DPWRST('XXX','BUG ')
19039        CDF=0.0
19040        GOTO9999
19041      ENDIF
19042    4 FORMAT('***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT ',
19043     *       'TO THE GLOCDF SUBROUTINE')
19044    5 FORMAT('      IS NON-POSITIVE. *****')
19045   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
19046C
19047C-----START POINT-----------------------------------------------------
19048C
19049      DX=DBLE(X)
19050      DA=DBLE(ALPHA)
19051      DTERM1=-DA*DLOG(1.D0+DEXP(-DX))
19052      IF(DTERM1.LE.-500.D0)THEN
19053        CDF=0.0
19054      ELSEIF(DTERM1.GE.500.D0)THEN
19055        CDF=1.0
19056      ELSE
19057        DCDF=DEXP(DTERM1)
19058        CDF=SNGL(DCDF)
19059      ENDIF
19060C
19061 9999 CONTINUE
19062      RETURN
19063      END
19064      SUBROUTINE GLOPDF(X,ALPHA,PDF)
19065C
19066C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
19067C              FUNCTION VALUE FOR THE TYPE 1 GENERALIZED LOGISTIC
19068C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19069C              THIS DISTRIBUTION IS DEFINED FOR ALL X
19070C              AND HAS THE PROBABILITY DENSITY FUNCTION
19071C              F(X) = ALPHA*EXP(-X)/(1+EXP(-X))**(ALPHA+1)
19072C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
19073C                                AT WHICH THE PROBABILITY DENSITY
19074C                                FUNCTION IS TO BE EVALUATED.
19075C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
19076C                                DENSITY FUNCTION VALUE.
19077C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
19078C             FUNCTION VALUE PDF FOR THE GENERALIZED LOGISTIC
19079C             DISTRIBUTION
19080C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19081C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
19082C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19083C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19084C     LANGUAGE--ANSI FORTRAN.
19085C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19086C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19087C     WRITTEN BY--JAMES J. FILLIBEN
19088C                 STATISTICAL ENGINEERING LABORATORY
19089C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19090C                 GAITHERSBURG, MD 20899-8980
19091C                 PHONE:  301-975-2855
19092C     ORIGINAL VERSION--DECEMBER  1995.
19093C
19094C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19095C
19096C---------------------------------------------------------------------
19097C
19098      DOUBLE PRECISION DX, DA, DPDF
19099      DOUBLE PRECISION DTERM1, DTERM2, DTERM3
19100C
19101      INCLUDE 'DPCOP2.INC'
19102C
19103C---------------------------------------------------------------------
19104C
19105C     CHECK THE INPUT ARGUMENTS FOR ERRORS
19106C
19107      IF(ALPHA.LE.0.0)THEN
19108        WRITE(ICOUT,4)
19109        CALL DPWRST('XXX','BUG ')
19110        WRITE(ICOUT,5)
19111        CALL DPWRST('XXX','BUG ')
19112        WRITE(ICOUT,46)ALPHA
19113        CALL DPWRST('XXX','BUG ')
19114        PDF=0.0
19115        GOTO9999
19116      ENDIF
19117    4 FORMAT('***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT ',
19118     *       'TO THE GLOPDF SUBROUTINE')
19119    5 FORMAT('      IS NON-POSITIVE. *****')
19120   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
19121C
19122C-----START POINT-----------------------------------------------------
19123C
19124      DX=DBLE(X)
19125      DA=DBLE(ALPHA)
19126      DTERM1=DLOG(DA)
19127      DTERM2=DX + (DA+1.0D0)*DLOG(1.0+DEXP(-DX))
19128      DTERM3=DTERM1-DTERM2
19129      IF(DTERM3.LE.-500.D0)THEN
19130        PDF=0.0
19131      ELSE
19132        DPDF=DEXP(DTERM3)
19133        PDF=SNGL(DPDF)
19134      ENDIF
19135C
19136 9999 CONTINUE
19137      RETURN
19138      END
19139      SUBROUTINE GLOPPF(P,ALPHA,PPF)
19140C
19141C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
19142C              FUNCTION VALUE FOR THE TYPE 1 GENERALIZED LOGISTIC
19143C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19144C              THIS DISTRIBUTION IS DEFINED FOR ALL X
19145C              AND HAS THE PROBABILITY DENSITY FUNCTION
19146C              F(X) = ALPHA/(EXP(X)*(1+EXP(-X))**(ALPHA+1))
19147C                                                     0<=X<=1/K
19148C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE
19149C                                (BETWEEN 0.0 (INCLUSIVELY)
19150C                                AND 1.0 (EXCLUSIVELY))
19151C                                AT WHICH THE PERCENT POINT
19152C                                FUNCTION IS TO BE EVALUATED.
19153C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT
19154C                                POINT FUNCTION VALUE.
19155C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION .
19156C             VALUE PPF FOR THE HALF-LOGISTIC DISTRIBUTION
19157C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19158C     RESTRICTIONS--P SHOULD BE BETWEEN 0.0 AND 1.0 (EXCLUSIVELY)
19159C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19160C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
19161C     LANGUAGE--ANSI FORTRAN (1977)
19162C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19163C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19164C     WRITTEN BY--JAMES J. FILLIBEN
19165C                 STATISTICAL ENGINEERING DIVISION
19166C                 INFORMATION TECHNOLOGY LABORATORY
19167C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19168C                 GAITHERSBURG, MD 20899-8980
19169C                 PHONE--301-975-2855
19170C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19171C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
19172C     LANGUAGE--ANSI FORTRAN (1966)
19173C     VERSION NUMBER--95/12
19174C     ORIGINAL VERSION--DECEMBER  1995.
19175C
19176C-----STATEMENTS FOR NON-COMMON VARIABLES-------------------
19177C
19178      DOUBLE PRECISION DP, DA, DPPF
19179      DOUBLE PRECISION DTERM1
19180C
19181C-----COMMON----------------------------------------------------------
19182C
19183      INCLUDE 'DPCOP2.INC'
19184C
19185C-----START POINT-----------------------------------------------------
19186C
19187C     CHECK THE INPUT ARGUMENTS FOR ERRORS
19188C
19189      IF(P.LE.0.0.OR.P.GE.1.0)THEN
19190        WRITE(ICOUT,1)
19191        CALL DPWRST('XXX','BUG ')
19192        WRITE(ICOUT,46)P
19193        CALL DPWRST('XXX','BUG ')
19194        PPF=0.0
19195        GOTO9999
19196      ENDIF
19197    1 FORMAT('***** FATAL ERROR--THE 1ST INPUT ARGUMENT TO THE ',
19198     1'GLOPPF SUBROUTINE IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL')
19199   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',E15.8,' *****')
19200C
19201      DP=DBLE(P)
19202      DA=DBLE(ALPHA)
19203      DTERM1=DP**(-1.0D0/DA) - 1.0D0
19204      DPPF=-DLOG(DTERM1)
19205      PPF=SNGL(DPPF)
19206C
19207 9999 CONTINUE
19208      RETURN
19209      END
19210      SUBROUTINE GLORAN(N,ALPHA,ISEED,X)
19211C
19212C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
19213C              FROM THE GENERALIZED LOGISTIC DISTRIBUTION
19214C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
19215C                                OF RANDOM NUMBERS TO BE
19216C                                GENERATED.
19217C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
19218C                                (OF DIMENSION AT LEAST N)
19219C                                INTO WHICH THE GENERATED
19220C                                RANDOM SAMPLE WILL BE PLACED.
19221C     OUTPUT--A RANDOM SAMPLE OF SIZE N
19222C             FROM THE GENERALIZED LOGISTIC DISTRIBUTION
19223C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19224C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
19225C                   OF N FOR THIS SUBROUTINE.
19226C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
19227C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
19228C     LANGUAGE--ANSI FORTRAN (1977)
19229C     WRITTEN BY--JAMES J. FILLIBEN
19230C                 STATISTICAL ENGINEERING DIVISION
19231C                 INFORMATION TECHNOLOGY LABORATORY
19232C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19233C                 GAITHERSBURG, MD 20899-8980
19234C                 PHONE--301-975-2855
19235C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19236C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
19237C     LANGUAGE--ANSI FORTRAN (1977)
19238C     VERSION NUMBER--2004/3
19239C     ORIGINAL VERSION--MARCH     2004.
19240C
19241C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19242C
19243C---------------------------------------------------------------------
19244C
19245      DIMENSION X(*)
19246C
19247C-----COMMON----------------------------------------------------------
19248C
19249      INCLUDE 'DPCOP2.INC'
19250C
19251C-----START POINT-----------------------------------------------------
19252C
19253C     CHECK THE INPUT ARGUMENTS FOR ERRORS
19254C
19255      IF(N.LT.1)THEN
19256        WRITE(ICOUT,5)
19257        CALL DPWRST('XXX','BUG ')
19258        WRITE(ICOUT,47)N
19259        CALL DPWRST('XXX','BUG ')
19260        RETURN
19261      ENDIF
19262    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
19263     1       'LOGISTIC RANDOM NUMBERS IS NON-POSITIVE.')
19264   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
19265C
19266C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
19267C
19268      CALL UNIRAN(N,ISEED,X)
19269C
19270C     GENERATE N GENERALIZED LOGISTIC RANDOM NUMBERS
19271C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD
19272C
19273      DO100I=1,N
19274      CALL GLOPPF(X(I),ALPHA,XTEMP)
19275      X(I)=XTEMP
19276  100 CONTINUE
19277C
19278      RETURN
19279      END
19280      SUBROUTINE GL2CDF(DX,DALPHA,DCDF)
19281C
19282C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
19283C              FUNCTION VALUE FOR THE TYPE 2 GENERALIZED LOGISTIC
19284C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19285C              THIS DISTRIBUTION IS DEFINED FOR ALL X
19286C              AND HAS THE CUMULATIVE DISTRIBUTION FUNCTION
19287C              F(X) = 1 - EXP(-ALPHA*X)/(1+EXP(-X))**ALPHA
19288C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE
19289C                                AT WHICH THE PROBABILITY DENSITY
19290C                                FUNCTION IS TO BE EVALUATED.
19291C                     --DALPHA = THE DOUBLE PRECISION SHAPE
19292C                                PARAMETER.
19293C     OUTPUT ARGUMENTS--DCDF   = THE DOUBLE PRECISION CUMULATIVE
19294C                                DISTRIBUTION FUNCTION VALUE.
19295C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION FUNCTION
19296C             VALUE FOR THE TYPE 2 GENERALIZED LOGISTIC DISTRIBUTION
19297C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19298C     RESTRICTIONS--ALPHA SHOULD BE POSITIVE.
19299C     FORTRAN LIBRARY SUBROUTINES NEEDED--DLOG, DEXP.
19300C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19301C     LANGUAGE--ANSI FORTRAN.
19302C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19303C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19304C     WRITTEN BY--JAMES J. FILLIBEN
19305C                 STATISTICAL ENGINEERING LABORATORY
19306C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19307C                 GAITHERSBURG, MD 20899-8980
19308C                 PHONE:  301-975-2855
19309C     ORIGINAL VERSION--MARCH     2006.
19310C
19311C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19312C
19313C---------------------------------------------------------------------
19314C
19315      DOUBLE PRECISION DX
19316      DOUBLE PRECISION DALPHA
19317      DOUBLE PRECISION DCDF
19318      DOUBLE PRECISION DTERM1
19319C
19320      INCLUDE 'DPCOP2.INC'
19321C
19322C---------------------------------------------------------------------
19323C
19324C     CHECK THE INPUT ARGUMENTS FOR ERRORS
19325C
19326      IF(DALPHA.LE.0.0D0)THEN
19327        WRITE(ICOUT,4)
19328        CALL DPWRST('XXX','BUG ')
19329        WRITE(ICOUT,46)DALPHA
19330        CALL DPWRST('XXX','BUG ')
19331        DCDF=0.0D0
19332        GOTO9999
19333      ENDIF
19334    4 FORMAT('***** ERROR--THE SHAPE PARAMETER FOR THE GL2CDF ',
19335     1       'SUBROUTINE IS NON-POSITIVE.')
19336   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
19337C
19338C-----START POINT-----------------------------------------------------
19339C
19340      DTERM1=-DALPHA*DX - DALPHA*DLOG(1.0D0 + DEXP(-DX))
19341      DCDF=1.0D0 - DEXP(DTERM1)
19342C
19343 9999 CONTINUE
19344      RETURN
19345      END
19346      DOUBLE PRECISION FUNCTION GL2FU2(DX)
19347C
19348C     PURPOSE--GL2PPF CALLS DFZERO TO FIND A ROOT FOR THE PERCENT
19349C              POINT FUNCTION.  GL2FU2 IS THE FUNCTION FOR WHICH
19350C              THE ZERO IS FOUND.  IT IS:
19351C                 P - GL2CDF(X,ALPHA)
19352C              WHERE P IS THE DESIRED PERCENT POINT.
19353C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
19354C                                WHICH THE CUMULATIVE DISTRIBUTION
19355C                                FUNCTION IS TO BE EVALUATED.
19356C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
19357C             FUNCTION VALUE GL2FU2.
19358C     PRINTING--NONE.
19359C     RESTRICTIONS--NONE.
19360C     OTHER DATAPAC   SUBROUTINES NEEDED--GL2CDF.
19361C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19362C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19363C     LANGUAGE--ANSI FORTRAN (1977)
19364C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19365C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19366C     WRITTEN BY--JAMES J. FILLIBEN
19367C                 STATISTICAL ENGINEERING DIVISION
19368C                 INFORMATION TECHNOLOGY LABORATORY
19369C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
19370C                 GAITHERSBURG, MD 20899-8980
19371C                 PHONE--301-975-2855
19372C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19373C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
19374C     LANGUAGE--ANSI FORTRAN (1977)
19375C     VERSION NUMBER--2006.3
19376C     ORIGINAL VERSION--MARCH     2006.
19377C
19378C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19379C
19380C---------------------------------------------------------------------
19381C
19382      DOUBLE PRECISION DX
19383      DOUBLE PRECISION DCDF
19384C
19385      DOUBLE PRECISION DP
19386      DOUBLE PRECISION DALPHA
19387      COMMON/GL2COM/DP,DALPHA
19388C
19389      INCLUDE 'DPCOP2.INC'
19390C
19391C-----START POINT-----------------------------------------------------
19392C
19393      CALL GL2CDF(DX,DALPHA,DCDF)
19394      GL2FU2=DP - DCDF
19395C
19396      RETURN
19397      END
19398      SUBROUTINE GL2PDF(DX,DALPHA,DPDF)
19399C
19400C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
19401C              FUNCTION VALUE FOR THE TYPE 2 GENERALIZED LOGISTIC
19402C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19403C              THIS DISTRIBUTION IS DEFINED FOR ALL X
19404C              AND HAS THE PROBABILITY DENSITY FUNCTION
19405C              F(X,ALPHA) = ALPHA*EXP(X)/(1+EXP(X))**(ALPHA+1)
19406C                           ALPHA > 0
19407C
19408C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE
19409C                                AT WHICH THE PROBABILITY DENSITY
19410C                                FUNCTION IS TO BE EVALUATED.
19411C                     --DALPHA = THE DOUBLE PRECISION SHAPE
19412C                                PARAMETER.
19413C     OUTPUT ARGUMENTS--DPDF   = THE DOUBLE PRECISION PROBABILITY
19414C                                DENSITY FUNCTION VALUE.
19415C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
19416C             VALUE FOR THE TYPE 2 GENERALIZED LOGISTIC DISTRIBUTION
19417C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19418C     RESTRICTIONS--ALPHA SHOULD BE POSITIVE.
19419C     FORTRAN LIBRARY SUBROUTINES NEEDED--EXP, LOG.
19420C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19421C     LANGUAGE--ANSI FORTRAN.
19422C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19423C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19424C     WRITTEN BY--JAMES J. FILLIBEN
19425C                 STATISTICAL ENGINEERING LABORATORY
19426C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19427C                 GAITHERSBURG, MD 20899-8980
19428C                 PHONE:  301-975-2855
19429C     ORIGINAL VERSION--MARCH     2006.
19430C
19431C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19432C
19433C---------------------------------------------------------------------
19434C
19435      DOUBLE PRECISION DX
19436      DOUBLE PRECISION DALPHA
19437      DOUBLE PRECISION DPDF
19438      DOUBLE PRECISION DTERM1
19439      DOUBLE PRECISION DTERM2
19440      DOUBLE PRECISION DTERM3
19441C
19442      INCLUDE 'DPCOP2.INC'
19443C
19444C---------------------------------------------------------------------
19445C
19446C     CHECK THE INPUT ARGUMENTS FOR ERRORS
19447C
19448      IF(DALPHA.LE.0.0D0)THEN
19449        WRITE(ICOUT,4)
19450        CALL DPWRST('XXX','BUG ')
19451        WRITE(ICOUT,46)DALPHA
19452        CALL DPWRST('XXX','BUG ')
19453        DPDF=0.0D0
19454        GOTO9999
19455      ENDIF
19456    4 FORMAT('***** ERROR--THE SHAPE PARAMETER FOR THE GL2PDF ',
19457     1       'SUBROUTINE IS NON-POSITIVE.')
19458   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
19459C
19460C-----START POINT-----------------------------------------------------
19461C
19462C  COMPUTE FIRST COMPONENT
19463C
19464      DX=-DX
19465      DTERM1=DLOG(DALPHA)
19466      DTERM2=DX + (DALPHA+1.0D0)*DLOG(1.0+DEXP(-DX))
19467      DTERM3=DTERM1-DTERM2
19468      DPDF=DEXP(DTERM3)
19469C
19470 9999 CONTINUE
19471      RETURN
19472      END
19473      SUBROUTINE GL2PPF(DP,DALPHA,DPPF)
19474C
19475C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
19476C              FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 2
19477C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19478C              THIS DISTRIBUTION IS DEFINED FOR REAL X AND THE
19479C              PERCENT POINT FUNCTION IS COMPUTED BY
19480C              NUMERICALLY INVERTING THE CDF FUNCTION.
19481C     INPUT  ARGUMENTS--DP     = THE DOUBLE PRECISION VALUE AT
19482C                                WHICH THE PERCENT POINT
19483C                                FUNCTION IS TO BE EVALUATED.
19484C                     --DALPHA = THE FIRST SHAPE PARAMETER
19485C     OUTPUT ARGUMENTS--DPPF   = THE DOUBLE PRECISION CUMULATIVE
19486C                                DISTRIBUTION FUNCTION VALUE.
19487C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION VALUE DPPF.
19488C     PRINTING--NONE.
19489C     RESTRICTIONS--NONE.
19490C     OTHER DATAPAC   SUBROUTINES NEEDED--DFZERO.
19491C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19492C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19493C     LANGUAGE--ANSI FORTRAN (1977)
19494C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19495C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19496C     WRITTEN BY--JAMES J. FILLIBEN
19497C                 STATISTICAL ENGINEERING DIVISION
19498C                 INFORMATION TECHNOLOGY LABORATORY
19499C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
19500C                 GAITHERSBURG, MD 20899-8980
19501C                 PHONE--301-975-2855
19502C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19503C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
19504C     LANGUAGE--ANSI FORTRAN (1977)
19505C     ORIGINAL VERSION--MARCH     2006.
19506C
19507C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19508C
19509C---------------------------------------------------------------------
19510C
19511      DOUBLE PRECISION DP
19512      DOUBLE PRECISION DALPHA
19513      DOUBLE PRECISION DPPF
19514C
19515      DOUBLE PRECISION GL2FU2
19516      EXTERNAL GL2FU2
19517C
19518      DOUBLE PRECISION DP2
19519      DOUBLE PRECISION DALPH2
19520      COMMON/GL2COM/DP2,DALPH2
19521C
19522      DOUBLE PRECISION XLOW
19523      DOUBLE PRECISION XLOW2
19524      DOUBLE PRECISION XUP
19525      DOUBLE PRECISION XUP2
19526      DOUBLE PRECISION PTEMPL
19527      DOUBLE PRECISION PTEMPU
19528      DOUBLE PRECISION AE
19529      DOUBLE PRECISION RE
19530C
19531      INCLUDE 'DPCOP2.INC'
19532C
19533C-----START POINT-----------------------------------------------------
19534C
19535C               ********************************************
19536C               **  STEP 1--                              **
19537C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
19538C               ********************************************
19539C
19540      DPPF=0.0D0
19541      NIT=0
19542      IF(DALPHA.LE.0.0D0)THEN
19543        WRITE(ICOUT,101)
19544  101   FORMAT('***** ERROR--THE FIRST SHAPE PARAMETER, ALPHA, TO ',
19545     1         'GL2PPF IS NON-POSITIVE.')
19546        CALL DPWRST('XXX','BUG ')
19547        WRITE(ICOUT,104)DALPHA
19548  104   FORMAT('      THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
19549        CALL DPWRST('XXX','BUG ')
19550        GOTO9000
19551      ELSEIF(DP.LE.0.0D0.OR.DP.GE.1.0D0)THEN
19552         WRITE(ICOUT,61)
19553   61    FORMAT('***** ERROR--THE FIRST ARGUMENT TO GL2PPF ',
19554     1          'IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
19555         CALL DPWRST('XXX','BUG ')
19556         WRITE(ICOUT,104)DP
19557         CALL DPWRST('XXX','BUG ')
19558         GOTO9000
19559      ENDIF
19560C
19561C  STEP 1: FIND BRACKETING INTERVAL.  START WITH (-5,5) AND
19562C          INCREMENT UNITL A BRACKETING INTERVAL IS FOUND.
19563C
19564      NIT=0
19565      MAXIT=2000
19566      XLOW2=-10.0D0
19567      XUP2=10.0D0
19568  200 CONTINUE
19569        CALL GL2CDF(XLOW2,DALPHA,PTEMPL)
19570        CALL GL2CDF(XUP2,DALPHA,PTEMPU)
19571        IF(PTEMPL.LT.DP .AND. PTEMPU.GT.DP)THEN
19572          XUP=XUP2
19573          XLOW=XLOW2
19574          GOTO300
19575        ELSEIF(PTEMPL.LT.DP .AND. PTEMPU.LT.DP)THEN
19576          NIT=NIT+1
19577          XUP2=10.0D0*XUP2
19578          IF(NIT.LE.MAXIT)GOTO200
19579        ELSEIF(PTEMPL.GT.DP .AND. PTEMPU.GT.DP)THEN
19580          NIT=NIT+1
19581          XLOW2=10.0D0*XLOW2
19582          IF(NIT.LE.MAXIT)GOTO200
19583        ENDIF
19584C
19585        WRITE(ICOUT,201)
19586  201   FORMAT('***** ERROR FROM GL2PPF--UNABLE TO FIND A ',
19587     1         'BRACKETING INTERVAL')
19588        CALL DPWRST('XXX','BUG ')
19589        GOTO9000
19590C
19591  300 CONTINUE
19592      AE=1.0D-8
19593      RE=1.0D-8
19594      DP2=DP
19595      DALPH2=DALPHA
19596      CALL DFZERO(GL2FU2,XLOW,XUP,XUP,RE,AE,IFLAG)
19597C
19598      DPPF=XLOW
19599C
19600      IF(IFLAG.EQ.2)THEN
19601C
19602C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
19603CCCCC   WRITE(ICOUT,999)
19604  999   FORMAT(1X)
19605CCCCC   CALL DPWRST('XXX','BUG ')
19606CCCCC   WRITE(ICOUT,121)
19607CC111   FORMAT('***** WARNING FROM GL2PPF--')
19608CCCCC   CALL DPWRST('XXX','BUG ')
19609CCCCC   WRITE(ICOUT,113)
19610CC113   FORMAT('      PPF VALUE MAY NOT BE COMPUTED TO DESIRED ',
19611CCCCC1         'TOLERANCE.')
19612CCCCC   CALL DPWRST('XXX','BUG ')
19613      ELSEIF(IFLAG.EQ.3)THEN
19614        WRITE(ICOUT,999)
19615        CALL DPWRST('XXX','BUG ')
19616        WRITE(ICOUT,121)
19617  121   FORMAT('***** WARNING FROM GL2PPF--')
19618        CALL DPWRST('XXX','BUG ')
19619        WRITE(ICOUT,123)
19620  123   FORMAT('      PPF VALUE MAY BE NEAR A SINGULAR POINT.')
19621        CALL DPWRST('XXX','BUG ')
19622      ELSEIF(IFLAG.EQ.4)THEN
19623        WRITE(ICOUT,999)
19624        CALL DPWRST('XXX','BUG ')
19625        WRITE(ICOUT,131)
19626  131   FORMAT('***** ERROR FROM GL2PPF--')
19627        CALL DPWRST('XXX','BUG ')
19628        WRITE(ICOUT,133)
19629  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
19630        CALL DPWRST('XXX','BUG ')
19631      ELSEIF(IFLAG.EQ.5)THEN
19632        WRITE(ICOUT,999)
19633        CALL DPWRST('XXX','BUG ')
19634        WRITE(ICOUT,121)
19635        CALL DPWRST('XXX','BUG ')
19636        WRITE(ICOUT,143)
19637  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
19638        CALL DPWRST('XXX','BUG ')
19639      ENDIF
19640C
19641 9000 CONTINUE
19642      RETURN
19643      END
19644      SUBROUTINE GL2RAN(N,ALPHA,ISEED,X)
19645C
19646C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
19647C              FROM THE GENERALIZED LOGISTIC TYPE 2 DISTRIBUTION
19648C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
19649C                                OF RANDOM NUMBERS TO BE
19650C                                GENERATED.
19651C                     --ALPHA  = THE SHAPE PARAMETER
19652C                     --SEED   = THE SEED FOR THE RANDOM NUMBER
19653C                                GENERATOR
19654C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
19655C                                (OF DIMENSION AT LEAST N)
19656C                                INTO WHICH THE GENERATED
19657C                                RANDOM SAMPLE WILL BE PLACED.
19658C     OUTPUT--A RANDOM SAMPLE OF SIZE N
19659C             FROM THE GENERALIZED LOGISTIC TYPE 2 DISTRIBUTION
19660C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19661C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
19662C                   OF N FOR THIS SUBROUTINE.
19663C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GL2PPF.
19664C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
19665C     LANGUAGE--ANSI FORTRAN (1977)
19666C     WRITTEN BY--JAMES J. FILLIBEN
19667C                 STATISTICAL ENGINEERING DIVISION
19668C                 INFORMATION TECHNOLOGY LABORATORY
19669C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19670C                 GAITHERSBURG, MD 20899-8980
19671C                 PHONE--301-975-2855
19672C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19673C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
19674C     LANGUAGE--ANSI FORTRAN (1977)
19675C     VERSION NUMBER--2006/3
19676C     ORIGINAL VERSION--MARCH     2006.
19677C
19678C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19679C
19680C---------------------------------------------------------------------
19681C
19682      DIMENSION X(*)
19683C
19684      DOUBLE PRECISION DX
19685      DOUBLE PRECISION DPPF
19686C
19687C-----COMMON----------------------------------------------------------
19688C
19689      INCLUDE 'DPCOP2.INC'
19690C
19691C-----START POINT-----------------------------------------------------
19692C
19693C     CHECK THE INPUT ARGUMENTS FOR ERRORS
19694C
19695      IF(N.LT.1)THEN
19696        WRITE(ICOUT,5)
19697        CALL DPWRST('XXX','BUG ')
19698        WRITE(ICOUT,6)
19699        CALL DPWRST('XXX','BUG ')
19700        WRITE(ICOUT,47)N
19701        CALL DPWRST('XXX','BUG ')
19702        RETURN
19703      ENDIF
19704    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
19705     1       'LOGISTIC TYPE 2')
19706    6 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
19707   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
19708C
19709C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
19710C
19711      CALL UNIRAN(N,ISEED,X)
19712C
19713C     GENERATE N GENERALIZED LOGISTIC TYPE 2 RANDOM NUMBERS
19714C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD
19715C
19716      DO100I=1,N
19717        DX=DBLE(X(I))
19718        CALL GL2PPF(DX,DBLE(ALPHA),DPPF)
19719        X(I)=REAL(DPPF)
19720  100 CONTINUE
19721C
19722      RETURN
19723      END
19724      SUBROUTINE GL3CDF(DX,DALPHA,DCDF)
19725C
19726C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
19727C              FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 3
19728C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19729C              THE CUMULATIVE DISTRIBUTION IS COMPUTED BY
19730C              NUMERICALLY INTEGRATING THE PDF FUNCTION.
19731C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
19732C                                WHICH THE CUMULATIVE DISTRIBUTION
19733C                                FUNCTION IS TO BE EVALUATED.
19734C                     --DALPHA = THE DOUBLE PRECISION SHAPE PARAMETER.
19735C     OUTPUT ARGUMENTS--DCDF   = THE DOUBLE PRECISION CUMULATIVE
19736C                                DISTRIBUTION FUNCTION VALUE.
19737C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
19738C             FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 3
19739C             DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19740C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19741C     RESTRICTIONS--NONE.
19742C     OTHER DATAPAC   SUBROUTINES NEEDED--DQAGI.
19743C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19744C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19745C     LANGUAGE--ANSI FORTRAN (1977)
19746C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTINUOUS
19747C                 UNIVARIATE DISTRIBUTIONS--VOLUME II", SECOND EDITION,
19748C                 JOHN WILEY, PP. 140-142, 1994.
19749C     WRITTEN BY--JAMES J. FILLIBEN
19750C                 STATISTICAL ENGINEERING DIVISION
19751C                 INFORMATION TECHNOLOGY LABORATORY
19752C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19753C                 GAITHERSBURG, MD 20899-8980
19754C                 PHONE--301-975-2855
19755C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19756C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
19757C     LANGUAGE--ANSI FORTRAN (1977)
19758C     VERSION ALPHAMBER--2006/3
19759C     ORIGINAL VERSION--MARCH     2006.
19760C
19761C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19762C
19763C---------------------------------------------------------------------
19764C
19765      INTEGER LIMIT
19766      INTEGER LENW
19767      PARAMETER(LIMIT=200)
19768      PARAMETER(LENW=4*LIMIT)
19769      INTEGER INF
19770      INTEGER NEVAL
19771      INTEGER IER
19772      INTEGER LAST
19773      INTEGER IWORK(LIMIT)
19774      DOUBLE PRECISION DX
19775      DOUBLE PRECISION DALPHA
19776      DOUBLE PRECISION DCDF
19777      DOUBLE PRECISION DA
19778      DOUBLE PRECISION EPSABS
19779      DOUBLE PRECISION EPSREL
19780      DOUBLE PRECISION ABSERR
19781      DOUBLE PRECISION WORK(LENW)
19782C
19783      DOUBLE PRECISION GL3FUN
19784      EXTERNAL GL3FUN
19785C
19786      DOUBLE PRECISION DALPH2
19787      COMMON/GL3COM/DALPH2
19788C
19789C-----COMMON----------------------------------------------------------
19790C
19791      INCLUDE 'DPCOP2.INC'
19792C
19793C-----DATA STATEMENTS-------------------------------------------------
19794C
19795C-----START POINT-----------------------------------------------------
19796C
19797C               ********************************************
19798C               **  STEP 1--                              **
19799C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
19800C               ********************************************
19801C
19802      DCDF=0.0D0
19803      IF(DALPHA.LE.0.0D0)THEN
19804        WRITE(ICOUT,101)
19805        CALL DPWRST('XXX','BUG ')
19806        WRITE(ICOUT,102)
19807        CALL DPWRST('XXX','BUG ')
19808        WRITE(ICOUT,104)DALPHA
19809        CALL DPWRST('XXX','BUG ')
19810        GOTO9000
19811      ENDIF
19812  101 FORMAT('***** ERROR--THE SHAPE PARAMETER, ALPHA, TO THE')
19813  102 FORMAT('      GL3CDF ROUTINE IS NON-POSITIVE.')
19814  104 FORMAT('***** VALUE OF THE ARGUMENT = ',G15.7)
19815C
19816C
19817C               ************************************
19818C               **  STEP 1--                      **
19819C               **  COMPUTE THE DENSITY FUNCTION  **
19820C               ************************************
19821C
19822      EPSABS=1.0D-8
19823      EPSREL=1.0D-8
19824      IER=0
19825      IKEY=3
19826      DCDF=0.0D0
19827C
19828      DA=1.0D-7
19829      DALPH2=DALPHA
19830C
19831      IF(DX.LE.0.0D0)THEN
19832        INF=-1
19833        CALL DQAGI(GL3FUN,DX,INF,EPSABS,EPSREL,DCDF,ABSERR,NEVAL,
19834     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
19835      ELSE
19836C
19837        INF=+1
19838        CALL DQAGI(GL3FUN,DX,INF,EPSABS,EPSREL,DCDF,ABSERR,NEVAL,
19839     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
19840        DCDF=1.0D0 - DCDF
19841      ENDIF
19842C
19843      IF(IER.EQ.1)THEN
19844        WRITE(ICOUT,999)
19845  999   FORMAT(1X)
19846        CALL DPWRST('XXX','BUG ')
19847        WRITE(ICOUT,111)
19848  111   FORMAT('***** ERROR FROM GL3CDF--')
19849        CALL DPWRST('XXX','BUG ')
19850        WRITE(ICOUT,113)
19851  113   FORMAT('      MAXIMUM NUMBER OF SUBDIVISIONS EXCEEDED.')
19852        CALL DPWRST('XXX','BUG ')
19853      ELSEIF(IER.EQ.2)THEN
19854        WRITE(ICOUT,999)
19855        CALL DPWRST('XXX','BUG ')
19856        WRITE(ICOUT,121)
19857  121   FORMAT('***** ERROR FROM GL3CDF--')
19858        CALL DPWRST('XXX','BUG ')
19859        WRITE(ICOUT,123)
19860  123   FORMAT('      ROUNDOFF ERROR PREVENTS REQUESTED TOLERANCE ',
19861     1         'FROM BEING ACHIEVED.')
19862        CALL DPWRST('XXX','BUG ')
19863      ELSEIF(IER.EQ.3)THEN
19864        WRITE(ICOUT,999)
19865        CALL DPWRST('XXX','BUG ')
19866        WRITE(ICOUT,131)
19867  131   FORMAT('***** ERROR FROM GL3CDF--')
19868        CALL DPWRST('XXX','BUG ')
19869        WRITE(ICOUT,133)
19870  133   FORMAT('      BAD INTEGRAND BEHAVIOUR DETECTED.')
19871        CALL DPWRST('XXX','BUG ')
19872      ELSEIF(IER.EQ.4)THEN
19873        WRITE(ICOUT,999)
19874        CALL DPWRST('XXX','BUG ')
19875        WRITE(ICOUT,141)
19876  141   FORMAT('***** ERROR FROM GL3CDF--')
19877        CALL DPWRST('XXX','BUG ')
19878        WRITE(ICOUT,143)
19879  143   FORMAT('      INTEGRATION DID NOT CONVERGE.')
19880        CALL DPWRST('XXX','BUG ')
19881      ELSEIF(IER.EQ.5)THEN
19882        WRITE(ICOUT,999)
19883        CALL DPWRST('XXX','BUG ')
19884        WRITE(ICOUT,151)
19885  151   FORMAT('***** ERROR FROM GL3CDF--')
19886        CALL DPWRST('XXX','BUG ')
19887        WRITE(ICOUT,153)
19888  153   FORMAT('      THE INTEGRATION IS PROBABLY DIVERGENT.')
19889        CALL DPWRST('XXX','BUG ')
19890      ELSEIF(IER.EQ.6)THEN
19891        WRITE(ICOUT,999)
19892        CALL DPWRST('XXX','BUG ')
19893        WRITE(ICOUT,161)
19894  161   FORMAT('***** ERROR FROM GL3CDF--')
19895        CALL DPWRST('XXX','BUG ')
19896        WRITE(ICOUT,163)
19897  163   FORMAT('      INVALID INPUT TO THE INTEGRATION ROUTINE.')
19898        CALL DPWRST('XXX','BUG ')
19899      ENDIF
19900C
19901 9000 CONTINUE
19902      RETURN
19903      END
19904      DOUBLE PRECISION FUNCTION GL3FUN(DX)
19905C
19906C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
19907C              FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 3
19908C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19909C              THIS DISTRIBUTION IS DEFINED FOR X > 0 AND HAS
19910C              THE PROBABILITY DENSITY FUNCTION
19911C              f(X;ALPHA) = (1/BETA(ALPHA,ALPHA)*EXP(-ALPHA*X)/
19912C                           (1+EXP(-X))**(2*ALPHA)    ALPHA > 0
19913C              THIS FUNCTION IS USED FOR INTEGRATION BY THE
19914C              GL3CDF ROUTINE.
19915C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
19916C                                WHICH THE PROBABILITY DENSITY
19917C                                FUNCTION IS TO BE EVALUATED.
19918C     OUTPUT ARGUMENTS--GL3FUN = THE DOUBLE PRECISION PROBABILITY
19919C                                DENSITY FUNCTION VALUE.
19920C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
19921C             FUNCTION VALUE PDF FOR THE GENERALIZED LOGISTIC
19922C             TYPE 3 DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
19923C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
19924C     RESTRICTIONS--NONE.
19925C     OTHER DATAPAC   SUBROUTINES NEEDED--GL3PDF.
19926C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19927C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19928C     LANGUAGE--ANSI FORTRAN (1977)
19929C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19930C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
19931C     WRITTEN BY--JAMES J. FILLIBEN
19932C                 STATISTICAL ENGINEERING DIVISION
19933C                 INFORMATION TECHNOLOGY LABORATORY
19934C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
19935C                 GAITHERSBURG, MD 20899-8980
19936C                 PHONE--301-975-2855
19937C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19938C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
19939C     LANGUAGE--ANSI FORTRAN (1977)
19940C     VERSION NUMBER--2006.3
19941C     ORIGINAL VERSION--MARCH     2006.
19942C
19943C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
19944C
19945C---------------------------------------------------------------------
19946C
19947      DOUBLE PRECISION DX
19948      DOUBLE PRECISION DPDF
19949C
19950      DOUBLE PRECISION DALPHA
19951      COMMON/GL3COM/DALPHA
19952C
19953C-----COMMON----------------------------------------------------------
19954C
19955      INCLUDE 'DPCOP2.INC'
19956C
19957C-----DATA STATEMENTS-------------------------------------------------
19958C
19959C-----START POINT-----------------------------------------------------
19960C
19961C               ************************************
19962C               **  STEP 1--                      **
19963C               **  COMPUTE THE DENSITY FUNCTION  **
19964C               ************************************
19965C
19966      CALL GL3PDF(DX,DALPHA,DPDF)
19967      GL3FUN=DPDF
19968C
19969      RETURN
19970      END
19971      DOUBLE PRECISION FUNCTION GL3FU2(DX)
19972C
19973C     PURPOSE--GL3PPF CALLS DFZERO TO FIND A ROOT FOR THE PERCENT
19974C              POINT FUNCTION.  GL3FU2 IS THE FUNCTION FOR WHICH
19975C              THE ZERO IS FOUND.  IT IS:
19976C                 P - GL3CDF(X,P,Q)
19977C              WHERE P IS THE DESIRED PERCENT POINT.
19978C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
19979C                                WHICH THE CUMULATIVE DISTRIBUTION
19980C                                FUNCTION IS TO BE EVALUATED.
19981C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
19982C             FUNCTION VALUE GL3FU2.
19983C     PRINTING--NONE.
19984C     RESTRICTIONS--NONE.
19985C     OTHER DATAPAC   SUBROUTINES NEEDED--GL3CDF.
19986C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
19987C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
19988C     LANGUAGE--ANSI FORTRAN (1977)
19989C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
19990C                 DISTRIBUTIONS--2, 1994, PAGES 140-143
19991C     WRITTEN BY--JAMES J. FILLIBEN
19992C                 STATISTICAL ENGINEERING DIVISION
19993C                 INFORMATION TECHNOLOGY LABORATORY
19994C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
19995C                 GAITHERSBURG, MD 20899-8980
19996C                 PHONE--301-975-2855
19997C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
19998C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
19999C     LANGUAGE--ANSI FORTRAN (1977)
20000C     VERSION NUMBER--2006.3
20001C     ORIGINAL VERSION--MARCH     2006.
20002C
20003C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20004C
20005C---------------------------------------------------------------------
20006C
20007      DOUBLE PRECISION DX
20008      DOUBLE PRECISION DCDF
20009C
20010      DOUBLE PRECISION DP
20011      DOUBLE PRECISION DALPHA
20012      COMMON/GL3CO2/DP,DALPHA
20013C
20014      INCLUDE 'DPCOP2.INC'
20015C
20016C-----START POINT-----------------------------------------------------
20017C
20018      CALL GL3CDF(DX,DALPHA,DCDF)
20019      GL3FU2=DP - DCDF
20020C
20021      RETURN
20022      END
20023      SUBROUTINE GL3RAN(N,ALPHA,ISEED,X)
20024C
20025C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
20026C              FROM THE GENERALIZED LOGISTIC TYPE 3 DISTRIBUTION
20027C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
20028C                                OF RANDOM NUMBERS TO BE
20029C                                GENERATED.
20030C                     --ALPHA  = THE SHAPE PARAMETER
20031C                     --SEED   = THE SEED FOR THE RANDOM NUMBER
20032C                                GENERATOR
20033C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
20034C                                (OF DIMENSION AT LEAST N)
20035C                                INTO WHICH THE GENERATED
20036C                                RANDOM SAMPLE WILL BE PLACED.
20037C     OUTPUT--A RANDOM SAMPLE OF SIZE N
20038C             FROM THE GENERALIZED LOGISTIC TYPE 3 DISTRIBUTION
20039C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
20040C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
20041C                   OF N FOR THIS SUBROUTINE.
20042C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GL3PPF.
20043C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
20044C     LANGUAGE--ANSI FORTRAN (1977)
20045C     WRITTEN BY--JAMES J. FILLIBEN
20046C                 STATISTICAL ENGINEERING DIVISION
20047C                 INFORMATION TECHNOLOGY LABORATORY
20048C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
20049C                 GAITHERSBURG, MD 20899-8980
20050C                 PHONE--301-975-2855
20051C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
20052C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
20053C     LANGUAGE--ANSI FORTRAN (1977)
20054C     VERSION NUMBER--2006/3
20055C     ORIGINAL VERSION--MARCH     2006.
20056C
20057C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20058C
20059C---------------------------------------------------------------------
20060C
20061      DIMENSION X(*)
20062C
20063      DOUBLE PRECISION DX
20064      DOUBLE PRECISION DPPF
20065C
20066C-----COMMON----------------------------------------------------------
20067C
20068      INCLUDE 'DPCOP2.INC'
20069C
20070C-----START POINT-----------------------------------------------------
20071C
20072C     CHECK THE INPUT ARGUMENTS FOR ERRORS
20073C
20074      IF(N.LT.1)THEN
20075        WRITE(ICOUT,5)
20076        CALL DPWRST('XXX','BUG ')
20077        WRITE(ICOUT,6)
20078        CALL DPWRST('XXX','BUG ')
20079        WRITE(ICOUT,47)N
20080        CALL DPWRST('XXX','BUG ')
20081        RETURN
20082      ENDIF
20083    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
20084     1       'LOGISTIC TYPE 3')
20085    6 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
20086   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
20087C
20088C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
20089C
20090      CALL UNIRAN(N,ISEED,X)
20091C
20092C     GENERATE N GENERALIZED LOGISTIC TYPE 3 RANDOM NUMBERS
20093C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD
20094C
20095      DO100I=1,N
20096        DX=DBLE(X(I))
20097        CALL GL3PPF(DX,DBLE(ALPHA),DPPF)
20098        X(I)=REAL(DPPF)
20099  100 CONTINUE
20100C
20101      RETURN
20102      END
20103      SUBROUTINE GL3PDF(DX,DALPHA,DPDF)
20104C
20105C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
20106C              FUNCTION VALUE FOR THE TYPE 3 GENERALIZED LOGISTIC
20107C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
20108C              THIS DISTRIBUTION IS DEFINED FOR ALL X
20109C              AND HAS THE PROBABILITY DENSITY FUNCTION
20110C              f(X;ALPHA) = (1/BETA(ALPHA,ALPHA)*EXP(-ALPHA*X)/
20111C                           (1+EXP(-X))**(2*ALPHA)
20112C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE
20113C                                AT WHICH THE PROBABILITY DENSITY
20114C                                FUNCTION IS TO BE EVALUATED.
20115C                     --DALPHA = THE DOUBLE PRECISION SHAPE
20116C                                PARAMETER.
20117C     OUTPUT ARGUMENTS--DPDF   = THE DOUBLE PRECISION PROBABILITY
20118C                                DENSITY FUNCTION VALUE.
20119C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
20120C             VALUE FOR THE TYPE 3 GENERALIZED LOGISTIC DISTRIBUTION
20121C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
20122C     RESTRICTIONS--ALPHA SHOULD BE POSITIVE.
20123C     FORTRAN LIBRARY SUBROUTINES NEEDED--DLOG, DEXP,DLBETA.
20124C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
20125C     LANGUAGE--ANSI FORTRAN.
20126C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
20127C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
20128C     WRITTEN BY--JAMES J. FILLIBEN
20129C                 STATISTICAL ENGINEERING LABORATORY
20130C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
20131C                 GAITHERSBURG, MD 20899-8980
20132C                 PHONE:  301-975-2855
20133C     ORIGINAL VERSION--MARCH     2006.
20134C
20135C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20136C
20137C---------------------------------------------------------------------
20138C
20139      DOUBLE PRECISION DX
20140      DOUBLE PRECISION DALPHA
20141      DOUBLE PRECISION DPDF
20142      DOUBLE PRECISION DTERM1
20143      DOUBLE PRECISION DTERM2
20144      DOUBLE PRECISION DLBETA
20145C
20146      INCLUDE 'DPCOP2.INC'
20147C
20148C---------------------------------------------------------------------
20149C
20150C     CHECK THE INPUT ARGUMENTS FOR ERRORS
20151C
20152      IF(DALPHA.LE.0.0D0)THEN
20153        WRITE(ICOUT,4)
20154        CALL DPWRST('XXX','BUG ')
20155        WRITE(ICOUT,46)DALPHA
20156        CALL DPWRST('XXX','BUG ')
20157        DPDF=0.0D0
20158        GOTO9999
20159      ENDIF
20160    4 FORMAT('***** ERROR--THE SHAPE PARAMETER FOR THE GL3PDF ',
20161     1       'SUBROUTINE IS NON-POSITIVE.')
20162   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
20163C
20164C-----START POINT-----------------------------------------------------
20165C
20166      DTERM1=DLBETA(DALPHA,DALPHA)
20167      DTERM2=-DALPHA*DX - 2.0D0*DALPHA*DLOG(1.0D0 + DEXP(-DX))
20168      DPDF=DEXP(DTERM2 - DTERM1)
20169C
20170 9999 CONTINUE
20171      RETURN
20172      END
20173      SUBROUTINE GL3PPF(DP,DALPHA,DPPF)
20174C
20175C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
20176C              FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 3
20177C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
20178C              THIS DISTRIBUTION IS DEFINED FOR REAL X AND THE
20179C              PERCENT POINT FUNCTION IS COMPUTED BY
20180C              NUMERICALLY INVERTING THE CDF FUNCTION.
20181C     INPUT  ARGUMENTS--DP     = THE DOUBLE PRECISION VALUE AT
20182C                                WHICH THE PERCENT POINT
20183C                                FUNCTION IS TO BE EVALUATED.
20184C                     --DALPHA = THE SHAPE PARAMETER
20185C     OUTPUT ARGUMENTS--DPPF   = THE DOUBLE PRECISION PERCENT POINT
20186C                                FUNCTION VALUE.
20187C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION VALUE DPPF.
20188C     PRINTING--NONE.
20189C     RESTRICTIONS--NONE.
20190C     OTHER DATAPAC   SUBROUTINES NEEDED--DFZERO.
20191C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
20192C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
20193C     LANGUAGE--ANSI FORTRAN (1977)
20194C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
20195C                 DISTRIBUTIONS--2, 1994, PAGES 140-143
20196C     WRITTEN BY--JAMES J. FILLIBEN
20197C                 STATISTICAL ENGINEERING DIVISION
20198C                 INFORMATION TECHNOLOGY LABORATORY
20199C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
20200C                 GAITHERSBURG, MD 20899-8980
20201C                 PHONE--301-975-2855
20202C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
20203C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
20204C     LANGUAGE--ANSI FORTRAN (1977)
20205C     ORIGINAL VERSION--MARCH     2006.
20206C
20207C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20208C
20209C---------------------------------------------------------------------
20210C
20211      DOUBLE PRECISION DP
20212      DOUBLE PRECISION DALPHA
20213      DOUBLE PRECISION DPPF
20214C
20215      DOUBLE PRECISION GL3FU2
20216      EXTERNAL GL3FU2
20217C
20218      DOUBLE PRECISION DP2
20219      DOUBLE PRECISION DALPH2
20220      COMMON/GL3CO2/DP2,DALPH2
20221C
20222      DOUBLE PRECISION XLOW
20223      DOUBLE PRECISION XLOW2
20224      DOUBLE PRECISION XUP
20225      DOUBLE PRECISION XUP2
20226      DOUBLE PRECISION PTEMPL
20227      DOUBLE PRECISION PTEMPU
20228      DOUBLE PRECISION AE
20229      DOUBLE PRECISION RE
20230C
20231      INCLUDE 'DPCOP2.INC'
20232C
20233C-----START POINT-----------------------------------------------------
20234C
20235C               ********************************************
20236C               **  STEP 1--                              **
20237C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
20238C               ********************************************
20239C
20240      DPPF=0.0D0
20241      IF(DALPHA.LE.0.0D0)THEN
20242        WRITE(ICOUT,101)
20243        CALL DPWRST('XXX','BUG ')
20244        WRITE(ICOUT,102)
20245        CALL DPWRST('XXX','BUG ')
20246        WRITE(ICOUT,104)DALPHA
20247        CALL DPWRST('XXX','BUG ')
20248        GOTO9000
20249      ENDIF
20250  101 FORMAT('***** ERROR--THE FIRST SHAPE PARAMETER, ALPHA, TO THE')
20251  102 FORMAT('      GL3PPF ROUTINE IS NON-POSITIVE.')
20252  104 FORMAT('      THE VALUE OF THE ARGUMENT IS ',E15.7,' ******')
20253C
20254      IF(DP.LE.0.0D0.OR.DP.GE.1.0D0)THEN
20255         WRITE(ICOUT,61)
20256   61    FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT ',
20257     1          'TO THE GL3PPF SUBROUTINE ')
20258         CALL DPWRST('XXX','BUG ')
20259         WRITE(ICOUT,62)
20260   62    FORMAT('      IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL')
20261         CALL DPWRST('XXX','BUG ')
20262         WRITE(ICOUT,63)DP
20263   63    FORMAT('      THE VALUE OF ARGUMENT = ',G15.7)
20264         CALL DPWRST('XXX','BUG ')
20265         GOTO9000
20266      ENDIF
20267C
20268C  STEP 1: FIND BRACKETING INTERVAL.  START WITH (-5,5) AND
20269C          INCREMENT UNITL A BRACKETING INTERVAL IS FOUND.
20270C
20271C          TAKE ADVANTAGE OF FACT THAT GL3 IS SYMMETRIC
20272C          (P = 0.5 IMPLIES PPF = 0).
20273C
20274C          ALSO, MEAN = 0 AND SD = SQRT(2*PSI'(ALPHA))
20275C
20276      MAXIT=1000
20277      NIT=1
20278      IF(DP.EQ.0.5D0)THEN
20279        DPPF=0.0D0
20280        GOTO9000
20281      ELSEIF(DP.LT.0.5D0)THEN
20282        XLOW2=-10.0D0
20283        XUP2=0.0D0
20284      ELSE
20285        XLOW2=0.0D0
20286        XUP2=10.0D0
20287      ENDIF
20288C
20289  200 CONTINUE
20290        CALL GL3CDF(XLOW2,DALPHA,PTEMPL)
20291        CALL GL3CDF(XUP2,DALPHA,PTEMPU)
20292        IF(PTEMPL.LT.DP .AND. PTEMPU.GT.DP)THEN
20293          XUP=XUP2
20294          XLOW=XLOW2
20295          GOTO300
20296        ELSEIF(PTEMPL.LT.DP .AND. PTEMPU.LT.DP)THEN
20297          NIT=NIT+1
20298          XUP2=10.0D0*XUP2
20299          IF(NIT.LE.MAXIT)GOTO200
20300        ELSEIF(PTEMPL.GT.DP .AND. PTEMPU.GT.DP)THEN
20301          NIT=NIT+1
20302          XLOW2=10.0D0*XLOW2
20303          IF(NIT.LE.MAXIT)GOTO200
20304        ENDIF
20305C
20306        WRITE(ICOUT,201)
20307  201   FORMAT('***** ERROR FROM GL3PPF--UNABLE TO FIND A ',
20308     1         'BRACKETING INTERVAL')
20309        CALL DPWRST('XXX','BUG ')
20310        GOTO9000
20311C
20312  300 CONTINUE
20313      AE=1.0D-6
20314      RE=1.0D-6
20315      DP2=DP
20316      DALPH2=DALPHA
20317      CALL DFZERO(GL3FU2,XLOW,XUP,XUP,RE,AE,IFLAG)
20318C
20319      DPPF=XLOW
20320C
20321      IF(IFLAG.EQ.2)THEN
20322C
20323C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
20324CCCCC   WRITE(ICOUT,999)
20325  999   FORMAT(1X)
20326CCCCC   CALL DPWRST('XXX','BUG ')
20327CCCCC   WRITE(ICOUT,121)
20328CC111   FORMAT('***** WARNING FROM GL3PPF--')
20329CCCCC   CALL DPWRST('XXX','BUG ')
20330CCCCC   WRITE(ICOUT,113)
20331CC113   FORMAT('      PPF VALUE MAY NOT BE COMPUTED TO DESIRED ',
20332CCCCC1         'TOLERANCE.')
20333CCCCC   CALL DPWRST('XXX','BUG ')
20334      ELSEIF(IFLAG.EQ.3)THEN
20335        WRITE(ICOUT,999)
20336        CALL DPWRST('XXX','BUG ')
20337        WRITE(ICOUT,121)
20338  121   FORMAT('***** WARNING FROM GL3PPF--')
20339        CALL DPWRST('XXX','BUG ')
20340        WRITE(ICOUT,123)
20341  123   FORMAT('      PPF VALUE MAY BE NEAR A SINGULAR POINT.')
20342        CALL DPWRST('XXX','BUG ')
20343      ELSEIF(IFLAG.EQ.4)THEN
20344        WRITE(ICOUT,999)
20345        CALL DPWRST('XXX','BUG ')
20346        WRITE(ICOUT,131)
20347  131   FORMAT('***** ERROR FROM GL3PPF--')
20348        CALL DPWRST('XXX','BUG ')
20349        WRITE(ICOUT,133)
20350  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
20351        CALL DPWRST('XXX','BUG ')
20352      ELSEIF(IFLAG.EQ.5)THEN
20353        WRITE(ICOUT,999)
20354        CALL DPWRST('XXX','BUG ')
20355        WRITE(ICOUT,121)
20356        CALL DPWRST('XXX','BUG ')
20357        WRITE(ICOUT,143)
20358  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
20359        CALL DPWRST('XXX','BUG ')
20360      ENDIF
20361C
20362 9000 CONTINUE
20363      RETURN
20364      END
20365      SUBROUTINE GL4CDF(DX,DP,DQ,DCDF)
20366C
20367C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
20368C              FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 4
20369C              DISTRIBUTION WITH SHAPE PARAMETER P AND Q.
20370C              THE CUMULATIVE DISTRIBUTION IS COMPUTED BY
20371C              NUMERICALLY INTEGRATING THE PDF FUNCTION.
20372C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
20373C                                WHICH THE CUMULATIVE DISTRIBUTION
20374C                                FUNCTION IS TO BE EVALUATED.
20375C                     --DALPHA = THE DOUBLE PRECISION SHAPE PARAMETER.
20376C     OUTPUT ARGUMENTS--DCDF   = THE DOUBLE PRECISION CUMULATIVE
20377C                                DISTRIBUTION FUNCTION VALUE.
20378C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
20379C             FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 4
20380C             DISTRIBUTION WITH SHAPE PARAMETER P AND Q.
20381C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
20382C     RESTRICTIONS--NONE.
20383C     OTHER DATAPAC   SUBROUTINES NEEDED--DQAGI.
20384C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
20385C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
20386C     LANGUAGE--ANSI FORTRAN (1977)
20387C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, "CONTINUOUS
20388C                 UNIVARIATE DISTRIBUTIONS--VOLUME II", SECOND EDITION,
20389C                 JOHN WILEY, PP. 140-142, 1994.
20390C     WRITTEN BY--JAMES J. FILLIBEN
20391C                 STATISTICAL ENGINEERING DIVISION
20392C                 INFORMATION TECHNOLOGY LABORATORY
20393C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
20394C                 GAITHERSBURG, MD 20899-8980
20395C                 PHONE--301-975-2855
20396C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
20397C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
20398C     LANGUAGE--ANSI FORTRAN (1977)
20399C     VERSION ALPHAMBER--2006/3
20400C     ORIGINAL VERSION--MARCH     2006.
20401C
20402C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20403C
20404C---------------------------------------------------------------------
20405C
20406      INTEGER LIMIT
20407      INTEGER LENW
20408      PARAMETER(LIMIT=200)
20409      PARAMETER(LENW=4*LIMIT)
20410      INTEGER INF
20411      INTEGER NEVAL
20412      INTEGER IER
20413      INTEGER LAST
20414      INTEGER IWORK(LIMIT)
20415      DOUBLE PRECISION DX
20416      DOUBLE PRECISION DP
20417      DOUBLE PRECISION DQ
20418      DOUBLE PRECISION DCDF
20419      DOUBLE PRECISION EPSABS
20420      DOUBLE PRECISION EPSREL
20421      DOUBLE PRECISION ABSERR
20422      DOUBLE PRECISION WORK(LENW)
20423C
20424      DOUBLE PRECISION GL4FUN
20425      EXTERNAL GL4FUN
20426C
20427      DOUBLE PRECISION DP2,DQ2
20428      COMMON/GL4COM/DP2,DQ2
20429C
20430C-----COMMON----------------------------------------------------------
20431C
20432      INCLUDE 'DPCOP2.INC'
20433C
20434C-----DATA STATEMENTS-------------------------------------------------
20435C
20436C-----START POINT-----------------------------------------------------
20437C
20438C               ********************************************
20439C               **  STEP 1--                              **
20440C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
20441C               ********************************************
20442C
20443      DCDF=0.0D0
20444      IF(DP.LE.0.0D0)THEN
20445        WRITE(ICOUT,101)
20446        CALL DPWRST('XXX','BUG ')
20447        WRITE(ICOUT,102)
20448        CALL DPWRST('XXX','BUG ')
20449        WRITE(ICOUT,104)DP
20450        CALL DPWRST('XXX','BUG ')
20451        GOTO9000
20452      ENDIF
20453      IF(DQ.LE.0.0D0)THEN
20454        WRITE(ICOUT,105)
20455        CALL DPWRST('XXX','BUG ')
20456        WRITE(ICOUT,106)
20457        CALL DPWRST('XXX','BUG ')
20458        WRITE(ICOUT,104)DQ
20459        CALL DPWRST('XXX','BUG ')
20460        GOTO9000
20461      ENDIF
20462  101 FORMAT('***** ERROR--THE FIRST SHAPE PARAMETER, P, TO THE')
20463  102 FORMAT('      GL4CDF ROUTINE IS NON-POSITIVE.')
20464  105 FORMAT('***** ERROR--THE SECOND SHAPE PARAMETER, Q, TO THE')
20465  106 FORMAT('      GL4CDF ROUTINE IS NON-POSITIVE.')
20466  104 FORMAT('***** VALUE OF THE ARGUMENT = ',G15.7)
20467C
20468C
20469C               ************************************
20470C               **  STEP 1--                      **
20471C               **  COMPUTE THE DENSITY FUNCTION  **
20472C               ************************************
20473C
20474      EPSABS=1.0D-10
20475      EPSREL=1.0D-10
20476      IER=0
20477      IKEY=3
20478      DCDF=0.0D0
20479C
20480      DP2=DP
20481      DQ2=DQ
20482C
20483      IF(DX.LE.0.0D0)THEN
20484        INF=-1
20485        CALL DQAGI(GL4FUN,DX,INF,EPSABS,EPSREL,DCDF,ABSERR,NEVAL,
20486     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
20487      ELSE
20488C
20489        INF=+1
20490        CALL DQAGI(GL4FUN,DX,INF,EPSABS,EPSREL,DCDF,ABSERR,NEVAL,
20491     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
20492        DCDF=1.0D0 - DCDF
20493      ENDIF
20494C
20495      IF(IER.EQ.1)THEN
20496        WRITE(ICOUT,999)
20497  999   FORMAT(1X)
20498        CALL DPWRST('XXX','BUG ')
20499        WRITE(ICOUT,111)
20500  111   FORMAT('***** ERROR FROM GL4CDF--')
20501        CALL DPWRST('XXX','BUG ')
20502        WRITE(ICOUT,113)
20503  113   FORMAT('      MAXIMUM NUMBER OF SUBDIVISIONS EXCEEDED.')
20504        CALL DPWRST('XXX','BUG ')
20505      ELSEIF(IER.EQ.2)THEN
20506        WRITE(ICOUT,999)
20507        CALL DPWRST('XXX','BUG ')
20508        WRITE(ICOUT,121)
20509  121   FORMAT('***** ERROR FROM GL4CDF--')
20510        CALL DPWRST('XXX','BUG ')
20511        WRITE(ICOUT,123)
20512  123   FORMAT('      ROUNDOFF ERROR PREVENTS REQUESTED TOLERANCE ',
20513     1         'FROM BEING ACHIEVED.')
20514        CALL DPWRST('XXX','BUG ')
20515      ELSEIF(IER.EQ.3)THEN
20516        WRITE(ICOUT,999)
20517        CALL DPWRST('XXX','BUG ')
20518        WRITE(ICOUT,131)
20519  131   FORMAT('***** ERROR FROM GL4CDF--')
20520        CALL DPWRST('XXX','BUG ')
20521        WRITE(ICOUT,133)
20522  133   FORMAT('      BAD INTEGRAND BEHAVIOUR DETECTED.')
20523        CALL DPWRST('XXX','BUG ')
20524      ELSEIF(IER.EQ.4)THEN
20525        WRITE(ICOUT,999)
20526        CALL DPWRST('XXX','BUG ')
20527        WRITE(ICOUT,141)
20528  141   FORMAT('***** ERROR FROM GL4CDF--')
20529        CALL DPWRST('XXX','BUG ')
20530        WRITE(ICOUT,143)
20531  143   FORMAT('      INTEGRATION DID NOT CONVERGE.')
20532        CALL DPWRST('XXX','BUG ')
20533      ELSEIF(IER.EQ.5)THEN
20534        WRITE(ICOUT,999)
20535        CALL DPWRST('XXX','BUG ')
20536        WRITE(ICOUT,151)
20537  151   FORMAT('***** ERROR FROM GL4CDF--')
20538        CALL DPWRST('XXX','BUG ')
20539        WRITE(ICOUT,153)
20540  153   FORMAT('      THE INTEGRATION IS PROBABLY DIVERGENT.')
20541        CALL DPWRST('XXX','BUG ')
20542      ELSEIF(IER.EQ.6)THEN
20543        WRITE(ICOUT,999)
20544        CALL DPWRST('XXX','BUG ')
20545        WRITE(ICOUT,161)
20546  161   FORMAT('***** ERROR FROM GL4CDF--')
20547        CALL DPWRST('XXX','BUG ')
20548        WRITE(ICOUT,163)
20549  163   FORMAT('      INVALID INPUT TO THE INTEGRATION ROUTINE.')
20550        CALL DPWRST('XXX','BUG ')
20551      ENDIF
20552C
20553 9000 CONTINUE
20554      RETURN
20555      END
20556      DOUBLE PRECISION FUNCTION GL4FUN(DX)
20557C
20558C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
20559C              FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 4
20560C              DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
20561C              THIS DISTRIBUTION IS DEFINED FOR X > 0 AND HAS
20562C              THE PROBABILITY DENSITY FUNCTION
20563C              f(X;P,Q) = (1/BETA(P,Q)*EXP(-Q*X)/
20564C                         (1+EXP(-X))**(P+Q)
20565C                         P, Q > 0
20566C              THIS FUNCTION IS USED FOR INTEGRATION BY THE
20567C              GL4CDF ROUTINE.
20568C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
20569C                                WHICH THE PROBABILITY DENSITY
20570C                                FUNCTION IS TO BE EVALUATED.
20571C     OUTPUT ARGUMENTS--GL4FUN = THE DOUBLE PRECISION PROBABILITY
20572C                                DENSITY FUNCTION VALUE.
20573C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
20574C             FUNCTION VALUE PDF FOR THE GENERALIZED LOGISTIC
20575C             TYPE 4 DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
20576C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
20577C     RESTRICTIONS--NONE.
20578C     OTHER DATAPAC   SUBROUTINES NEEDED--GL4PDF.
20579C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
20580C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
20581C     LANGUAGE--ANSI FORTRAN (1977)
20582C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
20583C                 DISTRIBUTIONS--2, 1994, PAGES 140-142
20584C     WRITTEN BY--JAMES J. FILLIBEN
20585C                 STATISTICAL ENGINEERING DIVISION
20586C                 INFORMATION TECHNOLOGY LABORATORY
20587C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
20588C                 GAITHERSBURG, MD 20899-8980
20589C                 PHONE--301-975-2855
20590C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
20591C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
20592C     LANGUAGE--ANSI FORTRAN (1977)
20593C     VERSION NUMBER--2006.3
20594C     ORIGINAL VERSION--MARCH     2006.
20595C
20596C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20597C
20598C---------------------------------------------------------------------
20599C
20600      DOUBLE PRECISION DX
20601      DOUBLE PRECISION DPDF
20602C
20603      DOUBLE PRECISION DP
20604      DOUBLE PRECISION DQ
20605      COMMON/GL4COM/DP,DQ
20606C
20607C-----COMMON----------------------------------------------------------
20608C
20609      INCLUDE 'DPCOP2.INC'
20610C
20611C-----DATA STATEMENTS-------------------------------------------------
20612C
20613C-----START POINT-----------------------------------------------------
20614C
20615C               ************************************
20616C               **  STEP 1--                      **
20617C               **  COMPUTE THE DENSITY FUNCTION  **
20618C               ************************************
20619C
20620      CALL GL4PDF(DX,DP,DQ,DPDF)
20621      GL4FUN=DPDF
20622C
20623      RETURN
20624      END
20625      DOUBLE PRECISION FUNCTION GL4FU2(DX)
20626C
20627C     PURPOSE--GL4PPF CALLS DFZERO TO FIND A ROOT FOR THE PERCENT
20628C              POINT FUNCTION.  GL4FU2 IS THE FUNCTION FOR WHICH
20629C              THE ZERO IS FOUND.  IT IS:
20630C                 P - GL4CDF(X,P,Q)
20631C              WHERE P IS THE DESIRED PERCENT POINT.
20632C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE AT
20633C                                WHICH THE CUMULATIVE DISTRIBUTION
20634C                                FUNCTION IS TO BE EVALUATED.
20635C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
20636C             FUNCTION VALUE GL4FU2.
20637C     PRINTING--NONE.
20638C     RESTRICTIONS--NONE.
20639C     OTHER DATAPAC   SUBROUTINES NEEDED--GL4CDF.
20640C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
20641C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
20642C     LANGUAGE--ANSI FORTRAN (1977)
20643C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
20644C                 DISTRIBUTIONS--2, 1994, PAGES 140-143
20645C     WRITTEN BY--JAMES J. FILLIBEN
20646C                 STATISTICAL ENGINEERING DIVISION
20647C                 INFORMATION TECHNOLOGY LABORATORY
20648C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
20649C                 GAITHERSBURG, MD 20899-8980
20650C                 PHONE--301-975-2855
20651C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
20652C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
20653C     LANGUAGE--ANSI FORTRAN (1977)
20654C     VERSION NUMBER--2006.3
20655C     ORIGINAL VERSION--MARCH     2006.
20656C
20657C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20658C
20659C---------------------------------------------------------------------
20660C
20661      DOUBLE PRECISION DX
20662      DOUBLE PRECISION DCDF
20663C
20664      DOUBLE PRECISION DP
20665      DOUBLE PRECISION DPPAR
20666      DOUBLE PRECISION DQPAR
20667      COMMON/GL4CO2/DP,DPPAR,DQPAR
20668C
20669      INCLUDE 'DPCOP2.INC'
20670C
20671C-----START POINT-----------------------------------------------------
20672C
20673      CALL GL4CDF(DX,DPPAR,DQPAR,DCDF)
20674      GL4FU2=DP - DCDF
20675C
20676      RETURN
20677      END
20678      SUBROUTINE GL4PDF(DX,DP,DQ,DPDF)
20679C
20680C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
20681C              FUNCTION VALUE FOR THE TYPE 4 GENERALIZED LOGISTIC
20682C              DISTRIBUTION WITH SHAPE PARAMETERS P AND Q.
20683C              THIS DISTRIBUTION IS DEFINED FOR ALL X
20684C              AND HAS THE PROBABILITY DENSITY FUNCTION
20685C              f(X;P,Q) = (1/BETA(P,Q)*EXP(-Q*X)/
20686C                         (1+EXP(-X))**(P+Q)
20687C                         P, Q > 0
20688C     INPUT  ARGUMENTS--DX     = THE DOUBLE PRECISION VALUE
20689C                                AT WHICH THE PROBABILITY DENSITY
20690C                                FUNCTION IS TO BE EVALUATED.
20691C                     --DP     = THE DOUBLE PRECISION FIRST SHAPE
20692C                                PARAMETER.
20693C                     --DQ     = THE DOUBLE PRECISION SECOND SHAPE
20694C                                PARAMETER.
20695C     OUTPUT ARGUMENTS--DPDF   = THE DOUBLE PRECISION PROBABILITY
20696C                                DENSITY FUNCTION VALUE.
20697C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
20698C             VALUE FOR THE TYPE 3 GENERALIZED LOGISTIC DISTRIBUTION
20699C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
20700C     RESTRICTIONS--ALPHA SHOULD BE POSITIVE.
20701C     FORTRAN LIBRARY SUBROUTINES NEEDED--DLOG, DEXP,DLBETA.
20702C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
20703C     LANGUAGE--ANSI FORTRAN.
20704C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
20705C                 DISTRIBUTIONS--2, 1994, PAGES 140-143
20706C     WRITTEN BY--JAMES J. FILLIBEN
20707C                 STATISTICAL ENGINEERING LABORATORY
20708C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
20709C                 GAITHERSBURG, MD 20899-8980
20710C                 PHONE:  301-975-2855
20711C     ORIGINAL VERSION--MARCH     2006.
20712C
20713C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20714C
20715C---------------------------------------------------------------------
20716C
20717      DOUBLE PRECISION DX
20718      DOUBLE PRECISION DP
20719      DOUBLE PRECISION DQ
20720      DOUBLE PRECISION DPDF
20721      DOUBLE PRECISION DTERM1
20722      DOUBLE PRECISION DTERM2
20723      DOUBLE PRECISION DLBETA
20724C
20725      INCLUDE 'DPCOP2.INC'
20726C
20727C---------------------------------------------------------------------
20728C
20729C     CHECK THE INPUT ARGUMENTS FOR ERRORS
20730C
20731      DPDF=0.0D0
20732      IF(DP.LE.0.0D0)THEN
20733        WRITE(ICOUT,4)
20734    4   FORMAT('***** ERROR--THE FIRST SHAPE PARAMETER FOR ',
20735     1       'GL4PDF IS NON-POSITIVE.')
20736        CALL DPWRST('XXX','BUG ')
20737        WRITE(ICOUT,46)DP
20738   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
20739        CALL DPWRST('XXX','BUG ')
20740        GOTO9999
20741      ELSEIF(DQ.LE.0.0D0)THEN
20742        WRITE(ICOUT,5)
20743    5   FORMAT('***** ERROR--THE SECOND SHAPE PARAMETER FOR GL4PDF ',
20744     1         'IS NON-POSITIVE.')
20745        CALL DPWRST('XXX','BUG ')
20746        WRITE(ICOUT,46)DQ
20747        CALL DPWRST('XXX','BUG ')
20748        GOTO9999
20749      ENDIF
20750C
20751C-----START POINT-----------------------------------------------------
20752C
20753      DTERM1=DLBETA(DP,DQ)
20754      DTERM2=-DQ*DX - (DP+DQ)*DLOG(1.0D0 + DEXP(-DX))
20755      DPDF=DEXP(DTERM2 - DTERM1)
20756C
20757 9999 CONTINUE
20758      RETURN
20759      END
20760      SUBROUTINE GL4PPF(DP,DPPAR,DQPAR,DPPF)
20761C
20762C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
20763C              FUNCTION VALUE FOR THE GENERALIZED LOGISTIC TYPE 4
20764C              DISTRIBUTION WITH SHAPE PARAMETERS P AND Q.
20765C              THIS DISTRIBUTION IS DEFINED FOR REAL X AND THE
20766C              PERCENT POINT FUNCTION IS COMPUTED BY
20767C              NUMERICALLY INVERTING THE CDF FUNCTION.
20768C     INPUT  ARGUMENTS--DP     = THE DOUBLE PRECISION VALUE AT
20769C                                WHICH THE PERCENT POINT
20770C                                FUNCTION IS TO BE EVALUATED.
20771C                     --DPPAR  = THE FIRST SHAPE PARAMETER
20772C                     --DQPAR  = THE SECOND SHAPE PARAMETER
20773C     OUTPUT ARGUMENTS--DPPF   = THE DOUBLE PRECISION PERCENT POINT
20774C                                FUNCTION VALUE.
20775C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION VALUE DPPF.
20776C     PRINTING--NONE.
20777C     RESTRICTIONS--NONE.
20778C     OTHER DATAPAC   SUBROUTINES NEEDED--DFZERO.
20779C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
20780C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
20781C     LANGUAGE--ANSI FORTRAN (1977)
20782C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
20783C                 DISTRIBUTIONS--2, 1994, PAGES 140-143
20784C     WRITTEN BY--JAMES J. FILLIBEN
20785C                 STATISTICAL ENGINEERING DIVISION
20786C                 INFORMATION TECHNOLOGY LABORATORY
20787C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
20788C                 GAITHERSBURG, MD 20899-8980
20789C                 PHONE--301-975-2855
20790C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
20791C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
20792C     LANGUAGE--ANSI FORTRAN (1977)
20793C     ORIGINAL VERSION--MARCH     2006.
20794C
20795C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20796C
20797C---------------------------------------------------------------------
20798C
20799      DOUBLE PRECISION DP
20800      DOUBLE PRECISION DPPAR
20801      DOUBLE PRECISION DQPAR
20802      DOUBLE PRECISION DPPF
20803C
20804      DOUBLE PRECISION GL4FU2
20805      EXTERNAL GL4FU2
20806C
20807      DOUBLE PRECISION DP2
20808      DOUBLE PRECISION DPPAR2
20809      DOUBLE PRECISION DQPAR2
20810      COMMON/GL4CO2/DP2,DPPAR2,DQPAR2
20811C
20812      DOUBLE PRECISION XLOW
20813      DOUBLE PRECISION XLOW2
20814      DOUBLE PRECISION XUP
20815      DOUBLE PRECISION XUP2
20816      DOUBLE PRECISION PTEMPL
20817      DOUBLE PRECISION PTEMPU
20818      DOUBLE PRECISION AE
20819      DOUBLE PRECISION RE
20820C
20821      INCLUDE 'DPCOP2.INC'
20822C
20823C-----START POINT-----------------------------------------------------
20824C
20825C               ********************************************
20826C               **  STEP 1--                              **
20827C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
20828C               ********************************************
20829C
20830      DPPF=0.0D0
20831      IF(DPPAR.LE.0.0D0)THEN
20832        WRITE(ICOUT,101)
20833        CALL DPWRST('XXX','BUG ')
20834        WRITE(ICOUT,102)
20835        CALL DPWRST('XXX','BUG ')
20836        WRITE(ICOUT,104)DPPAR
20837        CALL DPWRST('XXX','BUG ')
20838        GOTO9000
20839      ENDIF
20840      IF(DQPAR.LE.0.0D0)THEN
20841        WRITE(ICOUT,103)
20842        CALL DPWRST('XXX','BUG ')
20843        WRITE(ICOUT,102)
20844        CALL DPWRST('XXX','BUG ')
20845        WRITE(ICOUT,104)DQPAR
20846        CALL DPWRST('XXX','BUG ')
20847        GOTO9000
20848      ENDIF
20849  101 FORMAT('***** ERROR--THE FIRST SHAPE PARAMETER, P, TO THE')
20850  102 FORMAT('      GL4PPF ROUTINE IS NON-POSITIVE.')
20851  103 FORMAT('***** ERROR--THE SECOND SHAPE PARAMETER, Q, TO THE')
20852  104 FORMAT('      THE VALUE OF THE ARGUMENT IS ',E15.7,' ******')
20853C
20854      IF(DP.LE.0.0D0.OR.DP.GE.1.0D0)THEN
20855         WRITE(ICOUT,61)
20856   61    FORMAT('***** ERROR--THE FIRST  INPUT ARGUMENT ',
20857     1          'TO THE GL4PPF SUBROUTINE ')
20858         CALL DPWRST('XXX','BUG ')
20859         WRITE(ICOUT,62)
20860   62    FORMAT('      IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL')
20861         CALL DPWRST('XXX','BUG ')
20862         WRITE(ICOUT,63)DP
20863   63    FORMAT('      THE VALUE OF ARGUMENT = ',G15.7)
20864         CALL DPWRST('XXX','BUG ')
20865         GOTO9000
20866      ENDIF
20867C
20868C  STEP 1: FIND BRACKETING INTERVAL.  START WITH (-5,5) AND
20869C          INCREMENT UNITL A BRACKETING INTERVAL IS FOUND.
20870C
20871      MAXIT=1000
20872      XLOW2=-5.0D0
20873      XUP2=5.0D0
20874C
20875  200 CONTINUE
20876        CALL GL4CDF(XLOW2,DPPAR,DQPAR,PTEMPL)
20877        CALL GL4CDF(XUP2,DPPAR,DQPAR,PTEMPU)
20878        IF(PTEMPL.LT.DP .AND. PTEMPU.GT.DP)THEN
20879          XUP=XUP2
20880          XLOW=XLOW2
20881          GOTO300
20882        ELSEIF(PTEMPL.LT.DP .AND. PTEMPU.LT.DP)THEN
20883          MAXIT=MAXIT+1
20884          XUP2=5.0D0*XUP2
20885          IF(MAXIT.LE.MAXIT)GOTO200
20886        ELSEIF(PTEMPL.GT.DP .AND. PTEMPU.GT.DP)THEN
20887          MAXIT=MAXIT+1
20888          XLOW2=5.0D0*XLOW2
20889          IF(MAXIT.LE.MAXIT)GOTO200
20890        ENDIF
20891C
20892        WRITE(ICOUT,201)
20893  201   FORMAT('***** ERROR FROM GL4PPF--UNABLE TO FIND A ',
20894     1         'BRACKETING INTERVAL')
20895        CALL DPWRST('XXX','BUG ')
20896        GOTO9000
20897C
20898  300 CONTINUE
20899      AE=1.0D-8
20900      RE=1.0D-8
20901      DP2=DP
20902      DPPAR2=DPPAR
20903      DQPAR2=DQPAR
20904      CALL DFZERO(GL4FU2,XLOW,XUP,XUP,RE,AE,IFLAG)
20905C
20906      DPPF=XLOW
20907C
20908      IF(IFLAG.EQ.2)THEN
20909C
20910C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
20911CCCCC   WRITE(ICOUT,999)
20912  999   FORMAT(1X)
20913CCCCC   CALL DPWRST('XXX','BUG ')
20914CCCCC   WRITE(ICOUT,121)
20915CC111   FORMAT('***** WARNING FROM GL4PPF--')
20916CCCCC   CALL DPWRST('XXX','BUG ')
20917CCCCC   WRITE(ICOUT,113)
20918CC113   FORMAT('      PPF VALUE MAY NOT BE COMPUTED TO DESIRED ',
20919CCCCC1         'TOLERANCE.')
20920CCCCC   CALL DPWRST('XXX','BUG ')
20921      ELSEIF(IFLAG.EQ.3)THEN
20922        WRITE(ICOUT,999)
20923        CALL DPWRST('XXX','BUG ')
20924        WRITE(ICOUT,121)
20925  121   FORMAT('***** WARNING FROM GL4PPF--')
20926        CALL DPWRST('XXX','BUG ')
20927        WRITE(ICOUT,123)
20928  123   FORMAT('      PPF VALUE MAY BE NEAR A SINGULAR POINT.')
20929        CALL DPWRST('XXX','BUG ')
20930      ELSEIF(IFLAG.EQ.4)THEN
20931        WRITE(ICOUT,999)
20932        CALL DPWRST('XXX','BUG ')
20933        WRITE(ICOUT,131)
20934  131   FORMAT('***** ERROR FROM GL4PPF--')
20935        CALL DPWRST('XXX','BUG ')
20936        WRITE(ICOUT,133)
20937  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
20938        CALL DPWRST('XXX','BUG ')
20939      ELSEIF(IFLAG.EQ.5)THEN
20940        WRITE(ICOUT,999)
20941        CALL DPWRST('XXX','BUG ')
20942        WRITE(ICOUT,121)
20943        CALL DPWRST('XXX','BUG ')
20944        WRITE(ICOUT,143)
20945  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
20946        CALL DPWRST('XXX','BUG ')
20947      ENDIF
20948C
20949 9000 CONTINUE
20950      RETURN
20951      END
20952      SUBROUTINE GL4RAN(N,P,Q,ISEED,X)
20953C
20954C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
20955C              FROM THE GENERALIZED LOGISTIC TYPE 4 DISTRIBUTION
20956C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
20957C                                OF RANDOM NUMBERS TO BE
20958C                                GENERATED.
20959C                     --P      = THE FIRST SHAPE PARAMETER
20960C                     --Q      = THE SECOND SHAPE PARAMETER
20961C                     --SEED   = THE SEED FOR THE RANDOM NUMBER
20962C                                GENERATOR
20963C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
20964C                                (OF DIMENSION AT LEAST N)
20965C                                INTO WHICH THE GENERATED
20966C                                RANDOM SAMPLE WILL BE PLACED.
20967C     OUTPUT--A RANDOM SAMPLE OF SIZE N
20968C             FROM THE GENERALIZED LOGISTIC TYPE 4 DISTRIBUTION
20969C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
20970C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
20971C                   OF N FOR THIS SUBROUTINE.
20972C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GL4PPF.
20973C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
20974C     LANGUAGE--ANSI FORTRAN (1977)
20975C     WRITTEN BY--JAMES J. FILLIBEN
20976C                 STATISTICAL ENGINEERING DIVISION
20977C                 INFORMATION TECHNOLOGY LABORATORY
20978C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
20979C                 GAITHERSBURG, MD 20899-8980
20980C                 PHONE--301-975-2855
20981C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
20982C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
20983C     LANGUAGE--ANSI FORTRAN (1977)
20984C     VERSION NUMBER--2006/3
20985C     ORIGINAL VERSION--MARCH     2006.
20986C
20987C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
20988C
20989C---------------------------------------------------------------------
20990C
20991      DIMENSION X(*)
20992C
20993      DOUBLE PRECISION DX
20994      DOUBLE PRECISION DPPF
20995C
20996C-----COMMON----------------------------------------------------------
20997C
20998      INCLUDE 'DPCOP2.INC'
20999C
21000C-----START POINT-----------------------------------------------------
21001C
21002C     CHECK THE INPUT ARGUMENTS FOR ERRORS
21003C
21004      IF(N.LT.1)THEN
21005        WRITE(ICOUT,5)
21006        CALL DPWRST('XXX','BUG ')
21007        WRITE(ICOUT,6)
21008        CALL DPWRST('XXX','BUG ')
21009        WRITE(ICOUT,47)N
21010        CALL DPWRST('XXX','BUG ')
21011        RETURN
21012      ENDIF
21013    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
21014     1       'LOGISTIC TYPE 4')
21015    6 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
21016   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
21017C
21018C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
21019C
21020      CALL UNIRAN(N,ISEED,X)
21021C
21022C     GENERATE N GENERALIZED LOGISTIC TYPE 4 RANDOM NUMBERS
21023C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD
21024C
21025      DO100I=1,N
21026        DX=DBLE(X(I))
21027        CALL GL4PPF(DX,DBLE(P),DBLE(Q),DPPF)
21028        X(I)=REAL(DPPF)
21029  100 CONTINUE
21030C
21031      RETURN
21032      END
21033      SUBROUTINE GL5ML1(Y,N,
21034     1                  DTEMP1,XMOM,NMOM,
21035     1                  XMEAN,XSD,XVAR,XMIN,XMAX,
21036     1                  ALOCML,SCALML,SHAPML,
21037     1                  ISUBRO,IBUGA3,IERROR)
21038C
21039C     PURPOSE--THIS ROUTINE COMPUTES THE L-MOMENTS ESTIMATES FOR THE
21040C              GENERALIZED LOGISTIC TYPE 5 DISTRIBUTION FOR THE RAW DATA
21041C              CASE (I.E., NO CENSORING AND NO GROUPING).  THIS ROUTINE
21042C              RETURNS ONLY THE POINT ESTIMATES.
21043C
21044C              IT IS ASSUMED THAT BASIC ERROR CHECKING HAS ALREADY BEEN
21045C              PERFORMED.
21046C
21047C              PUT THIS IN A SEPARATE ROUTINE AS IT MAY BE CALLED
21048C              FROM MULTIPLE PLACES (DPMLP3 WILL GENERATE THE OUTPUT
21049C              FOR THE GENERALIZED LOGISTIC TYPE 5 MLE COMMAND).
21050C
21051C     REFERENCE--FORTRAN CODE WRITTEN FOR INCLUSION IN IBM
21052C                RESEARCH REPORT RC20525, 'FORTRAN ROUTINES FOR
21053C                USE WITH THE METHOD OF L-MOMENTS, VERSION 3',
21054C                J. R. M. HOSKING, IBM RESEARCH DIVISION,
21055C                T. J. WATSON RESEARCH CENTER, YORKTOWN HEIGHTS
21056C                NEW YORK 10598, U.S.A., VERSION 3     AUGUST 1996
21057C     WRITTEN BY--JAMES J. FILLIBEN
21058C                 STATISTICAL ENGINEERING DIVISION
21059C                 INFORMATION TECHNOLOGY LABORATORY
21060C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21061C                 GAITHERSBURG, MD 20899-8980
21062C                 PHONE--301-975-2855
21063C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21064C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
21065C     LANGUAGE--ANSI FORTRAN (1977)
21066C     VERSION NUMBER--2010/7
21067C     ORIGINAL VERSION--JULY      2010. EXTRACTED AS A SEPARATE
21068C                                       SUBROUTINE (FROM DPMLP3)
21069C
21070C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
21071C
21072      DIMENSION Y(*)
21073      DOUBLE PRECISION DTEMP1(*)
21074      DOUBLE PRECISION XMOM(*)
21075      DOUBLE PRECISION XPAR(3)
21076C
21077      CHARACTER*4 ISUBRO
21078      CHARACTER*4 IBUGA3
21079      CHARACTER*4 IERROR
21080C
21081      CHARACTER*4 IWRITE
21082      CHARACTER*40 IDIST
21083C
21084      CHARACTER*4 ISUBN1
21085      CHARACTER*4 ISUBN2
21086      CHARACTER*4 ISTEPN
21087C
21088C-----COMMON----------------------------------------------------------
21089C
21090      INCLUDE 'DPCOP2.INC'
21091C
21092C-----START POINT-----------------------------------------------------
21093C
21094      ISUBN1='GL5M'
21095      ISUBN2='L1  '
21096      IERROR='NO'
21097      IWRITE='NO'
21098C
21099      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'5ML1')THEN
21100        WRITE(ICOUT,999)
21101  999   FORMAT(1X)
21102        CALL DPWRST('XXX','WRIT')
21103        WRITE(ICOUT,51)
21104   51   FORMAT('**** AT THE BEGINNING OF GL5ML3--')
21105        CALL DPWRST('XXX','WRIT')
21106        WRITE(ICOUT,52)IBUGA3,ISUBRO,N
21107   52   FORMAT('IBUGA3,ISUBRO,N = ',A4,2X,A4,2X,I8)
21108        CALL DPWRST('XXX','WRIT')
21109        DO56I=1,MIN(N,100)
21110          WRITE(ICOUT,57)I,Y(I)
21111   57     FORMAT('I,Y(I) = ',I8,G15.7)
21112          CALL DPWRST('XXX','WRIT')
21113   56   CONTINUE
21114      ENDIF
21115C
21116C               ****************************************************
21117C               **  STEP 2--                                      **
21118C               **  CARRY OUT CALCULATIONS                        **
21119C               **  FOR GENERALIZED LOGISTIC TYPE 5 MLE ESTIMATE  **
21120C               ****************************************************
21121C
21122      ISTEPN='2'
21123      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'5ML1')
21124     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
21125C
21126      IDIST='GENERALIZED LOGISTIC TYPE 5'
21127      ALOCML=CPUMIN
21128      SCALML=CPUMIN
21129      SHAPML=CPUMIN
21130C
21131      IFLAG=0
21132      CALL SUMRAW(Y,N,IDIST,IFLAG,
21133     1            XMEAN,XVAR,XSD,XMIN,XMAX,
21134     1            ISUBRO,IBUGA3,IERROR)
21135C
21136      CALL SORT(Y,N,Y)
21137      NMOM=3
21138      DO2110I=1,N
21139        DTEMP1(I)=DBLE(Y(I))
21140 2110 CONTINUE
21141      CALL SAMLMU(DTEMP1,N,XMOM,NMOM)
21142      CALL PELGLO(XMOM,XPAR)
21143      ALOCML=REAL(XPAR(1))
21144      SCALML=REAL(XPAR(2))
21145      SHAPML=REAL(XPAR(3))
21146C
21147      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'5ML1')THEN
21148        WRITE(ICOUT,999)
21149        CALL DPWRST('XXX','WRIT')
21150        WRITE(ICOUT,9011)
21151 9011   FORMAT('**** AT THE END OF GL5ML3--')
21152        CALL DPWRST('XXX','WRIT')
21153        WRITE(ICOUT,9013)N,XMEAN,XSD,XMIN,XMAX
21154 9013   FORMAT('N,XMEAN,XSD,XMIN,XMAX = ',I8,4G15.7)
21155        CALL DPWRST('XXX','WRIT')
21156        WRITE(ICOUT,9015)XMOM(1),XMOM(2),XMOM(3)
21157 9015   FORMAT('XMOM(1),XMOM(2),XMOM(3) = ',3G15.7)
21158        CALL DPWRST('XXX','WRIT')
21159        WRITE(ICOUT,9016)XPAR(1),XPAR(2),XPAR(3)
21160 9016   FORMAT('XPAR(1),XPAR(2),XPAR(3) = ',3G15.7)
21161        CALL DPWRST('XXX','WRIT')
21162        WRITE(ICOUT,9017)SHAPML,SCALML,ALOCML
21163 9017   FORMAT('SHAPML,SCALML,ALOCML =  ',3G15.7)
21164        CALL DPWRST('XXX','WRIT')
21165      ENDIF
21166C
21167      RETURN
21168      END
21169      SUBROUTINE GL5PDF(X,GAMMA,PDF)
21170C
21171C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
21172C              FUNCTION VALUE FOR THE TYPE 5 GENERALIZED LOGISTIC
21173C              DISTRIBUTION WITH SHAPE PARAMETER GAMMA.
21174C              THIS DISTRIBUTION IS DEFINED FOR ALL X
21175C              THIS DEFINITION IS DUE TO HOSKINGS AND HAS THE
21176C              FOLLOWING DEFINITION:
21177C
21178C              F(X,GAMMA) = (1-GAMMA*X)**((1/GAMMA)-1)/
21179C                           {1+(1-GAMMA*X)**(1/GAMMA}**2
21180C                           X <= 1/GAMMA    FOR GAMMA > 0
21181C                           X >= 1/GAMMA    FOR GAMMA < 0
21182C              FOR GAMMA = 0, JUST COMPUTE THE STANDARD
21183C              LOGISTIC DISTRIBUTION.
21184C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE
21185C                                AT WHICH THE PROBABILITY DENSITY
21186C                                FUNCTION IS TO BE EVALUATED.
21187C                     --GAMMA  = THE SINGLE PRECISION SHAPE PARAMETER
21188C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
21189C                                DENSITY FUNCTION VALUE.
21190C     OUTPUT--THE SINGLE PRECISION PROBABILITY DENSITY
21191C             FUNCTION VALUE PDF FOR THE GENERALIZED LOGISTIC TYPE 5
21192C             DISTRIBUTION
21193C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
21194C     RESTRICTIONS--X SHOULD BE NON-NEGATIVE.
21195C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
21196C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
21197C     LANGUAGE--ANSI FORTRAN.
21198C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN CONTINUOUS UNIVARIATE
21199C                 DISTRIBUTIONS--2, 1994, PAGE 145
21200C     WRITTEN BY--JAMES J. FILLIBEN
21201C                 STATISTICAL ENGINEERING LABORATORY
21202C                 INFORMATION TECHNOLOGY LABORATORY
21203C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21204C                 GAITHERSBURG, MD 20899-8980
21205C                 PHONE:  301-975-2855
21206C     ORIGINAL VERSION--FEBRUARY  2006.
21207C
21208C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
21209C
21210C---------------------------------------------------------------------
21211C
21212      DOUBLE PRECISION X
21213      DOUBLE PRECISION GAMMA
21214      DOUBLE PRECISION PDF
21215      DOUBLE PRECISION DTERM1
21216      DOUBLE PRECISION DTERM2
21217      DOUBLE PRECISION DTERM3
21218C
21219      INCLUDE 'DPCOP2.INC'
21220C
21221C---------------------------------------------------------------------
21222C
21223C     CHECK THE INPUT ARGUMENTS FOR ERRORS
21224C
21225      IF(GAMMA.EQ.0.0D0)THEN
21226        CALL LOGPDF(REAL(X),PDF2)
21227        PDF=DBLE(PDF2)
21228        GOTO9999
21229      ELSEIF(GAMMA.GT.0.0D0)THEN
21230        IF(X.GT.1.0D0/GAMMA)THEN
21231          WRITE(ICOUT,4)
21232          CALL DPWRST('XXX','BUG ')
21233          WRITE(ICOUT,5)
21234          CALL DPWRST('XXX','BUG ')
21235          WRITE(ICOUT,46)X
21236          CALL DPWRST('XXX','BUG ')
21237          WRITE(ICOUT,47)GAMMA
21238          CALL DPWRST('XXX','BUG ')
21239          PDF=0.0D0
21240          GOTO9999
21241        ENDIF
21242    4   FORMAT('***** ERROR--THE FIRST INPUT ARGUMENT TO THE ',
21243     1       'GL5PDF SUBROUTINE')
21244    5   FORMAT('      IS GREATER THAN 1/GAMMA')
21245   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.8)
21246   47   FORMAT('***** THE VALUE OF GAMMA IS        ',G15.8)
21247C
21248        IF(X.EQ.1.0/GAMMA)THEN
21249          PDF=0.0D0
21250        ELSE
21251          DTERM1=(1.0D0/GAMMA)
21252          DTERM2=(DTERM1 - 1.0D0)*DLOG(1.0D0 - X*GAMMA)
21253          DTERM3=2.0D0*DLOG(1.0D0 + (1.0D0 - GAMMA*X)**DTERM1)
21254          PDF=DEXP(DTERM2 - DTERM3)
21255        ENDIF
21256C
21257      ELSEIF(GAMMA.LT.0.0)THEN
21258        IF(X.LT.1.0/GAMMA)THEN
21259          WRITE(ICOUT,4)
21260          CALL DPWRST('XXX','BUG ')
21261          WRITE(ICOUT,15)
21262          CALL DPWRST('XXX','BUG ')
21263          WRITE(ICOUT,46)X
21264          CALL DPWRST('XXX','BUG ')
21265          WRITE(ICOUT,47)GAMMA
21266          CALL DPWRST('XXX','BUG ')
21267          PDF=0.0
21268          GOTO9999
21269        ENDIF
21270   15   FORMAT('      IS LESS THAN 1/GAMMA')
21271C
21272        IF(X.EQ.1.0/GAMMA)THEN
21273          PDF=0.0D0
21274        ELSE
21275          DTERM1=(1.0D0/GAMMA)
21276          DTERM2=(DTERM1 - 1.0D0)*DLOG(1.0D0 - X*GAMMA)
21277          DTERM3=2.0D0*DLOG(1.0D0 + (1.0D0 - GAMMA*X)**DTERM1)
21278          PDF=DEXP(DTERM2 - DTERM3)
21279        ENDIF
21280C
21281      ENDIF
21282C
21283 9999 CONTINUE
21284      RETURN
21285      END
21286      SUBROUTINE GL5RAN(N,ALPHA,ISEED,X)
21287C
21288C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
21289C              FROM THE GENERALIZED LOGISTIC TYPE 5 (HOSKING)
21290C              DISTRIBUTION
21291C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
21292C                                OF RANDOM NUMBERS TO BE
21293C                                GENERATED.
21294C                     --ALPHA  = THE SHAPE PARAMETER
21295C                     --SEED   = THE SEED FOR THE RANDOM NUMBER
21296C                                GENERATOR
21297C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
21298C                                (OF DIMENSION AT LEAST N)
21299C                                INTO WHICH THE GENERATED
21300C                                RANDOM SAMPLE WILL BE PLACED.
21301C     OUTPUT--A RANDOM SAMPLE OF SIZE N
21302C             FROM THE GENERALIZED LOGISTIC TYPE 5 DISTRIBUTION
21303C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
21304C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
21305C                   OF N FOR THIS SUBROUTINE.
21306C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, QUAGLO.
21307C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
21308C     LANGUAGE--ANSI FORTRAN (1977)
21309C     WRITTEN BY--JAMES J. FILLIBEN
21310C                 STATISTICAL ENGINEERING DIVISION
21311C                 INFORMATION TECHNOLOGY LABORATORY
21312C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21313C                 GAITHERSBURG, MD 20899-8980
21314C                 PHONE--301-975-2855
21315C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21316C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
21317C     LANGUAGE--ANSI FORTRAN (1977)
21318C     VERSION NUMBER--2006/2
21319C     ORIGINAL VERSION--FEBRUARY  2006.
21320C
21321C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
21322C
21323C---------------------------------------------------------------------
21324C
21325      DIMENSION X(*)
21326C
21327      DOUBLE PRECISION XPAR(3)
21328      DOUBLE PRECISION QUAGLO
21329      DOUBLE PRECISION DX
21330      DOUBLE PRECISION DPPF
21331C
21332C-----COMMON----------------------------------------------------------
21333C
21334      INCLUDE 'DPCOP2.INC'
21335C
21336C-----START POINT-----------------------------------------------------
21337C
21338C     CHECK THE INPUT ARGUMENTS FOR ERRORS
21339C
21340      IF(N.LT.1)THEN
21341        WRITE(ICOUT,5)
21342        CALL DPWRST('XXX','BUG ')
21343        WRITE(ICOUT,6)
21344        CALL DPWRST('XXX','BUG ')
21345        WRITE(ICOUT,47)N
21346        CALL DPWRST('XXX','BUG ')
21347        RETURN
21348      ENDIF
21349    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF GENERALIZED ',
21350     1       'LOGISTIC TYPE 5 (HOSKING)')
21351    6 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
21352   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
21353C
21354C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
21355C
21356      CALL UNIRAN(N,ISEED,X)
21357C
21358C     GENERATE N GENERALIZED LOGISTIC TYPE 5 RANDOM NUMBERS
21359C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD
21360C
21361      XPAR(1)=0.0D0
21362      XPAR(2)=1.0D0
21363      XPAR(3)=DBLE(ALPHA)
21364C
21365      DO100I=1,N
21366        DX=DBLE(X(I))
21367        DPPF=QUAGLO(DX,XPAR)
21368        X(I)=REAL(DPPF)
21369  100 CONTINUE
21370C
21371      RETURN
21372      END
21373      SUBROUTINE GLSCDF(X,THETA,BETA,CDF)
21374C
21375C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
21376C              FUNCTION VALUE FOR THE GENERALIZED LOGARITHMIC SERIES
21377C              DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA.
21378C              THIS DISTRIBUTION IS DEFINED FOR ALL INTEGER X >= 1.
21379C              THE PROBABILITY MASS FUNCTION IS:
21380C              p(X;THETA,BETA)=
21381C                  Gamma(BETA*X+1)*THETA**X*(1-THETA)**(BETA*X-X)/
21382C                  X!*(BETA*X)*Gamma(BETA*X-X+1)*[-LOG(1-THETA)]
21383C                  X = 1, 2, 3, ,...
21384C                  0 < THETA < 1; 1 <= BETA < 1/THETA
21385C
21386C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED
21387C              BY SUMMING THE PROBABILITY MASS FUNCTION.
21388C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
21389C                                WHICH THE CUMULATIVE DISTRIBUTION
21390C                                FUNCTION IS TO BE EVALUATED.
21391C                                X SHOULD BE A NON-NEGATIVE INTEGER.
21392C                     --THETA  = THE FIRST SHAPE PARAMETER
21393C                     --BETA   = THE SECOND SHAPE PARAMETER
21394C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
21395C                                DISTRIBUTION FUNCTION VALUE.
21396C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION FUNCTION
21397C             VALUE CDF FOR THE GENERALIZED LOGARITHMIC SERIES
21398C             DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA
21399C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
21400C     RESTRICTIONS--X SHOULD BE A POSITIVE INTEGER
21401C                 --0 < THETA < 1; 1 < BETA < 1/THETA
21402C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
21403C     LANGUAGE--ANSI FORTRAN (1977)
21404C     REFERENCES--FAMOYE (1997), "SAMPLING FROM A GENERALIZED
21405C                 LOGARITHMIC SERIES DISTRIBUTION", COMPUTING,
21406C                 58(4), PP. 365-376.
21407C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
21408C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 11.
21409C     WRITTEN BY--JAMES J. FILLIBEN
21410C                 STATISTICAL ENGINEERING DIVISION
21411C                 INFORMATION TECHNOLOGY LABORATORY
21412C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21413C                 GAITHERSBURG, MD 20899-8980
21414C                 PHONE--301-975-2855
21415C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21416C           OF THE NATIONAL BUREAU OF STANDARDS.
21417C     LANGUAGE--ANSI FORTRAN (1977)
21418C     VERSION NUMBER--2006/6
21419C     ORIGINAL VERSION--JUNE      2006.
21420C
21421C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
21422C
21423C---------------------------------------------------------------------
21424C
21425      DOUBLE PRECISION DTERM1
21426      DOUBLE PRECISION DTERM2
21427      DOUBLE PRECISION DTERM3
21428      DOUBLE PRECISION DSUM
21429      DOUBLE PRECISION DX
21430      DOUBLE PRECISION DTHETA
21431      DOUBLE PRECISION DBETA
21432      DOUBLE PRECISION DPDF
21433      DOUBLE PRECISION DPDFSV
21434      DOUBLE PRECISION DCDF
21435C
21436C-----COMMON----------------------------------------------------------
21437C
21438      INCLUDE 'DPCOP2.INC'
21439C
21440C-----START POINT-----------------------------------------------------
21441C
21442C     CHECK THE INPUT ARGUMENTS FOR ERRORS
21443C
21444      IX=INT(X+0.5)
21445      IF(IX.LT.1)THEN
21446        WRITE(ICOUT,4)
21447        CALL DPWRST('XXX','BUG ')
21448        WRITE(ICOUT,46)X
21449        CALL DPWRST('XXX','BUG ')
21450        CDF=0.0
21451        GOTO9000
21452      ENDIF
21453    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GLSCDF IS LESS ',
21454     1'THAN 1')
21455C
21456      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
21457        WRITE(ICOUT,15)
21458        CALL DPWRST('XXX','BUG ')
21459        WRITE(ICOUT,46)THETA
21460        CALL DPWRST('XXX','BUG ')
21461        CDF=0.0
21462        GOTO9000
21463      ENDIF
21464   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GLSCDF IS NOT IN ',
21465     1'THE INTERVAL (0,1)')
21466C
21467      IF(BETA.LT.1.0 .OR. BETA.GE.1.0/THETA)THEN
21468        WRITE(ICOUT,25)1.0/THETA
21469        CALL DPWRST('XXX','BUG ')
21470        WRITE(ICOUT,46)THETA
21471        CALL DPWRST('XXX','BUG ')
21472        CDF=0.0
21473        GOTO9000
21474      ENDIF
21475   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GLSCDF IS NOT IN ',
21476     1'THE INTERVAL (1,',G15.7,')')
21477C
21478   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
21479C
21480      DTHETA=DBLE(THETA)
21481      DBETA=DBLE(BETA)
21482C
21483C     USE THE RECURRENCE RELATION (PAGE 228 OF CONSUL AND FAMOYE):
21484C
21485C     P(X+1;THETA,BETA) = (BETA - X/(X+1))*THETA*(1-THETA)**(BETA-1)*
21486C                         PROD[j=1 to X-1][1 + BETA/(BETA*X-j)]*
21487C                         P(X;THETA,BETA)
21488C
21489C     COMPUTE BY TAKING LOG OF THIS FORMULA WHEN X >= 3.
21490C
21491      DCDF=DTHETA*(1.0D0 - DTHETA)**(DBETA - 1.0D0)/
21492     1     (-DLOG(1.0D0 - DTHETA))
21493      IF(IX.EQ.1)GOTO1000
21494C
21495      DPDF=(DBETA-0.5D0)*DTHETA*(1.0D0-DTHETA)**(DBETA-1.0D0)*DCDF
21496      DCDF=DCDF + DPDF
21497      IF(IX.EQ.2)GOTO1000
21498      DPDFSV=DPDF
21499      DTERM2=DLOG(DTHETA) + (DBETA - 1.0D0)*DLOG(1.0D0 - DTHETA)
21500C
21501      DO100I=3,IX
21502        DX=DBLE(I)
21503        DTERM1=DLOG(DBETA - (DX-1.0D0)/DX)
21504        IF(DPDFSV.LE.0.0D0)THEN
21505          GOTO1000
21506        ELSE
21507          DTERM3=DLOG(DPDFSV)
21508        ENDIF
21509        DSUM=0.0D0
21510        DO200J=1,I-2
21511          DSUM=DSUM + DLOG(1.0D0 + DBETA/(DBETA*(DX-1.0D0)-DBLE(J)))
21512  200   CONTINUE
21513        DPDF=DEXP(DTERM1 + DTERM2 + DTERM3 + DSUM)
21514        DCDF=DCDF + DPDF
21515        DPDFSV=DPDF
21516  100 CONTINUE
21517C
21518 1000 CONTINUE
21519      CDF=REAL(DCDF)
21520C
21521 9000 CONTINUE
21522      RETURN
21523      END
21524      DOUBLE PRECISION FUNCTION GLSFUN(DTHETA)
21525C
21526C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
21527C              GENERALIZED LOGARITHMIC SERIES METHOD OF MOMENT
21528C              EQUATIONS.
21529C
21530C                 (1-THETA)*XBAR**3/ALPHA**2 -
21531C                 THETA**2*(s**2+XBAR**2) 0
21532C
21533C              WITH THETA DENOTING THE SHAPE PARAMETER AND
21534C              ALPHA = 1/-LOG(1-THETA).  THIS
21535C              ROUTINE ASSUMES THE DATA IS IN THE FORM
21536C
21537C                   X(I)  FREQ(I)
21538C
21539C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
21540C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
21541C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
21542C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
21543C              SINCE DNSQE ONLY PASSES ONE ARRAY, WE SPLIT INTO
21544C              TWO PARTS: 1 - MAXNXT/2 ARE THE FREQUENCIES WHILE
21545C              (MAXNXT/2 + 1) - MAXNXT ARE THE CLASS VALUES (I.E.,
21546C              THE X).
21547C     EXAMPLE--GENERALIZED LOGARITHMIC SERIES MAXIMUM LIKELIHOOD Y
21548C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
21549C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 11.
21550C     WRITTEN BY--JAMES J. FILLIBEN
21551C                 STATISTICAL ENGINEERING DIVISION
21552C                 INFORMATION TECHNOLOGY LABORATORY
21553C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21554C                 GAITHERSBUG, MD 20899-8980
21555C                 PHONE--301-975-2855
21556C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21557C           OF THE NATIONAL BUREAU OF STANDARDS.
21558C     LANGUAGE--ANSI FORTRAN (1977)
21559C     VERSION NUMBER--2006/7
21560C     ORIGINAL VERSION--JULY      2006.
21561C
21562C---------------------------------------------------------------------
21563C
21564      DOUBLE PRECISION DTHETA
21565      DOUBLE PRECISION DALPHA
21566C
21567      DOUBLE PRECISION XBAR
21568      DOUBLE PRECISION S2
21569      DOUBLE PRECISION F1FREQ
21570      COMMON/GLSCOM/XBAR,S2,F1FREQ,MAXROW,N
21571C
21572C-----COMMON----------------------------------------------------------
21573C
21574      INCLUDE 'DPCOP2.INC'
21575C
21576C-----START POINT-----------------------------------------------------
21577C
21578C  COMPUTE SOME SUMS
21579C
21580      DALPHA=-1.0D0/DLOG(1.0D0 - DTHETA)
21581      GLSFUN=(1.0D0-DTHETA)*XBAR**3/(DALPHA**2) -
21582     1       DTHETA**2*(S2+XBAR**2)
21583C
21584      RETURN
21585      END
21586      SUBROUTINE GLSFU2(N,XPAR,FVEC,IFLAG,Y,K)
21587C
21588C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
21589C              GENERALIZED LOGARITHMIC SERIES MAXIMUM LIKELIHOOD
21590C              EQUATIONS.
21591C
21592C              THE MAXIMUM LIKELIHOOD ESTIMATES ARE THE SOLUTIONS
21593C              TO THE EQUATIONS:
21594C
21595C                 (N*XBAR/THETA) - (BETA-1)*N*XBAR/(1-THETA) +
21596C                 N/((1-THETA)*LOG(1-THETA)) = 0
21597C
21598C                 N*XBAR*LOG(1-THETA) +
21599C                 SUM[X=2 to K][SUM[i=1 to x-1][X*N(X)/(BETA*X-i)]]
21600C                 = 0
21601C
21602C              WITH THETA DENOTING THE SHAPE PARAMETER AND
21603C              ALPHA = 1/-LOG(1-THETA).  THIS
21604C              ROUTINE ASSUMES THE DATA IS IN THE FORM
21605C
21606C                   X(I)  FREQ(I)
21607C
21608C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
21609C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
21610C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
21611C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
21612C              SINCE DNSQE ONLY PASSES ONE ARRAY, WE SPLIT INTO
21613C              TWO PARTS: 1 - MAXNXT/2 ARE THE FREQUENCIES WHILE
21614C              (MAXNXT/2 + 1) - MAXNXT ARE THE CLASS VALUES (I.E.,
21615C              THE X).
21616C     EXAMPLE--GENERALIZED LOGARITHMIC SERIES MAXIMUM LIKELIHOOD Y
21617C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
21618C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 11.
21619C     WRITTEN BY--JAMES J. FILLIBEN
21620C                 STATISTICAL ENGINEERING DIVISION
21621C                 INFORMATION TECHNOLOGY LABORATORY
21622C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21623C                 GAITHERSBUG, MD 20899-8980
21624C                 PHONE--301-975-2855
21625C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21626C           OF THE NATIONAL BUREAU OF STANDARDS.
21627C     LANGUAGE--ANSI FORTRAN (1977)
21628C     VERSION NUMBER--2006/7
21629C     ORIGINAL VERSION--JULY      2006.
21630C
21631C---------------------------------------------------------------------
21632C
21633      DOUBLE PRECISION XPAR(*)
21634      DOUBLE PRECISION FVEC(*)
21635      REAL Y(*)
21636C
21637      DOUBLE PRECISION DX
21638      DOUBLE PRECISION DFREQ
21639      DOUBLE PRECISION DTHETA
21640      DOUBLE PRECISION DBETA
21641      DOUBLE PRECISION DALPHA
21642      DOUBLE PRECISION DTERM1
21643      DOUBLE PRECISION DTERM2
21644      DOUBLE PRECISION DTERM3
21645      DOUBLE PRECISION DSUM1
21646      DOUBLE PRECISION DN
21647C
21648      DOUBLE PRECISION XBAR
21649      DOUBLE PRECISION S2
21650      DOUBLE PRECISION F1FREQ
21651      COMMON/GLSCOM/XBAR,S2,F1FREQ,MAXROW,NTOT
21652C
21653C-----COMMON----------------------------------------------------------
21654C
21655      INCLUDE 'DPCOP2.INC'
21656C
21657C-----START POINT-----------------------------------------------------
21658C
21659C  COMPUTE SOME SUMS
21660C
21661      N=2
21662      IFLAG=0
21663C
21664      DTHETA=XPAR(1)
21665      DBETA=XPAR(2)
21666      DALPHA=-1.0D0/DLOG(1.0D0 - DTHETA)
21667      DN=DBLE(NTOT)
21668C
21669      IINDX=MAXROW/2
21670C
21671      DTERM1=DN*XBAR/DTHETA
21672      DTERM2=(DBETA-1.0D0)*DN*XBAR/(1.0D0-DTHETA)
21673      DTERM3=DN/((1.0D0-DTHETA)*DLOG(1.0D0-DTHETA))
21674      FVEC(1)=DTERM1 - DTERM2 + DTERM3
21675C
21676      DSUM1=0.0D0
21677      DTERM1=DN*XBAR*DLOG(1.0D0-DTHETA)
21678C
21679      DO100I=2,K
21680        DX=DBLE(Y(IINDX+I))
21681        DFREQ=Y(I)
21682        DO200J=1,I-1
21683          DSUM1=DSUM1 + DX*DFREQ/(DBETA*DX - DBLE(J))
21684  200   CONTINUE
21685  100 CONTINUE
21686C
21687      FVEC(2)=DTERM1 + DSUM1
21688C
21689      RETURN
21690      END
21691      DOUBLE PRECISION FUNCTION GLSFU3(DTHETA)
21692C
21693C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
21694C              GENERALIZED LOGARITHMIC SERIES METHOD OF ONES
21695C              FREQUENCY AND SAMPLE MEAN EQUATIONS.
21696C
21697C                 LOG(THETA) + ((1/THETA) -
21698C                 (1/XBAR)*(-1/LOG(1-THETA) - 1)*LOG(1-THETA) -
21699C                 LOG(-LOG(1-THETA)) - LOG(F1/N) = 0
21700C
21701C              WITH THETA DENOTING THE SHAPE PARAMETER.
21702C
21703C              CALLED BY DFZERO ROUTINE.
21704C     EXAMPLE--GENERALIZED LOGARITHMIC SERIES MAXIMUM LIKELIHOOD Y
21705C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
21706C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 11.
21707C     WRITTEN BY--JAMES J. FILLIBEN
21708C                 STATISTICAL ENGINEERING DIVISION
21709C                 INFORMATION TECHNOLOGY LABORATORY
21710C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21711C                 GAITHERSBUG, MD 20899-8980
21712C                 PHONE--301-975-2855
21713C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21714C           OF THE NATIONAL BUREAU OF STANDARDS.
21715C     LANGUAGE--ANSI FORTRAN (1977)
21716C     VERSION NUMBER--2006/7
21717C     ORIGINAL VERSION--JULY      2006.
21718C
21719C---------------------------------------------------------------------
21720C
21721      DOUBLE PRECISION DTHETA
21722      DOUBLE PRECISION DALPHA
21723      DOUBLE PRECISION DTERM1
21724      DOUBLE PRECISION DTERM2
21725      DOUBLE PRECISION DTERM3
21726      DOUBLE PRECISION DTERM4
21727C
21728      DOUBLE PRECISION XBAR
21729      DOUBLE PRECISION S2
21730      DOUBLE PRECISION F1
21731      COMMON/GLSCOM/XBAR,S2,F1,MAXROW,N
21732C
21733C-----COMMON----------------------------------------------------------
21734C
21735      INCLUDE 'DPCOP2.INC'
21736C
21737C-----START POINT-----------------------------------------------------
21738C
21739C  COMPUTE SOME SUMS
21740C
21741      DN=DBLE(N)
21742      DTERM1=DLOG(DTHETA)
21743      DALPHA=-1.0D0/DLOG(1.0D0 - DTHETA)
21744      DTERM2=((1.0D0/DTHETA) - DALPHA/XBAR - 1.0D0)*
21745     1       DLOG(1.0D0 - DTHETA)
21746      DTERM3=DLOG(-DLOG(1.0D0-DTHETA))
21747      DTERM4=DLOG(F1)
21748      GLSFU3=DTERM1 + DTERM2 - DTERM3 - DTERM4
21749C
21750      RETURN
21751      END
21752      SUBROUTINE GLSPDF(X,THETA,BETA,PDF)
21753C
21754C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY MASS
21755C              FUNCTION VALUE FOR THE GENERALIZED LOGARITHMIC SERIES
21756C              DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA.
21757C              THIS DISTRIBUTION IS DEFINED FOR ALL INTEGER X >= 1.
21758C              THE PROBABILITY MASS FUNCTION IS:
21759C              p(X;THETA,BETA)=
21760C                  Gamma(BETA*X+1)*THETA**X*(1-THETA)**(BETA*X-X)/
21761C                  X!*(BETA*X)*Gamma(BETA*X-X+1)*[-LOG(1-THETA)]
21762C                  X = 1, 2, 3, ,...
21763C                  0 < THETA < 1; 1 <= BETA < 1/THETA
21764C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
21765C                                WHICH THE PROBABILITY MASS
21766C                                FUNCTION IS TO BE EVALUATED.
21767C                                X SHOULD BE A NON-NEGATIVE INTEGER.
21768C                     --THETA  = THE FIRST SHAPE PARAMETER
21769C                     --BETA   = THE SECOND SHAPE PARAMETER
21770C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY MASS
21771C                                FUNCTION VALUE.
21772C     OUTPUT--THE SINGLE PRECISION PROBABILITY MASS FUNCTION VALUE
21773C             PDF FOR THE GENERALIZED LOGARITHMIC SERIES
21774C             DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA
21775C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
21776C     RESTRICTIONS--X SHOULD BE A POSITIVE INTEGER
21777C                 --0 < THETA < 1; 1 < BETA < 1/THETA
21778C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
21779C     LANGUAGE--ANSI FORTRAN (1977)
21780C     REFERENCES--FAMOYE (1997), "SAMPLING FROM A GENERALIZED
21781C                 LOGARITHMIC SERIES DISTRIBUTION", COMPUTING,
21782C                 58(4), PP. 365-376.
21783C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
21784C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 11.
21785C     WRITTEN BY--JAMES J. FILLIBEN
21786C                 STATISTICAL ENGINEERING DIVISION
21787C                 INFORMATION TECHNOLOGY LABORATORY
21788C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21789C                 GAITHERSBURG, MD 20899-8980
21790C                 PHONE--301-975-2855
21791C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21792C           OF THE NATIONAL BUREAU OF STANDARDS.
21793C     LANGUAGE--ANSI FORTRAN (1977)
21794C     VERSION NUMBER--2006/6
21795C     ORIGINAL VERSION--JUNE      2006.
21796C
21797C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
21798C
21799C---------------------------------------------------------------------
21800C
21801      DOUBLE PRECISION DTERM1
21802      DOUBLE PRECISION DTERM2
21803      DOUBLE PRECISION DTERM3
21804      DOUBLE PRECISION DTERM4
21805      DOUBLE PRECISION DX
21806      DOUBLE PRECISION DTHETA
21807      DOUBLE PRECISION DBETA
21808      DOUBLE PRECISION DPDF
21809      DOUBLE PRECISION DLNGAM
21810C
21811C-----COMMON----------------------------------------------------------
21812C
21813      INCLUDE 'DPCOP2.INC'
21814C
21815C-----START POINT-----------------------------------------------------
21816C
21817C     CHECK THE INPUT ARGUMENTS FOR ERRORS
21818C
21819      IX=INT(X+0.5)
21820      IF(IX.LT.1)THEN
21821        WRITE(ICOUT,4)
21822        CALL DPWRST('XXX','BUG ')
21823        WRITE(ICOUT,46)X
21824        CALL DPWRST('XXX','BUG ')
21825        PDF=0.0
21826        GOTO9000
21827      ENDIF
21828    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GLSPDF IS LESS ',
21829     1'THAN 1')
21830C
21831      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
21832        WRITE(ICOUT,15)
21833        CALL DPWRST('XXX','BUG ')
21834        WRITE(ICOUT,46)THETA
21835        CALL DPWRST('XXX','BUG ')
21836        PDF=0.0
21837        GOTO9000
21838      ENDIF
21839   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GLSPDF IS NOT IN ',
21840     1'THE INTERVAL (0,1)')
21841C
21842      IF(BETA.LT.1.0 .OR. BETA.GE.1.0/THETA)THEN
21843        WRITE(ICOUT,25)1.0/THETA
21844        CALL DPWRST('XXX','BUG ')
21845        WRITE(ICOUT,46)THETA
21846        CALL DPWRST('XXX','BUG ')
21847        PDF=0.0
21848        GOTO9000
21849      ENDIF
21850   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GLSPDF IS NOT IN ',
21851     1'THE INTERVAL (1,',G15.7,')')
21852C
21853   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
21854C
21855      DX=DBLE(IX)
21856      DTHETA=DBLE(THETA)
21857      DBETA=DBLE(BETA)
21858C
21859      DTERM1=DLNGAM(DBETA*DX+1.0D0) + DX*DLOG(DTHETA) +
21860     1       (DBETA*DX-DX)*DLOG(1.0D0 - DTHETA)
21861      DTERM2=DLNGAM(DX+1.0D0) + DLOG(DBETA) + DLOG(DX)
21862      DTERM3=DLNGAM(DBETA*DX-DX+1.0D0) + DLOG(-DLOG(1.0D0-DTHETA))
21863      DTERM4=DTERM1 - DTERM2 - DTERM3
21864      DPDF=DEXP(DTERM4)
21865      PDF=REAL(DPDF)
21866C
21867 9000 CONTINUE
21868      RETURN
21869      END
21870      SUBROUTINE GLSPPF(P,THETA,BETA,PPF)
21871C
21872C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
21873C              FUNCTION VALUE FOR THE GENERALIZED LOGARITHMIC SERIES
21874C              DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA.
21875C              THIS DISTRIBUTION IS DEFINED FOR ALL INTEGER X >= 1.
21876C              THE PROBABILITY MASS FUNCTION IS:
21877C              p(X;THETA,BETA)=
21878C                  Gamma(BETA*X+1)*THETA**X*(1-THETA)**(BETA*X-X)/
21879C                  X!*(BETA*X)*Gamma(BETA*X-X+1)*[-LOG(1-THETA)]
21880C                  X = 1, 2, 3, ,...
21881C                  0 < THETA < 1; 1 <= BETA < 1/THETA
21882C
21883C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED
21884C              BY SUMMING THE PROBABILITY MASS FUNCTION.  THE
21885C              PERCENT POINT FUNCTION IS COMPUTED BY COMPUTING THE
21886C              CUMULATIVE DISTRIBUTION UNTIL THE APPROPRIATE
21887C              PROBABILITY IS REACHED.
21888C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE AT
21889C                                WHICH THE PERCENT POINT
21890C                                FUNCTION IS TO BE EVALUATED.
21891C                                0 <= P < 1.
21892C                     --THETA  = THE FIRST SHAPE PARAMETER
21893C                     --BETA   = THE SECOND SHAPE PARAMETER
21894C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT POINT
21895C                                FUNCTION VALUE.
21896C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION
21897C             VALUE PPF FOR THE GENERALIZED LOGARITHMIC SERIES
21898C             DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA
21899C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
21900C     RESTRICTIONS--0 <= P < 1
21901C                 --0 < THETA < 1; 1 < BETA < 1/THETA
21902C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
21903C     LANGUAGE--ANSI FORTRAN (1977)
21904C     REFERENCES--FAMOYE (1997), "SAMPLING FROM A GENERALIZED
21905C                 LOGARITHMIC SERIES DISTRIBUTION", COMPUTING,
21906C                 58(4), PP. 365-376.
21907C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
21908C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 11.
21909C     WRITTEN BY--JAMES J. FILLIBEN
21910C                 STATISTICAL ENGINEERING DIVISION
21911C                 INFORMATION TECHNOLOGY LABORATORY
21912C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
21913C                 GAITHERSBURG, MD 20899-8980
21914C                 PHONE--301-975-2855
21915C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
21916C           OF THE NATIONAL BUREAU OF STANDARDS.
21917C     LANGUAGE--ANSI FORTRAN (1977)
21918C     VERSION NUMBER--2006/6
21919C     ORIGINAL VERSION--JUNE      2006.
21920C
21921C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
21922C
21923C---------------------------------------------------------------------
21924C
21925      DOUBLE PRECISION DTERM1
21926      DOUBLE PRECISION DTERM2
21927      DOUBLE PRECISION DTERM3
21928      DOUBLE PRECISION DSUM
21929      DOUBLE PRECISION DX
21930      DOUBLE PRECISION DTHETA
21931      DOUBLE PRECISION DBETA
21932      DOUBLE PRECISION DPDF
21933      DOUBLE PRECISION DPDFSV
21934      DOUBLE PRECISION DCDF
21935      DOUBLE PRECISION DEPS
21936C
21937C-----COMMON----------------------------------------------------------
21938C
21939      INCLUDE 'DPCOMC.INC'
21940      INCLUDE 'DPCOP2.INC'
21941C
21942C-----START POINT-----------------------------------------------------
21943C
21944C     CHECK THE INPUT ARGUMENTS FOR ERRORS
21945C
21946      IF(P.LT.0.0 .OR. P.GE.1.0)THEN
21947        WRITE(ICOUT,4)
21948        CALL DPWRST('XXX','BUG ')
21949        WRITE(ICOUT,46)P
21950        CALL DPWRST('XXX','BUG ')
21951        PPF=0.0
21952        GOTO9000
21953      ENDIF
21954    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GLSPPF IS OUTSIDE ',
21955     1'THE (0,1] INTERVAL')
21956C
21957      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
21958        WRITE(ICOUT,15)
21959        CALL DPWRST('XXX','BUG ')
21960        WRITE(ICOUT,46)THETA
21961        CALL DPWRST('XXX','BUG ')
21962        PPF=0.0
21963        GOTO9000
21964      ENDIF
21965   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GLSPPF IS NOT IN ',
21966     1'THE INTERVAL (0,1)')
21967C
21968      IF(BETA.LT.1.0 .OR. BETA.GE.1.0/THETA)THEN
21969        WRITE(ICOUT,25)1.0/THETA
21970        CALL DPWRST('XXX','BUG ')
21971        WRITE(ICOUT,46)THETA
21972        CALL DPWRST('XXX','BUG ')
21973        PPF=0.0
21974        GOTO9000
21975      ENDIF
21976   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GLSPPF IS NOT IN ',
21977     1'THE INTERVAL (1,',G15.7,')')
21978C
21979   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
21980C
21981      DTHETA=DBLE(THETA)
21982      DBETA=DBLE(BETA)
21983      DP=DBLE(P)
21984      DEPS=1.0D-7
21985      DCDF=DTHETA*(1.0D0 - DTHETA)**(DBETA - 1.0D0)/
21986     1     (-DLOG(1.0D0 - DTHETA))
21987      IF(DCDF.GE.DP-DEPS)THEN
21988        PPF=1.0
21989        GOTO9000
21990      ENDIF
21991C
21992      DPDF=(DBETA-0.5D0)*DTHETA*(1.0D0-DTHETA)**(DBETA-1.0D0)*DCDF
21993      DCDF=DCDF + DPDF
21994      IF(DCDF.GE.DP-DEPS)THEN
21995        PPF=2.0
21996        GOTO9000
21997      ENDIF
21998      DPDFSV=DPDF
21999      DTERM2=DLOG(DTHETA) + (DBETA - 1.0D0)*DLOG(1.0D0 - DTHETA)
22000C
22001      I=2
22002  100 CONTINUE
22003        I=I+1
22004        IF(DBLE(I).GE.DBLE(I1MACH(9)))THEN
22005          WRITE(ICOUT,55)
22006   55     FORMAT('***** ERROR--THE COMPUTED PERCENT POINT VALUE ',
22007     1           'EXCEEDS THE LARGEST MACHINE INTEGER.')
22008          CALL DPWRST('XXX','BUG ')
22009          PPF=0.0
22010          GOTO9000
22011        ENDIF
22012        DX=DBLE(I)
22013        DTERM1=DLOG(DBETA - (DX-1.0D0)/DX)
22014        IF(DPDFSV.LE.0.0D0)THEN
22015          DPDF=0.0D0
22016          GOTO1000
22017        ELSE
22018          DTERM3=DLOG(DPDFSV)
22019        ENDIF
22020        DSUM=0.0D0
22021        DO200J=1,I-2
22022          DSUM=DSUM + DLOG(1.0D0 + DBETA/(DBETA*(DX-1.0D0)-DBLE(J)))
22023  200   CONTINUE
22024        DPDF=DEXP(DTERM1 + DTERM2 + DTERM3 + DSUM)
22025 1000   CONTINUE
22026        DCDF=DCDF + DPDF
22027        DPDFSV=DPDF
22028        IF(DCDF.GE.DP-DEPS)THEN
22029          PPF=REAL(I)
22030          GOTO9000
22031        ENDIF
22032      GOTO100
22033C
22034 9000 CONTINUE
22035      RETURN
22036      END
22037      SUBROUTINE GLSRAN(N,THETA,BETA,ISEED,X)
22038C
22039C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
22040C              FROM THE GENERALIZED LOGARITHMIC SERIES DISTRIBUTION
22041C              WITH SHAPE PARAMETERS THETA AND BETA.
22042C              THIS DISTRIBUTION IS DEFINED FOR ALL
22043C              NON-NEGATIVE INTEGER X >= 1.
22044C              p(X;THETA,BETA)=
22045C                  Gamma(BETA*X+1)*THETA**X*(1-THETA)**(BETA*X-X)/
22046C                  X!*(BETA*X)*Gamma(BETA*X-X+1)*[-LOG(1-THETA)]
22047C                  X = 1, 2, 3, ,...
22048C                  0 < THETA < 1; 1 < BETA < 1/THETA
22049C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
22050C                                OF RANDOM NUMBERS TO BE
22051C                                GENERATED.
22052C                     --THETA = THE SINGLE PRECISION VALUE
22053C                                OF THE FIRST SHAPE PARAMETER.
22054C                     --BETA  = THE SINGLE PRECISION VALUE
22055C                                OF THE SECOND SHAPE PARAMETER.
22056C     OUTPUT ARGUMENTS--X    = A SINGLE PRECISION VECTOR
22057C                              (OF DIMENSION AT LEAST N)
22058C                              INTO WHICH THE GENERATED
22059C                              RANDOM SAMPLE WILL BE PLACED.
22060C     OUTPUT--A RANDOM SAMPLE OF SIZE N
22061C             FROM THE GENERALIZED LOGARITHMIC SERIES DISTRIBUTION
22062C             WITH SHAPE PARAMETERS THETA AND BETA.
22063C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
22064C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
22065C                   OF N FOR THIS SUBROUTINE.
22066C                 --0 < THETA < 1, 1 < BETA < 1/THETA
22067C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GLSPPF
22068C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
22069C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
22070C     LANGUAGE--ANSI FORTRAN (1977)
22071C     REFERENCES--FAMOYE (1997), "SAMPLING FROM A GENERALIZED
22072C                 LOGARITHMIC SERIES DISTRIBUTION", COMPUTING,
22073C                 58(4), PP. 365-376.
22074C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
22075C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 11.
22076C     WRITTEN BY--JAMES J. FILLIBEN
22077C                 STATISTICAL ENGINEERING DIVISION
22078C                 INFORMATION TECHNOLOGY LABORATORY
22079C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
22080C                 GAITHERSBURG, MD 20899-8980
22081C                 PHONE--301-975-2899
22082C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
22083C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
22084C     LANGUAGE--ANSI FORTRAN (1977)
22085C     VERSION NUMBER--2006/6
22086C     ORIGINAL VERSION--JUNE      2006.
22087C
22088C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
22089C
22090C---------------------------------------------------------------------
22091C
22092      REAL THETA
22093      REAL BETA
22094      DIMENSION X(*)
22095CCCCC DIMENSION XTEMP(2)
22096C
22097C-----COMMON----------------------------------------------------------
22098C
22099      INCLUDE 'DPCOP2.INC'
22100C
22101C-----DATA STATEMENTS-------------------------------------------------
22102C
22103CCCCC DATA PI / 3.1415926535 8979323846 E0 /
22104C
22105C-----START POINT-----------------------------------------------------
22106C
22107C     CHECK THE INPUT ARGUMENTS FOR ERRORS
22108C
22109      IF(N.LT.1)THEN
22110        WRITE(ICOUT,5)
22111    5   FORMAT('***** ERROR--THE REQUESTED NUMBER OF ',
22112     1         'GENERALIZED LOGARITHMIC SERIES')
22113        CALL DPWRST('XXX','BUG ')
22114        WRITE(ICOUT,6)
22115    6   FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
22116        CALL DPWRST('XXX','BUG ')
22117        WRITE(ICOUT,47)N
22118   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
22119        CALL DPWRST('XXX','BUG ')
22120        GOTO9999
22121      ELSEIF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
22122        WRITE(ICOUT,11)
22123   11   FORMAT('***** ERROR--THE THETA PARAMETER FOR THE ',
22124     1         'GENERALIZED LOGARITHMIC SERIES')
22125        CALL DPWRST('XXX','BUG ')
22126        WRITE(ICOUT,12)
22127   12   FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (0,1) INTERVAL.')
22128        CALL DPWRST('XXX','BUG ')
22129        WRITE(ICOUT,46)THETA
22130   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
22131        CALL DPWRST('XXX','BUG ')
22132        GOTO9999
22133      ELSEIF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA)THEN
22134        WRITE(ICOUT,21)
22135   21   FORMAT('***** ERROR--THE BETA PARAMETER FOR THE ',
22136     1         'GENERALIZED LOGARITHMIC SERIES')
22137        CALL DPWRST('XXX','BUG ')
22138        WRITE(ICOUT,22)
22139   22   FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (0,',G15.7,
22140     1         ') INTERVAL.')
22141        CALL DPWRST('XXX','BUG ')
22142        WRITE(ICOUT,46)BETA
22143        CALL DPWRST('XXX','BUG ')
22144        GOTO9999
22145      ENDIF
22146C
22147C     GENERATE N GENERALIZED LOGARITHMIC SERIES DISTRIBUTION
22148C     RANDOM NUMBERS.  FOLLOWING RECOMMENDATION OF CONSUL AND
22149C     FAYMOE, USE INVERSION METHOD FOR THETA*BETA <= 0.45 AND
22150C     BRANCHING METHOD OTHERWISE.
22151C
22152C     BRANCHING ALGORITHM DOESN'T SEEM TO RETURN REASONABLE
22153C     RESULTS (MAYBE USING A SLIGHTLY DIFFERENT DEFINITION
22154C     FOR NEGATIVE BINOMIAL?), SO USE REJECTION ALGORITHM
22155C     INSTEAD.
22156C
22157CCCCC IF(THETA*BETA.LE.0.45)THEN
22158        CALL UNIRAN(N,ISEED,X)
22159        DO100I=1,N
22160          ZTEMP=X(I)
22161          CALL GLSPPF(ZTEMP,THETA,BETA,PPF)
22162          X(I)=PPF
22163  100   CONTINUE
22164CCCCC ELSE
22165C
22166C       BRANCHING ALGORITHM
22167C
22168CCCCC   NTEMP=1
22169CCCCC   DO200I=1,N
22170CCCCC     CALL DLGRAN(NTEMP,THETA,ISEED,XTEMP)
22171CCCCC     Y=XTEMP(1)
22172CCCCC     XX=Y
22173CC210     CONTINUE
22174CCCCC     AK=(BETA-1.0)*Y
22175CCCCC     CALL NBRAN(NTEMP,1.0-THETA,AK,ISEED,XTEMP)
22176CCCCC     Z=XTEMP(1)
22177CCCCC     XX=XX+Z
22178CCCCC     Y=Z
22179CCCCC     IF(Y.GT.0)GOTO210
22180CCCCC     X(I)=XX
22181CC200   CONTINUE
22182C
22183C       REJECTION ALGORITHM
22184C
22185CCCCC   NTEMP=2
22186CCCCC   C=(1.0+SQRT(2.0))/((-LOG(1.0-THETA))*SQRT(PI*BETA*(BETA-1.0)))
22187CCCCC   DO300I=1,N
22188CC310     CONTINUE
22189CCCCC     CALL UNIRAN(NTEMP,ISEED,XTEMP)
22190CCCCC     U=XTEMP(1)
22191CCCCC     V=XTEMP(2)
22192CCCCC     IXX=INT(1.0/V**2)
22193CCCCC     XX=IXX
22194CCCCC     CALL GLSPDF(XX,THETA,BETA,PDF)
22195CCCCC     TERM1=U*C*(1.0/SQRT(XX) - 1.0/SQRT(XX+1.0))
22196CCCCC     IF(TERM1.LE.PDF)THEN
22197CCCCC       X(I)=XX
22198CCCCC     ELSE
22199CCCCC       GOTO310
22200CCCCC     ENDIF
22201CC300   CONTINUE
22202CCCCC ENDIF
22203C
22204 9999 CONTINUE
22205C
22206      RETURN
22207      END
22208      SUBROUTINE GMCCDF(X,ALPHA,A,CDF)
22209C
22210C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
22211C              FUNCTION VALUE FOR THE GENERALIZED MCLEISH
22212C              DISTRIBUTION WITH SHAPE PARAMETERS ALPHA AND A.
22213C              THE CUMULATIVE DISTRIBUTION IS COMPUTED BY
22214C              NUMERICALLY INTEGRATING THE PDF FUNCTION.
22215C     INPUT  ARGUMENTS--X       = THE DOUBLE PRECISION VALUE AT
22216C                                 WHICH THE CUMULATIVE DISTRIBUTION
22217C                                 FUNCTION IS TO BE EVALUATED.
22218C                     --ALPHA   = THE FIRST SHAPE PARAMETER
22219C                     --A       = THE SECOND SHAPE PARAMETER
22220C     OUTPUT ARGUMENTS--CDF     = THE DOUBLE PRECISION CUMULATIVE
22221C                                 DISTRIBUTION FUNCTION VALUE.
22222C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
22223C             FUNCTION VALUE FOR THE GENERALIZED MCLEISH
22224C             DISTRIBUTION WITH SHAPE PARAMETERS ALPHA AND A.
22225C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
22226C     RESTRICTIONS--NONE.
22227C     OTHER DATAPAC   SUBROUTINES NEEDED--DQAGI.
22228C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
22229C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
22230C     LANGUAGE--ANSI FORTRAN (1977)
22231C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
22232C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
22233C                 WILEY, PP. 50-53.
22234C     WRITTEN BY--JAMES J. FILLIBEN
22235C                 STATISTICAL ENGINEERING DIVISION
22236C                 INFORMATION TECHNOLOGY LABORATORY
22237C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
22238C                 GAITHERSBURG, MD 20899-8980
22239C                 PHONE--301-975-2855
22240C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
22241C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
22242C     LANGUAGE--ANSI FORTRAN (1977)
22243C     VERSION NUMBER--2004.9
22244C     ORIGINAL VERSION--SEPTEMBER 2004.
22245C
22246C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
22247C
22248C---------------------------------------------------------------------
22249C
22250      INTEGER LIMIT
22251      INTEGER LENW
22252      PARAMETER(LIMIT=100)
22253      PARAMETER(LENW=4*LIMIT)
22254      INTEGER INF
22255      INTEGER NEVAL
22256      INTEGER IER
22257      INTEGER LAST
22258      INTEGER IWORK(LIMIT)
22259      DOUBLE PRECISION ALPHA
22260      DOUBLE PRECISION A
22261      DOUBLE PRECISION EPSABS
22262      DOUBLE PRECISION EPSREL
22263      DOUBLE PRECISION DCDF
22264      DOUBLE PRECISION CDF
22265      DOUBLE PRECISION X
22266      DOUBLE PRECISION DX
22267      DOUBLE PRECISION ABSERR
22268      DOUBLE PRECISION WORK(LENW)
22269C
22270      DOUBLE PRECISION GMCFUN
22271      EXTERNAL GMCFUN
22272C
22273      DOUBLE PRECISION DALPHA
22274      DOUBLE PRECISION DA
22275      COMMON/GMCCOM/DALPHA,DA
22276C
22277C-----COMMON----------------------------------------------------------
22278C
22279      INCLUDE 'DPCOP2.INC'
22280C
22281C-----DATA STATEMENTS-------------------------------------------------
22282C
22283C-----START POINT-----------------------------------------------------
22284C
22285C               ********************************************
22286C               **  STEP 1--                              **
22287C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
22288C               ********************************************
22289C
22290      CDF=0.0D0
22291      IF(ALPHA.LE.0.0D0)THEN
22292        WRITE(ICOUT,5)
22293    5   FORMAT('***** ERROR: VALUE OF SHAPE PARAMETER (ALPHA)',
22294     1         ' IN GMCCDF ROUTINE IS NON-POSITIVE.')
22295        CALL DPWRST('XXX','WRIT')
22296        WRITE(ICOUT,48)ALPHA
22297   48   FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
22298        CALL DPWRST('XXX','WRIT')
22299        GOTO9000
22300      ELSEIF(ABS(A).GE.1.0D0)THEN
22301        WRITE(ICOUT,8)
22302    8   FORMAT('***** ERROR: ABSOLUTE VALUE OF SECOND SHAPE ',
22303     1         'PARAMETER (A) IN GMCCDF ROUTINE IS >= 1.')
22304        CALL DPWRST('XXX','WRIT')
22305        WRITE(ICOUT,48)A
22306        CALL DPWRST('XXX','WRIT')
22307        GOTO9000
22308      ENDIF
22309C
22310C               ************************************
22311C               **  STEP 1--                      **
22312C               **  COMPUTE THE DENSITY FUNCTION  **
22313C               ************************************
22314C
22315      INF=-1
22316      EPSABS=0.0D0
22317      EPSREL=1.0D-7
22318      IER=0
22319      DCDF=0.0D0
22320      IFLAG=0
22321C
22322      DX=X
22323      IF(DX.LT.0.0D0)THEN
22324        IFLAG=1
22325        INF=1
22326      ENDIF
22327      DA=A
22328      DALPHA=ALPHA
22329C
22330      CALL DQAGI(GMCFUN,DX,INF,EPSABS,EPSREL,DCDF,ABSERR,NEVAL,
22331     1          IER,LIMIT,LENW,LAST,IWORK,WORK)
22332C
22333      IF(IFLAG.EQ.1)THEN
22334        CDF=1.0D0 - DCDF
22335      ELSE
22336        CDF=DCDF
22337      ENDIF
22338C
22339      IF(IER.EQ.1)THEN
22340        WRITE(ICOUT,999)
22341  999   FORMAT(1X)
22342        CALL DPWRST('XXX','BUG ')
22343        WRITE(ICOUT,111)
22344  111   FORMAT('***** ERROR FROM GMCCDF--')
22345        CALL DPWRST('XXX','BUG ')
22346        WRITE(ICOUT,113)
22347  113   FORMAT('      MAXIMUM NUMBER OF SUBDIVISIONS EXCEEDED.')
22348        CALL DPWRST('XXX','BUG ')
22349      ELSEIF(IER.EQ.2)THEN
22350        WRITE(ICOUT,999)
22351        CALL DPWRST('XXX','BUG ')
22352        WRITE(ICOUT,121)
22353  121   FORMAT('***** ERROR FROM GMCCDF--')
22354        CALL DPWRST('XXX','BUG ')
22355        WRITE(ICOUT,123)
22356  123   FORMAT('      ROUNDOFF ERROR PREVENTS REQUESTED TOLERANCE ',
22357     1         'FROM BEING ACHIEVED.')
22358        CALL DPWRST('XXX','BUG ')
22359      ELSEIF(IER.EQ.3)THEN
22360        WRITE(ICOUT,999)
22361        CALL DPWRST('XXX','BUG ')
22362        WRITE(ICOUT,131)
22363  131   FORMAT('***** ERROR FROM GMCCDF--')
22364        CALL DPWRST('XXX','BUG ')
22365        WRITE(ICOUT,133)
22366  133   FORMAT('      BAD INTEGRAND BEHAVIOUR DETECTED.')
22367        CALL DPWRST('XXX','BUG ')
22368      ELSEIF(IER.EQ.4)THEN
22369        WRITE(ICOUT,999)
22370        CALL DPWRST('XXX','BUG ')
22371        WRITE(ICOUT,141)
22372  141   FORMAT('***** ERROR FROM GMCCDF--')
22373        CALL DPWRST('XXX','BUG ')
22374        WRITE(ICOUT,143)
22375  143   FORMAT('      INTEGRATION DID NOT CONVERGE.')
22376        CALL DPWRST('XXX','BUG ')
22377      ELSEIF(IER.EQ.5)THEN
22378        WRITE(ICOUT,999)
22379        CALL DPWRST('XXX','BUG ')
22380        WRITE(ICOUT,151)
22381  151   FORMAT('***** ERROR FROM GMCCDF--')
22382        CALL DPWRST('XXX','BUG ')
22383        WRITE(ICOUT,153)
22384  153   FORMAT('      THE INTEGRATION IS PROBABLY DIVERGENT.')
22385        CALL DPWRST('XXX','BUG ')
22386      ELSEIF(IER.EQ.6)THEN
22387        WRITE(ICOUT,999)
22388        CALL DPWRST('XXX','BUG ')
22389        WRITE(ICOUT,161)
22390  161   FORMAT('***** ERROR FROM GMCCDF--')
22391        CALL DPWRST('XXX','BUG ')
22392        WRITE(ICOUT,163)
22393  163   FORMAT('      INVALID INPUT TO THE INTEGRATION ROUTINE.')
22394        CALL DPWRST('XXX','BUG ')
22395      ENDIF
22396C
22397 9000 CONTINUE
22398      RETURN
22399      END
22400      DOUBLE PRECISION FUNCTION GMCFUN(DX)
22401C
22402C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
22403C              FUNCTION VALUE FOR THE GENERALIZED MCLEISH
22404C              DISTRIBUTION WITH SHAPE PARAMETERS ALPHA AND A.
22405C              THIS DISTRIBUTION IS DEFINED FOR ALL REAL X
22406C              AND HAS THE PROBABILITY DENSITY FUNCTION
22407C
22408C                 f(X;ALPHA,A) = [1/(SQRT(PI)*GAMMA(ALPHA))]*
22409C                                (ABS(X)/2)**(ALPHA-1/2)*K(X,ALPHA-1/2)
22410C                                *(1-A**2)**ALPHA*EXP(A*X)
22411C              WHERE
22412C                 K(X,N) IS THE MODIFIED BESSEL FUNCTION OF THE
22413C                        SECOND KIND
22414C                 GAMMA IS THE GAMMA FUNCTION
22415C
22416C              THE GMCPDF ROUTINE IS CALLED TO COMPUTE THE
22417C              PROBABILITY DENSITY.  DEFINE AS FUNCTION TO BE USED FOR
22418C              INTEGRATION CODE CALLED BY GMCCDF.  THIS ROUTINE USES
22419C              DOUBLE PRECISION ARITHMETIC.
22420C     INPUT  ARGUMENTS--DX      = THE DOUBLE PRECISION VALUE AT
22421C                                 WHICH THE PROBABILITY DENSITY
22422C                                 FUNCTION IS TO BE EVALUATED.
22423C     OUTPUT ARGUMENTS--GMCFUN  = THE DOUBLE PRECISION PROBABILITY
22424C                                 DENSITY FUNCTION VALUE.
22425C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY
22426C             FUNCTION VALUE PDF FOR THE GENERALIZED MCLEISH
22427C             DISTRIBUTION WITH SHAPE PARAMETER ALPHA.
22428C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
22429C     RESTRICTIONS--NONE.
22430C     OTHER DATAPAC   SUBROUTINES NEEDED--GMCPDF.
22431C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
22432C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
22433C     LANGUAGE--ANSI FORTRAN (1977)
22434C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
22435C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
22436C                 WILEY, PP. 50-53.
22437C     WRITTEN BY--JAMES J. FILLIBEN
22438C                 STATISTICAL ENGINEERING DIVISION
22439C                 INFORMATION TECHNOLOGY LABORATORY
22440C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
22441C                 GAITHERSBURG, MD 20899-8980
22442C                 PHONE--301-975-2855
22443C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
22444C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
22445C     LANGUAGE--ANSI FORTRAN (1977)
22446C     VERSION NUMBER--2004.9
22447C     ORIGINAL VERSION--SEPTEMBER 2004.
22448C
22449C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
22450C
22451C---------------------------------------------------------------------
22452C
22453      DOUBLE PRECISION DTERM
22454C
22455      DOUBLE PRECISION DX
22456      DOUBLE PRECISION DALPHA
22457      DOUBLE PRECISION DA
22458      COMMON/GMCCOM/DALPHA,DA
22459C
22460C-----COMMON----------------------------------------------------------
22461C
22462      INCLUDE 'DPCOP2.INC'
22463C
22464C-----DATA STATEMENTS-------------------------------------------------
22465C
22466C-----START POINT-----------------------------------------------------
22467C
22468C               ************************************
22469C               **  STEP 1--                      **
22470C               **  COMPUTE THE DENSITY FUNCTION  **
22471C               ************************************
22472C
22473      CALL GMCPDF(DX,DALPHA,DA,DTERM)
22474      GMCFUN=DTERM
22475C
22476      RETURN
22477      END
22478      DOUBLE PRECISION FUNCTION GMCFU2(DX)
22479C
22480C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
22481C              FUNCTION VALUE FOR THE GENERALIZED MCLEISH
22482C              DISTRIBUTION WITH SHAPE PARAMETERS ALPHA AND A.
22483C              THIS DISTRIBUTION IS DEFINED FOR ALL REAL X
22484C              AND HAS THE PROBABILITY DENSITY FUNCTION
22485C
22486C                 f(X;ALPHA,A) = [1/(SQRT(PI)*GAMMA(ALPHA))]*
22487C                                (ABS(X)/2)**(ALPHA-1/2)*K(X,ALPHA-1/2)
22488C                                *(1-A**2)**ALPHA*EXP(A*X)
22489C              WHERE
22490C                 K(X,N) IS THE MODIFIED BESSEL FUNCTION OF THE
22491C                        SECOND KIND
22492C                 GAMMA IS THE GAMMA FUNCTION
22493C
22494C              THE GMCCDF ROUTINE IS CALLED TO COMPUTE THE
22495C              PROBABILITY DENSITY.  DEFINE AS FUNCTION TO BE USED FOR
22496C              INTEGRATION CODE CALLED BY GMCCDF.  THIS ROUTINE USES
22497C              DOUBLE PRECISION ARITHMETIC.
22498C     INPUT  ARGUMENTS--DX      = THE DOUBLE PRECISION VALUE AT
22499C                                 WHICH THE PROBABILITY DENSITY
22500C                                 FUNCTION IS TO BE EVALUATED.
22501C     OUTPUT ARGUMENTS--GMCFU2  = THE DOUBLE PRECISION CUMULATIVE
22502C                                 DISTRIBUTION FUNCTION VALUE.
22503C     OUTPUT--THE DOUBLE PRECISION CUMULATIVE DISTRIBUTION
22504C             FUNCTION VALUE CDF FOR THE GENERALIZED MCLEISH
22505C             DISTRIBUTION WITH SHAPE PARAMETERS ALPHA AND A.
22506C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
22507C     RESTRICTIONS--NONE.
22508C     OTHER DATAPAC   SUBROUTINES NEEDED--GMCCDF.
22509C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
22510C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
22511C     LANGUAGE--ANSI FORTRAN (1977)
22512C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
22513C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
22514C                 WILEY, PP. 50-53.
22515C     WRITTEN BY--JAMES J. FILLIBEN
22516C                 STATISTICAL ENGINEERING DIVISION
22517C                 INFORMATION TECHNOLOGY LABORATORY
22518C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
22519C                 GAITHERSBURG, MD 20899-8980
22520C                 PHONE--301-975-2855
22521C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
22522C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
22523C     LANGUAGE--ANSI FORTRAN (1977)
22524C     VERSION NUMBER--2004.9
22525C     ORIGINAL VERSION--SEPTEMBER 2004.
22526C
22527C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
22528C
22529C---------------------------------------------------------------------
22530C
22531      DOUBLE PRECISION DCDF
22532      DOUBLE PRECISION DX
22533C
22534      DOUBLE PRECISION DP
22535      COMMON/GM2COM/DP
22536C
22537      DOUBLE PRECISION DALPHA
22538      DOUBLE PRECISION DA
22539      COMMON/GMCCOM/DALPHA,DA
22540C
22541C-----COMMON----------------------------------------------------------
22542C
22543      INCLUDE 'DPCOP2.INC'
22544C
22545C-----DATA STATEMENTS-------------------------------------------------
22546C
22547C-----START POINT-----------------------------------------------------
22548C
22549C               ************************************
22550C               **  STEP 1--                      **
22551C               **  COMPUTE THE DENSITY FUNCTION  **
22552C               ************************************
22553C
22554      CALL GMCCDF(DX,DALPHA,DA,DCDF)
22555      GMCFU2=DP - DCDF
22556C
22557      RETURN
22558      END
22559      SUBROUTINE GMCPDF(X,ALPHA,A,PDF)
22560C
22561C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY DENSITY
22562C              FUNCTION VALUE FOR THE GENERALIZED MCLEISH BESSEL
22563C              K-FUNCTION DISTRIBUTION.  IT HAS SHAPE PARAMETERS
22564C              ALPHA.  THIS DISTRIBUTION IS ASYMMETRIC AND IS DEFINED
22565C              FOR ALL REAL X AND HAS THE PROBABILITY DENSITY FUNCTION
22566C
22567C                 f(X;ALPHA,A) = [1/(SQRT(PI)*GAMMA(ALPHA))]*
22568C                                (ABS(X)/2)**(ALPHA-1/2)*K(X,ALPHA-1/2)
22569C                                *(1-A**2)**ALPHA*EXP(A*X)
22570C              WHERE
22571C                 K(X,N) IS THE MODIFIED BESSEL FUNCTION OF THE
22572C                        SECOND KIND
22573C                 GAMMA IS THE GAMMA FUNCTION
22574C
22575C     NOTE--ARGUMENTS TO THIS ROUTINE ARE IN DOUBLE PRECISION.
22576C     INPUT  ARGUMENTS--X       = THE DOUBLE PRECISION VALUE AT
22577C                                 WHICH THE PROBABILITY DENSITY
22578C                                 FUNCTION IS TO BE EVALUATED.
22579C                                 X SHOULD BE POSITIVE
22580C                     --ALPHA   = THE FIRST SHAPE PARAMETER
22581C                     --A       = THE SECOND SHAPE PARAMETER
22582C     OUTPUT ARGUMENTS--PDF     = THE DOUBLE PRECISION PROBABILITY
22583C                                 DENSITY FUNCTION VALUE.
22584C     OUTPUT--THE DOUBLE PRECISION PROBABILITY DENSITY FUNCTION
22585C             VALUE PDF FOR THE GENERALIZED MCLEISH DISTRIBUTION
22586C             WITH SHAPE PARAMETERS ALPHA AND NU.
22587C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
22588C     RESTRICTIONS--NONE.
22589C     OTHER DATAPAC   SUBROUTINES NEEDED--DBESI.
22590C     FORTRAN LIBRARY SUBROUTINES NEEDED--DEXP, DLOG, DLNGAM.
22591C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
22592C     LANGUAGE--ANSI FORTRAN (1977)
22593C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISNAN, "CONTINUOUS
22594C                 UNIVARIATE DISTRIBUTIONS--VOLUME I", SECOND EDITION,
22595C                 WILEY, 1994, PP. 50-53.
22596C     WRITTEN BY--JAMES J. FILLIBEN
22597C                 STATISTICAL ENGINEERING DIVISION
22598C                 INFORMATION TECHNOLOGY LABORATORY
22599C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
22600C                 GAITHERSBURG, MD 20899-8980
22601C                 PHONE--301-975-2855
22602C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
22603C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
22604C     LANGUAGE--ANSI FORTRAN (1977)
22605C     VERSION NUMBER--2004.9
22606C     ORIGINAL VERSION--SEPTEMBER 2004.
22607C
22608C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
22609C
22610C---------------------------------------------------------------------
22611C
22612      DOUBLE PRECISION X
22613      DOUBLE PRECISION DX
22614      DOUBLE PRECISION ALPHA
22615      DOUBLE PRECISION A
22616      DOUBLE PRECISION PDF
22617      DOUBLE PRECISION DTERM1
22618      DOUBLE PRECISION DTERM2
22619      DOUBLE PRECISION DTERM3
22620      DOUBLE PRECISION DTERM4
22621      DOUBLE PRECISION DTERM5
22622      DOUBLE PRECISION DTERM6
22623      DOUBLE PRECISION DORD
22624      DOUBLE PRECISION DPI
22625      DOUBLE PRECISION DEPS
22626      DOUBLE PRECISION DLNGAM
22627      EXTERNAL DLNGAM
22628C
22629      DOUBLE PRECISION DTEMP1(10)
22630C
22631C-----COMMON----------------------------------------------------------
22632C
22633      INCLUDE 'DPCOP2.INC'
22634C
22635C-----DATA STATEMENTS-------------------------------------------------
22636C
22637      DATA DPI / 3.14159265358979D+00/
22638C
22639C-----START POINT-----------------------------------------------------
22640C
22641C               ********************************************
22642C               **  STEP 1--                              **
22643C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
22644C               ********************************************
22645C
22646      IF(ALPHA.LE.0.0D0)THEN
22647        WRITE(ICOUT,5)
22648        CALL DPWRST('XXX','WRIT')
22649        WRITE(ICOUT,48)ALPHA
22650        CALL DPWRST('XXX','WRIT')
22651        PDF=0.0D0
22652        GOTO9000
22653      ENDIF
22654    5 FORMAT('***** ERROR: VALUE OF FIRST SHAPE PARAMETER (ALPHA)',
22655     1       ' IN GMCPDF ROUTINE IS NON-POSITIVE.')
22656      IF(ABS(A).GE.1.0D0)THEN
22657        WRITE(ICOUT,8)
22658        CALL DPWRST('XXX','WRIT')
22659        WRITE(ICOUT,48)A
22660        CALL DPWRST('XXX','WRIT')
22661        PDF=0.0D0
22662        GOTO9000
22663      ENDIF
22664    8 FORMAT('***** ERROR: ABSOLUTE VALUE OF SECOND SHAPE PARAMETER ',
22665     1       '(A) IN GMCPDF ROUTINE IS >= 1.')
22666   48 FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
22667C
22668C               *****************************************
22669C               **  STEP 2--                           **
22670C               **  COMPUTE THE DENSITY FUNCTION.  FOR **
22671C               **  BETTER NUMERICAL STABILITY,        **
22672C               **  COMPUTE LOGARIGHMS.                **
22673C               *****************************************
22674C
22675C
22676C  COMPUTE BESSEL FUNCTION FIRST.  IF THIS IS 0, SET PDF TO
22677C  0 AND RETURN.
22678C
22679      DEPS=1.0D-12
22680      IF(ALPHA.GT.25.0)DEPS=1.0D-10
22681      DX=X
22682      DX=DABS(DX)
22683      IF(DX.EQ.0.0D0)DX=DEPS
22684      DORD=DABS(ALPHA-0.5D0)
22685      IARG1=1
22686      ISCALE=1
22687      CALL DBESK(DX,DORD,ISCALE,IARG1,DTEMP1,NZERO)
22688      DTERM3=DTEMP1(IARG1)
22689      IF(DTERM3.LE.0.0D0)THEN
22690        PDF=0.0D0
22691        GOTO9000
22692      ENDIF
22693      DTERM3=DLOG(DTERM3)
22694C
22695      DTERM1=0.5D0*DLOG(DPI) + DLNGAM(ALPHA)
22696      DTERM2=(ALPHA-0.5D0)*DLOG(DX/2.0D0)
22697      DTERM4=ALPHA*DLOG(1.0D0 - A**2)
22698      DTERM5=A*X
22699      DTERM6 = -DTERM1+DTERM2+DTERM3+DTERM4+DTERM5
22700      PDF=DEXP(DTERM6)
22701C
22702 9000 CONTINUE
22703      RETURN
22704      END
22705      SUBROUTINE GMCPPF(P,ALPHA,A,PPF)
22706C
22707C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT FUNCTION
22708C              VALUE FOR THE GENERALIZED MCLEISH DISTRIBUTION.  IT HAS
22709C              SHAPE PARAMETERS ALPHA AND A.  THIS DISTRIBUTION IS
22710C              DEFINED FOR ALL REAL X AND HAS THE PROBABILITY DENSITY
22711C              FUNCTION
22712C
22713C                 f(X;ALPHA,A) = [1/(SQRT(PI)*GAMMA(ALPHA))]*
22714C                                (ABS(X)/2)**(ALPHA-1/2)*K(X,ALPHA-1/2)
22715C                                *(1-A**2)**ALPHA*EXP(A*X)
22716C              WHERE
22717C                 K(X,N) IS THE MODIFIED BESSEL FUNCTION OF THE
22718C                        SECOND KIND
22719C                 GAMMA IS THE GAMMA FUNCTION
22720C
22721C              THE PERCENT POINT FUNCTION IS COMPUTED BY NUMERICALLY
22722C              INVERTING THE GENERALIZED MCLEISH CUMULATIVE
22723C              DISTRIBUTION FUNCTION (WHICH IN TURN IS COMPUTED BY
22724C              NUMERICAL INTEGRATION OF THE PROBABILITYT DENSITY).
22725C
22726C     INPUT  ARGUMENTS--P       = THE DOUBLE PRECISION VALUE AT
22727C                                 WHICH THE PERCENT POINT
22728C                                 FUNCTION IS TO BE EVALUATED.
22729C                                 0 < P < 1
22730C                     --ALPHA   = THE FIRST SHAPE PARAMETER
22731C                     --A       = THE SECOND SHAPE PARAMETER
22732C     OUTPUT ARGUMENTS--PPF     = THE DOUBLE PRECISION PERCENT POINT
22733C                                 FUNCTION VALUE.
22734C     OUTPUT--THE DOUBLE PRECISION PERCENT POINT FUNCTION
22735C             VALUE PPF FOR THE GENERALIZED MCLEISH
22736C             DISTRIBUTION WITH SHAPE PARAMETERS ALPHA AND A.
22737C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
22738C     RESTRICTIONS--NONE.
22739C     OTHER DATAPAC   SUBROUTINES NEEDED--DFZERO.
22740C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE
22741C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
22742C     LANGUAGE--ANSI FORTRAN (1977)
22743C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISHNAN, (1994), "CONTINUOUS
22744C                 UNIVARIATE DISTRIBUTIONS--VOLUME 1", SECOND EDITION,
22745C                 WILEY, PP. 50-53.
22746C     WRITTEN BY--JAMES J. FILLIBEN
22747C                 STATISTICAL ENGINEERING DIVISION
22748C                 INFORMATION TECHNOLOGY LABORATORY
22749C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
22750C                 GAITHERSBURG, MD 20899-8980
22751C                 PHONE--301-975-2855
22752C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
22753C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
22754C     LANGUAGE--ANSI FORTRAN (1977)
22755C     VERSION NUMBER--2004.9
22756C     ORIGINAL VERSION--SEPTEMBER 2004.
22757C
22758C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
22759C
22760C---------------------------------------------------------------------
22761C
22762      DOUBLE PRECISION P
22763      DOUBLE PRECISION PTEMPL
22764      DOUBLE PRECISION PTEMPU
22765      DOUBLE PRECISION ALPHA
22766      DOUBLE PRECISION A
22767      DOUBLE PRECISION PPF
22768      DOUBLE PRECISION DINC
22769C
22770      DOUBLE PRECISION XUP
22771      DOUBLE PRECISION XUP2
22772      DOUBLE PRECISION XLOW
22773      DOUBLE PRECISION RE
22774      DOUBLE PRECISION AE
22775C
22776      DOUBLE PRECISION GMCFU2
22777      EXTERNAL GMCFU2
22778C
22779      DOUBLE PRECISION DP
22780      COMMON/GM2COM/DP
22781C
22782      DOUBLE PRECISION DALPHA
22783      DOUBLE PRECISION DA
22784      COMMON/GMCCOM/DALPHA,DA
22785C
22786C-----COMMON----------------------------------------------------------
22787C
22788      INCLUDE 'DPCOP2.INC'
22789C
22790C-----START POINT-----------------------------------------------------
22791C
22792C               *****************************************
22793C               **  STEP 1--                           **
22794C               **  CHECK FOR VALID PARAMETERS         **
22795C               *****************************************
22796C
22797      IF(P.LE.0.0D0 .OR. P.GE.1.0D0)THEN
22798        WRITE(ICOUT,4)
22799        CALL DPWRST('XXX','WRIT')
22800        WRITE(ICOUT,14)
22801        CALL DPWRST('XXX','WRIT')
22802        WRITE(ICOUT,48)P
22803        CALL DPWRST('XXX','WRIT')
22804        PPF=0.0D0
22805        GOTO9000
22806      ENDIF
22807    4 FORMAT('***** ERROR: VALUE OF INPUT ARGUMENT (P) IN ',
22808     1       'GMCPPF ROUTINE')
22809   14 FORMAT('      IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL.')
22810      IF(ALPHA.LE.0.0D0)THEN
22811        WRITE(ICOUT,5)
22812        CALL DPWRST('XXX','WRIT')
22813        WRITE(ICOUT,48)ALPHA
22814        CALL DPWRST('XXX','WRIT')
22815        PPF=0.0D0
22816        GOTO9000
22817      ENDIF
22818    5 FORMAT('***** ERROR: VALUE OF FIRST SHAPE PARAMETER (ALPHA)',
22819     1       ' IN GMCPPF ROUTINE IS NON-POSITIVE.')
22820      IF(ABS(A).GE.1.0D0)THEN
22821        WRITE(ICOUT,8)
22822        CALL DPWRST('XXX','WRIT')
22823        WRITE(ICOUT,48)A
22824        CALL DPWRST('XXX','WRIT')
22825        PPF=0.0D0
22826        GOTO9000
22827      ENDIF
22828    8 FORMAT('***** ERROR: ABSOLUTE VALUE OF SECOND SHAPE PARAMETER ',
22829     1       '(A) IN GMCPPF ROUTINE IS >= 1.')
22830   48 FORMAT('      VALUE OF ARGUMENT IS: ',G15.7)
22831C
22832C               *****************************************
22833C               **  STEP 2--                           **
22834C               **  COMPUTE THE PERCENT POINT FUNCTION.**
22835C               *****************************************
22836C
22837C  STEP 1: FIND BRACKETING INTERVAL.  START WITH -10 AND +10,
22838C          INCREMENT BY 10.
22839C
22840      XLOW=-10.0D0
22841      XUP2=10.0D0
22842      CALL GMCCDF(XLOW,ALPHA,A,PTEMPL)
22843      CALL GMCCDF(XUP2,ALPHA,A,PTEMPU)
22844      DINC=10.0D0
22845      IF(ALPHA.GT.20.0D0)THEN
22846        DINC=ALPHA
22847      ENDIF
22848C
22849      MAXIT=1000
22850      NIT=0
22851C
22852  200 CONTINUE
22853      IF(NIT.GT.MAXIT)THEN
22854        PPF=0.0D0
22855        WRITE(ICOUT,999)
22856        CALL DPWRST('XXX','BUG ')
22857        WRITE(ICOUT,131)
22858        CALL DPWRST('XXX','BUG ')
22859        WRITE(ICOUT,133)
22860        CALL DPWRST('XXX','BUG ')
22861        GOTO9000
22862      ENDIF
22863      CALL GMCCDF(XLOW,ALPHA,A,PTEMPL)
22864      CALL GMCCDF(XUP2,ALPHA,A,PTEMPU)
22865      IF(PTEMPL.LE.P .AND. P.LE.PTEMPU)THEN
22866        XUP=XUP2
22867        GOTO300
22868      ELSEIF(P.GT.PTEMPU)THEN
22869        XLOW=XUP2
22870        XUP2=XUP2 + DINC
22871        NIT=NIT+1
22872        GOTO200
22873      ELSEIF(P.LT.PTEMPL)THEN
22874        XUP2=XLOW
22875        XLOW=XLOW - DINC
22876        NIT=NIT+1
22877        GOTO200
22878      ENDIF
22879C
22880  300 CONTINUE
22881      AE=1.D-7
22882      RE=1.D-7
22883      DALPHA=ALPHA
22884      DP=P
22885      CALL DFZERO(GMCFU2,XLOW,XUP,XUP,RE,AE,IFLAG)
22886C
22887      PPF=XLOW
22888C
22889      IF(IFLAG.EQ.2)THEN
22890C
22891C  NOTE: SUPPRESS THIS MESSAGE FOR NOW.
22892CCCCC   WRITE(ICOUT,999)
22893  999   FORMAT(1X)
22894CCCCC   CALL DPWRST('XXX','BUG ')
22895CCCCC   WRITE(ICOUT,111)
22896CC111   FORMAT('***** WARNING FROM GMCPPF--')
22897CCCCC   CALL DPWRST('XXX','BUG ')
22898CCCCC   WRITE(ICOUT,113)
22899CC113   FORMAT('      PPF VALUE MAY NOT BE COMPUTED TO DESIRED ',
22900CCCCC1         'TOLERANCE.')
22901CCCCC   CALL DPWRST('XXX','BUG ')
22902      ELSEIF(IFLAG.EQ.3)THEN
22903        WRITE(ICOUT,999)
22904        CALL DPWRST('XXX','BUG ')
22905        WRITE(ICOUT,121)
22906  121   FORMAT('***** WARNING FROM GMCPPF--')
22907        CALL DPWRST('XXX','BUG ')
22908        WRITE(ICOUT,123)
22909  123   FORMAT('      PPF VALUE MAY BE NEAR A SINGULAR POINT.')
22910        CALL DPWRST('XXX','BUG ')
22911      ELSEIF(IFLAG.EQ.4)THEN
22912        WRITE(ICOUT,999)
22913        CALL DPWRST('XXX','BUG ')
22914        WRITE(ICOUT,131)
22915  131   FORMAT('***** ERROR FROM GMCPPF--')
22916        CALL DPWRST('XXX','BUG ')
22917        WRITE(ICOUT,133)
22918  133   FORMAT('      APPROPRIATE BRACKETING INTERVAL NOT FOUND.')
22919        CALL DPWRST('XXX','BUG ')
22920      ELSEIF(IFLAG.EQ.5)THEN
22921        WRITE(ICOUT,999)
22922        CALL DPWRST('XXX','BUG ')
22923        WRITE(ICOUT,141)
22924  141   FORMAT('***** WARNING FROM GMCPPF--')
22925        CALL DPWRST('XXX','BUG ')
22926        WRITE(ICOUT,143)
22927  143   FORMAT('      MAXIMUM ITERATIONS EXCEEDED.')
22928        CALL DPWRST('XXX','BUG ')
22929      ENDIF
22930C
22931C
22932 9000 CONTINUE
22933      RETURN
22934      END
22935      SUBROUTINE GMCRAN(N,ALPHA,A,ISEED,X)
22936C
22937C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
22938C              FROM THE GENERALIZED MCLEISH DISTRIBUTION WITH SHAPE
22939C              PARAMETERS ALPHA AND A.  THIS DISTRIBUTION IS DEFINED
22940C              FOR ALL X AND HAS THE PROBABILITY DENSITY FUNCTION
22941C
22942C                 f(X;ALPHA,A) = [1/(SQRT(PI)*GAMMA(ALPHA))]*
22943C                                (ABS(X)/2)**(ALPHA-1/2)*K(X,ALPHA-1/2)
22944C                                *(1-A**2)**ALPHA*EXP(A*X)
22945C              WHERE
22946C                 K(X,N) IS THE MODIFIED BESSEL FUNCTION OF THE
22947C                        SECOND KIND
22948C                 GAMMA IS THE GAMMA FUNCTION
22949C
22950C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
22951C                                OF RANDOM NUMBERS TO BE
22952C                                GENERATED.
22953C                     --ALPHA  = THE FIRST SHAPE PARAMETER FOR THE
22954C                                GENERALIZED MCLEISH DISTRIBUTION
22955C                     --A      = THE SECOND SHAPE PARAMETER FOR THE
22956C                                GENERALIZED MCLEISH DISTRIBUTION
22957C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
22958C                                (OF DIMENSION AT LEAST N)
22959C                                INTO WHICH THE GENERATED
22960C                                RANDOM SAMPLE WILL BE PLACED.
22961C     OUTPUT--A RANDOM SAMPLE OF SIZE N FROM THE GENERALIZED MCLEISH
22962C             DISTRIBUTION WITH SHAPE PARAMETERS ALPHA AND A.
22963C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
22964C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
22965C                   OF N FOR THIS SUBROUTINE.
22966C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
22967C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
22968C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
22969C     LANGUAGE--ANSI FORTRAN (1977)
22970C     REFERENCES--JOHNSON, KOTZ, AND BALAKRISNAN, "CONTINUOUS
22971C                 UNIVARIATE DISTRIBUTIONS--VOLUME I", SECOND EDITION,
22972C                 WILEY, 1994, PP. 50-53.
22973C     WRITTEN BY--JAMES J. FILLIBEN
22974C                 STATISTICAL ENGINEERING DIVISION
22975C                 INFORMATION TECHNOLOGY LABORATORY
22976C                 NATION INSTITUTE OF STANDARDS AND TECHNOLOGY
22977C                 GAITHERSBURG, MD 20899-8980
22978C                 PHONE--301-975-2855
22979C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
22980C           OF THE NATION INSTITUTE OF STANDARDS AND TECHNOLOGY.
22981C     LANGUAGE--ANSI FORTRAN (1977)
22982C     VERSION NUMBER--2004.9
22983C     ORIGINAL VERSION--SEPTEMBER 2004.
22984C
22985C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
22986C
22987C---------------------------------------------------------------------
22988C
22989      DOUBLE PRECISION DPPF
22990      DIMENSION X(*)
22991CCCCC DIMENSION Y(2)
22992C
22993C-----COMMON----------------------------------------------------------
22994C
22995      INCLUDE 'DPCOP2.INC'
22996C
22997C-----DATA STATEMENTS-------------------------------------------------
22998C
22999C-----START POINT-----------------------------------------------------
23000C
23001C     CHECK THE INPUT ARGUMENTS FOR ERRORS
23002C
23003      IF(N.LT.1)THEN
23004        WRITE(ICOUT,5)
23005        CALL DPWRST('XXX','BUG ')
23006        WRITE(ICOUT,6)
23007        CALL DPWRST('XXX','BUG ')
23008        WRITE(ICOUT,47)N
23009        CALL DPWRST('XXX','BUG ')
23010        GOTO9000
23011      ENDIF
23012C
23013    5 FORMAT('***** ERROR--FOR THE GENERALIZED MCLEISH DISTRIBUTION, ',
23014     1       'THE REQUESTED')
23015    6 FORMAT('      NUMBER OF RANDOM NUMBERS WAS NON-POSITIVE.')
23016   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
23017      IF(ALPHA.LE.0.0D0)THEN
23018        WRITE(ICOUT,7)
23019        CALL DPWRST('XXX','WRIT')
23020        WRITE(ICOUT,17)
23021        CALL DPWRST('XXX','WRIT')
23022        WRITE(ICOUT,48)ALPHA
23023        CALL DPWRST('XXX','WRIT')
23024        GOTO9000
23025      ENDIF
23026    7 FORMAT('***** ERROR: VALUE OF FIRST SHAPE PARAMETER (ALPHA)',
23027     1       ' FOR GENERALIZED MCLEISH')
23028   17 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
23029      IF(ABS(A).GE.1.0D0)THEN
23030        WRITE(ICOUT,8)
23031        CALL DPWRST('XXX','WRIT')
23032        WRITE(ICOUT,18)
23033        CALL DPWRST('XXX','WRIT')
23034        WRITE(ICOUT,48)A
23035        CALL DPWRST('XXX','WRIT')
23036        GOTO9000
23037      ENDIF
23038    8 FORMAT('***** ERROR: VALUE OF SECOND SHAPE PARAMETER (A)',
23039     1       ' FOR GENERALIZED MCLEISH')
23040   18 FORMAT('      RANDOM NUMBERS HAS ABSOLUTE VALUE >= 1')
23041   48 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
23042C
23043C     MCLEISH IS DISTRIBUTION OF SQRT(G)*Z WHERE G IS A GAMMA
23044C     DISTRIBUTION WITH SHAPE PARAMETER ALPHA AND SCALE PARAMETER 2.
23045C     Z IS A STANDARD NORMAL DISTRIBUTION.
23046C
23047C     FOR THE GENERALIZED MCLEISH, ...
23048C
23049      CALL UNIRAN(N,ISEED,X)
23050      NTEMP=1
23051      DO100I=1,N
23052CCCCC   CALL GAMRAN(NTEMP,ALPHA,ISEED,Y)
23053CCCCC   G1=SQRT(2.0*Y(1))
23054CCCCC   CALL NORRAN(NTEMP,ISEED,Y)
23055CCCCC   G2=Y(1)
23056CCCCC   APPF=G1*G2
23057CCCCC   X(I)=APPF
23058        ATEMP=X(I)
23059        CALL GMCPPF(DBLE(ATEMP),DBLE(ALPHA),DBLE(A),DPPF)
23060        X(I)=REAL(DPPF)
23061  100 CONTINUE
23062C
23063 9000 CONTINUE
23064      RETURN
23065      END
23066      SUBROUTINE GNBCDF(X,THETA,BETA,M,CDF)
23067C
23068C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
23069C              FUNCTION VALUE FOR THE GENERALIZED NEGATIVE BINOMIAL
23070C              DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA, AND
23071C              M.  THIS DISTRIBUTION IS DEFINED FOR ALL INTEGER
23072C              X >= 1.
23073C
23074C              THE PROBABILITY MASS FUNCTION IS:
23075C              p(X;THETA,BETA,M)=
23076C                  (M/(M+BETA*X)*
23077C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
23078C                  X = 0, 1, 2, 3, ,...
23079C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
23080C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
23081C
23082C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED
23083C              FROM THE FOLLOWING RECURRENCE RELATION:
23084C
23085C              P(X+1) = (M+(BETA-1)*X+BETA)/(X+1)*
23086C                       THETA*(1-THETA)**(BETA-1)*
23087C                       PROD[J=1 TO X-1][1 + BETA/(M+BETA*X-J)]*P(X)
23088C
23089C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
23090C                                WHICH THE CUMULATIVE DISTRIBUTION
23091C                                FUNCTION IS TO BE EVALUATED.
23092C                                X SHOULD BE A NON-NEGATIVE INTEGER.
23093C                     --THETA  = THE FIRST SHAPE PARAMETER
23094C                     --BETA   = THE SECOND SHAPE PARAMETER
23095C                     --M      = THE THIRD SHAPE PARAMETER
23096C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
23097C                                DISTRIBUTION FUNCTION VALUE.
23098C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION FUNCTION
23099C             VALUE CDF FOR THE GENERALIZED NEGATIVE BINOMIAL
23100C             DISTRIBUTION WITH SHAPE PARAMETERS THETA AND BETA
23101C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
23102C     RESTRICTIONS--X SHOULD BE A NON-NEGATIVE INTEGER
23103C                 --0 < THETA < 1; 1 <= BETA <= 1/THETA
23104C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
23105C     LANGUAGE--ANSI FORTRAN (1977)
23106C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23107C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23108C     WRITTEN BY--JAMES J. FILLIBEN
23109C                 STATISTICAL ENGINEERING DIVISION
23110C                 INFORMATION TECHNOLOGY LABORATORY
23111C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23112C                 GAITHERSBURG, MD 20899-8980
23113C                 PHONE--301-975-2855
23114C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23115C           OF THE NATIONAL BUREAU OF STANDARDS.
23116C     LANGUAGE--ANSI FORTRAN (1977)
23117C     VERSION NUMBER--2006/7
23118C     ORIGINAL VERSION--JULY      2006.
23119C
23120C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
23121C
23122C---------------------------------------------------------------------
23123C
23124      REAL M
23125C
23126      DOUBLE PRECISION DTERM1
23127      DOUBLE PRECISION DTERM2
23128      DOUBLE PRECISION DTERM3
23129      DOUBLE PRECISION DSUM
23130      DOUBLE PRECISION DX
23131      DOUBLE PRECISION DTHETA
23132      DOUBLE PRECISION DBETA
23133      DOUBLE PRECISION DM
23134      DOUBLE PRECISION DPDF
23135      DOUBLE PRECISION DPDFSV
23136      DOUBLE PRECISION DCDF
23137C
23138C-----COMMON----------------------------------------------------------
23139C
23140      INCLUDE 'DPCOP2.INC'
23141C
23142C-----START POINT-----------------------------------------------------
23143C
23144C     CHECK THE INPUT ARGUMENTS FOR ERRORS
23145C
23146      IX=INT(X+0.5)
23147      IF(IX.LT.0)THEN
23148        WRITE(ICOUT,4)
23149        CALL DPWRST('XXX','BUG ')
23150        WRITE(ICOUT,46)X
23151        CALL DPWRST('XXX','BUG ')
23152        CDF=0.0
23153        GOTO9000
23154      ENDIF
23155    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GNBCDF IS LESS ',
23156     1'THAN 0')
23157C
23158      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
23159        WRITE(ICOUT,15)
23160        CALL DPWRST('XXX','BUG ')
23161        WRITE(ICOUT,46)THETA
23162        CALL DPWRST('XXX','BUG ')
23163        CDF=0.0
23164        GOTO9000
23165      ENDIF
23166   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GNBCDF IS NOT IN ',
23167     1'THE INTERVAL (0,1)')
23168C
23169      IF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA .AND. BETA.NE.0.0)THEN
23170        WRITE(ICOUT,25)1.0/THETA
23171        CALL DPWRST('XXX','BUG ')
23172        WRITE(ICOUT,46)THETA
23173        CALL DPWRST('XXX','BUG ')
23174        CDF=0.0
23175        GOTO9000
23176      ENDIF
23177   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GNBCDF IS NOT IN ',
23178     1'THE INTERVAL (1,',G15.7,')')
23179C
23180      IF(M.LE.0.0)THEN
23181        WRITE(ICOUT,35)
23182        CALL DPWRST('XXX','BUG ')
23183        WRITE(ICOUT,46)M
23184        CALL DPWRST('XXX','BUG ')
23185        CDF=0.0
23186        GOTO9000
23187      ENDIF
23188   35 FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GNBCDF IS ',
23189     1'NON-POSITIVE')
23190      IF(BETA.EQ.0.0)THEN
23191        IM=INT(M+0.5)
23192        IF(IM.EQ.0)IM=1
23193        M=REAL(IM)
23194      ENDIF
23195C
23196   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
23197C
23198      DTHETA=DBLE(THETA)
23199      DBETA=DBLE(BETA)
23200      DM=DBLE(M)
23201C
23202C     USE THE RECURRENCE RELATION (PAGE 199 OF CONSUL AND FAMOYE):
23203C
23204      DCDF=(1.0D0 - DTHETA)**DM
23205      IF(IX.EQ.0)GOTO1000
23206C
23207      DPDF=DM*DTHETA*(1.0D0 - DTHETA)**(DM+DBETA-1.0D0)
23208      DCDF=DCDF + DPDF
23209      IF(IX.EQ.1)GOTO1000
23210C
23211      DPDFSV=DPDF
23212      DTERM2=DLOG(DTHETA) + (DBETA - 1.0D0)*DLOG(1.0D0 - DTHETA)
23213C
23214      DO100I=2,IX
23215        DX=DBLE(I)
23216        DTERM1=DLOG(DM + (DBETA-1.0D0)*(DX-1.0D0) + DBETA) -
23217     1         DLOG(DX)
23218        IF(DPDFSV.LE.0.0D0)THEN
23219          GOTO1000
23220        ELSE
23221          DTERM3=DLOG(DPDFSV)
23222        ENDIF
23223        IF(I-2.GE.1)THEN
23224          DSUM=0.0D0
23225          DO200J=1,I-2
23226            DSUM=DSUM + DLOG(1.0D0 + DBETA/
23227     1           (DM + DBETA*(DX-1.0D0)-DBLE(J)))
23228  200     CONTINUE
23229        ELSE
23230          DSUM=0.0D0
23231        ENDIF
23232        DPDF=DEXP(DTERM1 + DTERM2 + DTERM3 + DSUM)
23233        DCDF=DCDF + DPDF
23234        DPDFSV=DPDF
23235  100 CONTINUE
23236C
23237 1000 CONTINUE
23238      CDF=REAL(DCDF)
23239C
23240 9000 CONTINUE
23241      RETURN
23242      END
23243      DOUBLE PRECISION FUNCTION GNBFUN(DTHETA)
23244C
23245C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTION FOR FINDING
23246C              THE ESTIMATE OF THETA FOR THE
23247C              GENERALIZED NEGATIVE BINOMIAL METHOD OF MOMENT
23248C              EQUATIONS.
23249C
23250C                 THETAHAT = 1 - 0.5*A + (A**2/4 - 1)**(0.5)
23251C                 A = -2 + (XBAR*S3 - 3*S2**2)**2/(XBAR*S2**3)
23252C
23253C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF
23254C              A NONLINEAR EQUATIONS.
23255C     EXAMPLE--GENERALIZED NEGATIVE BINOMIAL MAXIMUM LIKELIHOOD Y
23256C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23257C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23258C     WRITTEN BY--JAMES J. FILLIBEN
23259C                 STATISTICAL ENGINEERING DIVISION
23260C                 INFORMATION TECHNOLOGY LABORATORY
23261C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23262C                 GAITHERSBUG, MD 20899-8980
23263C                 PHONE--301-975-2855
23264C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23265C           OF THE NATIONAL BUREAU OF STANDARDS.
23266C     LANGUAGE--ANSI FORTRAN (1977)
23267C     VERSION NUMBER--2006/7
23268C     ORIGINAL VERSION--JULY      2006.
23269C
23270C---------------------------------------------------------------------
23271C
23272      DOUBLE PRECISION DTHETA
23273      DOUBLE PRECISION DA
23274C
23275      DOUBLE PRECISION XBAR
23276      DOUBLE PRECISION S2
23277      DOUBLE PRECISION S3
23278      DOUBLE PRECISION F0FREQ
23279      DOUBLE PRECISION F1FREQ
23280      DOUBLE PRECISION F10FRE
23281      DOUBLE PRECISION DC1
23282      COMMON/GNBCOM/XBAR,S2,S3,F0FREQ,F1FREQ,F10FRE,DC1,
23283     1              MAXROW,NTOT2
23284C
23285C-----COMMON----------------------------------------------------------
23286C
23287      INCLUDE 'DPCOBE.INC'
23288      INCLUDE 'DPCOP2.INC'
23289C
23290C-----START POINT-----------------------------------------------------
23291C
23292C  COMPUTE SOME SUMS
23293C
23294      DA=-2.0D0 + (XBAR*S3 - 3.0D0*S2**2)**2/(XBAR*S2**3)
23295      GNBFUN=1.0D0 - 0.5D0*DA + DSQRT(DA**2/4.0D0 - 1.0D0)
23296C
23297      IF(ISUBG4.EQ.'BFUN')THEN
23298        WRITE(ICOUT,52)DTHETA,DA,GNBFUN
23299   52   FORMAT('DTHETA,DA,GNBFUN = ',3G15.7)
23300        CALL DPWRST('XXX','BUG ')
23301      ENDIF
23302C
23303      RETURN
23304      END
23305      SUBROUTINE GNBFU2(N,XPAR,FVEC,IFLAG,Y,K)
23306C
23307C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
23308C              GENERALIZED NEGATIVE BINOMIAL MAXIMUM LIKELIHOOD
23309C              EQUATIONS.
23310C
23311C              THE MAXIMUM LIKELIHOOD ESTIMATES ARE THE SOLUTIONS
23312C              TO THE EQUATIONS:
23313C
23314C                 M*(XBAR - THETA*(M + BETA*XBAR))/
23315C                 (THETA*(1 - THETA))
23316C
23317C                 N*XBAR*LOG(1-THETA) +
23318C                 SUM[X=2 to k][SUM[i=1 to x-1]
23319C                 [X*N(x)/(M+BETA*X-i]] = 0
23320C
23321C                 (N-N0)*XBAR/M + N*LOG(1 - THETA) +
23322C                 SUM[X=2 to k][SUM[i=1 to x-1]
23323C                 [(X-XBAR)*N(x)/(M+BETA*X-i]] = 0
23324C
23325C              ROUTINE ASSUMES THE DATA IS IN THE FORM
23326C
23327C                   X(I)  FREQ(I)
23328C
23329C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
23330C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
23331C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
23332C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
23333C              SINCE DNSQE ONLY PASSES ONE ARRAY, WE SPLIT INTO
23334C              TWO PARTS: 1 - MAXNXT/2 ARE THE FREQUENCIES WHILE
23335C              (MAXNXT/2 + 1) - MAXNXT ARE THE CLASS VALUES (I.E.,
23336C              THE X).
23337C     EXAMPLE--GENERALIZED NEGATIVE BINOMIAL MAXIMUM LIKELIHOOD Y
23338C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23339C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23340C     WRITTEN BY--JAMES J. FILLIBEN
23341C                 STATISTICAL ENGINEERING DIVISION
23342C                 INFORMATION TECHNOLOGY LABORATORY
23343C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23344C                 GAITHERSBUG, MD 20899-8980
23345C                 PHONE--301-975-2855
23346C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23347C           OF THE NATIONAL BUREAU OF STANDARDS.
23348C     LANGUAGE--ANSI FORTRAN (1977)
23349C     VERSION NUMBER--2006/7
23350C     ORIGINAL VERSION--JULY      2006.
23351C
23352C---------------------------------------------------------------------
23353C
23354      DOUBLE PRECISION XPAR(*)
23355      DOUBLE PRECISION FVEC(*)
23356      REAL Y(*)
23357C
23358      DOUBLE PRECISION DX
23359      DOUBLE PRECISION DM
23360      DOUBLE PRECISION DBETA
23361      DOUBLE PRECISION DTHETA
23362      DOUBLE PRECISION DTERM1
23363      DOUBLE PRECISION DTERM2
23364      DOUBLE PRECISION DSUM1
23365      DOUBLE PRECISION DSUM2
23366      DOUBLE PRECISION DN
23367      DOUBLE PRECISION DJ
23368      DOUBLE PRECISION DN0
23369      DOUBLE PRECISION DFREQ
23370      DOUBLE PRECISION DNUM1
23371      DOUBLE PRECISION DNUM2
23372      DOUBLE PRECISION DENOM
23373C
23374      DOUBLE PRECISION XBAR
23375      DOUBLE PRECISION S2
23376      DOUBLE PRECISION S3
23377      DOUBLE PRECISION F0FREQ
23378      DOUBLE PRECISION F1FREQ
23379      DOUBLE PRECISION F10FRE
23380      DOUBLE PRECISION DC1
23381      COMMON/GNBCOM/XBAR,S2,S3,F0FREQ,F1FREQ,F10FRE,DC1,
23382     1              MAXROW,NTOT2
23383C
23384C-----COMMON----------------------------------------------------------
23385C
23386      INCLUDE 'DPCOP2.INC'
23387C
23388C-----START POINT-----------------------------------------------------
23389C
23390C  COMPUTE SOME SUMS
23391C
23392      N=2
23393      IFLAG=0
23394C
23395      DBETA=XPAR(1)
23396      DM=XPAR(2)
23397      DTHETA=XPAR(3)
23398      DN=DBLE(NTOT2)
23399C
23400      IINDX=MAXROW/2
23401C
23402      DN0=DN*F0FREQ
23403      DTERM1=DN*XBAR*DLOG(1.0D0 - DTHETA)
23404      DTERM2=(DN - DN0)/DM + DN*DLOG(1.0D0 - DTHETA)
23405C
23406      DSUM1=0.0D0
23407      DSUM2=0.0D0
23408C
23409C     NOTE: CONSUL AND FAMOYE DEFINE CLASSES FOR I = 0 TO K,
23410C           SO ADJUST FOR FACT THAT FORTRAN ARRAYS START AT 1.
23411C
23412      DO100I=1,K
23413        DX=DBLE(Y(IINDX+I))
23414        IX=INT(DX + 0.5D0)
23415        IF(IX.LT.2)GOTO100
23416        DFREQ=DBLE(Y(I))
23417        IF(DFREQ.LE.0.0D0)GOTO100
23418        DNUM1=DX*DFREQ
23419        DNUM2=DFREQ
23420        DO200J=1,K
23421          DJ=DBLE(Y(IINDX+J))
23422          IJ=INT(DJ + 0.5D0)
23423          IF(IJ.LT.1 .OR. IJ.GT.IX-1)GOTO200
23424          DENOM=DM + DBETA*DX - DJ
23425          DSUM1=DSUM1 + DNUM1/DENOM
23426          DSUM2=DSUM2 + DNUM2/DENOM
23427  200   CONTINUE
23428  100 CONTINUE
23429C
23430      FVEC(1)=DM*(XBAR - DTHETA*(DM + DBETA*XBAR))/
23431     1        (DTHETA*(1.0D0 - DTHETA))
23432      FVEC(2)=DTERM1 + DSUM1
23433      FVEC(3)=DTERM2 + DSUM2
23434C
23435      RETURN
23436      END
23437      DOUBLE PRECISION FUNCTION GNBFU3(DTHETA)
23438C
23439C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTION FOR FINDING
23440C              THE ESTIMATE OF THETA FOR THE
23441C              GENERALIZED NEGATIVE BINOMIAL METHOD OF MOMENTS
23442C              AND ZERO-CLASS FREQUENCY EQUATION.
23443C
23444C                 S2*(LOG(F0)**2/XBAR**3 -
23445C                 (1-THETA)*(LOG(1-THETA))**2/THETA**2 = 0
23446C
23447C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF
23448C              A NONLINEAR EQUATIONS.
23449C     EXAMPLE--GENERALIZED NEGATIVE BINOMIAL MAXIMUM LIKELIHOOD Y
23450C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23451C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23452C     WRITTEN BY--JAMES J. FILLIBEN
23453C                 STATISTICAL ENGINEERING DIVISION
23454C                 INFORMATION TECHNOLOGY LABORATORY
23455C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23456C                 GAITHERSBUG, MD 20899-8980
23457C                 PHONE--301-975-2855
23458C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23459C           OF THE NATIONAL BUREAU OF STANDARDS.
23460C     LANGUAGE--ANSI FORTRAN (1977)
23461C     VERSION NUMBER--2006/7
23462C     ORIGINAL VERSION--JULY      2006.
23463C
23464C---------------------------------------------------------------------
23465C
23466      DOUBLE PRECISION DTHETA
23467C
23468      DOUBLE PRECISION XBAR
23469      DOUBLE PRECISION S2
23470      DOUBLE PRECISION S3
23471      DOUBLE PRECISION F0FREQ
23472      DOUBLE PRECISION F1FREQ
23473      DOUBLE PRECISION F10FRE
23474      DOUBLE PRECISION DC1
23475      COMMON/GNBCOM/XBAR,S2,S3,F0FREQ,F1FREQ,F10FRE,DC1,
23476     1              MAXROW,NTOT2
23477C
23478C-----COMMON----------------------------------------------------------
23479C
23480      INCLUDE 'DPCOP2.INC'
23481C
23482C-----START POINT-----------------------------------------------------
23483C
23484C  COMPUTE SOME SUMS
23485C
23486      GNBFU3=DC1 - (1.0D0 - DTHETA)*DLOG(1.0D0 - DTHETA)**2/DTHETA**2
23487C
23488      RETURN
23489      END
23490      DOUBLE PRECISION FUNCTION GNBFU4(DTHETA)
23491C
23492C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTION FOR FINDING
23493C              THE ESTIMATE OF THETA FOR THE
23494C              GENERALIZED NEGATIVE BINOMIAL METHOD OF MOMENTS
23495C              AND RATIO OF FREQUENCIES EQUATION
23496C
23497C                 {(2/THETA) - (2/THETA)*SQRT(XBAR*(1-THETA)/S2)-1}*
23498C                 LOG(1-THETA) - LOG(S2*F10**2/XBAR**3) = 0
23499C
23500C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF
23501C              A NONLINEAR EQUATIONS.
23502C     EXAMPLE--GENERALIZED NEGATIVE BINOMIAL MAXIMUM LIKELIHOOD Y
23503C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23504C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23505C     WRITTEN BY--JAMES J. FILLIBEN
23506C                 STATISTICAL ENGINEERING DIVISION
23507C                 INFORMATION TECHNOLOGY LABORATORY
23508C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23509C                 GAITHERSBUG, MD 20899-8980
23510C                 PHONE--301-975-2855
23511C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23512C           OF THE NATIONAL BUREAU OF STANDARDS.
23513C     LANGUAGE--ANSI FORTRAN (1977)
23514C     VERSION NUMBER--2006/7
23515C     ORIGINAL VERSION--JULY      2006.
23516C
23517C---------------------------------------------------------------------
23518C
23519      DOUBLE PRECISION DTHETA
23520C
23521      DOUBLE PRECISION XBAR
23522      DOUBLE PRECISION S2
23523      DOUBLE PRECISION S3
23524      DOUBLE PRECISION F0FREQ
23525      DOUBLE PRECISION F1FREQ
23526      DOUBLE PRECISION F10FRE
23527      DOUBLE PRECISION DC1
23528      COMMON/GNBCOM/XBAR,S2,S3,F0FREQ,F1FREQ,F10FRE,DC1,
23529     1              MAXROW,NTOT2
23530C
23531C-----COMMON----------------------------------------------------------
23532C
23533      INCLUDE 'DPCOP2.INC'
23534C
23535C-----START POINT-----------------------------------------------------
23536C
23537C  COMPUTE SOME SUMS
23538C
23539      GNBFU4=((2.0D0/DTHETA) -
23540     1       (2.0D0/DTHETA)*DSQRT(XBAR*(1.0D0-DTHETA)/S2)-1.0D0)*
23541     1       DLOG(1.0D0-DTHETA) - DLOG(S2*F10FRE**2/XBAR**3)
23542C
23543      RETURN
23544      END
23545      DOUBLE PRECISION FUNCTION GNBFU5(DM)
23546C
23547C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTION FOR FINDING
23548C              THE ESTIMATE OF M FOR THE TRUNCATED GENERALIZED
23549C              NEGATIVE BINOMIAL RATIO OF FREQUENCIES METHOD.
23550C              SOLVE THE FOLLOWING EQUATONS:
23551C
23552C              H(M) = -XBAR/M + (1-XBAR)*F1/(M*F0) +
23553C                     SUM[X=2 to t][((X-XBAR)/X!)*(F1/(M*F0))*
23554C                     PROD[i=1 to x-1][M + (X*M*F0*F2/F(i)**2) -
23555C                     X*(M-1)/2 - i]]
23556C
23557C              WITH XBAR, F0, F1, F2 DENOTING THE SAMPLE MEAN
23558C              AND THE FREQUENCIES FOR THE FIRST THREE CLASSES.
23559C              F(i) IS THE FREQUENCY OF CLASS i.
23560C
23561C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF
23562C              A NONLINEAR EQUATIONS.
23563C     EXAMPLE--GENERALIZED NEGATIVE BINOMIAL MAXIMUM LIKELIHOOD Y
23564C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23565C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23566C               --FAMOYE AND CONSUL (1993), "THE TRUNCATED
23567C                 GENERALZIED NEGATIVE BINOMIAL DISTRIBUTION",
23568C                 JOURNAL OF APPLIED STATISTICAL SCIENCES,
23569C                 VOL. 1, NO. 2, PP. 141-157.
23570C     WRITTEN BY--JAMES J. FILLIBEN
23571C                 STATISTICAL ENGINEERING DIVISION
23572C                 INFORMATION TECHNOLOGY LABORATORY
23573C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23574C                 GAITHERSBUG, MD 20899-8980
23575C                 PHONE--301-975-2855
23576C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23577C           OF THE NATIONAL BUREAU OF STANDARDS.
23578C     LANGUAGE--ANSI FORTRAN (1977)
23579C     VERSION NUMBER--2007/1
23580C     ORIGINAL VERSION--JANUARY   2007.
23581C
23582C---------------------------------------------------------------------
23583C
23584      DOUBLE PRECISION DM
23585C
23586      DOUBLE PRECISION XBAR
23587      DOUBLE PRECISION S2
23588      DOUBLE PRECISION S3
23589      DOUBLE PRECISION F0FREQ
23590      DOUBLE PRECISION F1FREQ
23591      DOUBLE PRECISION F10FRE
23592      DOUBLE PRECISION DC1
23593      COMMON/GNBCOM/XBAR,S2,S3,F0FREQ,F1FREQ,F10FRE,DC1,
23594     1              MAXROW,NTOT2
23595C
23596CCCCC DOUBLE PRECISION DN
23597CCCCC DOUBLE PRECISION DTERM1
23598CCCCC DOUBLE PRECISION DTERM2
23599CCCCC DOUBLE PRECISION DTERM3
23600CCCCC DOUBLE PRECISION DTERM4
23601CCCCC DOUBLE PRECISION DTERM5
23602CCCCC DOUBLE PRECISION DTERM6
23603CCCCC DOUBLE PRECISION DSUM
23604CCCCC DOUBLE PRECISION DPROD
23605C
23606C-----COMMON----------------------------------------------------------
23607C
23608      INCLUDE 'DPCOBE.INC'
23609      INCLUDE 'DPCOP2.INC'
23610C
23611C-----START POINT-----------------------------------------------------
23612C
23613C  COMPUTE SOME SUMS
23614C
23615CCCCC DN=DBLE(NTOT2)
23616CCCCC IINDX=MAXROW/2
23617CCCCC DF0=DBLE(Y(1))
23618CCCCC DF1=DBLE(Y(2))
23619CCCCC DF2=DBLE(Y(2))
23620C
23621CCCCC DTERM1=XBAR/DM
23622CCCCC DTERM2=(1.0D0 - XBAR)*DF2/(DM*DF1)
23623C
23624C     NOTE: CONSUL AND FAMOYE DEFINE CLASSES FOR I = 0 TO K,
23625C           SO ADJUST FOR FACT THAT FORTRAN ARRAYS START AT 1.
23626C
23627CCCCC DSUM=0.0D0
23628CCCCC DO100I=3,K
23629C
23630CCCCC   DX=DBLE(Y(IINDX+I))
23631CCCCC   IX=INT(DX+0.5D0)
23632CCCCC   DFREQ=DBLE(Y(I))
23633CCCCC   DTERM3=(DX-XBAR)/DGAMMA(DX+1)
23634CCCCC   DTERM4=(DF1/(DM*DF0))**DX
23635C
23636CCCCC   DPROD=1.0D0
23637CCCCC   DO200J=2,IX-1
23638CCCCC     DTERM5=DM + (DX*DM*DF0*DF2/DFREQ**2)
23639CCCCC     DTERM6=-DX*(DM-1.0D0)/2.0D0  - DBLE(J-1)
23640CCCCC     DPROD=DPROD*(DTERM5 + DTERM6)
23641CC200   CONTINUE
23642CCCCC   DSUM=DSUM + DTERM3*DTERM4*DPROD
23643CC100 CONTINUE
23644C
23645CCCCC GNBFU5=DTERM1 + DTERM2 + DSUM
23646      GNBFU5=0.0D0
23647C
23648      IF(ISUBG4.EQ.'BFU5')THEN
23649        WRITE(ICOUT,52)DM,GNBFU5
23650   52   FORMAT('DM,GNBFU5 = ',2G15.7)
23651        CALL DPWRST('XXX','BUG ')
23652      ENDIF
23653C
23654      RETURN
23655      END
23656      SUBROUTINE GNBPDF(X,THETA,BETA,M,PDF)
23657C
23658C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY MASS
23659C              FUNCTION VALUE FOR THE GENERALIZED NEGATIVE BINOMIAL
23660C              DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA, AND
23661C              M.  THIS DISTRIBUTION IS DEFINED FOR ALL INTEGER
23662C              X >= 1.
23663C
23664C              THE PROBABILITY MASS FUNCTION IS:
23665C              p(X;THETA,BETA,M)=
23666C                  (M/(M+BETA*X)*
23667C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
23668C                  X = 0, 1, 2, 3, ,...
23669C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
23670C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
23671C
23672C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
23673C                                WHICH THE PROBABILITY MASS
23674C                                FUNCTION IS TO BE EVALUATED.
23675C                                X SHOULD BE A NON-NEGATIVE INTEGER.
23676C                     --THETA  = THE FIRST SHAPE PARAMETER
23677C                     --BETA   = THE SECOND SHAPE PARAMETER
23678C                     --M      = THE THIRD SHAPE PARAMETER
23679C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
23680C                                MASS FUNCTION VALUE.
23681C     OUTPUT--THE SINGLE PRECISION PROBABILITY MASS FUNCTION
23682C             VALUE PDF FOR THE GENERALIZED NEGATIVE BINOMIAL
23683C             DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA AND M.
23684C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
23685C     RESTRICTIONS--X SHOULD BE A NON-NEGATIVE INTEGER
23686C                 --0 < THETA < 1; 1 <= BETA <= 1/THETA
23687C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
23688C     LANGUAGE--ANSI FORTRAN (1977)
23689C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23690C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23691C     WRITTEN BY--JAMES J. FILLIBEN
23692C                 STATISTICAL ENGINEERING DIVISION
23693C                 INFORMATION TECHNOLOGY LABORATORY
23694C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23695C                 GAITHERSBURG, MD 20899-8980
23696C                 PHONE--301-975-2855
23697C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23698C           OF THE NATIONAL BUREAU OF STANDARDS.
23699C     LANGUAGE--ANSI FORTRAN (1977)
23700C     VERSION NUMBER--2006/7
23701C     ORIGINAL VERSION--JULY      2006.
23702C
23703C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
23704C
23705C---------------------------------------------------------------------
23706C
23707      REAL M
23708C
23709      DOUBLE PRECISION DTERM1
23710      DOUBLE PRECISION DTERM2
23711      DOUBLE PRECISION DTERM3
23712      DOUBLE PRECISION DX
23713      DOUBLE PRECISION DTHETA
23714      DOUBLE PRECISION DBETA
23715      DOUBLE PRECISION DM
23716      DOUBLE PRECISION DPDF
23717      DOUBLE PRECISION DLNGAM
23718      EXTERNAL DLNGAM
23719C
23720C-----COMMON----------------------------------------------------------
23721C
23722      INCLUDE 'DPCOP2.INC'
23723C
23724C-----START POINT-----------------------------------------------------
23725C
23726C     CHECK THE INPUT ARGUMENTS FOR ERRORS
23727C
23728      IX=INT(X+0.5)
23729      IF(IX.LT.0)THEN
23730        WRITE(ICOUT,4)
23731        CALL DPWRST('XXX','BUG ')
23732        WRITE(ICOUT,46)X
23733        CALL DPWRST('XXX','BUG ')
23734        PDF=0.0
23735        GOTO9000
23736      ENDIF
23737    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GNBPDF IS LESS ',
23738     1'THAN 0')
23739C
23740      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
23741        WRITE(ICOUT,15)
23742        CALL DPWRST('XXX','BUG ')
23743        WRITE(ICOUT,46)THETA
23744        CALL DPWRST('XXX','BUG ')
23745        PDF=0.0
23746        GOTO9000
23747      ENDIF
23748   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GNBPDF IS NOT IN ',
23749     1'THE INTERVAL (0,1)')
23750C
23751      IF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA .AND. BETA.NE.0.0)THEN
23752        WRITE(ICOUT,25)1.0/THETA
23753        CALL DPWRST('XXX','BUG ')
23754        WRITE(ICOUT,46)THETA
23755        CALL DPWRST('XXX','BUG ')
23756        PDF=0.0
23757        GOTO9000
23758      ENDIF
23759   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GNBPDF IS NOT IN ',
23760     1'THE INTERVAL (1,',G15.7,')')
23761C
23762      IF(M.LE.0.0)THEN
23763        WRITE(ICOUT,35)
23764        CALL DPWRST('XXX','BUG ')
23765        WRITE(ICOUT,46)M
23766        CALL DPWRST('XXX','BUG ')
23767        PDF=0.0
23768        GOTO9000
23769      ENDIF
23770   35 FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GNBPDF IS ',
23771     1'NON-POSITIVE')
23772      IF(BETA.EQ.0.0)THEN
23773        IM=INT(M+0.5)
23774        IF(IM.EQ.0)IM=1
23775        M=REAL(IM)
23776      ENDIF
23777C
23778   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
23779C
23780      DTHETA=DBLE(THETA)
23781      DBETA=DBLE(BETA)
23782      DM=DBLE(M)
23783      DX=DBLE(IX)
23784C
23785      IF(IX.EQ.0)THEN
23786        DPDF=(1.0D0 - DTHETA)**DM
23787      ELSEIF(IX.EQ.1)THEN
23788        DPDF=DM*DTHETA*(1.0D0 - DTHETA)**(DM+DBETA-1.0D0)
23789      ELSE
23790        DTERM1=DLOG(DM) - DLOG(DM + DBETA*DX)
23791        DTERM2=DX*DLOG(DTHETA)
23792        DTERM3=(DM+DBETA*DX-DX)*DLOG(1.0D0 - DTHETA)
23793        DTERM4=DLNGAM(DM+DBETA*DX+1.0D0) - DLNGAM(DX+1.0D0) -
23794     1         DLNGAM(DM+DBETA*DX-DX+1.0D0)
23795        DPDF=DEXP(DTERM1+DTERM2+DTERM3+DTERM4)
23796      ENDIF
23797C
23798      PDF=REAL(DPDF)
23799C
23800 9000 CONTINUE
23801      RETURN
23802      END
23803      SUBROUTINE GNBPPF(P,THETA,BETA,M,PPF)
23804C
23805C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
23806C              FUNCTION VALUE FOR THE GENERALIZED NEGATIVE BINOMIAL
23807C              DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA, AND
23808C              M.  THIS DISTRIBUTION IS DEFINED FOR ALL INTEGER
23809C              X >= 1.
23810C
23811C              THE PROBABILITY MASS FUNCTION IS:
23812C              p(X;THETA,BETA,M)=
23813C                  (M/(M+BETA*X)*
23814C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
23815C                  X = 0, 1, 2, 3, ,...
23816C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
23817C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
23818C
23819C              THE CUMULATIVE DISTRIBUTION FUNCTION IS COMPUTED
23820C              FROM THE FOLLOWING RECURRENCE RELATION:
23821C
23822C              P(X+1) = (M+(BETA-1)*X+BETA)/(X+1)*
23823C                       THETA*(1-THETA)**(BETA-1)*
23824C                       PROD[J=1 TO X-1][1 + BETA/(M+BETA*X-J)]*P(X)
23825C
23826C              THE PERCENT POINT FUNCTION IS COMPUTED BY COMPUTING
23827C              THE CUMULATIVE DISTRIBUTION FUNCTION UNTIL THE
23828C              THE SPECIFIED PROBABILITY IS REACHED.
23829C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE AT
23830C                                WHICH THE PERCENT POINT
23831C                                FUNCTION IS TO BE EVALUATED.
23832C                                0 <= P < 1
23833C                     --THETA  = THE FIRST SHAPE PARAMETER
23834C                     --BETA   = THE SECOND SHAPE PARAMETER
23835C                     --M      = THE THIRD SHAPE PARAMETER
23836C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT POINT
23837C                                FUNCTION VALUE.
23838C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION
23839C             VALUE PPF FOR THE GENERALIZED NEGATIVE BINOMIAL
23840C             DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA AND M.
23841C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
23842C     RESTRICTIONS--0 <= P < 1
23843C                 --0 < THETA < 1; 1 <= BETA <= 1/THETA; M > 0
23844C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
23845C     LANGUAGE--ANSI FORTRAN (1977)
23846C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
23847C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
23848C     WRITTEN BY--JAMES J. FILLIBEN
23849C                 STATISTICAL ENGINEERING DIVISION
23850C                 INFORMATION TECHNOLOGY LABORATORY
23851C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
23852C                 GAITHERSBURG, MD 20899-8980
23853C                 PHONE--301-975-2855
23854C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
23855C           OF THE NATIONAL BUREAU OF STANDARDS.
23856C     LANGUAGE--ANSI FORTRAN (1977)
23857C     VERSION NUMBER--2006/7
23858C     ORIGINAL VERSION--JULY      2006.
23859C
23860C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
23861C
23862C---------------------------------------------------------------------
23863C
23864      REAL M
23865C
23866      DOUBLE PRECISION DTERM1
23867      DOUBLE PRECISION DTERM2
23868      DOUBLE PRECISION DTERM3
23869      DOUBLE PRECISION DSUM
23870      DOUBLE PRECISION DX
23871      DOUBLE PRECISION DTHETA
23872      DOUBLE PRECISION DBETA
23873      DOUBLE PRECISION DM
23874      DOUBLE PRECISION DPDF
23875      DOUBLE PRECISION DPDFSV
23876      DOUBLE PRECISION DPPF
23877      DOUBLE PRECISION DP
23878      DOUBLE PRECISION DEPS
23879C
23880C-----COMMON----------------------------------------------------------
23881C
23882      INCLUDE 'DPCOMC.INC'
23883      INCLUDE 'DPCOP2.INC'
23884C
23885C-----START POINT-----------------------------------------------------
23886C
23887C     CHECK THE INPUT ARGUMENTS FOR ERRORS
23888C
23889      PPF=0.0
23890      DPPF=0.0D0
23891C
23892      IF(P.LT.0.0 .OR. P.GE.1.0)THEN
23893        WRITE(ICOUT,4)
23894    4   FORMAT('***** ERROR--THE FIRST ARGUMENT TO GNBPPF IS OUTSIDE ',
23895     1         'THE (0,1] INTERVAL.')
23896        CALL DPWRST('XXX','BUG ')
23897        WRITE(ICOUT,46)P
23898   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
23899        CALL DPWRST('XXX','BUG ')
23900        GOTO9000
23901      ELSEIF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
23902        WRITE(ICOUT,15)
23903   15   FORMAT('***** ERROR--THE SECOND ARGUMENT TO GNBPPF IS NOT IN ',
23904     1         'THE INTERVAL (0,1).')
23905        CALL DPWRST('XXX','BUG ')
23906        WRITE(ICOUT,46)THETA
23907        CALL DPWRST('XXX','BUG ')
23908        GOTO9000
23909      ELSEIF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA .AND. BETA.NE.0.0)THEN
23910        WRITE(ICOUT,25)1.0/THETA
23911   25   FORMAT('***** ERROR--THE THIRD ARGUMENT TO GNBPPF IS NOT IN ',
23912     1         'THE INTERVAL (1,',G15.7,').')
23913        CALL DPWRST('XXX','BUG ')
23914        WRITE(ICOUT,46)THETA
23915        CALL DPWRST('XXX','BUG ')
23916        GOTO9000
23917      ELSEIF(M.LE.0.0)THEN
23918        WRITE(ICOUT,35)
23919   35   FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GNBPPF IS ',
23920     1         'NON-POSITIVE.')
23921        CALL DPWRST('XXX','BUG ')
23922        WRITE(ICOUT,46)M
23923        CALL DPWRST('XXX','BUG ')
23924        GOTO9000
23925      ENDIF
23926C
23927      IF(BETA.EQ.0.0)THEN
23928        IM=INT(M+0.5)
23929        IF(IM.EQ.0)IM=1
23930        M=REAL(IM)
23931      ENDIF
23932C
23933      DTHETA=DBLE(THETA)
23934      DBETA=DBLE(BETA)
23935      DM=DBLE(M)
23936      DP=DBLE(P)
23937      DEPS=1.0D-7
23938C
23939C     USE THE RECURRENCE RELATION (PAGE 199 OF CONSUL AND FAMOYE):
23940C
23941      DCDF=(1.0D0 - DTHETA)**DM
23942      IF(DCDF.GE.DP-DEPS)THEN
23943        PPF=0.0
23944        GOTO9000
23945      ENDIF
23946C
23947      DPDF=DM*DTHETA*(1.0D0 - DTHETA)**(DM+DBETA-1.0D0)
23948      DCDF=DCDF + DPDF
23949      IF(DCDF.GE.DP-DEPS)THEN
23950        PPF=1.0
23951        GOTO9000
23952      ENDIF
23953C
23954      DPDFSV=DPDF
23955      DTERM2=DLOG(DTHETA) + (DBETA - 1.0D0)*DLOG(1.0D0 - DTHETA)
23956      I=1
23957C
23958  100 CONTINUE
23959        I=I+1
23960        IF(DBLE(I).GE.DBLE(I1MACH(9)))THEN
23961          WRITE(ICOUT,55)
23962   55     FORMAT('***** ERROR--THE COMPUTED PERCENT POINT VALUE ',
23963     1           'EXCEEDS THE LARGEST MACHINE INTEGER.')
23964          CALL DPWRST('XXX','BUG ')
23965          PPF=0.0
23966          GOTO9000
23967        ENDIF
23968        DX=DBLE(I)
23969C
23970        DTERM1=DLOG(DM + (DBETA-1.0D0)*(DX-1.0D0) + DBETA) -
23971     1         DLOG(DX)
23972        IF(DPDFSV.LE.0.0D0)THEN
23973          GOTO1000
23974        ELSE
23975          DTERM3=DLOG(DPDFSV)
23976        ENDIF
23977        IF(I-2.GE.1)THEN
23978          DSUM=0.0D0
23979          DO200J=1,I-2
23980            DSUM=DSUM + DLOG(1.0D0 + DBETA/
23981     1           (DM + DBETA*(DX-1.0D0)-DBLE(J)))
23982  200     CONTINUE
23983        ELSE
23984          DSUM=0.0D0
23985        ENDIF
23986        DPDF=DEXP(DTERM1 + DTERM2 + DTERM3 + DSUM)
23987        DCDF=DCDF + DPDF
23988        DPDFSV=DPDF
23989        IF(DCDF.GE.DP-DEPS)THEN
23990          PPF=REAL(I)
23991          GOTO9000
23992        ENDIF
23993      GOTO100
23994C
23995 1000 CONTINUE
23996      PPF=REAL(DPPF)
23997C
23998 9000 CONTINUE
23999      RETURN
24000      END
24001      SUBROUTINE GNBRAN(N,THETA,BETA,AM,ISEED,X)
24002C
24003C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
24004C              FROM THE GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24005C              WITH SHAPE PARAMETERS THETA, BETA, AND M.
24006C              THE PROBABILITY MASS FUNCTION IS:
24007C              p(X;THETA,BETA,M)=
24008C                  (M/(M+BETA*X)*
24009C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
24010C                  X = 0, 1, 2, 3, ,...
24011C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
24012C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
24013C
24014C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
24015C                                OF RANDOM NUMBERS TO BE
24016C                                GENERATED.
24017C                     --THETA  = THE SINGLE PRECISION VALUE
24018C                                OF THE FIRST SHAPE PARAMETER.
24019C                     --BETA   = THE SINGLE PRECISION VALUE
24020C                                OF THE SECOND SHAPE PARAMETER.
24021C                     --AM     = THE SINGLE PRECISION VALUE
24022C                                OF THE THIRD SHAPE PARAMETER.
24023C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
24024C                                (OF DIMENSION AT LEAST N)
24025C                                INTO WHICH THE GENERATED
24026C                                RANDOM SAMPLE WILL BE PLACED.
24027C     OUTPUT--A RANDOM SAMPLE OF SIZE N
24028C             FROM THE GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24029C             WITH SHAPE PARAMETERS THETA, BETA, AND M.
24030C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
24031C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
24032C                   OF N FOR THIS SUBROUTINE.
24033C                 --0 < THETA < 1, 1 < BETA < 1/THETA, M > 0
24034C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GNBPPF
24035C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
24036C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
24037C     LANGUAGE--ANSI FORTRAN (1977)
24038C     REFERENCES--FAMOYE (1997), "SAMPLING FROM A GENERALIZED
24039C                 NEGATIVE BINOMIAL DISTRIBUTION", COMPUTING,
24040C                 58(4), PP. 365-376.
24041C               --CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
24042C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTERS 11 AND 16.
24043C     WRITTEN BY--JAMES J. FILLIBEN
24044C                 STATISTICAL ENGINEERING DIVISION
24045C                 INFORMATION TECHNOLOGY LABORATORY
24046C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
24047C                 GAITHERSBURG, MD 20899-8980
24048C                 PHONE--301-975-2899
24049C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
24050C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
24051C     LANGUAGE--ANSI FORTRAN (1977)
24052C     VERSION NUMBER--2006/7
24053C     ORIGINAL VERSION--JULY      2006.
24054C
24055C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
24056C
24057C---------------------------------------------------------------------
24058C
24059      REAL THETA
24060      REAL BETA
24061      DIMENSION X(*)
24062      DIMENSION XTEMP(2)
24063C
24064C-----COMMON----------------------------------------------------------
24065C
24066      INCLUDE 'DPCOP2.INC'
24067C
24068C-----DATA STATEMENTS-------------------------------------------------
24069C
24070CCCCC DATA PI / 3.1415926535 8979323846 E0 /
24071C
24072C-----START POINT-----------------------------------------------------
24073C
24074C     CHECK THE INPUT ARGUMENTS FOR ERRORS
24075C
24076      IF(N.LT.1)THEN
24077        WRITE(ICOUT,5)
24078    5   FORMAT('***** ERROR--THE REQUESTED NUMBER OF ',
24079     1         'GENERALIZED NEGATIVE BINOMIAL')
24080        CALL DPWRST('XXX','BUG ')
24081        WRITE(ICOUT,6)
24082    6   FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
24083        CALL DPWRST('XXX','BUG ')
24084        WRITE(ICOUT,47)N
24085   47   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,'.')
24086        CALL DPWRST('XXX','BUG ')
24087        GOTO9999
24088      ELSEIF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
24089        WRITE(ICOUT,11)
24090   11   FORMAT('***** ERROR--THE THETA PARAMETER FOR THE ',
24091     1         'GENERALIZED NEGATIVE BINOMIAL')
24092        CALL DPWRST('XXX','BUG ')
24093        WRITE(ICOUT,12)
24094   12   FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (0,1) INTERVAL.')
24095        CALL DPWRST('XXX','BUG ')
24096        WRITE(ICOUT,46)THETA
24097   46   FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7,'.')
24098        CALL DPWRST('XXX','BUG ')
24099        GOTO9999
24100      ELSEIF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA)THEN
24101        WRITE(ICOUT,21)
24102   21   FORMAT('***** ERROR--THE BETA PARAMETER FOR THE ',
24103     1         'GENERALIZED NEGATIVE BINOMIAL')
24104        CALL DPWRST('XXX','BUG ')
24105        WRITE(ICOUT,22)
24106   22   FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (0,',G15.7,
24107     1         ') INTERVAL.')
24108        CALL DPWRST('XXX','BUG ')
24109        WRITE(ICOUT,46)BETA
24110        CALL DPWRST('XXX','BUG ')
24111        GOTO9999
24112      ELSEIF(AM.LE.0.0)THEN
24113        WRITE(ICOUT,31)
24114   31   FORMAT('***** ERROR--THE M PARAMETER FOR THE ',
24115     1         'GENERALIZED NEGATIVE BINOMIAL')
24116        CALL DPWRST('XXX','BUG ')
24117        WRITE(ICOUT,32)
24118   32   FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
24119        CALL DPWRST('XXX','BUG ')
24120        WRITE(ICOUT,46)AM
24121        CALL DPWRST('XXX','BUG ')
24122        GOTO9999
24123      ENDIF
24124C
24125C     GENERATE N GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24126C     RANDOM NUMBERS.  FOLLOWING RECOMMENDATION OF CONSUL AND
24127C     FAYMOE, USE INVERSION METHOD FOR THETA*BETA <= 0.60 AND
24128C     BRANCHING METHOD OTHERWISE.
24129C
24130C     BRANCHING ALGORITHM DOESN'T SEEM TO RETURN AS ACCURATE
24131C     A RESULT AS THE INVERSION METHOD, SO USE THE INVERSION
24132C     METHOD EVEN IF SOMEWHAT SLOWER.
24133C
24134      IFLAG=0
24135      IF(THETA*BETA.LE.0.6 .OR. IFLAG.EQ.0)THEN
24136        CALL UNIRAN(N,ISEED,X)
24137        DO100I=1,N
24138          ZTEMP=X(I)
24139          CALL GNBPPF(ZTEMP,THETA,BETA,AM,PPF)
24140          X(I)=PPF
24141  100   CONTINUE
24142      ELSE
24143C
24144C       BRANCHING ALGORITHM
24145C
24146        NTEMP=1
24147        DO200I=1,N
24148          CALL NBRAN(NTEMP,1.0-THETA,AM,ISEED,XTEMP)
24149          Y=XTEMP(1)
24150          IF(Y.LE.0.0)THEN
24151            X(I)=Y
24152            GOTO200
24153          ENDIF
24154          XX=0.0
24155  220     CONTINUE
24156          AK=(BETA-1.0)*Y
24157          CALL NBRAN(NTEMP,1.0-THETA,AK,ISEED,XTEMP)
24158          Z=XTEMP(1)
24159          XX=XX+Y+Z
24160          Y=Z
24161          IF(Y.GT.0.0)GOTO220
24162          X(I)=XX
24163  200   CONTINUE
24164      ENDIF
24165C
24166 9999 CONTINUE
24167C
24168      RETURN
24169      END
24170      SUBROUTINE GNTCDF(X,THETA,BETA,M,NTRUNC,CDF)
24171C
24172C     PURPOSE--THIS SUBROUTINE COMPUTES THE CUMULATIVE DISTRIBUTION
24173C              FUNCTION VALUE FOR THE TRUNCATED GENERALIZED
24174C              NEGATIVE BINOMIAL DISTRIBUTION WITH SHAPE PARAMETERS
24175C              THETA, BETA, AND M.
24176C
24177C              THE PROBABILITY MASS FUNCTION FOR THE NON-TRUNCATED
24178C              GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION IS:
24179C
24180C              p(X;THETA,BETA,M)=
24181C                  (M/(M+BETA*X)*
24182C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
24183C                  X = 0, 1, 2, 3, ,...
24184C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
24185C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
24186C
24187C              THE TRUNCATED GENERALIZED NEGATIVE BINOMIAL
24188C              DISTRIBUTION CAN BE DEFINED AS:
24189C
24190C              p(X;THETA,BETA,M)/F(NTRUNC,THETA,BETA,M)
24191C
24192C              WITH p, F, AND NTRUNC DENOTING THE PROBABILITY
24193C              MASS AND CUMULATIVE DISTRIBUTION FUNCTION OF
24194C              THE GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24195C              AND THE TRUNCATION POINT, RESPECTIVELY.
24196C
24197C              THE TRUNCATED CUMULATIVE DISTRIBUTION FUNCTION
24198C              CAN THEREFORE BE COMPUTED AS:
24199C
24200C              F(X;THETA,BETA,M)/F(NTRUNC,THETA,BETA,M)
24201C
24202C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
24203C                                WHICH THE CUMULATIVE DISTRIBUTION
24204C                                FUNCTION IS TO BE EVALUATED.
24205C                                X SHOULD BE A NON-NEGATIVE INTEGER.
24206C                     --THETA  = THE FIRST SHAPE PARAMETER
24207C                     --BETA   = THE SECOND SHAPE PARAMETER
24208C                     --M      = THE THIRD SHAPE PARAMETER
24209C                     --NTRUNC = THE TRUNCATION POINT
24210C     OUTPUT ARGUMENTS--CDF    = THE SINGLE PRECISION CUMULATIVE
24211C                                DISTRIBUTION FUNCTION VALUE.
24212C     OUTPUT--THE SINGLE PRECISION CUMULATIVE DISTRIBUTION FUNCTION
24213C             VALUE CDF FOR THE GENERALIZED NEGATIVE BINOMIAL
24214C             DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA AND M.
24215C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
24216C     RESTRICTIONS--0 <= X <= NTRUNC; SHOULD BE A NON-NEGATIVE INTEGER
24217C                 --0 < THETA < 1; 1 <= BETA <= 1/THETA
24218C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
24219C     LANGUAGE--ANSI FORTRAN (1977)
24220C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
24221C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
24222C     REFERENCES--CONSUL AND FAMOYE (1993), "THE TRUNCATED
24223C                 GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION",
24224C                 JOURNAL OF APPLIED STATISTICAL SCIENCE,
24225C                 VOL. 1, NO. 2, PP. 141-157.
24226C     WRITTEN BY--JAMES J. FILLIBEN
24227C                 STATISTICAL ENGINEERING DIVISION
24228C                 INFORMATION TECHNOLOGY LABORATORY
24229C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
24230C                 GAITHERSBURG, MD 20899-8980
24231C                 PHONE--301-975-2855
24232C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
24233C           OF THE NATIONAL BUREAU OF STANDARDS.
24234C     LANGUAGE--ANSI FORTRAN (1977)
24235C     VERSION NUMBER--2007/1
24236C     ORIGINAL VERSION--JANUARY   2007.
24237C
24238C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
24239C
24240C---------------------------------------------------------------------
24241C
24242      REAL M
24243C
24244C-----COMMON----------------------------------------------------------
24245C
24246      INCLUDE 'DPCOP2.INC'
24247C
24248C-----START POINT-----------------------------------------------------
24249C
24250C     CHECK THE INPUT ARGUMENTS FOR ERRORS
24251C
24252      IF(NTRUNC.LT.1)THEN
24253        WRITE(ICOUT,3)
24254        CALL DPWRST('XXX','BUG ')
24255        WRITE(ICOUT,47)NTRUNC
24256        CALL DPWRST('XXX','BUG ')
24257        CDF=0.0
24258        GOTO9000
24259      ENDIF
24260    3 FORMAT('***** ERROR--THE FIFTH ARGUMENT TO GNTCDF, THE ',
24261     1      'TRUNCATION POINT, IS LESS THAN 1')
24262C
24263      IX=INT(X+0.5)
24264      IF(IX.LT.0)THEN
24265        WRITE(ICOUT,4)
24266        CALL DPWRST('XXX','BUG ')
24267        WRITE(ICOUT,46)X
24268        CALL DPWRST('XXX','BUG ')
24269        CDF=0.0
24270        GOTO9000
24271      ENDIF
24272    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GNTCDF IS LESS ',
24273     1'THAN 0')
24274C
24275      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
24276        WRITE(ICOUT,15)
24277        CALL DPWRST('XXX','BUG ')
24278        WRITE(ICOUT,46)THETA
24279        CALL DPWRST('XXX','BUG ')
24280        CDF=0.0
24281        GOTO9000
24282      ENDIF
24283   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GNTCDF IS NOT IN ',
24284     1'THE INTERVAL (0,1)')
24285C
24286      IF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA .AND. BETA.NE.0.0)THEN
24287        WRITE(ICOUT,25)1.0/THETA
24288        CALL DPWRST('XXX','BUG ')
24289        WRITE(ICOUT,46)THETA
24290        CALL DPWRST('XXX','BUG ')
24291        CDF=0.0
24292        GOTO9000
24293      ENDIF
24294   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GNTCDF IS NOT IN ',
24295     1'THE INTERVAL (1,',G15.7,')')
24296C
24297      IF(M.LE.0.0)THEN
24298        WRITE(ICOUT,35)
24299        CALL DPWRST('XXX','BUG ')
24300        WRITE(ICOUT,46)M
24301        CALL DPWRST('XXX','BUG ')
24302        CDF=0.0
24303        GOTO9000
24304      ENDIF
24305   35 FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GNTCDF IS ',
24306     1'NON-POSITIVE')
24307      IF(BETA.EQ.0.0)THEN
24308        IM=INT(M+0.5)
24309        IF(IM.EQ.0)IM=1
24310        M=REAL(IM)
24311      ENDIF
24312C
24313   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
24314   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
24315C
24316      IF(IX.EQ.NTRUNC)THEN
24317        CDF=1.0
24318      ELSE
24319        CALL GNBCDF(X,THETA,BETA,M,TERM1)
24320        CALL GNBCDF(REAL(NTRUNC),THETA,BETA,M,TERM2)
24321        CDF=TERM1/TERM2
24322      ENDIF
24323C
24324 9000 CONTINUE
24325      RETURN
24326      END
24327      SUBROUTINE GNTPDF(X,THETA,BETA,M,NTRUNC,PDF)
24328C
24329C     PURPOSE--THIS SUBROUTINE COMPUTES THE PROBABILITY MASS
24330C              FUNCTION VALUE FOR THE TRUNCATED GENERALIZED
24331C              NEGATIVE BINOMIAL DISTRIBUTION WITH SHAPE PARAMETERS
24332C              THETA, BETA, AND M.
24333C
24334C              THE PROBABILITY MASS FUNCTION FOR THE NON-TRUNCATED
24335C              GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION IS:
24336C
24337C              p(X;THETA,BETA,M)=
24338C                  (M/(M+BETA*X)*
24339C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
24340C                  X = 0, 1, 2, 3, ,...
24341C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
24342C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
24343C
24344C              THE TRUNCATED GENERALIZED NEGATIVE BINOMIAL
24345C              DISTRIBUTION CAN BE DEFINED AS:
24346C
24347C              p(X;THETA,BETA,M)/F(NTRUNC,THETA,BETA,M)
24348C
24349C              WITH p, F, AND NTRUNC DENOTING THE PROBABILITY
24350C              MASS AND CUMULATIVE DISTRIBUTION FUNCTION OF
24351C              THE GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24352C              AND THE TRUNCATION POINT, RESPECTIVELY.
24353C
24354C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VALUE AT
24355C                                WHICH THE PROBABILITY MASS
24356C                                FUNCTION IS TO BE EVALUATED.
24357C                                X SHOULD BE A NON-NEGATIVE INTEGER.
24358C                     --THETA  = THE FIRST SHAPE PARAMETER
24359C                     --BETA   = THE SECOND SHAPE PARAMETER
24360C                     --M      = THE THIRD SHAPE PARAMETER
24361C                     --NTRUNC = THE TRUNCATION POINT
24362C     OUTPUT ARGUMENTS--PDF    = THE SINGLE PRECISION PROBABILITY
24363C                                MASS FUNCTION VALUE.
24364C     OUTPUT--THE SINGLE PRECISION PROBABILITY MASS FUNCTION
24365C             VALUE PDF FOR THE GENERALIZED NEGATIVE BINOMIAL
24366C             DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA AND M.
24367C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
24368C     RESTRICTIONS--0 <= X <= NTRUNC; SHOULD BE A NON-NEGATIVE INTEGER
24369C                 --0 < THETA < 1; 1 <= BETA <= 1/THETA
24370C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
24371C     LANGUAGE--ANSI FORTRAN (1977)
24372C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
24373C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
24374C     REFERENCES--CONSUL AND FAMOYE (1993), "THE TRUNCATED
24375C                 GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION",
24376C                 JOURNAL OF APPLIED STATISTICAL SCIENCE,
24377C                 VOL. 1, NO. 2, PP. 141-157.
24378C     WRITTEN BY--JAMES J. FILLIBEN
24379C                 STATISTICAL ENGINEERING DIVISION
24380C                 INFORMATION TECHNOLOGY LABORATORY
24381C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
24382C                 GAITHERSBURG, MD 20899-8980
24383C                 PHONE--301-975-2855
24384C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
24385C           OF THE NATIONAL BUREAU OF STANDARDS.
24386C     LANGUAGE--ANSI FORTRAN (1977)
24387C     VERSION NUMBER--2007/1
24388C     ORIGINAL VERSION--JANUARY   2007.
24389C
24390C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
24391C
24392C---------------------------------------------------------------------
24393C
24394      REAL M
24395C
24396C-----COMMON----------------------------------------------------------
24397C
24398      INCLUDE 'DPCOP2.INC'
24399C
24400C-----START POINT-----------------------------------------------------
24401C
24402C     CHECK THE INPUT ARGUMENTS FOR ERRORS
24403C
24404      IF(NTRUNC.LT.1)THEN
24405        WRITE(ICOUT,3)
24406        CALL DPWRST('XXX','BUG ')
24407        WRITE(ICOUT,47)NTRUNC
24408        CALL DPWRST('XXX','BUG ')
24409        PDF=0.0
24410        GOTO9000
24411      ENDIF
24412    3 FORMAT('***** ERROR--THE FIFTH ARGUMENT TO GNTPDF, THE ',
24413     1      'TRUNCATION POINT, IS LESS THAN 1')
24414C
24415      IX=INT(X+0.5)
24416      IF(IX.LT.0)THEN
24417        WRITE(ICOUT,4)
24418        CALL DPWRST('XXX','BUG ')
24419        WRITE(ICOUT,46)X
24420        CALL DPWRST('XXX','BUG ')
24421        PDF=0.0
24422        GOTO9000
24423      ENDIF
24424    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GNTPDF IS LESS ',
24425     1'THAN 0')
24426C
24427      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
24428        WRITE(ICOUT,15)
24429        CALL DPWRST('XXX','BUG ')
24430        WRITE(ICOUT,46)THETA
24431        CALL DPWRST('XXX','BUG ')
24432        PDF=0.0
24433        GOTO9000
24434      ENDIF
24435   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GNTPDF IS NOT IN ',
24436     1'THE INTERVAL (0,1)')
24437C
24438      IF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA .AND. BETA.NE.0.0)THEN
24439        WRITE(ICOUT,25)1.0/THETA
24440        CALL DPWRST('XXX','BUG ')
24441        WRITE(ICOUT,46)THETA
24442        CALL DPWRST('XXX','BUG ')
24443        PDF=0.0
24444        GOTO9000
24445      ENDIF
24446   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GNTPDF IS NOT IN ',
24447     1'THE INTERVAL (1,',G15.7,')')
24448C
24449      IF(M.LE.0.0)THEN
24450        WRITE(ICOUT,35)
24451        CALL DPWRST('XXX','BUG ')
24452        WRITE(ICOUT,46)M
24453        CALL DPWRST('XXX','BUG ')
24454        PDF=0.0
24455        GOTO9000
24456      ENDIF
24457   35 FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GNTPDF IS ',
24458     1'NON-POSITIVE')
24459      IF(BETA.EQ.0.0)THEN
24460        IM=INT(M+0.5)
24461        IF(IM.EQ.0)IM=1
24462        M=REAL(IM)
24463      ENDIF
24464C
24465   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
24466   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
24467C
24468      CALL GNBPDF(X,THETA,BETA,M,TERM1)
24469      CALL GNBCDF(REAL(NTRUNC),THETA,BETA,M,TERM2)
24470      PDF=TERM1/TERM2
24471C
24472 9000 CONTINUE
24473      RETURN
24474      END
24475      SUBROUTINE GNTPPF(P,THETA,BETA,M,NTRUNC,PPF)
24476C
24477C     PURPOSE--THIS SUBROUTINE COMPUTES THE PERCENT POINT
24478C              FUNCTION VALUE FOR THE TRUNCATED GENERALIZED
24479C              NEGATIVE BINOMIAL DISTRIBUTION WITH SHAPE
24480C              PARAMETERS THETA, BETA, AND M.
24481C
24482C              THE PROBABILITY MASS FUNCTION FOR THE NON-TRUNCATED
24483C              GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION IS:
24484C
24485C              p(X;THETA,BETA,M)=
24486C                  (M/(M+BETA*X)*
24487C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
24488C                  X = 0, 1, 2, 3, ,...
24489C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
24490C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
24491C
24492C              THE TRUNCATED GENERALIZED NEGATIVE BINOMIAL
24493C              DISTRIBUTION CAN BE DEFINED AS:
24494C
24495C              p(X;THETA,BETA,M)/F(NTRUNC,THETA,BETA,M)
24496C
24497C              WITH p, F, AND NTRUNC DENOTING THE PROBABILITY
24498C              MASS AND CUMULATIVE DISTRIBUTION FUNCTION OF
24499C              THE GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24500C              AND THE TRUNCATION POINT, RESPECTIVELY.
24501C
24502C              THE TRUNCATED CUMULATIVE DISTRIBUTION FUNCTION
24503C              CAN THEREFORE BE COMPUTED AS:
24504C
24505C              F(X;THETA,BETA,M)/F(NTRUNC,THETA,BETA,M)
24506C
24507C              THE PERCENT POINT FUNCTION IS COMPUTED BY COMPUTING
24508C              THE CUMULATIVE DISTRIBUTION FUNCTION UNTIL THE
24509C              THE SPECIFIED PROBABILITY IS REACHED.
24510C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE AT
24511C                                WHICH THE PERCENT POINT
24512C                                FUNCTION IS TO BE EVALUATED.
24513C                                0 <= P <= 1
24514C                     --THETA  = THE FIRST SHAPE PARAMETER
24515C                     --BETA   = THE SECOND SHAPE PARAMETER
24516C                     --M      = THE THIRD SHAPE PARAMETER
24517C                     --NTRUNC = THE TRUNCATION POINT
24518C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT POINT
24519C                                FUNCTION VALUE.
24520C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION
24521C             VALUE PPF FOR THE TRUNCATED GENERALIZED NEGATIVE
24522C             BINOMIAL DISTRIBUTION WITH SHAPE PARAMETERS THETA,
24523C             BETA, M AND NRUNC.
24524C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
24525C     RESTRICTIONS--0 <= P <= 1
24526C                 --0 < THETA < 1; 1 <= BETA <= 1/THETA; M > 0
24527C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
24528C     LANGUAGE--ANSI FORTRAN (1977)
24529C     REFERENCES--CONSUL AND FAMOYE (2006), "LAGRANGIAN PROBABILITY
24530C                 DISTRIBUTIONS", BIRKHAUSER, CHAPTER 10.
24531C     REFERENCES--CONSUL AND FAMOYE (1993), "THE TRUNCATED
24532C                 GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION",
24533C                 JOURNAL OF APPLIED STATISTICAL SCIENCE,
24534C                 VOL. 1, NO. 2, PP. 141-157.
24535C     WRITTEN BY--JAMES J. FILLIBEN
24536C                 STATISTICAL ENGINEERING DIVISION
24537C                 INFORMATION TECHNOLOGY LABORATORY
24538C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
24539C                 GAITHERSBURG, MD 20899-8980
24540C                 PHONE--301-975-2855
24541C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
24542C           OF THE NATIONAL BUREAU OF STANDARDS.
24543C     LANGUAGE--ANSI FORTRAN (1977)
24544C     VERSION NUMBER--2007/1
24545C     ORIGINAL VERSION--JANUARY   2007.
24546C
24547C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
24548C
24549C---------------------------------------------------------------------
24550C
24551      REAL M
24552C
24553C----COMMON-----------------------------------------------------------
24554C
24555      INCLUDE 'DPCOMC.INC'
24556      INCLUDE 'DPCOP2.INC'
24557C
24558C-----START POINT-----------------------------------------------------
24559C
24560C     CHECK THE INPUT ARGUMENTS FOR ERRORS
24561C
24562      IF(NTRUNC.LT.1)THEN
24563        WRITE(ICOUT,3)
24564        CALL DPWRST('XXX','BUG ')
24565        WRITE(ICOUT,47)NTRUNC
24566        CALL DPWRST('XXX','BUG ')
24567        PPF=0.0
24568        GOTO9000
24569      ENDIF
24570    3 FORMAT('***** ERROR--THE FIFTH ARGUMENT TO GNTPPF, THE ',
24571     1      'TRUNCATION POINT, IS LESS THAN 1')
24572C
24573      IF(P.LT.0.0 .OR. P.GT.1.0)THEN
24574        WRITE(ICOUT,4)
24575        CALL DPWRST('XXX','BUG ')
24576        WRITE(ICOUT,46)P
24577        CALL DPWRST('XXX','BUG ')
24578        PPF=0.0
24579        GOTO9000
24580      ENDIF
24581    4 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GNTPPF IS OUTSIDE ',
24582     1'THE (0,1] INTERVAL')
24583C
24584      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
24585        WRITE(ICOUT,15)
24586        CALL DPWRST('XXX','BUG ')
24587        WRITE(ICOUT,46)THETA
24588        CALL DPWRST('XXX','BUG ')
24589        PPF=0.0
24590        GOTO9000
24591      ENDIF
24592   15 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GNTPPF IS NOT IN ',
24593     1'THE INTERVAL (0,1)')
24594C
24595      IF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA .AND. BETA.NE.0.0)THEN
24596        WRITE(ICOUT,25)1.0/THETA
24597        CALL DPWRST('XXX','BUG ')
24598        WRITE(ICOUT,46)THETA
24599        CALL DPWRST('XXX','BUG ')
24600        PPF=0.0
24601        GOTO9000
24602      ENDIF
24603   25 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GNTPPF IS NOT IN ',
24604     1'THE INTERVAL (1,',G15.7,')')
24605C
24606      IF(M.LE.0.0)THEN
24607        WRITE(ICOUT,35)
24608        CALL DPWRST('XXX','BUG ')
24609        WRITE(ICOUT,46)M
24610        CALL DPWRST('XXX','BUG ')
24611        PPF=0.0
24612        GOTO9000
24613      ENDIF
24614   35 FORMAT('***** ERROR--THE FOURTH ARGUMENT TO GNTPPF IS ',
24615     1'NON-POSITIVE')
24616      IF(BETA.EQ.0.0)THEN
24617        IM=INT(M+0.5)
24618        IF(IM.EQ.0)IM=1
24619        M=REAL(IM)
24620      ENDIF
24621C
24622   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
24623   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
24624C
24625      IF(P.EQ.0.0)THEN
24626        PPF=0.0
24627        GOTO9000
24628      ELSEIF(P.EQ.1.0)THEN
24629        PPF=REAL(NTRUNC)
24630        GOTO9000
24631      ENDIF
24632C
24633      EPS=1.0E-7
24634      X=0.0
24635      CALL GNTCDF(X,THETA,BETA,M,NTRUNC,CDF)
24636      IF(CDF.GE.P-EPS)THEN
24637        PPF=0.0
24638        GOTO9000
24639      ENDIF
24640C
24641      X=1.0
24642      CALL GNTPDF(X,THETA,BETA,M,NTRUNC,PDF)
24643      CDF=CDF + PDF
24644      IF(CDF.GE.P-EPS)THEN
24645        PPF=1.0
24646        GOTO9000
24647      ENDIF
24648C
24649      I=1
24650C
24651  100 CONTINUE
24652        I=I+1
24653        IF(I.GE.NTRUNC)THEN
24654          PPF=REAL(NTRUNC)
24655          GOTO9000
24656        ENDIF
24657        X=DBLE(I)
24658        CALL GNTPDF(X,THETA,BETA,M,NTRUNC,PDF)
24659        CDF=CDF + PDF
24660C
24661        IF(CDF.GE.P-EPS)THEN
24662          PPF=REAL(I)
24663          GOTO9000
24664        ENDIF
24665      GOTO100
24666C
24667 9000 CONTINUE
24668      RETURN
24669      END
24670      SUBROUTINE GNTRAN(N,THETA,BETA,AM,NTRUNC,ISEED,X)
24671C
24672C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
24673C              FROM THE TRUNCATED GENERALIZED NEGATIVE BINOMIAL
24674C              DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA, M,
24675C              AND NTRUNC.
24676C
24677C              THE PROBABILITY MASS FUNCTION FOR THE NON-TRUNCATED
24678C              GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION IS:
24679C
24680C              p(X;THETA,BETA,M)=
24681C                  (M/(M+BETA*X)*
24682C                  (M+BETA*X  X)*THETA**X*(1-THETA)**(M+BETA*X-X)
24683C                  X = 0, 1, 2, 3, ,...
24684C                  0 < THETA < 1; BETA = 0 OR 1 <= BETA <= 1/THETA;
24685C                  M > 0 (M A POSITIVE INTEGER IF BETA = 0)
24686C
24687C              THE TRUNCATED GENERALIZED NEGATIVE BINOMIAL
24688C              DISTRIBUTION CAN BE DEFINED AS:
24689C
24690C              p(X;THETA,BETA,M)/F(NTRUNC,THETA,BETA,M)
24691C
24692C              WITH p, F, AND NTRUNC DENOTING THE PROBABILITY
24693C              MASS AND CUMULATIVE DISTRIBUTION FUNCTION OF
24694C              THE GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24695C              AND THE TRUNCATION POINT, RESPECTIVELY.
24696C
24697C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
24698C                                OF RANDOM NUMBERS TO BE
24699C                                GENERATED.
24700C                     --THETA  = THE SINGLE PRECISION VALUE
24701C                                OF THE FIRST SHAPE PARAMETER.
24702C                     --BETA   = THE SINGLE PRECISION VALUE
24703C                                OF THE SECOND SHAPE PARAMETER.
24704C                     --AM     = THE SINGLE PRECISION VALUE
24705C                                OF THE THIRD SHAPE PARAMETER.
24706C                     --NTRUNC = THE TRUNCATION POINT
24707C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
24708C                                (OF DIMENSION AT LEAST N)
24709C                                INTO WHICH THE GENERATED
24710C                                RANDOM SAMPLE WILL BE PLACED.
24711C     OUTPUT--A RANDOM SAMPLE OF SIZE N
24712C             FROM THE TRUNCATED GENERALIZED NEGATIVE BINOMIAL
24713C             DISTRIBUTION WITH SHAPE PARAMETERS THETA, BETA,
24714C             M, AND NTRUNC.
24715C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
24716C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
24717C                   OF N FOR THIS SUBROUTINE.
24718C                 --0 < THETA < 1, 1 < BETA < 1/THETA, M > 0,
24719C                   NTRUNC >= 1
24720C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN, GNTPPF
24721C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
24722C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
24723C     LANGUAGE--ANSI FORTRAN (1977)
24724C     REFERENCES--CONSUL AND FAMOYE (1993), "THE TRUNCATED
24725C                 GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION",
24726C                 JOURNAL OF APPLIED STATISTICAL SCIENCE,
24727C                 VOL. 1, NO. 2, PP. 141-157.
24728C     WRITTEN BY--JAMES J. FILLIBEN
24729C                 STATISTICAL ENGINEERING DIVISION
24730C                 INFORMATION TECHNOLOGY LABORATORY
24731C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
24732C                 GAITHERSBURG, MD 20899-8980
24733C                 PHONE--301-975-2899
24734C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
24735C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
24736C     LANGUAGE--ANSI FORTRAN (1977)
24737C     VERSION NUMBER--2007/1
24738C     ORIGINAL VERSION--JANUARY   2007.
24739C
24740C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
24741C
24742C---------------------------------------------------------------------
24743C
24744      REAL THETA
24745      REAL BETA
24746      DIMENSION X(*)
24747C
24748C-----COMMON----------------------------------------------------------
24749C
24750      INCLUDE 'DPCOP2.INC'
24751C
24752C-----DATA STATEMENTS-------------------------------------------------
24753C
24754C-----START POINT-----------------------------------------------------
24755C
24756C     CHECK THE INPUT ARGUMENTS FOR ERRORS
24757C
24758      IF(N.LT.1)THEN
24759        WRITE(ICOUT,5)
24760        CALL DPWRST('XXX','BUG ')
24761        WRITE(ICOUT,6)
24762        CALL DPWRST('XXX','BUG ')
24763        WRITE(ICOUT,47)N
24764        CALL DPWRST('XXX','BUG ')
24765        GOTO9999
24766      ENDIF
24767    5 FORMAT('***** ERROR--THE REQUESTED NUMBER OF ',
24768     1'TRUNCATED GENERALIZED NEGATIVE BINOMIAL')
24769    6 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE')
24770C
24771      IF(NTRUNC.LT.1)THEN
24772        WRITE(ICOUT,3)
24773        CALL DPWRST('XXX','BUG ')
24774        WRITE(ICOUT,4)
24775        CALL DPWRST('XXX','BUG ')
24776        WRITE(ICOUT,47)NTRUNC
24777        CALL DPWRST('XXX','BUG ')
24778        PDF=0.0
24779        GOTO9999
24780      ENDIF
24781    3 FORMAT('***** ERROR--THE TRUNCATION PARAMETER FOR THE ')
24782    4 FORMAT('      TRUNCATED GENERALIZED NEGATIVE BINOMIAL RANDOM ',
24783     1       'NUMBERS IS LESS THAN 1')
24784C
24785      IF(THETA.LE.0.0 .OR. THETA.GE.1.0)THEN
24786        WRITE(ICOUT,11)
24787        CALL DPWRST('XXX','BUG ')
24788        WRITE(ICOUT,12)
24789        CALL DPWRST('XXX','BUG ')
24790        WRITE(ICOUT,46)THETA
24791        CALL DPWRST('XXX','BUG ')
24792        GOTO9999
24793      ENDIF
24794   11 FORMAT('***** ERROR--THE THETA PARAMETER FOR THE ',
24795     1'TRUNCATED GENERALIZED NEGATIVE BINOMIAL')
24796   12 FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (0,1) INTERVAL')
24797C
24798      IF(BETA.LE.1.0 .OR. BETA.GE.1.0/THETA)THEN
24799        WRITE(ICOUT,21)
24800        CALL DPWRST('XXX','BUG ')
24801        WRITE(ICOUT,22)
24802        CALL DPWRST('XXX','BUG ')
24803        WRITE(ICOUT,46)BETA
24804        CALL DPWRST('XXX','BUG ')
24805        GOTO9999
24806      ENDIF
24807   21 FORMAT('***** ERROR--THE BETA PARAMETER FOR THE ',
24808     1'TRUNCATED GENERALIZED NEGATIVE BINOMIAL')
24809   22 FORMAT('      RANDOM NUMBERS IS OUTSIDE THE (0,',G15.7,
24810     1       ') INTERVAL')
24811C
24812      IF(AM.LE.0.0)THEN
24813        WRITE(ICOUT,31)
24814        CALL DPWRST('XXX','BUG ')
24815        WRITE(ICOUT,32)
24816        CALL DPWRST('XXX','BUG ')
24817        WRITE(ICOUT,46)AM
24818        CALL DPWRST('XXX','BUG ')
24819        GOTO9999
24820      ENDIF
24821   31 FORMAT('***** ERROR--THE M PARAMETER FOR THE ',
24822     1'TRUNCATED GENERALIZED NEGATIVE BINOMIAL')
24823   32 FORMAT('      RANDOM NUMBERS IS NON-POSITIVE.')
24824C
24825   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
24826   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8)
24827C
24828C     GENERATE N TRUNCATED GENERALIZED NEGATIVE BINOMIAL DISTRIBUTION
24829C     RANDOM NUMBERS.
24830C
24831      CALL UNIRAN(N,ISEED,X)
24832      DO100I=1,N
24833        ZTEMP=X(I)
24834        CALL GNTPPF(ZTEMP,THETA,BETA,AM,NTRUNC,PPF)
24835        X(I)=PPF
24836  100 CONTINUE
24837C
24838 9999 CONTINUE
24839C
24840      RETURN
24841      END
24842      SUBROUTINE GOMCDF(X,C,B,IGOMDF,CDF)
24843C
24844C     THIS SUBROUTINE COMPUTES THE GOMPERTZ CUMULATIVE DISTRIBUTION
24845C     FUNCTION.  THIS IS A TRUNCATED FORM OF THE TYPE 1 EXTREME
24846C     VALUE DISTRIBUTION.  IT HAS THE FOLLOWING CDF:
24847C         F(X,C,B) = 1 - EXP(-B*(C**X-1)/LOG(C))    X>=0, B>0, C>=1
24848C     WRITTEN BY--JAMES J. FILLIBEN
24849C                 STATISTICAL ENGINEERING DIVISION
24850C                 INFORMATION TECHNOLOGY LABORATORY
24851C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
24852C                 GAITHERSBURG, MD 20899-8980
24853C                 PHONE--301-975-2855
24854C     REFERENCE--"CONTINUOUS UNIVARIATE DISTRIBUTIONS - VOL. 2", 2ND ED
24855C                JOHNSON, KOTZ, AND BALAKRISHNAN, WILEY, 1994, PP. 25-26
24856C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
24857C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
24858C     LANGUAGE--ANSI FORTRAN (1977)
24859C     VERSION NUMBER--95/10
24860C     ORIGINAL VERSION--OCTOBER   1995.
24861C     UPDATED         --JANUARY   2007. SUPPORT FOR ALTERNATE
24862C                                       PARAMETERIZATION
24863C
24864C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
24865C
24866      DOUBLE PRECISION DCDF
24867      DOUBLE PRECISION DC
24868      DOUBLE PRECISION DB
24869      DOUBLE PRECISION DK
24870      DOUBLE PRECISION DALPHA
24871      DOUBLE PRECISION DX
24872      DOUBLE PRECISION DTERM1
24873C
24874      CHARACTER*4 IGOMDF
24875C
24876C-----COMMON----------------------------------------------------------
24877C
24878      INCLUDE 'DPCOP2.INC'
24879C
24880C-----START POINT-----------------------------------------------------
24881C
24882      IF(IGOMDF.EQ.'GARG')GOTO1000
24883C
24884      IF(C.LE.1.0)THEN
24885        WRITE(ICOUT,101)
24886        CALL DPWRST('XXX','BUG ')
24887        WRITE(ICOUT,103)C
24888        CALL DPWRST('XXX','BUG ')
24889        GOTO9999
24890      ENDIF
24891      IF(B.LE.0.0)THEN
24892        WRITE(ICOUT,102)
24893        CALL DPWRST('XXX','BUG ')
24894        WRITE(ICOUT,103)B
24895        CALL DPWRST('XXX','BUG ')
24896        GOTO9999
24897      ENDIF
24898      IF(X.LT.0.0)THEN
24899        WRITE(ICOUT,105)
24900        CALL DPWRST('XXX','BUG ')
24901        WRITE(ICOUT,103)X
24902        CALL DPWRST('XXX','BUG ')
24903        GOTO9999
24904      ENDIF
24905  101 FORMAT('***** ERROR--THE SECOND ARGUMENT TO ',
24906     1       'GOMCDF IS LESS THAN 1.')
24907  102 FORMAT('***** ERROR--THE THIRD ARGUMENT TO ',
24908     1       'GOMCDF IS NON-POSITIVE.')
24909  103 FORMAT('      THE VALUE OF THE ARGUMENT IS ',G15.7)
24910  105 FORMAT('***** ERROR--THE FIRST ARGUMENT TO ',
24911     1       'GOMCDF IS NEGATIVE.')
24912C
24913      IF(X.LE.0.0)THEN
24914        CDF=0.0
24915        GOTO9999
24916      ENDIF
24917C
24918      DX=DBLE(X)
24919      DC=DBLE(C)
24920      DB=DBLE(B)
24921      DTERM1=-DB*(DC**DX - 1.D0)/DLOG(DC)
24922      IF(DTERM1.GE.80.D0)THEN
24923        CDF=1.0
24924        GOTO9999
24925      ENDIF
24926      DCDF=1.0D0-DEXP(DTERM1)
24927      CDF=REAL(DCDF)
24928      GOTO9999
24929C
24930 1000 CONTINUE
24931C
24932C     JANUARY 2007: SUPPORT FOR ALTERNATE PARAMETERIZATION
24933C     THAT HAS THE FOLOWING CDF:
24934C         F(X,K,ALPHA) = 1 - EXP(-K*(EXP(ALPHA*X)-1)/ALPHA
24935C
24936      DX=DBLE(X)
24937      DK=DBLE(B)
24938      DALPHA=DBLE(C)
24939      IF(DALPHA.LE.0.0D0)THEN
24940        WRITE(ICOUT,1001)
24941        CALL DPWRST('XXX','BUG ')
24942        WRITE(ICOUT,103)REAL(DALPHA)
24943        CALL DPWRST('XXX','BUG ')
24944        GOTO9999
24945      ENDIF
24946      IF(DK.LE.0.0D0)THEN
24947        WRITE(ICOUT,1002)
24948        CALL DPWRST('XXX','BUG ')
24949        WRITE(ICOUT,103)REAL(DK)
24950        CALL DPWRST('XXX','BUG ')
24951        GOTO9999
24952      ENDIF
24953      IF(X.LT.0.0)THEN
24954        WRITE(ICOUT,1005)
24955        CALL DPWRST('XXX','BUG ')
24956        WRITE(ICOUT,103)X
24957        CALL DPWRST('XXX','BUG ')
24958        GOTO9999
24959      ENDIF
24960 1001 FORMAT('***** ERROR--THE SECOND ARGUMENT TO ',
24961     1       'GOMCDF IS NON-POSITIVE.')
24962 1002 FORMAT('***** ERROR--THE THIRD ARGUMENT TO ',
24963     1       'GOMCDF IS NON-POSITIVE.')
24964 1005 FORMAT('***** ERROR--THE FIRST ARGUMENT TO ',
24965     1       'GOMCDF IS NEGATIVE.')
24966C
24967      DTERM1=-DK*(DEXP(DALPHA*DX) - 1.D0)/DALPHA
24968      IF(DTERM1.GE.80.D0)THEN
24969        CDF=1.0
24970        GOTO9999
24971      ENDIF
24972      DCDF=1.0D0-DEXP(DTERM1)
24973      CDF=REAL(DCDF)
24974      GOTO9999
24975C
24976 9999 CONTINUE
24977      RETURN
24978      END
24979      SUBROUTINE GOMCHA(X,C,B,IGOMDF,CHA)
24980C
24981C     THIS SUBROUTINE COMPUTES THE GOMPERTZ CUMULATIVE HAZARD
24982C     FUNCTION.  THIS IS A TRUNCATED FORM OF THE TYPE 1 EXTREME
24983C     VALUE DISTRIBUTION.  IT HAS THE FOLLOWING CUMULATIVE HAZARD
24984C     FUNCTION:
24985C         H(X,C,B) = B*(C**X-1)/LOG(C))   X>=0, B>0, C>=1
24986C     WRITTEN BY--JAMES J. FILLIBEN
24987C                 STATISTICAL ENGINEERING DIVISION
24988C                 INFORMATION TECHNOLOGY LABORATORY
24989C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
24990C                 GAITHERSBURG, MD 20899-8980
24991C                 PHONE--301-975-2855
24992C     REFERENCE--"CONTINUOUS UNIVARIATE DISTRIBUTIONS - VOL. 2", 2ND ED
24993C                JOHNSON, KOTZ, AND BALAKRISHNAN, WILEY, 1994, PP. 25-26
24994C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
24995C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
24996C     LANGUAGE--ANSI FORTRAN (1977)
24997C     VERSION NUMBER--95/10
24998C     ORIGINAL VERSION--OCTOBER   1995.
24999C     UPDATED         --JANUARY   2007. SUPPORT FOR ALTERNATE
25000C                                       PARAMETERIZATION
25001C
25002C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
25003C
25004      DOUBLE PRECISION DCHA
25005      DOUBLE PRECISION DC
25006      DOUBLE PRECISION DB
25007      DOUBLE PRECISION DK
25008      DOUBLE PRECISION DALPHA
25009      DOUBLE PRECISION DX
25010C
25011      CHARACTER*4 IGOMDF
25012C
25013C-----COMMON----------------------------------------------------------
25014C
25015      INCLUDE 'DPCOP2.INC'
25016C
25017C-----START POINT-----------------------------------------------------
25018C
25019      IF(IGOMDF.EQ.'GARG')GOTO1000
25020C
25021      IF(C.LE.1.0)THEN
25022        WRITE(ICOUT,101)
25023        CALL DPWRST('XXX','BUG ')
25024        WRITE(ICOUT,103)C
25025        CALL DPWRST('XXX','BUG ')
25026        GOTO9999
25027      ENDIF
25028      IF(B.LE.0.0)THEN
25029        WRITE(ICOUT,102)
25030        CALL DPWRST('XXX','BUG ')
25031        WRITE(ICOUT,103)B
25032        CALL DPWRST('XXX','BUG ')
25033        GOTO9999
25034      ENDIF
25035      IF(X.LT.0.0)THEN
25036        WRITE(ICOUT,105)
25037        CALL DPWRST('XXX','BUG ')
25038        WRITE(ICOUT,103)X
25039        CALL DPWRST('XXX','BUG ')
25040        GOTO9999
25041      ENDIF
25042  101 FORMAT('***** ERROR--THE SECOND ARGUMENT TO ',
25043     1       'GOMCHA IS LESS THAN 1.')
25044  102 FORMAT('***** ERROR--THE THIRD ARGUMENT TO ',
25045     1       'GOMCHA IS NON-POSITIVE.')
25046  103 FORMAT('      THE VALUE OF THE ARGUMENT IS ',G15.7)
25047  105 FORMAT('***** ERROR--THE FIRST ARGUMENT TO ',
25048     1       'GOMCHA IS NEGATIVE.')
25049C
25050      IF(X.LE.0.0)THEN
25051        CHA=0.0
25052        GOTO9999
25053      ENDIF
25054C
25055      DX=DBLE(X)
25056      DC=DBLE(C)
25057      DB=DBLE(B)
25058      DCHA=DB*(DC**DX - 1.D0)/DLOG(DC)
25059      CHA=REAL(DCHA)
25060      GOTO9999
25061C
25062 1000 CONTINUE
25063C
25064C     JANUARY 2007: SUPPORT FOR ALTERNATE PARAMETERIZATION
25065C     THAT HAS THE FOLOWING CHA:
25066C         H(X,K,ALPHA) = K*(EXP(ALPHA*X)-1)/ALPHA
25067C
25068      DX=DBLE(X)
25069      DK=DBLE(B)
25070      DALPHA=DBLE(C)
25071      IF(DALPHA.LE.0.0D0)THEN
25072        WRITE(ICOUT,1001)
25073        CALL DPWRST('XXX','BUG ')
25074        WRITE(ICOUT,103)REAL(DALPHA)
25075        CALL DPWRST('XXX','BUG ')
25076        GOTO9999
25077      ENDIF
25078      IF(DK.LE.0.0D0)THEN
25079        WRITE(ICOUT,1002)
25080        CALL DPWRST('XXX','BUG ')
25081        WRITE(ICOUT,103)REAL(DK)
25082        CALL DPWRST('XXX','BUG ')
25083        GOTO9999
25084      ENDIF
25085      IF(X.LT.0.0)THEN
25086        WRITE(ICOUT,1005)
25087        CALL DPWRST('XXX','BUG ')
25088        WRITE(ICOUT,103)X
25089        CALL DPWRST('XXX','BUG ')
25090        GOTO9999
25091      ENDIF
25092 1001 FORMAT('***** ERROR--THE SECOND ARGUMENT TO ',
25093     1       'GOMCHA IS NON-POSITIVE.')
25094 1002 FORMAT('***** ERROR--THE THIRD ARGUMENT TO ',
25095     1       'GOMCHA IS NON-POSITIVE.')
25096 1005 FORMAT('***** ERROR--THE FIRST ARGUMENT TO ',
25097     1       'GOMCHA IS NEGATIVE.')
25098C
25099      DCHA=DK*(DEXP(DALPHA*DX) - 1.D0)/DALPHA
25100      CHA=REAL(DCHA)
25101      GOTO9999
25102C
25103 9999 CONTINUE
25104      RETURN
25105      END
25106      SUBROUTINE GOMHAZ(X,C,B,IGOMDF,HAZ)
25107C
25108C     THIS SUBROUTINE COMPUTES THE GOMPERTZ HAZARD
25109C     FUNCTION.  IT HAS THE FOLLOWING HAZARD FUNCTION:
25110C         h(X,C,B) = B*C**X     X >= 0
25111C     THIS IS THE PARAMETERIZATION GIVEN ON PAGE 25 OF JOHNSON,
25112C     KOTZ, AND BALAKRISHNAN.  AN ALTERNATE PARAMETERIZATION IS
25113C     GIVEN ON PAGE 82:
25114C         h(X,K,ALPHA) = K*EXP(ALPHA*X)    X >= 0
25115C     DATAPLOT SUPPORTS BOTH PARAMETERIZATIONS.
25116C     THEY ARE RELATED BY:
25117C         ALPHA = LOG(C)
25118C         K     = B
25119C     WRITTEN BY--JAMES J. FILLIBEN
25120C                 STATISTICAL ENGINEERING DIVISION
25121C                 INFORMATION TECHNOLOGY LABORATORY
25122C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
25123C                 GAITHERSBURG, MD 20899-8980
25124C                 PHONE--301-975-2855
25125C     REFERENCE--"CONTINUOUS UNIVARIATE DISTRIBUTIONS - VOL. 2", 2ND ED
25126C                JOHNSON, KOTZ, AND BALAKRISHNAN, WILEY, 1994, PP. 25-26
25127C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
25128C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
25129C     LANGUAGE--ANSI FORTRAN (1977)
25130C     VERSION NUMBER--95/10
25131C     ORIGINAL VERSION--OCTOBER   1995.
25132C     UPDATED         --JANUARY   2007. SUPPORT ALTERNATE DEFINITION
25133C
25134C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
25135C
25136      DOUBLE PRECISION DHAZ
25137      DOUBLE PRECISION DC
25138      DOUBLE PRECISION DB
25139      DOUBLE PRECISION DK
25140      DOUBLE PRECISION DALPHA
25141      DOUBLE PRECISION DX
25142C
25143      CHARACTER*4 IGOMDF
25144C
25145C-----COMMON----------------------------------------------------------
25146C
25147      INCLUDE 'DPCOP2.INC'
25148C
25149C-----START POINT-----------------------------------------------------
25150C
25151      IF(IGOMDF.EQ.'GARG')GOTO1000
25152C
25153      IF(C.LE.1.0 .OR. B.LE.0.0)THEN
25154        WRITE(ICOUT,101)
25155        CALL DPWRST('XXX','BUG ')
25156        WRITE(ICOUT,103)C
25157        CALL DPWRST('XXX','BUG ')
25158        GOTO9999
25159      ENDIF
25160      IF(B.LE.0.0)THEN
25161        WRITE(ICOUT,102)
25162        CALL DPWRST('XXX','BUG ')
25163        WRITE(ICOUT,103)B
25164        CALL DPWRST('XXX','BUG ')
25165        GOTO9999
25166      ENDIF
25167      IF(X.LT.0.0)THEN
25168        WRITE(ICOUT,105)
25169        CALL DPWRST('XXX','BUG ')
25170        WRITE(ICOUT,103)X
25171        CALL DPWRST('XXX','BUG ')
25172        GOTO9999
25173      ENDIF
25174  101 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GOMHAZ ',
25175     1       'IS LESS THAN 1.')
25176  102 FORMAT('***** ERROR--THE THIRD INPUT ARGUMENT TO GOMHAZ ',
25177     1       'IS NON-POSITIVE.')
25178  103 FORMAT('      THE VALUE OF THE ARGUMENT IS ',G15.7)
25179  105 FORMAT('***** ERROR--THE FIRST INPUT ARGUMENT TO GOMHAZ ',
25180     1      'IS NEGATIVE.')
25181C
25182      DX=DBLE(X)
25183      DC=DBLE(C)
25184      DB=DBLE(B)
25185      DHAZ=DLOG(DB) + DX*DLOG(DC)
25186      DHAZ=DEXP(DHAZ)
25187      HAZ=REAL(DHAZ)
25188C
25189      GOTO9999
25190C
25191 1000 CONTINUE
25192      DX=DBLE(X)
25193      DK=DBLE(B)
25194      DALPHA=DBLE(C)
25195C
25196      IF(X.LT.0.0)THEN
25197        WRITE(ICOUT,105)
25198        CALL DPWRST('XXX','BUG ')
25199        WRITE(ICOUT,103)X
25200        CALL DPWRST('XXX','BUG ')
25201        GOTO9999
25202      ENDIF
25203      IF(DK.LE.0.0D0)THEN
25204        WRITE(ICOUT,1001)
25205        CALL DPWRST('XXX','BUG ')
25206        WRITE(ICOUT,103)REAL(DK)
25207        CALL DPWRST('XXX','BUG ')
25208        GOTO9999
25209      ENDIF
25210      IF(DALPHA.LE.0.0D0)THEN
25211        WRITE(ICOUT,1002)
25212        CALL DPWRST('XXX','BUG ')
25213        WRITE(ICOUT,103)REAL(DALPHA)
25214        CALL DPWRST('XXX','BUG ')
25215        GOTO9999
25216      ENDIF
25217 1001 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GOMHAZ ',
25218     1       'IS NON-POSITIVE.')
25219 1002 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GOMHAZ ',
25220     1       'IS NON-POSITIVE.')
25221C
25222      DHAZ=DLOG(DK) + DALPHA*DX
25223      DHAZ=DEXP(DHAZ)
25224      HAZ=REAL(DHAZ)
25225      GOTO9999
25226C
25227 9999 CONTINUE
25228      RETURN
25229      END
25230      DOUBLE PRECISION FUNCTION GOMFUN (ALPHAT,X)
25231C
25232C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE MAXIMUM LIKELIHOOD
25233C              ESTIMATE OF ALPHA FOR THE GOMPERTZ DISTRIBUTION.
25234C              A CONSTANT IN A COMMON BLOCK.
25235C
25236C              THE MAXIMUM LIKELIHOOD ESTIMATES ARE:
25237C
25238C                  KHAT = D*ALPHAHAT/Q(ALPHAHAT)
25239C
25240C              WHERE ALPHAHAT IS THE SOLUTION OF THE EQUATION
25241C
25242C                  T + (D/ALPHA) - D*Q'(ALPHA)/Q(ALPHA) = 0
25243C
25244C                  N    = THE TOTAL NUMBER OF OBSERVATIONS
25245C                  d(i) = NUMBER OF FAILURE TIMES IN THE
25246C                         I-TH INTERVAL
25247C                  s(i) = NUMBER OF CENSORING TIMES IN I-TH
25248C                         INTERVAL
25249C                  t(i) = UPPER END POINT OF I-TH INTERVAL
25250C                  tau  = MID-POINT OF I-TH INTERVAL
25251C
25252C                  T    = SUM[i=1 to p][d(i)*tau(i)]
25253C                  D    = SUM[i=1 to p][d(i)]
25254C                  Q(ALPHA)  = SUM[i=1 to p]
25255C                              [s(i)*(EXP(ALPHA*t(i)) - 1) +
25256C                              d(i)*(EXP(ALPHA*t(i)) - 1)]
25257C
25258C                  Q'   = DERIVATIVE OF Q
25259C                       = SUM[ALPHA*s(i)*EXP(ALPHA*t(i)) +
25260C                         ALPHA*d(i)*EXP(ALPHA*t(i))]
25261C              CALLED BY DFZER2 ROUTINE FOR FINDING THE ROOT OF A
25262C              FUNCTION.
25263C
25264C              NOTE THAT THIS ALGORITHM ASSUMES THE DATA IS
25265C              GROUPED AND IT ACCOMODATES CENSORED DATA.
25266C     EXAMPLE--GOMPERTZ MAXIMUM LIKELIHOOD Y
25267C     REFERENCE--GARG, RAO, AND REDMOND (1970), "MAXIMUM LIKELIHOOD
25268C                ESTIMATION OF THE PARAMETERS OF THE GOMPERTZ
25269C                SURVIVAL FUNCTION", APPLIED STATISTICS,
25270C                PP. 152-159.
25271C     WRITTEN BY--JAMES J. FILLIBEN
25272C                 STATISTICAL ENGINEERING DIVISION
25273C                 INFORMATION TECHNOLOGY LABORATORY
25274C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
25275C                 GAITHERSBUG, MD 20899-8980
25276C                 PHONE--301-975-2855
25277C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
25278C           OF THE NATIONAL BUREAU OF STANDARDS.
25279C     LANGUAGE--ANSI FORTRAN (1977)
25280C     VERSION NUMBER--2007/1
25281C     ORIGINAL VERSION--JANUARY    2007.
25282C
25283C---------------------------------------------------------------------
25284C
25285      DOUBLE PRECISION ALPHAT
25286      DOUBLE PRECISION X(*)
25287C
25288      INTEGER NTOT,NCLASS
25289      DOUBLE PRECISION D
25290      DOUBLE PRECISION T
25291      DOUBLE PRECISION DQ
25292      DOUBLE PRECISION DQP
25293      DOUBLE PRECISION DQPP
25294      COMMON/GOMCOM/D,T,DQ,DQP,DQPP,NTOT,NCLASS
25295C
25296C---------------------------------------------------------------------
25297C
25298      DOUBLE PRECISION DSUM1
25299      DOUBLE PRECISION DSUM2
25300      DOUBLE PRECISION DSUM3
25301      DOUBLE PRECISION DSUM4
25302      DOUBLE PRECISION DSUM5
25303      DOUBLE PRECISION DSUM6
25304      DOUBLE PRECISION DA
25305      DOUBLE PRECISION DI
25306      DOUBLE PRECISION SI
25307C
25308      INCLUDE 'DPCOP2.INC'
25309C
25310C-----START POINT-----------------------------------------------------
25311C
25312C  COMPUTE SOME SUMS
25313C
25314      DSUM1=0.0D0
25315      DSUM2=0.0D0
25316      DSUM3=0.0D0
25317      DSUM4=0.0D0
25318      DSUM5=0.0D0
25319      DSUM6=0.0D0
25320      DA=ALPHAT
25321C
25322      DO100I=1,NCLASS
25323        DI=X(I)
25324        SI=X(I+25000)
25325        XLOW=X(I+50000)
25326        XUPP=X(I+75000)
25327        TAU=(XLOW+XUPP)/2.0D0
25328        DSUM1=DSUM1 + SI*(DEXP(DA*XUPP) - 1.0D0)
25329        DSUM2=DSUM2 + DI*(DEXP(DA*TAU) - 1.0D0)
25330        DSUM3=DSUM3 + XUPP*SI*DEXP(DA*XUPP)
25331        DSUM4=DSUM4 + TAU*DI*DEXP(DA*TAU)
25332        DSUM5=DSUM5 + XUPP*XUPP*SI*DEXP(DA*XUPP)
25333        DSUM6=DSUM6 + TAU*TAU*DI*DEXP(DA*TAU)
25334  100 CONTINUE
25335C
25336      DQ=DSUM1 + DSUM2
25337      DQP=DSUM3 + DSUM4
25338      DQPP=DSUM5 + DSUM6
25339      GOMFUN=T + (D/DA) - D*DQP/DQ
25340C
25341      RETURN
25342      END
25343      SUBROUTINE GOMPDF(X,C,B,IGOMDF,PDF)
25344C
25345C     THIS SUBROUTINE COMPUTES THE GOMPERTZ CUMULATIVE DISTRIBUTION
25346C     FUNCTION.  THIS IS A TRUNCATED FORM OF THE TYPE 1 EXTREME
25347C     VALUE DISTRIBUTION.  IT HAS THE FOLLOWING PDF:
25348C         F(X,C,B) = B*C**X/EXP(B*(C**X-1)/LOG(C))     X>=0, B>0, C>=1
25349C     WRITTEN BY--JAMES J. FILLIBEN
25350C                 STATISTICAL ENGINEERING DIVISION
25351C                 INFORMATION TECHNOLOGY LABORATORY
25352C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
25353C                 GAITHERSBURG, MD 20899-8980
25354C                 PHONE--301-975-2855
25355C     REFERENCE--"CONTINUOUS UNIVARIATE DISTRIBUTIONS - VOL. 2", 2ND ED
25356C                JOHNSON, KOTZ, AND BALAKRISHNAN, WILEY, 1994, PP. 25-26
25357C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
25358C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
25359C     LANGUAGE--ANSI FORTRAN (1977)
25360C     VERSION NUMBER--95/10
25361C     ORIGINAL VERSION--OCTOBER   1995.
25362C     UPDATED         --JANUARY   2007. SUPPORT ALTERNATE DEFINITION
25363C
25364C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
25365C
25366      DOUBLE PRECISION DPDF
25367      DOUBLE PRECISION DC
25368      DOUBLE PRECISION DB
25369      DOUBLE PRECISION DK
25370      DOUBLE PRECISION DALPHA
25371      DOUBLE PRECISION DX
25372      DOUBLE PRECISION DTERM1, DTERM2, DTERM3
25373C
25374      CHARACTER*4 IGOMDF
25375C
25376C-----COMMON----------------------------------------------------------
25377C
25378      INCLUDE 'DPCOP2.INC'
25379C
25380C-----START POINT-----------------------------------------------------
25381C
25382      IF(IGOMDF.EQ.'GARG')GOTO1000
25383C
25384      IF(C.LE.1.0 .OR. B.LE.0.0)THEN
25385        WRITE(ICOUT,101)
25386        CALL DPWRST('XXX','BUG ')
25387        WRITE(ICOUT,103)C
25388        CALL DPWRST('XXX','BUG ')
25389        GOTO9999
25390      ENDIF
25391      IF(B.LE.0.0)THEN
25392        WRITE(ICOUT,102)
25393        CALL DPWRST('XXX','BUG ')
25394        WRITE(ICOUT,103)B
25395        CALL DPWRST('XXX','BUG ')
25396        GOTO9999
25397      ENDIF
25398      IF(X.LT.0.0)THEN
25399        WRITE(ICOUT,105)
25400        CALL DPWRST('XXX','BUG ')
25401        WRITE(ICOUT,103)X
25402        CALL DPWRST('XXX','BUG ')
25403        GOTO9999
25404      ENDIF
25405  101 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GOMPDF ',
25406     1       'IS LESS THAN 1.')
25407  102 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GOMPDF ',
25408     1       'IS NON-POSITIVE.')
25409  103 FORMAT('      THE VALUE OF THE ARGUMENT IS ',G15.7)
25410  105 FORMAT('***** ERROR--THE FIRST ARGUMENT TO GOMPDF ',
25411     1      'IS NEGATIVE.')
25412C
25413      DX=DBLE(X)
25414      DC=DBLE(C)
25415      DB=DBLE(B)
25416      DTERM1=DLOG(DB) + DX*DLOG(DC)
25417      DTERM2=(DB/DLOG(DC))*(DC**DX-1.0D0)
25418      DTERM3=DTERM1-DTERM2
25419      IF(DTERM3.LE.-80.D0)THEN
25420        PDF=0.0
25421        GOTO9999
25422      ELSEIF(DTERM3.GE.80.D0)THEN
25423        PDF=0.0
25424        WRITE(ICOUT,401)
25425        CALL DPWRST('XXX','BUG ')
25426        GOTO9999
25427      ENDIF
25428  401 FORMAT('***** NON-FATAL DIAGNOSTIC FROM GOMPDF.  THE COMPUTED ',
25429     1'PDF VALUE EXCEEDS MACHINE PRECISION.')
25430C
25431      DPDF=DEXP(DTERM3)
25432      PDF=REAL(DPDF)
25433C
25434      GOTO9999
25435C
25436C     JANUARY 2007: GARG PARAMETERIZATION IS
25437C                   K*EXP(ALPHA*X)*EXP(-K*(EXP(ALPHA*X - 1)/ALPHA)
25438C                   THEY ARE RELATED BY:
25439C                       ALPHA = LOG(C)
25440C                       K     = B
25441C
25442 1000 CONTINUE
25443      DX=DBLE(X)
25444      DALPHA=DBLE(C)
25445      DK=DBLE(B)
25446C
25447      IF(X.LT.0.0)THEN
25448        WRITE(ICOUT,105)
25449        CALL DPWRST('XXX','BUG ')
25450        WRITE(ICOUT,103)X
25451        CALL DPWRST('XXX','BUG ')
25452        GOTO9999
25453      ENDIF
25454      IF(DK.LE.0.0D0)THEN
25455        WRITE(ICOUT,1001)
25456        CALL DPWRST('XXX','BUG ')
25457        WRITE(ICOUT,103)REAL(DK)
25458        CALL DPWRST('XXX','BUG ')
25459        GOTO9999
25460      ENDIF
25461      IF(DALPHA.LE.0.0D0)THEN
25462        WRITE(ICOUT,1002)
25463        CALL DPWRST('XXX','BUG ')
25464        WRITE(ICOUT,103)REAL(DALPHA)
25465        CALL DPWRST('XXX','BUG ')
25466        GOTO9999
25467      ENDIF
25468 1001 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GOMPDF ',
25469     1       'IS NON-NEGATIVE.')
25470 1002 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GOMPDF ',
25471     1       'IS NON-POSITIVE.')
25472C
25473      DTERM1=DLOG(DK)
25474      DTERM2=DALPHA*DX
25475      DTERM3=-DK*(DEXP(DALPHA*DX) - 1.0D0)/DALPHA
25476      DPDF=DEXP(DTERM1 + DTERM2 + DTERM3)
25477      PDF=REAL(DPDF)
25478      GOTO9999
25479C
25480 9999 CONTINUE
25481      RETURN
25482      END
25483      SUBROUTINE GOMPPF(P,C,B,IGOMDF,PPF)
25484C
25485C     PURPOSE--THIS SUBROUTINE COMPUTES THE GOMPERTZ PERCENT POINT
25486C              FUNCTION.  THIS IS A TRUNCATED FORM OF THE TYPE 1
25487C              EXTREME VALUE DISTRIBUTION.  IT HAS THE FOLLOWING PDF:
25488C                 F(X,C,B) = B*C**X/EXP(B*(C**X-1)/LOG(C))
25489C                                                   X>=0, B>0, C>=1
25490C              NOTE THAT THE PERCENT POINT FUNCTION OF A DISTRIBUTION
25491C              IS IDENTICALLY THE SAME AS THE INVERSE CUMULATIVE
25492C              DISTRIBUTION FUNCTION OF THE DISTRIBUTION.
25493C     INPUT  ARGUMENTS--P      = THE SINGLE PRECISION VALUE
25494C                                (BETWEEN 0.0 (EXCLUSIVELY)
25495C                                AND 1.0 (EXCLUSIVELY))
25496C                                AT WHICH THE PERCENT POINT
25497C                                FUNCTION IS TO BE EVALUATED.
25498C                     --C      = THE SINGLE PRECISION VALUE
25499C                                OF THE FIRST SHAPE PARAMETER.
25500C                                C SHOULD BE > 1.
25501C                     --B      = THE SINGLE PRECISION VALUE
25502C                                OF THE SECOND SHAPE PARAMETER.
25503C     OUTPUT ARGUMENTS--PPF    = THE SINGLE PRECISION PERCENT
25504C                                POINT FUNCTION VALUE.
25505C     OUTPUT--THE SINGLE PRECISION PERCENT POINT FUNCTION .
25506C             VALUE PPF FOR THE GOMPERTZ DISTRIBUTION
25507C             WITH SHAPE PARAMETERS C AND B.
25508C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
25509C     RESTRICTIONS--C SHOULD BE > 1.
25510C                 --B SHOULD BE POSITIVE.
25511C                 --P SHOULD BE BETWEEN 0.0 (EXCLUSIVELY)
25512C                   AND 1.0 (EXCLUSIVELY).
25513C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
25514C     FORTRAN LIBRARY SUBROUTINES NEEDED--LOG.
25515C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
25516C     LANGUAGE--ANSI FORTRAN (1977)
25517C     REFERENCE --JOHNSON AND KOTZ, CONTINUOUS UNIVARIATE
25518C                 DISTRIBUTIONS--2, 1994, PAGES 25-26.
25519C     WRITTEN BY--JAMES J. FILLIBEN
25520C                 STATISTICAL ENGINEERING DIVISION
25521C                 INFORMATION TECHNOLOGY LABORATORY
25522C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
25523C                 GAITHERSBURG, MD 20899-8980
25524C                 PHONE--301-975-2899
25525C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
25526C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
25527C     LANGUAGE--ANSI FORTRAN (1977)
25528C     VERSION NUMBER--95/10
25529C     ORIGINAL VERSION--OCTOBER   1995.
25530C     UPDATED         --JANUARY   2007. SUPPORT FOR ALTERNATE
25531C                                       PARAMETERIZATION
25532C
25533C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
25534C
25535C
25536C---------------------------------------------------------------------
25537C
25538      CHARACTER*4 IGOMDF
25539C
25540      DOUBLE PRECISION DPPF
25541      DOUBLE PRECISION DC
25542      DOUBLE PRECISION DB
25543      DOUBLE PRECISION DP
25544      DOUBLE PRECISION DK
25545      DOUBLE PRECISION DALPHA
25546      DOUBLE PRECISION DTERM1
25547C
25548      INCLUDE 'DPCOP2.INC'
25549C
25550C-----START POINT-----------------------------------------------------
25551C
25552C     CHECK THE INPUT ARGUMENTS FOR ERRORS
25553C
25554      IF(P.LT.0.0.OR.P.GE.1.0)THEN
25555        WRITE(ICOUT,1)
25556        CALL DPWRST('XXX','BUG ')
25557        WRITE(ICOUT,46)P
25558        CALL DPWRST('XXX','BUG ')
25559        PPF=0.0
25560        GOTO9999
25561      ENDIF
25562    1 FORMAT('***** ERROR--THE FIRST ARGUMENT TO ',
25563     1'GOMPPF IS OUTSIDE THE ALLOWABLE (0,1) INTERVAL')
25564   46 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',G15.7)
25565C
25566      IF(IGOMDF.EQ.'GARG')GOTO1000
25567C
25568      IF(C.LE.1.0)THEN
25569        WRITE(ICOUT,101)
25570        CALL DPWRST('XXX','BUG ')
25571        WRITE(ICOUT,46)C
25572        CALL DPWRST('XXX','BUG ')
25573        GOTO9999
25574      ENDIF
25575      IF(B.LE.0.0)THEN
25576        WRITE(ICOUT,102)
25577        CALL DPWRST('XXX','BUG ')
25578        WRITE(ICOUT,46)B
25579        CALL DPWRST('XXX','BUG ')
25580        GOTO9999
25581      ENDIF
25582  101 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GOMPPF ',
25583     1       'IS LESS THAN 1.')
25584  102 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GOMPPF ',
25585     1       'IS NON-POSITIVE.')
25586C
25587      IF(P.EQ.0.0)THEN
25588        PPF=0.0
25589        GOTO9999
25590      ENDIF
25591C
25592      DP=DBLE(P)
25593      DC=DBLE(C)
25594      DB=DBLE(B)
25595C
25596      DTERM1=1.0D0 - DLOG(1.0D0-DP)*DLOG(DC)/DB
25597      DPPF=DLOG(DTERM1)/DLOG(DC)
25598      PPF=REAL(DPPF)
25599      GOTO9999
25600C
25601 1000 CONTINUE
25602C
25603C     JANUARY 2007: ALTERNATE PARAMETERIZATION
25604C
25605      DK=DBLE(B)
25606      DALPHA=DBLE(C)
25607      IF(DALPHA.LE.0.0D0)THEN
25608        WRITE(ICOUT,1001)
25609        CALL DPWRST('XXX','BUG ')
25610        WRITE(ICOUT,46)REAL(DALPHA)
25611        CALL DPWRST('XXX','BUG ')
25612        GOTO9999
25613      ENDIF
25614      IF(DK.LE.0.0D0)THEN
25615        WRITE(ICOUT,1002)
25616        CALL DPWRST('XXX','BUG ')
25617        WRITE(ICOUT,46)REAL(DK)
25618        CALL DPWRST('XXX','BUG ')
25619        GOTO9999
25620      ENDIF
25621 1001 FORMAT('***** ERROR--THE SECOND ARGUMENT TO GOMPPF ',
25622     1       'IS NON-POSITIVE.')
25623 1002 FORMAT('***** ERROR--THE THIRD ARGUMENT TO GOMPPF ',
25624     1       'IS NON-POSITIVE.')
25625C
25626      IF(P.EQ.0.0)THEN
25627        PPF=0.0
25628        GOTO9999
25629      ENDIF
25630C
25631      DP=DBLE(P)
25632C
25633      DTERM1=1.0D0 - DLOG(1.0D0-DP)*DALPHA/DK
25634      DPPF=DLOG(DTERM1)/DALPHA
25635      PPF=REAL(DPPF)
25636      GOTO9999
25637 9999 CONTINUE
25638      RETURN
25639      END
25640      SUBROUTINE GOMRAN(N,C,B,IGOMDF,ISEED,X)
25641C
25642C     PURPOSE--THIS SUBROUTINE GENERATES A RANDOM SAMPLE OF SIZE N
25643C              FROM THE GOMPERTZ DISTRIBUTION
25644C              WITH SHAPE PARAMETER VALUES = C, B.
25645C     INPUT  ARGUMENTS--N      = THE DESIRED INTEGER NUMBER
25646C                                OF RANDOM NUMBERS TO BE
25647C                                GENERATED.
25648C                     --C  = THE SINGLE PRECISION VALUE OF THE
25649C                                FIRST SHAPE PARAMETER.
25650C                                C SHOULD BE > 1.
25651C                     --B  = THE SINGLE PRECISION VALUE OF THE
25652C                                SECOND SHAPE PARAMETER.
25653C                                B SHOULD BE POSITIVE.
25654C     OUTPUT ARGUMENTS--X      = A SINGLE PRECISION VECTOR
25655C                                (OF DIMENSION AT LEAST N)
25656C                                INTO WHICH THE GENERATED
25657C                                RANDOM SAMPLE WILL BE PLACED.
25658C     OUTPUT--A RANDOM SAMPLE OF SIZE N
25659C             FROM THE GOMPERTZ DISTRIBUTION
25660C             WITH SHAPE PARAMETER VALUES = C AND B.
25661C     PRINTING--NONE UNLESS AN INPUT ARGUMENT ERROR CONDITION EXISTS.
25662C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
25663C                   OF N FOR THIS SUBROUTINE.
25664C                 --C SHOULD BE POSITIVE.
25665C     OTHER DATAPAC   SUBROUTINES NEEDED--UNIRAN.
25666C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
25667C     MODE OF INTERNAL OPERATIONS--SINGLE PRECISION.
25668C     LANGUAGE--ANSI FORTRAN (1977)
25669C     WRITTEN BY--JAMES J. FILLIBEN
25670C                 STATISTICAL ENGINEERING DIVISION
25671C                 INFORMATION TECHNOLOGY LABORATORY
25672C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
25673C                 GAITHERSBURG, MD 20899-8980
25674C                 PHONE--301-975-2855
25675C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
25676C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
25677C     LANGUAGE--ANSI FORTRAN (1977)
25678C     VERSION NUMBER--2001.9
25679C     ORIGINAL VERSION--SEPTEMBER 2001.
25680C     UPDATED         --JANUARY   2007. ALTERNATE PARAMETERIZATION
25681C
25682C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
25683C
25684C---------------------------------------------------------------------
25685C
25686      DIMENSION X(*)
25687C
25688      CHARACTER*4 IGOMDF
25689C
25690C-----COMMON----------------------------------------------------------
25691C
25692      INCLUDE 'DPCOP2.INC'
25693C
25694C-----START POINT-----------------------------------------------------
25695C
25696C     CHECK THE INPUT ARGUMENTS FOR ERRORS
25697C
25698      IF(N.LT.1)THEN
25699        WRITE(ICOUT, 5)
25700        CALL DPWRST('XXX','BUG ')
25701        WRITE(ICOUT,47)N
25702        CALL DPWRST('XXX','BUG ')
25703        GOTO9000
25704      ENDIF
25705    5 FORMAT('***** FATAL ERROR--THE 1ST INPUT ARGUMENT TO THE ',
25706     1'GOMRAN SUBROUTINE IS NON-POSITIVE *****')
25707   47 FORMAT('***** THE VALUE OF THE ARGUMENT IS ',I8,' *****')
25708C
25709C     GENERATE N UNIFORM (0,1) RANDOM NUMBERS;
25710C
25711      CALL UNIRAN(N,ISEED,X)
25712C
25713C     GENERATE N GOMPERTZ DISTRIBUTION RANDOM NUMBERS
25714C     USING THE PERCENT POINT FUNCTION TRANSFORMATION METHOD.
25715C
25716      DO100I=1,N
25717        CALL GOMPPF(X(I),C,B,IGOMDF,XTEMP)
25718        X(I)=XTEMP
25719  100 CONTINUE
25720C
25721 9000 CONTINUE
25722      RETURN
25723      END
25724      DOUBLE PRECISION FUNCTION GOODST(XVALUE)
25725C
25726C   DESCRIPTION:
25727C
25728C      This function calculates the function defined as
25729C
25730C        GOODST(x) = {integral 0 to inf} ( exp(-u*u)/(u+x) ) du
25731C
25732C      The code uses Chebyshev expansions whose coefficients are
25733C      given to 20 decimal places.
25734C
25735C
25736C   ERROR RETURNS:
25737C
25738C      If XVALUE <= 0.0, an error message is printed, and the
25739C      code returns the value 0.0.
25740C
25741C
25742C   MACHINE-DEPENDENT CONSTANTS:
25743C
25744C      NTERM1 - The no. of terms to be used in the array AGOST.
25745C                The recommended value is such that
25746C                    AGOST(NTERM1) < EPS/100,
25747C
25748C      NTERM2 - The no. of terms to be used in the array AGOSTA.
25749C                The recommended value is such that
25750C                    AGOSTA(NTERM2) < EPS/100,
25751C
25752C      XLOW - The value below which f(x) = -(gamma/2) - ln(x)
25753C             to machine precision. The recommended value is
25754C                EPSNEG
25755C
25756C      XHIGH - The value above which f(x) = sqrt(pi)/(2x) to
25757C              machine precision. The recommended value is
25758C                 2 / EPSNEG
25759C
25760C      For values of EPS and EPSNEG refer to the file MACHCON.TXT
25761C
25762C      The machine-dependent constants are computed internally by
25763C      using the D1MACH subroutine.
25764C
25765C
25766C   INTRINSIC FUNCTIONS USED:
25767C
25768C       EXP , LOG
25769C
25770C
25771C   OTHER MISCFUN SUBROUTINES USED:
25772C
25773C          CHEVAL , ERRPRN, D1MACH
25774C
25775C
25776C   AUTHOR:
25777C
25778C      Dr. Allan J. MacLeod,
25779C      Dept. of Mathematics and Statistics,
25780C      University of Paisley,
25781C      High St.,
25782C      Paisley.
25783C      SCOTLAND.
25784C
25785C      (e-mail: macl_ms0@paisley.ac.uk )
25786C
25787C
25788C   LATEST REVISION:
25789C                    23 January, 1996
25790C
25791C
25792      INTEGER NTERM1,NTERM2
25793      DOUBLE PRECISION AGOST(0:28),AGOSTA(0:23),
25794CCCCC1     CHEVAL,FVAL,GAMBY2,HALF,ONE,ONEHUN,RTPIB2,SIX,
25795     1     CHEVAL,FVAL,GAMBY2,HALF,ONEHUN,RTPIB2,SIX,
25796     2     T,TWO,X,XHIGH,XLOW,XVALUE,ZERO
25797CCCCC CHARACTER FNNAME*6,ERRMSG*15
25798C
25799C-----COMMON----------------------------------------------------------
25800C
25801      INCLUDE 'DPCOMC.INC'
25802      INCLUDE 'DPCOP2.INC'
25803C
25804CCCCC DATA FNNAME/'GOODST'/
25805CCCCC DATA ERRMSG/'ARGUMENT <= 0.0'/
25806CCCCC DATA ZERO,HALF,ONE/ 0.0 D 0 , 0.5 D 0 , 1.0 D 0 /
25807      DATA ZERO,HALF/ 0.0D0,0.5D0 /
25808      DATA TWO,SIX/ 2.0 D 0 , 6.0 D 0 /
25809      DATA ONEHUN/100.0 D 0/
25810      DATA GAMBY2/0.28860 78324 50766 43030 D 0/
25811      DATA RTPIB2/0.88622 69254 52758 01365 D 0/
25812      DATA AGOST(0)/  0.63106 56056 03984 46247  D    0/
25813      DATA AGOST(1)/  0.25051 73779 32167 08827  D    0/
25814      DATA AGOST(2)/ -0.28466 20597 90189 40757  D    0/
25815      DATA AGOST(3)/  0.87615 87523 94862 3552   D   -1/
25816      DATA AGOST(4)/  0.68260 22672 21252 724    D   -2/
25817      DATA AGOST(5)/ -0.10811 29544 19225 4677   D   -1/
25818      DATA AGOST(6)/  0.16910 12441 17152 176    D   -2/
25819      DATA AGOST(7)/  0.50272 98462 26151 86     D   -3/
25820      DATA AGOST(8)/ -0.18576 68720 41000 84     D   -3/
25821      DATA AGOST(9)/ -0.42870 36741 68474        D   -5/
25822      DATA AGOST(10)/ 0.10095 98903 20290 5      D   -4/
25823      DATA AGOST(11)/-0.86529 91351 7382         D   -6/
25824      DATA AGOST(12)/-0.34983 87432 0734         D   -6/
25825      DATA AGOST(13)/ 0.64832 78683 494          D   -7/
25826      DATA AGOST(14)/ 0.75759 24985 83           D   -8/
25827      DATA AGOST(15)/-0.27793 54243 62           D   -8/
25828      DATA AGOST(16)/-0.48302 35135              D  -10/
25829      DATA AGOST(17)/ 0.86632 21283              D  -10/
25830      DATA AGOST(18)/-0.39433 9687               D  -11/
25831      DATA AGOST(19)/-0.20952 9625               D  -11/
25832      DATA AGOST(20)/ 0.21501 759                D  -12/
25833      DATA AGOST(21)/ 0.39590 15                 D  -13/
25834      DATA AGOST(22)/-0.69227 9                  D  -14/
25835      DATA AGOST(23)/-0.54829                    D  -15/
25836      DATA AGOST(24)/ 0.17108                    D  -15/
25837      DATA AGOST(25)/ 0.376                      D  -17/
25838      DATA AGOST(26)/-0.349                      D  -17/
25839      DATA AGOST(27)/ 0.7                        D  -19/
25840      DATA AGOST(28)/ 0.6                        D  -19/
25841      DATA AGOSTA(0)/  1.81775 46798 47187 58767  D    0/
25842      DATA AGOSTA(1)/ -0.99211 46570 74409 7467   D   -1/
25843      DATA AGOSTA(2)/ -0.89405 86452 54819 243    D   -2/
25844      DATA AGOSTA(3)/ -0.94955 33127 77267 85     D   -3/
25845      DATA AGOSTA(4)/ -0.10971 37996 67596 65     D   -3/
25846      DATA AGOSTA(5)/ -0.13466 94539 57859 0      D   -4/
25847      DATA AGOSTA(6)/ -0.17274 92743 08265        D   -5/
25848      DATA AGOSTA(7)/ -0.22931 38019 9498         D   -6/
25849      DATA AGOSTA(8)/ -0.31278 44178 918          D   -7/
25850      DATA AGOSTA(9)/ -0.43619 79736 71           D   -8/
25851      DATA AGOSTA(10)/-0.61958 46474 3            D   -9/
25852      DATA AGOSTA(11)/-0.89379 91276              D  -10/
25853      DATA AGOSTA(12)/-0.13065 11094              D  -10/
25854      DATA AGOSTA(13)/-0.19316 6876               D  -11/
25855      DATA AGOSTA(14)/-0.28844 270                D  -12/
25856      DATA AGOSTA(15)/-0.43447 96                 D  -13/
25857      DATA AGOSTA(16)/-0.65951 8                  D  -14/
25858      DATA AGOSTA(17)/-0.10080 1                  D  -14/
25859      DATA AGOSTA(18)/-0.15502                    D  -15/
25860      DATA AGOSTA(19)/-0.2397                     D  -16/
25861      DATA AGOSTA(20)/-0.373                      D  -17/
25862      DATA AGOSTA(21)/-0.58                       D  -18/
25863      DATA AGOSTA(22)/-0.9                        D  -19/
25864      DATA AGOSTA(23)/-0.1                        D  -19/
25865C
25866      XLOW = 0.0
25867      XHIGH = 0.0
25868C
25869C   Start computation
25870C
25871      X = XVALUE
25872C
25873C   Error test
25874C
25875      IF ( X .LE. ZERO ) THEN
25876CCCCC    CALL ERRPRN(FNNAME,ERRMSG)
25877         WRITE(ICOUT,999)
25878         CALL DPWRST('XXX','BUG ')
25879         WRITE(ICOUT,101)X
25880         CALL DPWRST('XXX','BUG ')
25881         GOODST = ZERO
25882         RETURN
25883      ENDIF
25884  999 FORMAT(1X)
25885  101 FORMAT('***** ERROR FROM GOODST--ARGUMENT MUST BE ',
25886     1       'POSITIVE, ARGUMENT = ',G15.7)
25887C
25888C   Compute the machine-dependent constants.
25889C
25890      FVAL = D1MACH(3)
25891      T = FVAL / ONEHUN
25892      IF ( X .LE. TWO ) THEN
25893         DO 10 NTERM1 = 28 , 0 , -1
25894            IF ( ABS(AGOST(NTERM1)) .GT. T ) GOTO 19
25895 10      CONTINUE
25896 19      XLOW = FVAL
25897      ELSE
25898         DO 40 NTERM2 = 23 , 0 , -1
25899            IF ( ABS(AGOSTA(NTERM2)) .GT. T ) GOTO 49
25900 40      CONTINUE
25901 49      XHIGH = TWO / FVAL
25902      ENDIF
25903C
25904C   Computation for 0 < x <= 2
25905C
25906      IF ( X .LE. TWO ) THEN
25907         IF ( X .LT. XLOW ) THEN
25908            GOODST = - GAMBY2 - LOG(X)
25909         ELSE
25910            T = ( X - HALF ) - HALF
25911            GOODST = CHEVAL(NTERM1,AGOST,T) - EXP(-X*X) * LOG(X)
25912         ENDIF
25913      ELSE
25914C
25915C   Computation for x > 2
25916C
25917         FVAL = RTPIB2 / X
25918         IF ( X .GT. XHIGH ) THEN
25919            GOODST = FVAL
25920         ELSE
25921            T = ( SIX - X ) / ( TWO + X )
25922            GOODST = FVAL * CHEVAL(NTERM2,AGOSTA,T)
25923         ENDIF
25924      ENDIF
25925      RETURN
25926      END
25927      DOUBLE PRECISION FUNCTION GR1FUN (DA)
25928C
25929C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE CDF VALUE FOR THE
25930C              GRUBBS TEST.
25931C
25932C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF A
25933C              FUNCTION.  DFZERO IS CALLED BY DPGRU2.
25934C     WRITTEN BY--ALAN HECKERT
25935C                 STATISTICAL ENGINEERING DIVISION
25936C                 INFORMATION TECHNOLOGY LABORATORY
25937C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
25938C                 GAITHERSBUG, MD 20899-8980
25939C                 PHONE--301-975-2899
25940C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
25941C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
25942C     LANGUAGE--ANSI FORTRAN (1977)
25943C     VERSION NUMBER--2019/10
25944C     ORIGINAL VERSION--OCTOBER    2019.
25945C
25946C---------------------------------------------------------------------
25947C
25948      DOUBLE PRECISION DA
25949C
25950      COMMON/GR1COM/AFACT,STATV2,ANU,N
25951C
25952C-----COMMON----------------------------------------------------------
25953C
25954      INCLUDE 'DPCOP2.INC'
25955C
25956C-----START POINT-----------------------------------------------------
25957C
25958C  COMPUTE SOME SUMS
25959C
25960      NM2=N-2
25961      ALPHAT=REAL(1.0D0 - DA)
25962      P2=1.0 - (ALPHAT/REAL(N))/AFACT
25963      CALL TPPF(P2,REAL(NM2),T)
25964      AVAL=(REAL(N-1)/SQRT(REAL(N)))*SQRT(T*T/(REAL(NM2)+T*T))
25965      GR1FUN=STATV2 - AVAL
25966C
25967      RETURN
25968      END
25969      DOUBLE PRECISION FUNCTION GR2FUN (DA)
25970C
25971C     PURPOSE--THIS ROUTINE IS USED IN FINDING THE CDF VALUE FOR THE
25972C              GRUBBS TEST.
25973C
25974C              CALLED BY DFZERO ROUTINE FOR FINDING THE ROOT OF A
25975C              FUNCTION.  DFZERO IS CALLED BY DPGRU2.
25976C     WRITTEN BY--ALAN HECKERT
25977C                 STATISTICAL ENGINEERING DIVISION
25978C                 INFORMATION TECHNOLOGY LABORATORY
25979C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
25980C                 GAITHERSBUG, MD 20899-8980
25981C                 PHONE--301-975-2899
25982C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
25983C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
25984C     LANGUAGE--ANSI FORTRAN (1977)
25985C     VERSION NUMBER--2019/10
25986C     ORIGINAL VERSION--OCTOBER    2019.
25987C
25988C---------------------------------------------------------------------
25989C
25990      DOUBLE PRECISION DA
25991C
25992      COMMON/GR1COM/AFACT,STATV2,ANU,N
25993C
25994C-----COMMON----------------------------------------------------------
25995C
25996      INCLUDE 'DPCOP2.INC'
25997C
25998C-----START POINT-----------------------------------------------------
25999C
26000C  COMPUTE SOME SUMS
26001C
26002      ALPHAT=REAL(1.0D0 - DA)
26003      P2=1.0 - (ALPHAT/REAL(N))/AFACT
26004      CALL TPPF(P2,ANU,T)
26005      AVAL=T*SQRT(1.0 - 1.0/REAL(N))
26006      GR2FUN=STATV2 - AVAL
26007C
26008      RETURN
26009      END
26010      SUBROUTINE grat1(a,x,r,p,q,eps)
26011C     .. Scalar Arguments ..
26012      DOUBLE PRECISION a,eps,p,q,r,x
26013C     ..
26014C     .. Local Scalars ..
26015      DOUBLE PRECISION a2n,a2nm1,am0,an,an0,b2n,b2nm1,c,cma,g,h,j,l,sum,
26016     +                 t,tol,w,z
26017C     ..
26018C     .. External Functions ..
26019CCCCC DOUBLE PRECISION erf,erfc1,gam1,rexp
26020CCCCC EXTERNAL erf,erfc1,gam1,rexp
26021      DOUBLE PRECISION erfdp,erfc1,gam1,rexp
26022      EXTERNAL erfdp,erfc1,gam1,rexp
26023C     ..
26024C     .. Intrinsic Functions ..
26025      INTRINSIC abs,dlog,exp,sqrt
26026C     ..
26027C     .. Executable Statements ..
26028C-----------------------------------------------------------------------
26029C        EVALUATION OF THE INCOMPLETE GAMMA RATIO FUNCTIONS
26030C                      P(A,X) AND Q(A,X)
26031C
26032C     IT IS ASSUMED THAT A .LE. 1.  EPS IS THE TOLERANCE TO BE USED.
26033C     THE INPUT ARGUMENT R HAS THE VALUE E**(-X)*X**A/GAMMA(A).
26034C-----------------------------------------------------------------------
26035      IF (a*x.EQ.0.0D0) GO TO 120
26036      IF (a.EQ.0.5D0) GO TO 100
26037      IF (x.LT.1.1D0) GO TO 10
26038      GO TO 60
26039C
26040C             TAYLOR SERIES FOR P(A,X)/X**A
26041C
26042   10 an = 3.0D0
26043      c = x
26044      sum = x/ (a+3.0D0)
26045      tol = 0.1D0*eps/ (a+1.0D0)
26046   20 an = an + 1.0D0
26047      c = -c* (x/an)
26048      t = c/ (a+an)
26049      sum = sum + t
26050      IF (abs(t).GT.tol) GO TO 20
26051      j = a*x* ((sum/6.0D0-0.5D0/ (a+2.0D0))*x+1.0D0/ (a+1.0D0))
26052C
26053      z = a*dlog(x)
26054      h = gam1(a)
26055      g = 1.0D0 + h
26056      IF (x.LT.0.25D0) GO TO 30
26057      IF (a.LT.x/2.59D0) GO TO 50
26058      GO TO 40
26059
26060   30 IF (z.GT.-.13394D0) GO TO 50
26061C
26062   40 w = exp(z)
26063      p = w*g* (0.5D0+ (0.5D0-j))
26064      q = 0.5D0 + (0.5D0-p)
26065      RETURN
26066C
26067   50 l = rexp(z)
26068      w = 0.5D0 + (0.5D0+l)
26069      q = (w*j-l)*g - h
26070      IF (q.LT.0.0D0) GO TO 90
26071      p = 0.5D0 + (0.5D0-q)
26072      RETURN
26073C
26074C              CONTINUED FRACTION EXPANSION
26075C
26076   60 a2nm1 = 1.0D0
26077      a2n = 1.0D0
26078      b2nm1 = x
26079      b2n = x + (1.0D0-a)
26080      c = 1.0D0
26081   70 a2nm1 = x*a2n + c*a2nm1
26082      b2nm1 = x*b2n + c*b2nm1
26083      am0 = a2nm1/b2nm1
26084      c = c + 1.0D0
26085      cma = c - a
26086      a2n = a2nm1 + cma*a2n
26087      b2n = b2nm1 + cma*b2n
26088      an0 = a2n/b2n
26089      IF (abs(an0-am0).GE.eps*an0) GO TO 70
26090      q = r*an0
26091      p = 0.5D0 + (0.5D0-q)
26092      RETURN
26093C
26094C                SPECIAL CASES
26095C
26096   80 p = 0.0D0
26097      q = 1.0D0
26098      RETURN
26099C
26100   90 p = 1.0D0
26101      q = 0.0D0
26102      RETURN
26103C
26104  100 IF (x.GE.0.25D0) GO TO 110
26105      p = erfdp(sqrt(x))
26106      q = 0.5D0 + (0.5D0-p)
26107      RETURN
26108
26109  110 q = erfc1(0,sqrt(x))
26110      p = 0.5D0 + (0.5D0-q)
26111      RETURN
26112C
26113  120 IF (x.LE.a) GO TO 80
26114      GO TO 90
26115
26116      END
26117      SUBROUTINE GRDEP2(X1,Y1,X2,Y2,DEL,X3,Y3,X4,Y4)
26118C
26119C     PURPOSE--GIVEN THE LINE SEGMENT FROM (X1,Y1) TO (X2,Y2)
26120C              DETERMINE THE COORDINATES (X3,Y3) AND X4,Y4)
26121C              OF A PARALLEL LINE SEGMENT AT A DISTANCE OF DEL UNITS
26122C              AWAY (ORTHOGONALLY) IN A COUNTER-CLOCKWISE ANGLE.
26123C
26124      DELX=X2-X1
26125      DELY=Y2-Y1
26126      RSQ=DELX**2+DELY**2
26127C
26128      R=0.0
26129      IF(RSQ.GT.0.0)R=SQRT(RSQ)
26130C
26131      FACTOR=0.0
26132      IF(R.GT.0.0)FACTOR=DEL/R
26133C
26134      DELX2=FACTOR*DELY
26135      DELY2=FACTOR*DELX
26136C
26137      X3=X1-DELX2
26138      Y3=Y1+DELY2
26139C
26140      X4=X2-DELX2
26141      Y4=Y2+DELY2
26142C
26143C               *****************
26144C               **  STEP 90--  **
26145C               **  EXIT       **
26146C               *****************
26147C
26148      RETURN
26149      END
26150      SUBROUTINE GPAFUN (N, X, FVEC, IFLAG, XDATA, NOBS)
26151C
26152C     PURPOSE--THIS ROUTINE COMPUTES THE FUNCTIONS FOR THE
26153C              GENERALIZED PARETO MAXIMUM LIKELIHOOD EQUATIONS.
26154C
26155C              [1 + (1/N)*SUM[i=1 to N][LOG(1 - Chat*X(i)/Khat]*
26156C                 [(1/N)*SUM[i=1 to N][1/(1 + Chat*X(i)/Khat)] - 1 = 0
26157C                 SUM[I=1 TO N][LOG((X(I)-A)/(B-A))] = 0
26158C
26159C              Chat + (1/N)*SUM[i=1 to N][LOG(1 - Chat*X(i)/Khat] = 0
26160C
26161C              WITH C AND K DENOTING THE SHAPE PARAMETERS,
26162C              RESPECTIVELY.
26163C
26164C              NOTE THAT MAXIMUM LIKELIHOOD ESTIMATION ONLY WORKS
26165C              WELL IF C < 1/2.
26166C
26167C              CALLED BY DNSQE ROUTINE FOR SOLVING SIMULTANEOUS
26168C              NONLINEAR EQUATIONS.  NOTE THAT THE CALLING SEQUENCE
26169C              DID NOT ACCOMODATE A DATA ARRAY (AND ASSCIATED NUMBER OF
26170C              OBSERVATIONS), SO THESE WERE ADDED TO THE CALL LIST.
26171C     EXAMPLE--GENERALIZED PARETO MAXIMUM LIKELIHOOD Y
26172C     REFERENCE--JOHNSON, KOTZ, AND BALAKRISHNAN (1994).  "CONTINUOUS
26173C                UNIVARIATE DISTRIBUTIONS: VOLUME 1", SECOND EDITION,
26174C                JOHN WILEY, PP. 614-619.
26175C     WRITTEN BY--JAMES J. FILLIBEN
26176C                 STATISTICAL ENGINEERING DIVISION
26177C                 INFORMATION TECHNOLOGY LABORATORY
26178C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
26179C                 GAITHERSBUG, MD 20899-8980
26180C                 PHONE--301-975-2855
26181C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
26182C           OF THE NATIONAL BUREAU OF STANDARDS.
26183C     LANGUAGE--ANSI FORTRAN (1977)
26184C     VERSION NUMBER--2003/11
26185C     ORIGINAL VERSION--NOVEMBER  2003.
26186C
26187C---------------------------------------------------------------------
26188C
26189      DOUBLE PRECISION X(*)
26190      DOUBLE PRECISION FVEC(*)
26191      REAL XDATA(*)
26192C
26193      DOUBLE PRECISION DN
26194      DOUBLE PRECISION DX
26195      DOUBLE PRECISION DC
26196      DOUBLE PRECISION DK
26197      DOUBLE PRECISION DSUM1
26198      DOUBLE PRECISION DSUM2
26199C
26200C-----COMMON----------------------------------------------------------
26201C
26202      INCLUDE 'DPCOP2.INC'
26203C
26204C-----START POINT-----------------------------------------------------
26205C
26206C  COMPUTE SOME SUMS
26207C
26208      N=2
26209      IFLAG=0
26210C
26211      DC=X(1)
26212      DK=X(2)
26213      DN=DBLE(NOBS)
26214C
26215      DSUM1=0.0D0
26216      DSUM2=0.0D0
26217C
26218      DO200I=1,NOBS
26219        DX=DBLE(XDATA(I))
26220        DSUM1=DSUM1 + DLOG(1.0D0 - DC*DX/DK)
26221        DSUM2=DSUM2 + 1.0D0/(1.0D0 + DC*DX/DK)
26222  200 CONTINUE
26223C
26224      FVEC(1)=(1.0D0 + (1.0D0/DN)*DSUM1)*((1.0D0/DN)*DSUM2) - 1.0D0
26225      FVEC(2)=DC + (1.0D0/DN)*DSUM1
26226C
26227      RETURN
26228      END
26229      SUBROUTINE GRDEPL(PX,PY,NP,DEL,PX3,PY3,NP3)
26230C
26231C     PURPOSE--DETERMINE COORDINATES OF TRACE PARALLEL
26232C              TO TRACE IN (PX(.),PY(.)) AT AN
26233C              ORTHOGONAL DISTANCE OF DEL UNITS (0.0 TO 100.0)
26234C
26235C     UPDATED--MAY 1989 INCREASE THE DIMENSION CHECK FOR ARRAYS
26236C     UPDATED         --JUNE      1990. TEMPORARY ARRAYS TO GARBAGE COMMON
26237C     UPDATED         --SEPTEMBER 1993. DO DEGENERATE (NP = 1) CASE
26238C     UPDATED         --JULY      2019. TWEAK SCRATCH STORAGE
26239C
26240C---------------------------------------------------------------------
26241C
26242      INCLUDE 'DPCOPA.INC'
26243C
26244      DIMENSION PX(*)
26245      DIMENSION PY(*)
26246      DIMENSION PX3(*)
26247      DIMENSION PY3(*)
26248C
26249      DIMENSION PXPRE(MAXPOP)
26250      DIMENSION PYPRE(MAXPOP)
26251C
26252      DIMENSION PXPOST(MAXPOP)
26253      DIMENSION PYPOST(MAXPOP)
26254      INCLUDE 'DPCOZZ.INC'
26255      EQUIVALENCE (GARBAG(IGARG6),PXPRE(1))
26256      EQUIVALENCE (GARBAG(IGARG7),PYPRE(1))
26257      EQUIVALENCE (GARBAG(IGARG8),PXPOST(1))
26258      EQUIVALENCE (GARBAG(IGARG9),PYPOST(1))
26259C
26260C-----COMMON----------------------------------------------------------
26261C
26262      INCLUDE 'DPCOBE.INC'
26263      INCLUDE 'DPCOP2.INC'
26264C
26265C-----START POINT-----------------------------------------------------
26266C
26267      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DEPL')GOTO90
26268      WRITE(ICOUT,999)
26269  999 FORMAT(1X)
26270      CALL DPWRST('XXX','BUG ')
26271      WRITE(ICOUT,51)
26272   51 FORMAT('***** AT THE BEGINNING OF GRDEPL--')
26273      CALL DPWRST('XXX','BUG ')
26274      WRITE(ICOUT,52)DEL
26275   52 FORMAT('DEL = ',E15.7)
26276      CALL DPWRST('XXX','BUG ')
26277      WRITE(ICOUT,54)NP
26278   54 FORMAT('NP = ',I8)
26279      CALL DPWRST('XXX','BUG ')
26280      DO55I=1,NP
26281      WRITE(ICOUT,56)I,PX(I),PY(I)
26282   56 FORMAT('I,PX(I),PY(I) = ',
26283     1I8,2E15.7)
26284      CALL DPWRST('XXX','BUG ')
26285   55 CONTINUE
26286      WRITE(ICOUT,59)IBUGG4,ISUBG4,IERRG4
26287   59 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
26288      CALL DPWRST('XXX','BUG ')
26289   90 CONTINUE
26290C
26291CCCCC THE FOLLOWING 6 LINES WERE ADDED          SEPTEMBER 1993
26292CCCCC TO HANDLE THE DEGENERATE NP = 1 CASE      SEPTEMBER 1993
26293      IF(NP.LE.1)THEN
26294         PX3(1)=PX(1)
26295         PY3(1)=PY(1)
26296         NP3=NP
26297         GOTO9000
26298      ENDIF
26299C
26300CCCCC THE FOLLOWING LINE WAS REPLACED MAY 1989
26301CCCCC BY THE SUCCEEDING LINE          MAY 1989
26302CCCCC IF(NP.LE.1000)GOTO1090
26303      IF(NP.LE.MAXPOP)GOTO1090
26304      WRITE(ICOUT,1011)
26305 1011 FORMAT('***** ERROR IN GRDEPL--')
26306      CALL DPWRST('XXX','BUG ')
26307      WRITE(ICOUT,1012)
26308 1012 FORMAT('      NP HAS JUST EXCEEDED ARRAY DIMENSION')
26309      CALL DPWRST('XXX','BUG ')
26310      WRITE(ICOUT,1013)NP
26311 1013 FORMAT('      NP = ',I8)
26312      CALL DPWRST('XXX','BUG ')
26313      WRITE(ICOUT,1014)
26314 1014 FORMAT('      FIX DIMENSION OF ARRAYS IN GRDEPL')
26315      CALL DPWRST('XXX','BUG ')
26316      IERRG4='YES'
26317      GOTO9000
26318 1090 CONTINUE
26319C
26320      NPM1=NP-1
26321      DO1100I=1,NPM1
26322      IP1=I+1
26323      X1=PX(I)
26324      Y1=PY(I)
26325      X2=PX(IP1)
26326      Y2=PY(IP1)
26327      CALL GRDEP2(X1,Y1,X2,Y2,DEL,X3,Y3,X4,Y4)
26328      PXPOST(I)=X3
26329      PYPOST(I)=Y3
26330      PXPRE(IP1)=X4
26331      PYPRE(IP1)=Y4
26332 1100 CONTINUE
26333      PXPOST(NP)=PXPRE(NP)
26334      PYPOST(NP)=PYPRE(NP)
26335      PXPRE(1)=PXPOST(1)
26336      PYPRE(1)=PYPOST(1)
26337C
26338C               ******************************************
26339C               **  STEP XX--                           **
26340C               **  TREAT THE INTERMEDIATE POINTS CASE  **
26341C               ******************************************
26342C
26343      DO1200I=2,NPM1
26344      IM1=I-1
26345      IP1=I+1
26346C
26347      DELX1=PX(I)-PX(IM1)
26348      DELY1=PY(I)-PY(IM1)
26349      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26350     1WRITE(ICOUT,1111)I,IM1,PX(IM1),PX(I)
26351 1111 FORMAT('I,IM1,PX(IM1),PX(I) = ',2I8,2E15.7)
26352      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26353     1CALL DPWRST('XXX','BUG ')
26354      SLOPE1=CPUMAX
26355      IF(ABS(DELX1).GE.0.000001)SLOPE1=DELY1/DELX1
26356      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26357     1WRITE(ICOUT,1112)DELX1,SLOPE1
26358 1112 FORMAT('DELX1,SLOPE1 = ',2E15.7)
26359      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26360     1CALL DPWRST('XXX','BUG ')
26361C
26362      DELX2=PX(IP1)-PX(I)
26363      DELY2=PY(IP1)-PY(I)
26364      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26365     1WRITE(ICOUT,1121)I,IP1,PX(I),PX(IP1)
26366 1121 FORMAT('I,IP1,PX(I),PX(IP1) = ',2I8,2E15.7)
26367      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26368     1CALL DPWRST('XXX','BUG ')
26369      SLOPE2=CPUMAX
26370      IF(ABS(DELX2).GE.0.000001)SLOPE2=DELY2/DELX2
26371      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26372     1WRITE(ICOUT,1122)DELX2,SLOPE2
26373 1122 FORMAT('DELX2,SLOPE2 = ',2E15.7)
26374      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26375     1CALL DPWRST('XXX','BUG ')
26376C
26377      IF(SLOPE1.EQ.SLOPE2)GOTO1210
26378      GOTO1220
26379C
26380 1210 CONTINUE
26381      PX3(I)=PXPRE(I)
26382      PY3(I)=PYPRE(I)
26383      GOTO1200
26384C
26385 1220 CONTINUE
26386      IF(SLOPE1.EQ.CPUMAX)GOTO1221
26387      IF(SLOPE2.EQ.CPUMAX)GOTO1222
26388      GOTO1223
26389 1221 CONTINUE
26390      PX3(I)=PXPRE(I)
26391      PY3(I)=PYPOST(I)
26392      GOTO1229
26393 1222 CONTINUE
26394      PX3(I)=PXPOST(I)
26395      PY3(I)=PYPRE(I)
26396      GOTO1229
26397 1223 CONTINUE
26398      DENOM=SLOPE2-SLOPE1
26399      ANUM=PYPRE(I)-PYPOST(I)-SLOPE1*PXPRE(I)+SLOPE2*PXPOST(I)
26400      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26401     1WRITE(ICOUT,1224)SLOPE1,SLOPE2,DENOM
26402 1224 FORMAT('SLOPE1,SLOPE2,DENOM = ',3E15.7)
26403      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26404     1CALL DPWRST('XXX','BUG ')
26405      PX3(I)=ANUM/DENOM
26406      PY3(I)=PYPRE(I)+SLOPE1*(PX3(I)-PXPRE(I))
26407 1229 CONTINUE
26408C
26409 1200 CONTINUE
26410C
26411C               *******************************************
26412C               **  STEP XX--                            **
26413C               **  TREAT THE FIRST AND LAST POINT CASE  **
26414C               *******************************************
26415C
26416      IF(PX(1).EQ.PX(NP).AND.PY(1).EQ.PY(NP))GOTO2100
26417      PX3(1)=PXPOST(1)
26418      PY3(1)=PYPOST(1)
26419      PX3(NP)=PXPRE(NP)
26420      PY3(NP)=PYPRE(NP)
26421      GOTO2900
26422C
26423 2100 CONTINUE
26424      NPM1=NP-1
26425      DELX1=PX(NP)-PX(NPM1)
26426      DELY1=PY(NP)-PY(NPM1)
26427      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26428     1WRITE(ICOUT,2111)NPM1,NP,PX(NPM1),PX(NP)
26429 2111 FORMAT('NPM1,NP,PX(NPM1),PX(NP) = ',2I8,2E15.7)
26430      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26431     1CALL DPWRST('XXX','BUG ')
26432      SLOPE1=CPUMAX
26433      IF(ABS(DELX1).GE.0.000001)SLOPE1=DELY1/DELX1
26434      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26435     1WRITE(ICOUT,2112)DELX1,SLOPE1
26436 2112 FORMAT('DELX1,SLOPE1 = ',2E15.7)
26437      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26438     1CALL DPWRST('XXX','BUG ')
26439C
26440      I=1
26441      IP1=I+1
26442      DELX2=PX(IP1)-PX(I)
26443      DELY2=PY(IP1)-PY(I)
26444      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26445     1WRITE(ICOUT,2121)I,IP1,PX(I),PX(IP1)
26446 2121 FORMAT('I,IP1,PX(I),PX(IP1) = ',2I8,2E15.7)
26447      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26448     1CALL DPWRST('XXX','BUG ')
26449      SLOPE2=CPUMAX
26450      IF(ABS(DELX2).GE.0.000001)SLOPE2=DELY2/DELX2
26451      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26452     1WRITE(ICOUT,2122)DELX2,SLOPE2
26453 2122 FORMAT('DELX2,SLOPE2 = ',2E15.7)
26454      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26455     1CALL DPWRST('XXX','BUG ')
26456C
26457      IF(SLOPE1.EQ.SLOPE2)GOTO2210
26458      GOTO2220
26459C
26460 2210 CONTINUE
26461      PX3(1)=PXPRE(NP)
26462      PY3(1)=PYPRE(NP)
26463      PX3(NP)=PX3(1)
26464      PY3(NP)=PY3(1)
26465      GOTO2200
26466C
26467 2220 CONTINUE
26468      IF(SLOPE1.EQ.CPUMAX)GOTO2221
26469      IF(SLOPE2.EQ.CPUMAX)GOTO2222
26470      GOTO2223
26471 2221 CONTINUE
26472      PX3(1)=PXPRE(NP)
26473      PY3(1)=PYPOST(1)
26474      PX3(NP)=PX3(1)
26475      PY3(NP)=PY3(1)
26476      GOTO2229
26477 2222 CONTINUE
26478      PX3(1)=PXPOST(1)
26479      PY3(1)=PYPRE(NP)
26480      PX3(NP)=PX3(1)
26481      PY3(NP)=PY3(1)
26482      GOTO2229
26483 2223 CONTINUE
26484      DENOM=SLOPE2-SLOPE1
26485      ANUM=PYPRE(1)-PYPOST(1)-SLOPE1*PXPRE(1)+SLOPE2*PXPOST(1)
26486      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26487     1WRITE(ICOUT,2224)SLOPE1,SLOPE2,DENOM
26488 2224 FORMAT('SLOPE1,SLOPE2,DENOM = ',3E15.7)
26489      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DEPL')
26490     1CALL DPWRST('XXX','BUG ')
26491      PX3(1)=ANUM/DENOM
26492      PY3(1)=PYPRE(1)+SLOPE1*(PX3(1)-PXPRE(1))
26493      PX3(NP)=PX3(1)
26494      PY3(NP)=PY3(1)
26495 2229 CONTINUE
26496C
26497 2200 CONTINUE
26498C
26499 2900 CONTINUE
26500      NP3=NP
26501C
26502C               *****************
26503C               **  STEP 90--  **
26504C               **  EXIT       **
26505C               *****************
26506C
26507 9000 CONTINUE
26508      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DEPL')GOTO9090
26509      WRITE(ICOUT,999)
26510      CALL DPWRST('XXX','BUG ')
26511      WRITE(ICOUT,9011)
26512 9011 FORMAT('***** AT THE END       OF GRDEPL--')
26513      CALL DPWRST('XXX','BUG ')
26514      WRITE(ICOUT,9012)DEL
26515 9012 FORMAT('DEL = ',E15.7)
26516      CALL DPWRST('XXX','BUG ')
26517      WRITE(ICOUT,9014)NP
26518 9014 FORMAT('NP = ',I8)
26519      CALL DPWRST('XXX','BUG ')
26520      DO9015I=1,NP
26521      WRITE(ICOUT,9016)I,PXPRE(I),PYPRE(I),PXPOST(I),PYPOST(I)
26522 9016 FORMAT('I,PXPRE(I),PYPRE(I),PXPOST(I),PYPOST(I) = ',
26523     1I8,4E15.7)
26524      CALL DPWRST('XXX','BUG ')
26525 9015 CONTINUE
26526      DO9025I=1,NP
26527      WRITE(ICOUT,9026)I,PX(I),PY(I),PX3(I),PY3(I)
26528 9026 FORMAT('I,PX(I),PY(I),PX3(I),PY3(I) = ',
26529     1I8,4E15.7)
26530      CALL DPWRST('XXX','BUG ')
26531 9025 CONTINUE
26532      WRITE(ICOUT,9029)IBUGG4,ISUBG4,IERRG4
26533 9029 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
26534      CALL DPWRST('XXX','BUG ')
26535 9090 CONTINUE
26536C
26537      RETURN
26538      END
26539      SUBROUTINE GRDETL(ICTEXT,NCTEXT,
26540     1IFONT,IDIR,ANGLE,
26541     1JFONT,JDIR,ANGLE2,
26542     1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
26543     1JSIZE,
26544     1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
26545     1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
26546     1PXLEC,PXLECG,PYLEC,PYLECG)
26547C
26548C     PURPOSE--FOR A SPECIFIC GRAPHICS DEVICE,
26549C              AND FOR A GIVEN FONT AND DIRECTION,
26550C              DETERMINE THE LENGTH OF THE TEXT STRING IN THE
26551C              CHARACTER VECTOR ICTEXT(.),
26552C              WHICH CONSISTS OF NCTEXT CHARACTERS.
26553C     NOTE--THE LEGNTH IS IN STANDARDIZED COORDINATES
26554C           THAT IS, 0.0 TO 100.0.
26555C
26556C     WRITTEN BY--JAMES J. FILLIBEN
26557C                 STATISTICAL ENGINEERING DIVISION
26558C                 INFORMATION TECHNOLOGY LABORATORY
26559C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
26560C                 GAITHERSBURG, MD 20899-8980
26561C                 PHONE--301-921-3651
26562C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
26563C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
26564C     LANGUAGE--ANSI FORTRAN (1977)
26565C     VERSION NUMBER--83.6
26566C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--MAY       1983.
26567C
26568C-----NON-COMMON VARIABLES (GRAPHICS)-------------------------------------------
26569C
26570C
26571      CHARACTER*4 ICTEXT
26572      CHARACTER*4 IFONT
26573      CHARACTER*4 IDIR
26574C
26575      DIMENSION ICTEXT(*)
26576C
26577C-----COMMON----------------------------------------------------------
26578C
26579      INCLUDE 'DPCOGR.INC'
26580      INCLUDE 'DPCOBE.INC'
26581      INCLUDE 'DPCOP2.INC'
26582C
26583C-----START POINT-----------------------------------------------------
26584C
26585      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DETL')GOTO90
26586      WRITE(ICOUT,999)
26587  999 FORMAT(1X)
26588      CALL DPWRST('XXX','BUG ')
26589      WRITE(ICOUT,51)
26590   51 FORMAT('***** AT THE BEGINNING OF GRDETL--')
26591      CALL DPWRST('XXX','BUG ')
26592      WRITE(ICOUT,54)NCTEXT
26593   54 FORMAT('NCTEXT = ',I8)
26594      CALL DPWRST('XXX','BUG ')
26595      WRITE(ICOUT,55)(ICTEXT(I),I=1,MIN(25,NCTEXT))
26596   55 FORMAT('(ICTEXT(I),I=1,NCTEXT) = ',25A4)
26597      CALL DPWRST('XXX','BUG ')
26598      WRITE(ICOUT,61)IFONT,JFONT
26599   61 FORMAT('IFONT,JFONT= ',A4,I8)
26600      CALL DPWRST('XXX','BUG ')
26601      WRITE(ICOUT,62)IDIR,JDIR
26602   62 FORMAT('IDIR,JDIR= ',A4,I8)
26603      CALL DPWRST('XXX','BUG ')
26604      WRITE(ICOUT,64)ANGLE,ANGLE2
26605   64 FORMAT('ANGLE,ANGLE2= ',E15.7,E15.7)
26606      CALL DPWRST('XXX','BUG ')
26607      WRITE(ICOUT,67)PHEIGH,JHEIG2,PHEIG2
26608   67 FORMAT('PHEIGH,JHEIG2,PHEIG2= ',E15.7,I8,E15.7)
26609      CALL DPWRST('XXX','BUG ')
26610      WRITE(ICOUT,68)PWIDTH,JWIDT2,PWIDT2
26611   68 FORMAT('PWIDTH,JWIDT2,PWIDT2= ',E15.7,I8,E15.7)
26612      CALL DPWRST('XXX','BUG ')
26613      WRITE(ICOUT,69)PVEGAP,JVEGA2,PVEGA2
26614   69 FORMAT('PVEGAP,JVEGA2,PVEGA2= ',E15.7,I8,E15.7)
26615      CALL DPWRST('XXX','BUG ')
26616      WRITE(ICOUT,70)PHOGAP,JHOGA2,PHOGA2
26617   70 FORMAT('PHOGAP,JHOGA2,PHOGA2= ',E15.7,I8,E15.7)
26618      CALL DPWRST('XXX','BUG ')
26619      WRITE(ICOUT,71)JSIZE
26620   71 FORMAT('JSIZE= ',I8)
26621      CALL DPWRST('XXX','BUG ')
26622      WRITE(ICOUT,73)PXLEC,PXLECG
26623   73 FORMAT('PXLEC,PXLECG= ',E15.7,E15.7)
26624      CALL DPWRST('XXX','BUG ')
26625      WRITE(ICOUT,74)PYLEC,PYLECG
26626   74 FORMAT('PYLEC,PYLECG= ',E15.7,E15.7)
26627      CALL DPWRST('XXX','BUG ')
26628      WRITE(ICOUT,79)IBUGG4,ISUBG4,IERRG4
26629   79 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
26630      CALL DPWRST('XXX','BUG ')
26631   90 CONTINUE
26632C
26633C               *********************************
26634C               **  STEP 1--                   **
26635C               **  CALL THE APPROPRIATE CASE  **
26636C               **  AS DICTATED BY THE         **
26637C               **  FONT AND DIRECTION         **
26638C               *********************************
26639C
26640      IF(IFONT.EQ.'TEKT')GOTO1100
26641      GOTO1200
26642C
26643C               ****************************************
26644C               **  STEP 2--                          **
26645C               **  TREAT THE DEFAULT FONT            **
26646C               **  (= TEKTRONIX HARDWARE-GENERATED)  **
26647C               ****************************************
26648C
26649 1100 CONTINUE
26650      IF(IDIR.EQ.'HORI')GOTO1110
26651      IF(IDIR.EQ.'VERT')GOTO1120
26652      GOTO1130
26653C
26654C               **************************************
26655C               **  STEP 2.1--                      **
26656C               **  TREAT THE HORIZONTAL DIRECTION  **
26657C               **************************************
26658C
26659 1110 CONTINUE
26660      CALL GRDETH(ICTEXT,NCTEXT,
26661     1IFONT,IDIR,ANGLE,
26662     1JFONT,JDIR,ANGLE2,
26663     1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
26664     1JSIZE,
26665     1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
26666     1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
26667     1PXLEC,PXLECG,PYLEC,PYLECG)
26668      GOTO9000
26669C
26670C               ************************************
26671C               **  STEP 2.2--                    **
26672C               **  TREAT THE VERTICAL DIRECTION  **
26673C               ************************************
26674C
26675 1120 CONTINUE
26676      CALL GRDETV(ICTEXT,NCTEXT,
26677     1IFONT,IDIR,ANGLE,
26678     1JFONT,JDIR,ANGLE2,
26679     1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
26680     1JSIZE,
26681     1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
26682     1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
26683     1PXLEC,PXLECG,PYLEC,PYLECG)
26684      GOTO9000
26685C
26686C               ***********************************
26687C               **  STEP 2.3--                   **
26688C               **  TREAT THE GENERAL DIRECTION  **
26689C               ***********************************
26690C
26691 1130 CONTINUE
26692      GOTO9000
26693C
26694C               ******************************
26695C               **  STEP 3--                **
26696C               **  TREAT THE GENERAL FONT  **
26697C               **  (SOFTWARE-GENERATED)    **
26698C               ******************************
26699C
26700 1200 CONTINUE
26701      IF(IDIR.EQ.'HORI')GOTO1210
26702      IF(IDIR.EQ.'VERT')GOTO1220
26703      GOTO1230
26704C
26705C               **************************************
26706C               **  STEP 3.1--                      **
26707C               **  TREAT THE HORIZONTAL DIRECTION  **
26708C               **************************************
26709C
26710 1210 CONTINUE
26711CCCCC CALL GRDETG(ICTEXT,NCTEXT,
26712CCCCC1IFONT,IDIR,ANGLE,
26713CCCCC1JFONT,JDIR,ANGLE2,
26714CCCCC1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
26715CCCCC1JSIZE,
26716CCCCC1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
26717CCCCC1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
26718CCCCC1PXLEC,PXLECG,PYLEC,PYLECG)
26719      GOTO9000
26720C
26721C               ************************************
26722C               **  STEP 3.2--                    **
26723C               **  TREAT THE VERTICAL DIRECTION  **
26724C               ************************************
26725C
26726 1220 CONTINUE
26727CCCCC CALL GRDETG(ICTEXT,NCTEXT,
26728CCCCC1IFONT,IDIR,ANGLE,
26729CCCCC1JFONT,JDIR,ANGLE2,
26730CCCCC1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
26731CCCCC1JSIZE,
26732CCCCC1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
26733CCCCC1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
26734CCCCC1PXLEC,PXLECG,PYLEC,PYLECG)
26735      GOTO9000
26736C
26737C               ***********************************
26738C               **  STEP 3.3--                   **
26739C               **  TREAT THE GENERAL DIRECTION  **
26740C               ***********************************
26741C
26742 1230 CONTINUE
26743CCCCC CALL GRDETG(ICTEXT,NCTEXT,
26744CCCCC1IFONT,IDIR,ANGLE,
26745CCCCC1JFONT,JDIR,ANGLE2,
26746CCCCC1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
26747CCCCC1JSIZE,
26748CCCCC1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
26749CCCCC1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
26750CCCCC1PXLEC,PXLECG,PYLEC,PYLECG)
26751      GOTO9000
26752C
26753C               *****************
26754C               **  STEP 90--  **
26755C               **  EXIT       **
26756C               *****************
26757C
26758 9000 CONTINUE
26759      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DETL')GOTO9090
26760      WRITE(ICOUT,999)
26761      CALL DPWRST('XXX','BUG ')
26762      WRITE(ICOUT,9011)
26763 9011 FORMAT('***** AT THE END       OF GRDETL--')
26764      CALL DPWRST('XXX','BUG ')
26765      WRITE(ICOUT,9033)PXLEC,PXLECG
26766 9033 FORMAT('PXLEC,PXLECG= ',E15.7,E15.7)
26767      CALL DPWRST('XXX','BUG ')
26768      WRITE(ICOUT,9034)PYLEC,PYLECG
26769 9034 FORMAT('PYLEC,PYLECG= ',E15.7,E15.7)
26770      CALL DPWRST('XXX','BUG ')
26771      WRITE(ICOUT,9039)IBUGG4,ISUBG4,IERRG4
26772 9039 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
26773      CALL DPWRST('XXX','BUG ')
26774 9090 CONTINUE
26775C
26776      RETURN
26777      END
26778      SUBROUTINE GRDRBP(PX,PY,NP,PXSPA,PYSPA,IFACTO,
26779     1IHORPA,IVERPA,IDUPPA,IDDOPA,
26780     1IPATT2,PTHICK,ICOL)
26781C  ABOVE LINE ADDED SEPTEMBER, 1987
26782C
26783C
26784C     PURPOSE--FOR A GENERAL GRAPHICS DEVICE,
26785C              DRAW A PATTERN WITHIN A BOX
26786C              THE PATTERN MAY BE ANY EVENLY-SPACED COMBINATION OF
26787C              HORIZONTAL, VERTICAL, AND/OR DIAGONAL PATTERNS
26788C     NOTE--THE COORDINATES IN (PX(.),PY(.)) ARE IN
26789C           STANDARDIZED (0.0 TO 100.0) UNITS.
26790C     NOTE--THERE ARE NP SUCH COORDINATE PAIRS.
26791C
26792C     WRITTEN BY--JAMES J. FILLIBEN
26793C                 STATISTICAL ENGINEERING DIVISION
26794C                 INFORMATION TECHNOLOGY LABORATORY
26795C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
26796C                 GAITHERSBURG, MD 20899-8980
26797C                 PHONE--301-921-3651
26798C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
26799C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
26800C     LANGUAGE--ANSI FORTRAN (1977)
26801C     VERSION NUMBER--83.6
26802C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--MAY       1983.
26803C     UPDATED--         MARCH 1988 (TO FIX PROBLEM DEALING WITH
26804C                                  HOR., DU, DD, DDDU IN NEGATIVE BOXES)
26805C     UPDATED         --JANUARY  1989. SUN (BY BILL ANDERSON)
26806C     UPDATED         --JANUARY  1989. POSTSCRIPT (BY ALAN HECKERT)
26807C     UPDATED         --JANUARY  1989. CGM (BY ALAN HECKERT)
26808C     UPDATED         --JANUARY  1989. QMS QUIC (BY ALAN HECKERT)
26809C     UPDATED         --JANUARY  1989. CALCOMP (BY ALAN HECKERT)
26810C     UPDATED         --JANUARY  1989. ZETA (BY ALAN HECKERT)
26811C     UPDATED         --OCTOBER  1993. COMMENT OUT CALLS TO GRTRSD
26812C
26813C-----NON-COMMON VARIABLES (GRAPHICS)-------------------------------------------
26814C
26815      CHARACTER*4 IHORPA
26816      CHARACTER*4 IVERPA
26817      CHARACTER*4 IDUPPA
26818      CHARACTER*4 IDDOPA
26819C
26820      CHARACTER*4 ISUBN0
26821C
26822      CHARACTER*4 IFLAG
26823      CHARACTER*4 IPATT2
26824      CHARACTER*4 IFIG
26825      CHARACTER*4 ICOL
26826C
26827      DIMENSION PX(*)
26828      DIMENSION PY(*)
26829C
26830      DIMENSION PX2(2)
26831      DIMENSION PY2(2)
26832C
26833C-----COMMON----------------------------------------------------------
26834C
26835      INCLUDE 'DPCOGR.INC'
26836      INCLUDE 'DPCOBE.INC'
26837      INCLUDE 'DPCOP2.INC'
26838C
26839C-----START POINT-----------------------------------------------------
26840C
26841      ISUBN0='DRBP'
26842      IFIG='LINE'
26843C
26844      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DRBP')GOTO90
26845      WRITE(ICOUT,999)
26846  999 FORMAT(1X)
26847      CALL DPWRST('XXX','BUG ')
26848      WRITE(ICOUT,51)
26849   51 FORMAT('***** AT THE BEGINNING OF GRDRBP--')
26850      CALL DPWRST('XXX','BUG ')
26851      WRITE(ICOUT,52)NP
26852   52 FORMAT('NP = ',I8)
26853      CALL DPWRST('XXX','BUG ')
26854      DO55I=1,NP
26855      WRITE(ICOUT,56)I,PX(I),PY(I)
26856   56 FORMAT('I,PX(I),PY(I) = ',I8,2E15.7)
26857      CALL DPWRST('XXX','BUG ')
26858   55 CONTINUE
26859      WRITE(ICOUT,57)PXSPA,PYSPA
26860   57 FORMAT('PXSPA,PYSPA = ',2E15.7)
26861      CALL DPWRST('XXX','BUG ')
26862      WRITE(ICOUT,58)IFACTO
26863   58 FORMAT('IFACTO = ',A4)
26864      CALL DPWRST('XXX','BUG ')
26865      WRITE(ICOUT,61)IHORPA,IVERPA,IDUPPA,IDDOPA
26866   61 FORMAT('IHORPA,IVERPA,IDUPPA,IDDOPA = ',A4,2X,A4,2X,A4,2X,A4)
26867      CALL DPWRST('XXX','BUG ')
26868      WRITE(ICOUT,69)IBUGG4,ISUBG4,IERRG4
26869   69 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
26870      CALL DPWRST('XXX','BUG ')
26871   90 CONTINUE
26872C
26873C               ***************************************************
26874C               **  STEP 1--                                     **
26875C               **  DRAW THE HORIZONTAL STRIPES (IF CALLED FOR)  **
26876C               ***************************************************
26877C
26878      IF(IHORPA.EQ.'ON')GOTO1100
26879      GOTO1190
26880 1100 CONTINUE
26881CCCCC THE FOLLOWING 2 LINES WERE INSERTED MARCH 1988
26882      ASIGN=1.0
26883      IF(PY(3).LT.PY(1))ASIGN=(-1.0)
26884      PX2(1)=PX(1)
26885      PX2(2)=PX(3)
26886      YCOMP=PY(1)
26887C  SEPTEMBER,1987
26888      IFLAG='ON'
26889      NP2=2
26890C
26891 1120 CONTINUE
26892CCCCC YCOMP=YCOMP+PYSPA                   MARCH 1988
26893CCCCC IF(YCOMP.GE.PY(3))GOTO1190          MARCH 1988
26894CCCCC THE FOLLOWING 3 LINES WERE INSERTED MARCH 1988
26895      YCOMP=YCOMP+ASIGN*PYSPA
26896      IF(ASIGN.GE.0.0.AND.YCOMP.GE.PY(3))GOTO1190
26897      IF(ASIGN.LT.0.0.AND.YCOMP.LE.PY(3))GOTO1190
26898      PY2(1)=YCOMP
26899      PY2(2)=YCOMP
26900      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1122)PX2(1),PY2(1),PX2(2),PY2(2)
26901 1122 FORMAT('PX2(1),PY2(1),   PX2(2),PY2(2) = ',2E15.7,4X,2E15.7)
26902      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
26903CCCCC CALL GRTRSD(PX2(1),PY2(1),IX1,IY1,ISUBN0)
26904CCCCC CALL GRTRSD(PX2(2),PY2(2),IX2,IY2,ISUBN0)
26905CCCCC CALL GRDRLI(IX1,IY1,IX2,IY2,PX2(1),PY2(1),PX2(2),PY2(2),IFACTO)
26906      CALL DPDRPL(PX2,PY2,NP2,
26907     1IFIG,IPATT2,PTHICK,ICOL,
26908     1JPATT,JTHICK,PTHIC2,JCOL,IFLAG)
26909      IFLAG='OFF'
26910      GOTO1120
26911 1190 CONTINUE
26912C
26913C               ***************************************************
26914C               **  STEP 2--                                     **
26915C               **  DRAW THE VERTICAL   STRIPES (IF CALLED FOR)  **
26916C               ***************************************************
26917C
26918      IF(IVERPA.EQ.'ON')GOTO1200
26919      GOTO1290
26920 1200 CONTINUE
26921CCCCC THE FOLLOWING 2 LINES WERE INSERTED MARCH 1988
26922      ASIGN=1.0
26923      IF(PX(3).LT.PX(1))ASIGN=(-1.0)
26924      PY2(1)=PY(1)
26925      PY2(2)=PY(3)
26926      XCOMP=PX(1)
26927C  SEPTEMBER, 1987
26928      IFLAG='ON'
26929      NP2=2
26930C
26931 1220 CONTINUE
26932CCCCC XCOMP=XCOMP+PXSPA               MARCH 1988
26933CCCCC IF(XCOMP.GE.PX(3))GOTO1290      MARCH 1988
26934CCCCC THE FOLLOWING 3 LINES WERE INSERTED MARCH 1988
26935      XCOMP=XCOMP+ASIGN*PXSPA
26936      IF(ASIGN.GE.0.0.AND.XCOMP.GE.PX(3))GOTO1290
26937      IF(ASIGN.LT.0.0.AND.XCOMP.LE.PX(3))GOTO1290
26938      PX2(1)=XCOMP
26939      PX2(2)=XCOMP
26940      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1222)PX2(1),PY2(1),PX2(2),PY2(2)
26941 1222 FORMAT('PX2(1),PY2(1),   PX2(2),PY2(2) = ',2E15.7,4X,2E15.7)
26942      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
26943CCCCC CALL GRTRSD(PX2(1),PY2(1),IX1,IY1,ISUBN0)
26944CCCCC CALL GRTRSD(PX2(2),PY2(2),IX2,IY2,ISUBN0)
26945CCCCC CALL GRDRLI(IX1,IY1,IX2,IY2,PX2(1),PY2(1),PX2(2),PY2(2),IFACTO)
26946      CALL DPDRPL(PX2,PY2,NP2,
26947     1IFIG,IPATT2,PTHICK,ICOL,
26948     1JPATT,JTHICK,PTHIC2,JCOL,IFLAG)
26949      IFLAG='OFF'
26950      GOTO1220
26951 1290 CONTINUE
26952C
26953C               ******************************************************
26954C               **  STEP 3--                                        **
26955C               **  DRAW THE UP-DIAGONAL   STRIPES (IF CALLED FOR)  **
26956C               ******************************************************
26957C
26958      IF(IDUPPA.EQ.'ON')GOTO1300
26959      GOTO1390
26960 1300 CONTINUE
26961C  SEPTEMBER, 1987
26962      NP2=2
26963      IFLAG='ON'
26964C
26965CCCCC THE FOLLOWING 2 LINES WERE INSERTED MARCH 1988
26966CCCCC PLUS OTHER SUBSTITUTIONS IN THIS SECTION WERE ALSO MADE.  MARCH 1988
26967      PSTART=PY(1)
26968      PSTOP=PY(3)
26969      IF(PY(3).LT.PY(1))PSTART=PY(3)
26970      IF(PY(3).LT.PY(1))PSTOP=PY(1)
26971      YCOMP=PSTART-(PX(3)-PX(1))*(PYSPA/PXSPA)-PYSPA
26972 1320 CONTINUE
26973      YCOMP=YCOMP+PYSPA
26974      IF(YCOMP.GT.PSTOP)GOTO1390
26975C
26976      YCOMPT=YCOMP
26977      YCOMP1=YCOMP
26978      IF(YCOMPT.LT.PSTART)YCOMP1=PSTART
26979      XCOMP1=PX(1)
26980      IF(YCOMPT.LT.PSTART)XCOMP1=PX(1)+(PSTART-YCOMPT)*(PXSPA/PYSPA)
26981C
26982      YCOMPT=YCOMP+(PX(3)-PX(1))*(PYSPA/PXSPA)
26983      YCOMP2=YCOMP+(PX(3)-PX(1))*(PYSPA/PXSPA)
26984      IF(YCOMPT.GT.PSTOP)YCOMP2=PSTOP
26985      XCOMP2=PX(3)
26986      IF(YCOMPT.GT.PSTOP)XCOMP2=PX(3)-(YCOMPT-PSTOP)*(PXSPA/PYSPA)
26987C
26988      PX2(1)=XCOMP1
26989      PX2(2)=XCOMP2
26990      PY2(1)=YCOMP1
26991      PY2(2)=YCOMP2
26992C
26993      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1322)PX2(1),PY2(1),PX2(2),PY2(2)
26994 1322 FORMAT('PX2(1),PY2(1),   PX2(2),PY2(2) = ',2E15.7,4X,2E15.7)
26995      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
26996CCCCC CALL GRTRSD(PX2(1),PY2(1),IX1,IY1,ISUBN0)
26997CCCCC CALL GRTRSD(PX2(2),PY2(2),IX2,IY2,ISUBN0)
26998CCCCC CALL GRDRLI(IX1,IY1,IX2,IY2,PX2(1),PY2(1),PX2(2),PY2(2),IFACTO)
26999      CALL DPDRPL(PX2,PY2,NP2,
27000     1IFIG,IPATT2,PTHICK,ICOL,
27001     1JPATT,JTHICK,PTHIC2,JCOL,IFLAG)
27002      IFLAG='OFF'
27003      GOTO1320
27004C
27005 1390 CONTINUE
27006C
27007C               ******************************************************
27008C               **  STEP 4--                                        **
27009C               **  DRAW THE DOWN-DIAGONAL STRIPES (IF CALLED FOR)  **
27010C               ******************************************************
27011C
27012      IF(IDDOPA.EQ.'ON')GOTO1400
27013      GOTO1490
27014 1400 CONTINUE
27015C  SEPTEMBER,1987
27016      NP2=2
27017      IFLAG='ON'
27018C
27019CCCCC THE FOLLOWING 4 LINES WERE INSERTED MARCH 1988
27020CCCCC PLUS OTHER SUBSTITUTIONS IN THIS SECTION WERE ALSO MADE.  MARCH 1988
27021      PSTART=PY(1)
27022      PSTOP=PY(3)
27023      IF(PY(3).LT.PY(1))PSTART=PY(3)
27024      IF(PY(3).LT.PY(1))PSTOP=PY(1)
27025      YCOMP=PSTART-(PX(3)-PX(1))*(PYSPA/PXSPA)-PYSPA
27026 1420 CONTINUE
27027      YCOMP=YCOMP+PYSPA
27028      IF(YCOMP.GT.PSTOP)GOTO1490
27029C
27030      YCOMPT=YCOMP
27031      YCOMP2=YCOMP
27032      IF(YCOMPT.LT.PSTART)YCOMP2=PSTART
27033      XCOMP2=PX(3)
27034      IF(YCOMPT.LT.PSTART)XCOMP2=PX(3)-(PSTART-YCOMPT)*(PXSPA/PYSPA)
27035C
27036      YCOMPT=YCOMP+(PX(3)-PX(1))*(PYSPA/PXSPA)
27037      YCOMP1=YCOMP+(PX(3)-PX(1))*(PYSPA/PXSPA)
27038      IF(YCOMPT.GT.PSTOP)YCOMP1=PSTOP
27039      XCOMP1=PX(1)
27040      IF(YCOMPT.GT.PSTOP)XCOMP1=PX(1)+(YCOMPT-PSTOP)*(PXSPA/PYSPA)
27041C
27042      PX2(1)=XCOMP1
27043      PX2(2)=XCOMP2
27044      PY2(1)=YCOMP1
27045      PY2(2)=YCOMP2
27046C
27047      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1422)PX2(1),PY2(1),PX2(2),PY2(2)
27048 1422 FORMAT('PX2(1),PY2(1),   PX2(2),PY2(2) = ',2E15.7,4X,2E15.7)
27049      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
27050CCCCC CALL GRTRSD(PX2(1),PY2(1),IX1,IY1,ISUBN0)
27051CCCCC CALL GRTRSD(PX2(2),PY2(2),IX2,IY2,ISUBN0)
27052CCCCC CALL GRDRLI(IX1,IY1,IX2,IY2,PX2(1),PY2(1),PX2(2),PY2(2),IFACTO)
27053      CALL DPDRPL(PX2,PY2,NP2,
27054     1IFIG,IPATT2,PTHICK,ICOL,
27055     1JPATT,JTHICK,PTHIC2,JCOL,IFLAG)
27056      IFLAG='OFF'
27057      GOTO1420
27058C
27059 1490 CONTINUE
27060C
27061C               *****************
27062C               **  STEP 90--  **
27063C               **  EXIT       **
27064C               *****************
27065C
27066      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DRBP')GOTO9090
27067      WRITE(ICOUT,999)
27068      CALL DPWRST('XXX','BUG ')
27069      WRITE(ICOUT,9011)
27070 9011 FORMAT('***** AT THE END       OF GRDRBP--')
27071      CALL DPWRST('XXX','BUG ')
27072      WRITE(ICOUT,9012)NP
27073 9012 FORMAT('NP = ',I8)
27074      CALL DPWRST('XXX','BUG ')
27075      DO9015I=1,NP
27076      WRITE(ICOUT,9016)I,PX(I),PY(I)
27077 9016 FORMAT('I,PX(I),PY(I) = ',I8,2E15.7)
27078      CALL DPWRST('XXX','BUG ')
27079 9015 CONTINUE
27080      WRITE(ICOUT,9017)PXSPA,PYSPA
27081 9017 FORMAT('PXSPA,PYSPA = ',2E15.7)
27082      CALL DPWRST('XXX','BUG ')
27083      WRITE(ICOUT,9018)IFACTO
27084 9018 FORMAT('IFACTO = ',A4)
27085      CALL DPWRST('XXX','BUG ')
27086      WRITE(ICOUT,9021)IHORPA,IVERPA,IDUPPA,IDDOPA
27087 9021 FORMAT('IHORPA,IVERPA,IDUPPA,IDDOPA = ',A4,2X,A4,2X,A4,2X,A4)
27088      CALL DPWRST('XXX','BUG ')
27089      WRITE(ICOUT,9029)IBUGG4,ISUBG4,IERRG4
27090 9029 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
27091      CALL DPWRST('XXX','BUG ')
27092 9090 CONTINUE
27093C
27094      RETURN
27095      END
27096      SUBROUTINE GRDRPG(PX,PY,NP,ISTRIN,NCSTRI,
27097     1                  IFIG,IPATT,IFONT,ICASE,IJUST,IDIR,ANGLE,
27098     1                  IFILL,ICOL,
27099     1                  JPATT,JFONT,JCASE,JJUST,JDIR,ANGLE2,JFILL,JCOL,
27100     1                  PTHICK,JTHICK,PTHIC2,
27101     1                  PHEIGH,PWIDTH,PVEGAP,PHOGAP,
27102     1                  PHEIG2,PWIDT2,PVEGA2,PHOGA2,
27103     1                  ISYMBL,ISPAC)
27104C
27105C     PURPOSE--FOR A SPECIFIC GRAPHICS DEVICE,
27106C              DRAW THE GENERAL (GENERAL FONT AND GENERAL DIRECTION)
27107C              POLYMARKER WHOSE COORDINATES
27108C              ARE GIVEN IN (PX(.),PY(.)).
27109C     NOTE--THE COORDINATES IN (PX(.),PY(.)) ARE IN
27110C           STANDARDIZED (0.0 TO 100.0) UNITS.
27111C     NOTE--THERE ARE NP SUCH COORDINATE PAIRS.
27112C
27113C     WRITTEN BY--JAMES J. FILLIBEN
27114C                 STATISTICAL ENGINEERING DIVISION
27115C                 INFORMATION TECHNOLOGY LABORATORY
27116C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
27117C                 GAITHERSBURG, MD 20899-8980
27118C                 PHONE--301-921-3651
27119C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
27120C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
27121C     LANGUAGE--ANSI FORTRAN (1977)
27122C     VERSION NUMBER--83.6
27123C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--MAY       1983.
27124C     UPDATED       --SEPTEMBER   1999. SUPPORT FOR MULTIPLOT SCALE
27125C                                       FACTOR
27126C
27127C-----NON-COMMON VARIABLES (GRAPHICS)-------------------------------------------
27128C
27129      CHARACTER*4 IFIG
27130      CHARACTER*24 IPATT
27131      CHARACTER*4 IPATTZ
27132      CHARACTER*4 IFONT
27133      CHARACTER*4 ICASE
27134      CHARACTER*4 IJUST
27135      CHARACTER*4 IDIR
27136      CHARACTER*4 IFILL
27137      CHARACTER*4 ICOL
27138C
27139      CHARACTER*24 ISYMBL
27140      CHARACTER*4 ISPAC
27141C
27142      CHARACTER*4 IBUGD2
27143C
27144      CHARACTER*4 ISTRIN
27145C
27146      CHARACTER*4 IFOUND
27147      CHARACTER*4 IERROR
27148C
27149      DIMENSION PX(*)
27150      DIMENSION PY(*)
27151      DIMENSION ISTRIN(*)
27152C
27153C-----COMMON----------------------------------------------------------
27154C
27155      INCLUDE 'DPCOGR.INC'
27156      INCLUDE 'DPCOBE.INC'
27157      CHARACTER*4 IMPSW2
27158      COMMON/CMISC3/
27159     1IMPSW2
27160      COMMON /RMISC2/
27161     1AMPSCH, AMPSCW
27162C
27163C-----COMMON VARIABLES (GENERAL)--------------------------------------
27164C
27165      INCLUDE 'DPCOP2.INC'
27166C
27167C-----START POINT-----------------------------------------------------
27168C
27169      IERRG4='NO'
27170      IFOUND='-999'
27171      IERROR='-999'
27172C
27173      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DRPG')THEN
27174        WRITE(ICOUT,999)
27175  999   FORMAT(1X)
27176        CALL DPWRST('XXX','BUG ')
27177        WRITE(ICOUT,51)
27178   51   FORMAT('***** AT THE BEGINNING OF GRDRPG--')
27179        CALL DPWRST('XXX','BUG ')
27180        WRITE(ICOUT,52)IMANUF,IFIG,IPATT,NP,JPATT
27181   52   FORMAT('IMANUF,IFIG,IPATT,NP,JPATT = ',2(A4,2X),A24,2X,2I8)
27182        CALL DPWRST('XXX','BUG ')
27183        DO55I=1,NP
27184          WRITE(ICOUT,56)PX(I),PY(I)
27185   56     FORMAT('PX(I),PY(I) = ',2G15.7)
27186          CALL DPWRST('XXX','BUG ')
27187   55   CONTINUE
27188        WRITE(ICOUT,60)IFONT,ICASE,JFONT,JCASE,JFILL
27189   60   FORMAT('IFONT,ICASE,JFONT,JCASE,JFILL = ',2(A4,2X),3I8)
27190        CALL DPWRST('XXX','BUG ')
27191        WRITE(ICOUT,62)IJUST,IDIR,JJUST,JDIR,ANGLE,ANGLE2
27192   62   FORMAT('IJUST,IDIR,JJUST,JDIR,ANGLE,ANGLE2 = ',
27193     1         2(A4,2X),2I8,2G15.7)
27194        CALL DPWRST('XXX','BUG ')
27195        WRITE(ICOUT,64)IFILL,ICOL,ISPAC,ISYMBL,JCOL
27196   64   FORMAT('IFILL,ICOL,ISPAC,ISYMBL,JCOL = ',3(A4,2X),A24,2X,I8)
27197        CALL DPWRST('XXX','BUG ')
27198        WRITE(ICOUT,66)PTHICK,PTHIC2,JTHICK
27199   66   FORMAT('PTHICK,PTHIC2,JTHICK = ',2G15.7,I8)
27200        CALL DPWRST('XXX','BUG ')
27201        WRITE(ICOUT,67)PHEIGH,PWIDTH,PVEGAP,PHOGAP
27202   67   FORMAT('PHEIGH,PWIDTH,PVEGAP,PHOGAP = ',4G15.7)
27203        CALL DPWRST('XXX','BUG ')
27204        WRITE(ICOUT,68)PHEIG2,PWIDT2,PVEGA2,PHOGA2
27205   68   FORMAT('PHEIG2,PWIDT2,PVEGA2,PHOGA2 = ',4G15.7)
27206        CALL DPWRST('XXX','BUG ')
27207        WRITE(ICOUT,78)IFOUND,IBUGD2,IERROR
27208   78   FORMAT('IFOUND,IBUGD2,IERROR = ',2(A4,2X),A4)
27209        CALL DPWRST('XXX','BUG ')
27210        WRITE(ICOUT,79)IBUGG4,ISUBG4,IERRG4
27211   79   FORMAT('IBUGG4,ISUBG4,IERRG4 = ',2(A4,2X),A4)
27212        CALL DPWRST('XXX','BUG ')
27213      ENDIF
27214C
27215      CALL GRTRPG(IPATT,ISTRIN,NCSTRI)
27216C
27217      HEIGHT=PHEIGH+PVEGAP
27218      WIDTH=PWIDTH+PHOGAP
27219C
27220      IBUGD2=IBUGG4
27221      HMAX=100.0
27222      VMAX=100.0
27223      AMAX=360.0
27224      IPATTZ='SOLI'
27225      JPATTZ=96
27226C
27227      DO1100I=1,NP
27228        X0=PX(I)
27229        Y0=PY(I)
27230        CALL DPSCR7(ISTRIN,NCSTRI,X0,Y0,
27231     1              IFONT,ICASE,IJUST,ANGLE,HMAX,VMAX,AMAX,
27232     1              WIDTH,HEIGHT,
27233     1              PHEIGH,PWIDTH,PVEGAP,PHOGAP,
27234     1              PHEIG2,PWIDT2,PVEGA2,PHOGA2,
27235     1              ANUMHP,ANUMVP,
27236     1              IPATTZ,PTHICK,ICOL,
27237     1              JPATTZ,JTHICK,PTHIC2,JCOL,
27238     1              ISYMBL,ISPAC,IFILL,
27239     1              IMPSW2,AMPSCH,AMPSCW,
27240     1              XEND,YEND,IFOUND,IBUGD2,IERROR)
27241 1100 CONTINUE
27242C
27243C               *****************
27244C               **  STEP 90--  **
27245C               **  EXIT       **
27246C               *****************
27247C
27248      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DRPG')GOTO9090
27249      WRITE(ICOUT,999)
27250      CALL DPWRST('XXX','BUG ')
27251      WRITE(ICOUT,9011)
27252 9011 FORMAT('***** AT THE END       OF GRDRPG--')
27253      CALL DPWRST('XXX','BUG ')
27254      WRITE(ICOUT,9012)NP
27255 9012 FORMAT('NP = ',I8)
27256      CALL DPWRST('XXX','BUG ')
27257      WRITE(ICOUT,9013)IMANUF
27258 9013 FORMAT('IMANUF = ',A4)
27259      CALL DPWRST('XXX','BUG ')
27260      DO9015I=1,NP
27261      WRITE(ICOUT,9016)PX(I),PY(I)
27262 9016 FORMAT('PX(I),PY(I) = ',E15.7,E15.7)
27263      CALL DPWRST('XXX','BUG ')
27264 9015 CONTINUE
27265      WRITE(ICOUT,9018)IFIG
27266 9018 FORMAT('IFIG = ',A4)
27267      CALL DPWRST('XXX','BUG ')
27268      WRITE(ICOUT,9019)IPATT,JPATT
27269 9019 FORMAT('IPATT,JPATT = ',A4,I8)
27270      CALL DPWRST('XXX','BUG ')
27271      WRITE(ICOUT,9020)IFONT,JFONT
27272 9020 FORMAT('IFONT,JFONT = ',A4,I8)
27273      CALL DPWRST('XXX','BUG ')
27274      WRITE(ICOUT,9021)ICASE,JCASE
27275 9021 FORMAT('ICASE,JCASE = ',A4,I8)
27276      CALL DPWRST('XXX','BUG ')
27277      WRITE(ICOUT,9022)IJUST,JJUST
27278 9022 FORMAT('IJUST,JJUST = ',A4,I8)
27279      CALL DPWRST('XXX','BUG ')
27280      WRITE(ICOUT,9023)IDIR,ANGLE,JDIR
27281 9023 FORMAT('IDIR,ANGLE,JDIR = ',A4,2X,E15.7,I8)
27282      CALL DPWRST('XXX','BUG ')
27283      WRITE(ICOUT,9024)ICOL,JCOL
27284 9024 FORMAT('ICOL,JCOL = ',A4,I8)
27285      CALL DPWRST('XXX','BUG ')
27286      WRITE(ICOUT,9026)PTHICK,JTHICK,PTHIC2
27287 9026 FORMAT('PTHICK,JTHICK,PTHIC2 = ',E15.7,I8,E15.7)
27288      CALL DPWRST('XXX','BUG ')
27289      WRITE(ICOUT,9027)PHEIGH,PWIDTH,PVEGAP,PHOGAP
27290 9027 FORMAT('PHEIGH,PWIDTH,PVEGAP,PHOGAP = ',4E15.7)
27291      CALL DPWRST('XXX','BUG ')
27292      WRITE(ICOUT,9028)PHEIG2,PWIDT2,PVEGA2,PHOGA2
27293 9028 FORMAT('PHEIG2,PWIDT2,PVEGA2,PHOGA2 = ',4E15.7)
27294      CALL DPWRST('XXX','BUG ')
27295      WRITE(ICOUT,9031)ISYMBL,ISPAC
27296 9031 FORMAT('ISYMBL,ISPAC = ',A4,2X,A4)
27297      CALL DPWRST('XXX','BUG ')
27298      WRITE(ICOUT,9032)IFILL
27299 9032 FORMAT('IFILL = ',A4)
27300      CALL DPWRST('XXX','BUG ')
27301      WRITE(ICOUT,9039)IBUGG4,ISUBG4,IERRG4
27302 9039 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
27303      CALL DPWRST('XXX','BUG ')
27304 9090 CONTINUE
27305C
27306      RETURN
27307      END
27308      SUBROUTINE GRDRPM(PX,PY,NP,
27309     1IFIG,IPATT,IFONT,ICASE,IJUST,IDIR,ANGLE,IFILL,ICOL,
27310     1JPATT,JFONT,JCASE,JJUST,JDIR,ANGLE2,JFILL,JCOL,
27311     1PTHICK,JTHICK,PTHIC2,
27312     1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
27313     1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
27314     1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
27315     1IMPSW2,AMPSCH,AMPSCW,
27316     1ISYMBL,ISPAC)
27317C
27318C     PURPOSE--FOR A SPECIFIC GRAPHICS DEVICE,
27319C              DRAW THE POLYMARKER WHOSE COORDINATES
27320C              ARE GIVEN IN (PX(.),PY(.)).
27321C     NOTE--THE COORDINATES IN (PX(.),PY(.)) ARE IN
27322C           STANDARDIZED (0.0 TO 100.0) UNITS.
27323C     NOTE--THERE ARE NP SUCH COORDINATE PAIRS.
27324C
27325C     WRITTEN BY--JAMES J. FILLIBEN
27326C                 STATISTICAL ENGINEERING DIVISION
27327C                 INFORMATION TECHNOLOGY LABORATORY
27328C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
27329C                 GAITHERSBURG, MD 20899-8980
27330C                 PHONE--301-921-3651
27331C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
27332C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
27333C     LANGUAGE--ANSI FORTRAN (1977)
27334C     VERSION NUMBER--83.6
27335C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--MAY       1983.
27336C     UPDATED         --MARCH    1992.  USE GRWRTH FOR STRINGS LONGER THAN
27337C                                       ONE CHARACTER.  HOWEVER NEED TO TEST
27338C                                       FOR SPECIAL PLOT CHARACTERS (ALAN)
27339C     UPDATED         --AUGUST   1992.  UPDATED SYMBOL LIST
27340C                                       HANDLE ARROW, VECTORS DIFFERENTLY
27341C     UPDATED         --AUGUST   1993.  HARDWARE TEXT-HANDLE CASE
27342C     UPDATED         --FEBRUARY 1994.  VECTOR CASE FOR SOFTWARE FONT
27343C     UPDATED         --NOVEMBER 1995.  CASE CONVERSION IN DPDRPM
27344C     UPDATED         --DECEMBER 1995.  BUG WITH LOWER CASE "BLANK"
27345C     UPDATED         --AUGUST   1996.  DEVICE FONT COMMAND
27346C     UPDATED         --MARCH    1997.  BUG WITH LOWER CASE "BLANK"
27347C                                       FIXED FOR SOFTWARE FONT
27348C     UPDATED         --SEPTEMBER1999.  ARGUMENT LIST TO DPWRTE
27349C
27350C-----NON-COMMON VARIABLES (GRAPHICS)-------------------------------------------
27351C
27352      CHARACTER*4 IFONT
27353      CHARACTER*4 ICASE
27354      CHARACTER*4 IJUST
27355      CHARACTER*4 IDIR
27356      CHARACTER*4 IFILL
27357      CHARACTER*4 ICOL
27358      CHARACTER*4 IFIG
27359      CHARACTER*24 IPATT
27360C
27361      CHARACTER*24 ISYMBL
27362      CHARACTER*4 ISPAC
27363      CHARACTER*4 IMPSW2
27364C
27365      CHARACTER*4 ISTRIN(16)
27366C
27367      CHARACTER*4 ITRCSW
27368CCCCC AUGUST 1993.  ADD FOLLOWING LINE
27369      CHARACTER*1 ICTEMP
27370C
27371      DIMENSION PX(*)
27372      DIMENSION PY(*)
27373C
27374C-----COMMON----------------------------------------------------------
27375C
27376      INCLUDE 'DPCOGR.INC'
27377      INCLUDE 'DPCOBE.INC'
27378CCCCC THE FOLLOWING COMMON BLOCK WAS ADDED AUGUST 1992.
27379      COMMON /RWIND/
27380     1PWXMIN,PWXMAX,PWYMIN,PWYMAX,PWZMIN,PWZMAX,
27381     1WWXMIN,WWXMAX,WWYMIN,WWYMAX,WWZMIN,WWZMAX
27382C
27383C-----COMMON VARIABLES (GENERAL)--------------------------------------
27384C
27385      INCLUDE 'DPCOP2.INC'
27386C
27387C-----START POINT-----------------------------------------------------
27388C
27389      IERRG4='NO'
27390C
27391      IF(IBUGG4.EQ.'ON'.OR.ISUBG4.EQ.'DRPM')THEN
27392        WRITE(ICOUT,999)
27393  999   FORMAT(1X)
27394        CALL DPWRST('XXX','BUG ')
27395        WRITE(ICOUT,51)
27396   51   FORMAT('***** AT THE BEGINNING OF GRDRPM--')
27397        CALL DPWRST('XXX','BUG ')
27398        DO55I=1,NP
27399          WRITE(ICOUT,56)I,PX(I),PY(I)
27400   56     FORMAT('I,PX(I),PY(I) = ',I8,2G15.7)
27401          CALL DPWRST('XXX','BUG ')
27402   55   CONTINUE
27403        WRITE(ICOUT,59)NP,IMANUF,IFIG,IPATT,JPATT
27404   59   FORMAT('NP,IMANUF,IFIG,IPATT,JPATT = ',I8,2X,2(A4,2X),A16,2X,I8)
27405        CALL DPWRST('XXX','BUG ')
27406        WRITE(ICOUT,60)IFONT,JFONT,ICASE,JCASE
27407   60   FORMAT('IFONT,JFONT,ICASE,JCASE = ',A4,I8,2X,A4,I8)
27408        CALL DPWRST('XXX','BUG ')
27409        WRITE(ICOUT,63)IDIR,ANGLE,JDIR
27410   63   FORMAT('IDIR,ANGLE,JDIR = ',A4,2X,G15.7,I8)
27411        CALL DPWRST('XXX','BUG ')
27412        WRITE(ICOUT,64)IJUST,JJUST,ICOL,JCOL
27413   64   FORMAT('IJUST,JJUST,ICOL,JCOL = ',A4,I8,2X,A4,I8)
27414        CALL DPWRST('XXX','BUG ')
27415        WRITE(ICOUT,66)PTHICK,JTHICK,PTHIC2
27416   66   FORMAT('PTHICK,JTHICK,PTHIC2 = ',G15.7,I8,G15.7)
27417        CALL DPWRST('XXX','BUG ')
27418        WRITE(ICOUT,67)PHEIGH,PWIDTH,PVEGAP,PHOGAP
27419   67   FORMAT('PHEIGH,PWIDTH,PVEGAP,PHOGAP = ',4G15.7)
27420        CALL DPWRST('XXX','BUG ')
27421        WRITE(ICOUT,68)PHEIG2,PWIDT2,PVEGA2,PHOGA2
27422   68   FORMAT('PHEIG2,PWIDT2,PVEGA2,PHOGA2 = ',4G15.7)
27423        CALL DPWRST('XXX','BUG ')
27424        WRITE(ICOUT,71)ISYMBL,ISPAC
27425   71   FORMAT('ISYMBL,ISPAC = ',A24,2X,A4)
27426        CALL DPWRST('XXX','BUG ')
27427        WRITE(ICOUT,79)IBUGG4,ISUBG4,IERRG4
27428   79   FORMAT('IBUGG4,ISUBG4,IERRG4 = ',2(A4,2X),A4)
27429        CALL DPWRST('XXX','BUG ')
27430      ENDIF
27431C
27432C               ************************************************
27433C               **  STEP 1--                                  **
27434C               **  CALL THE APPROPRIATE SUBROUTINE           **
27435C               **  DEPENDING ON WHETHER HAVE TEKTRONIX FONT  **
27436C               **  OR A GENERAL FONT.                        **
27437C               ************************************************
27438C
27439C  MARCH 1992.  FOLLOWING 3 LINES ADDED TO BLANK OUT ISTRIN.
27440      DO100I=1,16
27441        ISTRIN(I)=' '
27442 100  CONTINUE
27443C
27444CCCCC NOVEMBER 1995.  MODIFY FOLLOWING LINE.
27445CCCCC CALL GRTRPG(IPATT,ISTRIN,NCSTRI)
27446C
27447      IF(ISYMBL(1:4).EQ.'BLAN')THEN
27448        ISYMBL='BLAN'
27449        GOTO200
27450      ELSEIF(ISYMBL(1:4).EQ.'BL  ')THEN
27451        ISYMBL='BLAN'
27452        GOTO200
27453      ELSEIF(ISYMBL(1:4).EQ.'NONE')THEN
27454        ISYMBL='BLAN'
27455        GOTO200
27456      ELSEIF(IPATT(1:4).EQ.'NO  ')THEN
27457        ISYMBL='BLAN'
27458        GOTO200
27459      ENDIF
27460      CALL GRTRPG(ISYMBL,ISTRIN,NCSTRI)
27461C
27462C     MARCH 1997.  PUT FOLLOWING LINES FROM BELOW HERE TO FIX
27463C     BUG WITH CHARACTER BLANK WHEN SOFTWARE FONT USED.
27464      IF(IPATT(1:4).EQ.'BLAN')THEN
27465        IPATT='BLAN'
27466        GOTO200
27467      ELSEIF(IPATT(1:4).EQ.'BL  ')THEN
27468        IPATT='BLAN'
27469        GOTO200
27470      ELSEIF(IPATT(1:4).EQ.'NONE')THEN
27471        IPATT='BLAN'
27472        GOTO200
27473      ELSEIF(IPATT(1:4).EQ.'NO  ')THEN
27474        IPATT='BLAN'
27475        GOTO200
27476      ENDIF
27477C
27478      IF(IFONT.EQ.'TEKT'.AND.NCSTRI.LE.1)GOTO200
27479C
27480C     2015/10: DO THE FOLLOWING CHECK FOR BOTH HARDWARE AND
27481C              SOFTWARE FONTS
27482C
27483CCCCC IF(IFONT.NE.'TEKT')GOTO300
27484C
27485C     CHECK FOR SPECIAL PLOT CHARACTERS
27486C
27487C     JUNE 2010: SINCE CHARACTERS ARE NOW ALLOWED TO BE UP TO
27488C                16 CHARACTERS, NEED TO SET CERTAIN SPELLED OUT
27489C                SYMBOLS TO THEIR 4 CHARACTER REPRESENTATION (SO
27490C                THEY WILL BE RECOGNIZED CORRECTLY BY SOME LOWER
27491C                LEVEL CODES).  BASICALLY, IF THE FIRST 4 CHARACTERS
27492C                ARE EQUIVALENT TO ONE OF OUR SPECIAL CODES, THEN
27493C                SET IT EQUAL TO THE 4-CHARACTER REPRESENTATION.
27494C
27495      IF(IPATT(1:4).EQ.'TRIA')THEN
27496        IPATT='TRIA'
27497        GOTO300
27498      ENDIF
27499      IF(IPATT(1:4).EQ.'TR  ')GOTO300
27500      IF(IPATT(1:4).EQ.'SQUA')THEN
27501        IPATT='SQUA'
27502        GOTO300
27503      ENDIF
27504      IF(IPATT(1:4).EQ.'SQ  ')GOTO300
27505      IF(IPATT(1:4).EQ.'DIAM')THEN
27506        IPATT='DIAM'
27507        GOTO300
27508      ENDIF
27509      IF(IPATT(1:4).EQ.'DI  ')GOTO300
27510CCCCC IF(IPATT(1:4).EQ.'HEXA')GOTO300
27511      IF(IPATT(1:4).EQ.'CIRC')THEN
27512        IPATT='CIRC'
27513        GOTO300
27514      ENDIF
27515      IF(IPATT(1:4).EQ.'CI  ')GOTO300
27516      IF(IPATT(1:4).EQ.'CUBE')THEN
27517        IPATT='CUBE'
27518        GOTO300
27519      ENDIF
27520      IF(IPATT(1:4).EQ.'PYRA')THEN
27521        IPATT='PYRA'
27522        GOTO300
27523      ENDIF
27524C  AUGUST 1992. UNCOMMENTED FOLLOWING 2 LINES
27525      IF(IPATT(1:4).EQ.'REVT')THEN
27526        IPATT='REVT'
27527        GOTO300
27528      ENDIF
27529      IF(IPATT(1:4).EQ.'RT  ')GOTO300
27530      IF(IPATT(1:4).EQ.'TRIR')THEN
27531        IPATT='TRIR'
27532        GOTO300
27533      ENDIF
27534C  AUGUST 1992.  FOLLOWING LINE ADDED.
27535      IF(IPATT(1:4).EQ.'TRII')THEN
27536        IPATT='TRII'
27537        GOTO300
27538      ENDIF
27539CCCCC DECEMBER 1995. BLANK SHOULD GO TO GRDRPH, NOT GRDRPG
27540CCCCC MARCH 1997. MOVE FOLLOWING CODE (SAME BUG FOR SOFTWARE FONT)
27541CCCCC IF(IPATT(1:4).EQ.'BLAN')GOTO300
27542CCCCC IF(IPATT(1:4).EQ.'BL  ')GOTO300
27543CCCCC IF(IPATT(1:4).EQ.'NONE')GOTO300
27544CCCCC IF(IPATT(1:4).EQ.'NO  ')GOTO300
27545CCCCC IF(IPATT(1:4).EQ.'BLAN')GOTO200
27546CCCCC IF(IPATT(1:4).EQ.'BL  ')GOTO200
27547CCCCC IF(IPATT(1:4).EQ.'NONE')GOTO200
27548CCCCC IF(IPATT(1:4).EQ.'NO  ')GOTO200
27549      IF(IPATT(1:4).EQ.'BOX ')GOTO300
27550      IF(IPATT(1:4).EQ.'STAR')THEN
27551        IPATT='STAR'
27552        GOTO300
27553      ENDIF
27554      IF(IPATT(1:4).EQ.'ST  ')GOTO300
27555      IF(IPATT(1:4).EQ.'AU  ')GOTO300
27556      IF(IPATT(1:4).EQ.'AD  ')GOTO300
27557CCCCC IF(IPATT(1:4).EQ.'VB  ')GOTO300
27558      IF(IPATT(1:4).EQ.'POIN')THEN
27559        IPATT='POIN'
27560        GOTO300
27561      ENDIF
27562      IF(IPATT(1:4).EQ.'PT  ')GOTO300
27563      IF(IPATT(1:4).EQ.'PO  ')GOTO300
27564C  AUGUST 1992.  ADD ARROW CASE.
27565C  THIS CASE HANDLED SEPARATELY.
27566      IF(IPATT(1:4).EQ.'ARRO')THEN
27567        IPATT='ARRO'
27568        GOTO500
27569      ENDIF
27570      IF(IPATT(1:4).EQ.'ARRH')THEN
27571        IPATT='ARRH'
27572        GOTO500
27573      ENDIF
27574      IF(IPATT(1:4).EQ.'VECT')THEN
27575        IPATT='VECT'
27576        GOTO500
27577      ENDIF
27578C
27579      IF(IPATT(1:4).EQ.'DEGR')THEN
27580        IPATT='DEGR'
27581        GOTO300
27582      ENDIF
27583C
27584C  CHECK FOR GREEK CHARACTERS
27585C
27586      IF(IPATT(1:4).EQ.'ALPH')THEN
27587        IPATT='ALPH'
27588        GOTO300
27589      ENDIF
27590      IF(IPATT(1:4).EQ.'BETA')THEN
27591        IPATT='BETA'
27592        GOTO300
27593      ENDIF
27594      IF(IPATT(1:4).EQ.'GAMM')THEN
27595        IPATT='GAMM'
27596        GOTO300
27597      ENDIF
27598      IF(IPATT(1:4).EQ.'DELT')THEN
27599        IPATT='DELT'
27600        GOTO300
27601      ENDIF
27602      IF(IPATT(1:4).EQ.'EPSI')THEN
27603        IPATT='EPSI'
27604        GOTO300
27605      ENDIF
27606      IF(IPATT(1:4).EQ.'ZETA')THEN
27607        IPATT='ZETA'
27608        GOTO300
27609      ENDIF
27610      IF(IPATT(1:4).EQ.'ETA ')GOTO300
27611      IF(IPATT(1:4).EQ.'THET')THEN
27612        IPATT='THET'
27613        GOTO300
27614      ENDIF
27615      IF(IPATT(1:4).EQ.'IOTA')THEN
27616        GOTO300
27617      ENDIF
27618      IF(IPATT(1:4).EQ.'KAPP')THEN
27619        IPATT='KAPP'
27620        GOTO300
27621      ENDIF
27622      IF(IPATT(1:4).EQ.'LAMB')THEN
27623        IPATT='LAMB'
27624        GOTO300
27625      ENDIF
27626      IF(IPATT(1:4).EQ.'MU  ')GOTO300
27627      IF(IPATT(1:4).EQ.'NU  ')GOTO300
27628      IF(IPATT(1:4).EQ.'XI  ')GOTO300
27629      IF(IPATT(1:4).EQ.'OMIC')THEN
27630        IPATT='OMIC'
27631        GOTO300
27632      ENDIF
27633      IF(IPATT(1:4).EQ.'PI  ')GOTO300
27634      IF(IPATT(1:4).EQ.'RHO ')GOTO300
27635      IF(IPATT(1:4).EQ.'SIGM')THEN
27636        IPATT='SIGM'
27637        GOTO300
27638      ENDIF
27639      IF(IPATT(1:4).EQ.'TAU ')GOTO300
27640      IF(IPATT(1:4).EQ.'UPSI')THEN
27641        IPATT='UPSI'
27642        GOTO300
27643      ENDIF
27644      IF(IPATT(1:4).EQ.'PHI ')GOTO300
27645      IF(IPATT(1:4).EQ.'CHI ')GOTO300
27646      IF(IPATT(1:4).EQ.'PSI ')GOTO300
27647      IF(IPATT(1:4).EQ.'OMEG')THEN
27648        IPATT='OMEG'
27649        GOTO300
27650      ENDIF
27651C
27652C  CHECK FOR MATH SYMBOLS
27653C
27654      IF(IPATT(1:4).EQ.'PART')THEN
27655        IPATT='PART'
27656        GOTO300
27657      ENDIF
27658      IF(IPATT(1:4).EQ.'INTE')THEN
27659        IPATT='INTE'
27660        GOTO300
27661      ENDIF
27662      IF(IPATT(1:4).EQ.'CINT')THEN
27663        IPATT='CINT'
27664        GOTO300
27665      ENDIF
27666      IF(IPATT(1:4).EQ.'SUMM')THEN
27667        IPATT='SUMM'
27668        GOTO300
27669      ENDIF
27670      IF(IPATT(1:4).EQ.'PROD')THEN
27671        IPATT='PROD'
27672        GOTO300
27673      ENDIF
27674      IF(IPATT(1:4).EQ.'INFI')THEN
27675        IPATT='INFI'
27676        GOTO300
27677      ENDIF
27678      IF(IPATT(1:4).EQ.'+-  ')GOTO300
27679      IF(IPATT(1:4).EQ.'-+  ')GOTO300
27680      IF(IPATT(1:4).EQ.'TIME')THEN
27681        IPATT='TIME'
27682        GOTO300
27683      ENDIF
27684      IF(IPATT(1:4).EQ.'DOTP')THEN
27685        IPATT='DOTP'
27686        GOTO300
27687      ENDIF
27688      IF(IPATT(1:4).EQ.'DEL ')GOTO300
27689      IF(IPATT(1:4).EQ.'DIVI')THEN
27690        IPATT='DIVI'
27691        GOTO300
27692      ENDIF
27693      IF(IPATT(1:4).EQ.'LT  ')GOTO300
27694      IF(IPATT(1:4).EQ.'GT  ')GOTO300
27695      IF(IPATT(1:4).EQ.'LTEQ')THEN
27696        IPATT='LTEQ'
27697        GOTO300
27698      ENDIF
27699      IF(IPATT(1:4).EQ.'GTEQ')THEN
27700        IPATT='GTEQ'
27701        GOTO300
27702      ENDIF
27703      IF(IPATT(1:4).EQ.'NOT=')THEN
27704        IPATT='NOT='
27705        GOTO300
27706      ENDIF
27707      IF(IPATT(1:4).EQ.'APPR')THEN
27708        IPATT='APPR'
27709        GOTO300
27710      ENDIF
27711      IF(IPATT(1:4).EQ.'EQUI')THEN
27712        IPATT='EQUI'
27713        GOTO300
27714      ENDIF
27715      IF(IPATT(1:4).EQ.'VARI')THEN
27716        IPATT='VARI'
27717        GOTO300
27718      ENDIF
27719      IF(IPATT(1:4).EQ.'TILD')THEN
27720        IPATT='TILD'
27721        GOTO300
27722      ENDIF
27723      IF(IPATT(1:4).EQ.'CARA')THEN
27724        IPATT='CARA'
27725        GOTO300
27726      ENDIF
27727      IF(IPATT(1:4).EQ.'PRIM')THEN
27728        IPATT='PRIM'
27729        GOTO300
27730      ENDIF
27731      IF(IPATT(1:4).EQ.'RADI')THEN
27732        IPATT='RADI'
27733        GOTO300
27734      ENDIF
27735      IF(IPATT(1:4).EQ.'LRAD')THEN
27736        IPATT='LRAD'
27737        GOTO300
27738      ENDIF
27739      IF(IPATT(1:4).EQ.'BRAD')THEN
27740        IPATT='BRAD'
27741        GOTO300
27742      ENDIF
27743      IF(IPATT(1:4).EQ.'SUBS')THEN
27744        IPATT='SUBS'
27745        GOTO300
27746      ENDIF
27747      IF(IPATT(1:4).EQ.'SUPE')THEN
27748        IPATT='SUPE'
27749        GOTO300
27750      ENDIF
27751      IF(IPATT(1:4).EQ.'UNSB')THEN
27752        IPATT='UNSB'
27753        GOTO300
27754      ENDIF
27755      IF(IPATT(1:4).EQ.'UNSP')THEN
27756        IPATT='UNSP'
27757        GOTO300
27758      ENDIF
27759      IF(IPATT(1:4).EQ.'UNIO')THEN
27760        IPATT='UNIO'
27761        GOTO300
27762      ENDIF
27763      IF(IPATT(1:4).EQ.'INTR')THEN
27764        IPATT='INTR'
27765        GOTO300
27766      ENDIF
27767      IF(IPATT(1:4).EQ.'ELEM')THEN
27768        IPATT='ELEM'
27769        GOTO300
27770      ENDIF
27771      IF(IPATT(1:4).EQ.'THEX')THEN
27772        IPATT='THEX'
27773        GOTO300
27774      ENDIF
27775      IF(IPATT(1:4).EQ.'THFO')THEN
27776        IPATT='THFO'
27777        GOTO300
27778      ENDIF
27779C
27780C  CHECK FOR MISCELLANEOUS SYMBOLS
27781C
27782      IF(IPATT(1:4).EQ.'LAPO')THEN
27783        IPATT='LAPO'
27784        GOTO300
27785      ENDIF
27786      IF(IPATT(1:4).EQ.'RAPO')THEN
27787        IPATT='RAPO'
27788        GOTO300
27789      ENDIF
27790      IF(IPATT(1:4).EQ.'LBRA')THEN
27791        IPATT='LBRA'
27792        GOTO300
27793      ENDIF
27794      IF(IPATT(1:4).EQ.'RBRA')THEN
27795        IPATT='RBRA'
27796        GOTO300
27797      ENDIF
27798      IF(IPATT(1:4).EQ.'LCBR')THEN
27799        IPATT='LCBR'
27800        GOTO300
27801      ENDIF
27802      IF(IPATT(1:4).EQ.'RCBR')THEN
27803        IPATT='RCBR'
27804        GOTO300
27805      ENDIF
27806      IF(IPATT(1:4).EQ.'LELB')THEN
27807        IPATT='LELB'
27808        GOTO300
27809      ENDIF
27810      IF(IPATT(1:4).EQ.'RELB')THEN
27811        IPATT='RELB'
27812        GOTO300
27813      ENDIF
27814      IF(IPATT(1:4).EQ.'RACC')THEN
27815        IPATT='RACC'
27816        GOTO300
27817      ENDIF
27818      IF(IPATT(1:4).EQ.'LACC')THEN
27819        IPATT='LACC'
27820        GOTO300
27821      ENDIF
27822      IF(IPATT(1:4).EQ.'BREV')THEN
27823        IPATT='BREV'
27824        GOTO300
27825      ENDIF
27826      IF(IPATT(1:4).EQ.'LQUO')THEN
27827        IPATT='LQUO'
27828        GOTO300
27829      ENDIF
27830      IF(IPATT(1:4).EQ.'NASP')THEN
27831        IPATT='NASP'
27832        GOTO300
27833      ENDIF
27834      IF(IPATT(1:4).EQ.'IASP')THEN
27835        IPATT='IASP'
27836        GOTO300
27837      ENDIF
27838      IF(IPATT(1:4).EQ.'RARR')THEN
27839        IPATT='RARR'
27840        GOTO300
27841      ENDIF
27842      IF(IPATT(1:4).EQ.'LARR')THEN
27843        IPATT='LARR'
27844        GOTO300
27845      ENDIF
27846      IF(IPATT(1:4).EQ.'UARR')THEN
27847        IPATT='UARR'
27848        GOTO300
27849      ENDIF
27850      IF(IPATT(1:4).EQ.'DARR')THEN
27851        IPATT='DARR'
27852        GOTO300
27853      ENDIF
27854      IF(IPATT(1:4).EQ.'PARA')THEN
27855        IPATT='PARA'
27856        GOTO300
27857      ENDIF
27858      IF(IPATT(1:4).EQ.'DAGG')THEN
27859        IPATT='DAGG'
27860        GOTO300
27861      ENDIF
27862      IF(IPATT(1:4).EQ.'DDAG')THEN
27863        IPATT='DDAG'
27864        GOTO300
27865      ENDIF
27866      IF(IPATT(1:4).EQ.'VBAR')THEN
27867        IPATT='VBAR'
27868        GOTO300
27869      ENDIF
27870      IF(IPATT(1:4).EQ.'DVBA')THEN
27871        IPATT='DVBA'
27872        GOTO300
27873      ENDIF
27874      IF(IPATT(1:4).EQ.'LVBA')THEN
27875        IPATT='LVBA'
27876        GOTO300
27877      ENDIF
27878      IF(IPATT(1:4).EQ.'LHBA')THEN
27879        IPATT='LHBA'
27880        GOTO300
27881      ENDIF
27882      IF(IPATT(1:4).EQ.'BAR ')GOTO300
27883      IF(IPATT(1:4).EQ.'DEL ')GOTO300
27884CCCCC SEPTEMBER 1995.  PIXEL IS SPECIAL CASE (TURN A SINGLE POINT ON).
27885CCCCC IMPLEMENTED IN THE GRDRPH ROUTINE.
27886      IF(IPATT(1:4).EQ.'PIXE')THEN
27887        IPATT='PIXE'
27888        GOTO200
27889      ENDIF
27890      IF(IPATT(1:4).EQ.'DEL ')GOTO300
27891C
27892      IF(IFONT.NE.'TEKT')GOTO300
27893      IF(IFONT.EQ.'TEKT'.AND.NCSTRI.GE.2)GOTO400
27894      GOTO300
27895C
27896C  ONE CHARACTER, HARDWARE TEXT
27897C
27898 200  CONTINUE
27899CCCCC AUGUST 1993.  SET CASE CORRECTLY.  NOTE THAT NO ACTION REQUIRED
27900CCCCC IF CASE IS UPPER SINCE PLOT SYMBOL STORED IN UPPER CASE.
27901CCCCC NOVEMBER 1995.  CASE CONVERSION PERFORMED IN DPDRPM.
27902CCCCC IF(ICASE.EQ.'LOWE')THEN
27903CCCCC   ICTEMP=ISYMBL(1:1)
27904CCCCC   CALL DPCOAN(ICTEMP,IVALT)
27905CCCCC   IF(IVALT.GE.65.AND.IVALT.LE.90)IVALT=IVALT+32
27906CCCCC   CALL DPCONA(IVALT,ICTEMP)
27907CCCCC   ISYMBL(1:1)=ICTEMP
27908CCCCC END IF
27909CCCCC END CHANGE
27910CCCCC FOLLOWING SECTION MODIFIED AUGUST 1996.
27911      IF(IGFONT.EQ.'OFF')THEN
27912      ELSE
27913        IF(IPATT(1:4).EQ.'BLAN')GOTO299
27914        IF(IPATT(1:4).EQ.'BL  ')GOTO299
27915        IF(IPATT(1:4).EQ.'NONE')GOTO299
27916        IF(IPATT(1:4).EQ.'NO  ')GOTO299
27917        IF(IGFONT.NE.'TEKT')GOTO300
27918  299   CONTINUE
27919      ENDIF
27920C
27921      CALL GRDRPH(PX,PY,NP,
27922     1IFIG,IPATT,IFONT,ICASE,IJUST,IDIR,ANGLE,IFILL,ICOL,
27923     1JPATT,JFONT,JCASE,JJUST,JDIR,ANGLE2,JFILL,JCOL,
27924     1PTHICK,JTHICK,PTHIC2,
27925     1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
27926     1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
27927     1JHEIG2,JWIDT2,JVEGA2,JHOGA2,
27928     1ISYMBL,ISPAC)
27929      GOTO9000
27930C
27931C  MARCH 1992.  FOLLOWING LINE MODOIFIED.
27932CCCCC IF(IFONT.NE.'TEKT'.OR.NCSTRI.GE.2)
27933C  SOFTWARE TEXT (OR SPECIAL SYMBOL DRAWN WITH SOFTWARE TEXT)
27934C
27935 300  CONTINUE
27936C  FEBRUARY 1994.  ARROW CASE HANDLED SEPARATELY.
27937      IF(IPATT(1:4).EQ.'ARRO')GOTO500
27938      IF(IPATT(1:4).EQ.'ARRH')GOTO500
27939      IF(IPATT(1:4).EQ.'VECT')GOTO500
27940C
27941      CALL GRDRPG(PX,PY,NP,ISTRIN,NCSTRI,
27942     1IFIG,IPATT,IFONT,ICASE,IJUST,IDIR,ANGLE,IFILL,ICOL,
27943     1JPATT,JFONT,JCASE,JJUST,JDIR,ANGLE2,JFILL,JCOL,
27944     1PTHICK,JTHICK,PTHIC2,
27945     1PHEIGH,PWIDTH,PVEGAP,PHOGAP,
27946     1PHEIG2,PWIDT2,PVEGA2,PHOGA2,
27947     1ISYMBL,ISPAC)
27948      GOTO9000
27949C
27950C  MARCH 1992.  FOLLOWING BLOCK OF CODE ADDED.
27951C  MORE THAN ONE CHARACTER, HARDWARE TEXT (BUT NOT SPECIAL CHARACTER)
27952C
27953 400   CONTINUE
27954      IF(ISTRIN(NCSTRI-1).EQ.'('.AND.ISTRIN(NCSTRI).EQ.')')
27955     1NCSTRI=NCSTRI-2
27956CCCCC AUGUST 1993.  SET CASE CORRECTLY.  NOTE THAT NO ACTION REQUIRED
27957CCCCC IF CASE IS UPPER SINCE PLOT SYMBOL STORED IN UPPER CASE.
27958CCCCC NOVEMBER 1995.  PLOT SYMBOL CAN BE STORED WITH CASE ASIS
27959      IF(ICASE.EQ.'LOWE')THEN
27960        DO410I=1,NCSTRI
27961          ICTEMP=ISTRIN(I)(1:1)
27962          CALL DPCOAN(ICTEMP,IVALT)
27963          IF(IVALT.GE.65.AND.IVALT.LE.90)IVALT=IVALT+32
27964          CALL DPCONA(IVALT,ICTEMP)
27965          ISTRIN(I)(1:1)=ICTEMP
27966 410    CONTINUE
27967        DO420I=1,16
27968          ISYMBL(I:I)=ISTRIN(I)(1:1)
27969 420    CONTINUE
27970      ELSEIF(ICASE.EQ.'UPPE')THEN
27971        DO430I=1,NCSTRI
27972          ICTEMP=ISTRIN(I)(1:1)
27973          CALL DPCOAN(ICTEMP,IVALT)
27974          IF(IVALT.GE.97.AND.IVALT.LE.122)IVALT=IVALT-32
27975          CALL DPCONA(IVALT,ICTEMP)
27976          ISTRIN(I)(1:1)=ICTEMP
27977 430    CONTINUE
27978        DO440I=1,16
27979          ISYMBL(I:I)=ISTRIN(I)(1:1)
27980 440    CONTINUE
27981      END IF
27982CCCCC END CHANGE
27983      DO1000I=1,NP
27984      PX1=PX(I)
27985      PY1=PY(I)
27986      CALL DPWRTE(PX1,PY1,ISTRIN,NCSTRI,
27987     1IFONT,ICASE,IJUST,IDIR,ANGLE,IFILL,ICOL,
27988     1PHEIGH,PWIDTH,PVEGAP,PHOGAP,PTHICK,
27989     1ISYMBL,ISPAC,
27990     1IMPSW2,AMPSCH,AMPSCW,
27991     1PX99,PY99)
27992 1000 CONTINUE
27993      GOTO9000
27994C
27995C  AUGUST 1992.  HANDLE ARROW AND VECTOR CASE SEPARATELY.  THIS
27996C  CASE WILL USE THE DPARR3 ROUTINE (I COULDN'T GET IT TO WORK
27997C  RIGHT THROUGH THE FONT DRAWING ROUTINES). SINCE THE ARROW IS
27998C  DRAWN AT THE ANGLE DETERMINED BY TWO POINTS, THIS CASE WILL BE
27999C  HANDLED SEPARATELY.  IF THE PLOT SYMBOL IS "VECTOR", NO POINT IS
28000C  DRAWN AT THE FIRST POINT.  IF THE PLOT SYMBOL IS "ARROW" OR "ARRH",
28001C  DRAW THE ARROW HOIRZONTALLY (I.E., 0 DEGREES).
28002C
28003C  SINCE WANT THE ARROW HEAD TO BE AT THE POINT, ADJUST THE COORDINATES
28004C  TO BE CENTER JUSTIFIED.
28005C
28006 500  CONTINUE
28007      ITRCSW='OFF'
28008      PREPSP=0.1
28009      ISTART=2
28010      IF(NP.LT.ISTART)GOTO9000
28011      PXINC=PWIDT2/2.0
28012      PYINC=PHEIG2/2.0
28013      PXINC=PXINC*(100.0/(PWXMAX-PWXMIN))
28014      PYINC=PYINC*(100.0/(PWYMAX-PWYMIN))
28015      PXINC=0.0
28016      PYINC=0.0
28017      IF(IPATT.NE.'VECT')THEN
28018        PX2=PX(1)+PXINC
28019        PY2=PY(1)+PYINC
28020        PX1=PX2-1.0
28021        PY1=PY2
28022        CALL DPARR3(
28023     1  PX1,PY1,PX2,PY2,
28024     1  IFIG,
28025     1  ITRCSW,
28026     1  IPATT(1:4),ICOL,PTHICK,
28027     1  IFILL,ICOL,
28028     1  ICOL,PTHICK,PREPSP,
28029     1  PHEIGH,PWIDTH,PVEGAP,PHOGAP)
28030      ENDIF
28031      DO510I=ISTART,NP
28032      PX1=PX(I-1)+PXINC
28033      PX2=PX(I)+PXINC
28034      PY1=PY(I-1)+PYINC
28035      PY2=PY(I)+PYINC
28036      CALL DPARR3(
28037     1PX1,PY1,PX2,PY2,
28038     1IFIG,
28039     1ITRCSW,
28040     1IPATT(1:4),ICOL,PTHICK,
28041     1IFILL,ICOL,
28042     1ICOL,PTHICK,PREPSP,
28043     1PHEIGH,PWIDTH,PVEGAP,PHOGAP)
28044 510  CONTINUE
28045      GOTO9000
28046C
28047C               *****************
28048C               **  STEP 90--  **
28049C               **  EXIT       **
28050C               *****************
28051C
28052 9000 CONTINUE
28053      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'DRPM')GOTO9090
28054      WRITE(ICOUT,999)
28055      CALL DPWRST('XXX','BUG ')
28056      WRITE(ICOUT,9011)
28057 9011 FORMAT('***** AT THE END       OF GRDRPM--')
28058      CALL DPWRST('XXX','BUG ')
28059      WRITE(ICOUT,9012)NP
28060 9012 FORMAT('NP = ',I8)
28061      CALL DPWRST('XXX','BUG ')
28062      WRITE(ICOUT,9013)IMANUF
28063 9013 FORMAT('IMANUF = ',A4)
28064      CALL DPWRST('XXX','BUG ')
28065      WRITE(ICOUT,9014)IFONT,NCSTRI
28066 9014 FORMAT('IFONT,NCSTRI = ',A4,I8)
28067      CALL DPWRST('XXX','BUG ')
28068      DO9015I=1,NP
28069      WRITE(ICOUT,9016)PX(I),PY(I)
28070 9016 FORMAT('PX(I),PY(I) = ',E15.7,E15.7)
28071      CALL DPWRST('XXX','BUG ')
28072 9015 CONTINUE
28073      WRITE(ICOUT,9018)IFIG
28074 9018 FORMAT('IFIG = ',A4)
28075      CALL DPWRST('XXX','BUG ')
28076      WRITE(ICOUT,9019)IPATT,JPATT
28077 9019 FORMAT('IPATT,JPATT = ',A16,I8)
28078      CALL DPWRST('XXX','BUG ')
28079      WRITE(ICOUT,9020)IFONT,JFONT
28080 9020 FORMAT('IFONT,JFONT = ',A4,I8)
28081      CALL DPWRST('XXX','BUG ')
28082      WRITE(ICOUT,9021)ICASE,JCASE
28083 9021 FORMAT('ICASE,JCASE = ',A4,I8)
28084      CALL DPWRST('XXX','BUG ')
28085      WRITE(ICOUT,9022)IJUST,JJUST
28086 9022 FORMAT('IJUST,JJUST = ',A4,I8)
28087      CALL DPWRST('XXX','BUG ')
28088      WRITE(ICOUT,9023)IDIR,ANGLE,JDIR
28089 9023 FORMAT('IDIR,ANGLE,JDIR = ',A4,2X,E15.7,I8)
28090      CALL DPWRST('XXX','BUG ')
28091      WRITE(ICOUT,9024)ICOL,JCOL
28092 9024 FORMAT('ICOL,JCOL = ',A4,I8)
28093      CALL DPWRST('XXX','BUG ')
28094      WRITE(ICOUT,9026)PTHICK,JTHICK,PTHIC2
28095 9026 FORMAT('PTHICK,JTHICK,PTHIC2 = ',E15.7,I8,E15.7)
28096      CALL DPWRST('XXX','BUG ')
28097      WRITE(ICOUT,9027)PHEIGH,PWIDTH,PVEGAP,PHOGAP
28098 9027 FORMAT('PHEIGH,PWIDTH,PVEGAP,PHOGAP = ',4E15.7)
28099      CALL DPWRST('XXX','BUG ')
28100      WRITE(ICOUT,9028)PHEIG2,PWIDT2,PVEGA2,PHOGA2
28101 9028 FORMAT('PHEIG2,PWIDT2,PVEGA2,PHOGA2 = ',4E15.7)
28102      CALL DPWRST('XXX','BUG ')
28103      WRITE(ICOUT,9031)ISYMBL,ISPAC
28104 9031 FORMAT('ISYMBL,ISPAC = ',A4,2X,A4)
28105      CALL DPWRST('XXX','BUG ')
28106      WRITE(ICOUT,9039)IBUGG4,ISUBG4,IERRG4
28107 9039 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
28108      CALL DPWRST('XXX','BUG ')
28109 9090 CONTINUE
28110C
28111      RETURN
28112      END
28113      SUBROUTINE GRFIR2(PX,PY,NP,PXSPA2,PYSPA2,IFACTO,
28114     1                  IHORPA,IVERPA,IDUPPA,IDDOPA,JCOL)
28115C
28116C     PURPOSE--FOR A GENERAL GRAPHICS DEVICE, DRAW A SOLID VERTICAL
28117C              PATTERN WITHIN A GENERAL POLYLINE WITH THE ONLY
28118C              CONSTRAINT THAT A GIVEN X VALUE HAVE AT MOST 2 Y VALUES.
28119C     NOTE--THE COORDINATES IN (PX(.),PY(.)) ARE IN
28120C           STANDARDIZED (0.0 TO 100.0) UNITS.
28121C     NOTE--THERE ARE NP SUCH COORDINATE PAIRS.
28122C
28123C     WRITTEN BY--JAMES J. FILLIBEN
28124C                 STATISTICAL ENGINEERING DIVISION
28125C                 CENTER FOR APPLIED MATHEMATICS
28126C                 NATIONAL BUREAU OF STANDARDS
28127C                 WASHINGTON, D. C. 20234
28128C                 PHONE--301-921-3651
28129C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
28130C           OF THE NATIONAL BUREAU OF STANDARDS.
28131C     LANGUAGE--ANSI FORTRAN (1977)
28132C     VERSION NUMBER--83.6
28133C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--MAY       1983.
28134C     UPDATED         --JUNE      1990. TEMPORARY ARRAYS TO GARBAGE COMMON
28135C     UPDATED         --JULY      2001. ADD COLOR INDEX (FOR GD DEVICE)
28136C     UPDATED         --JULY      2019. TWEAK SCRATCH STORAGE
28137C
28138C-----NON-COMMON VARIABLES (GRAPHICS)-------------------------------------------
28139C
28140      CHARACTER*4 IHORPA
28141      CHARACTER*4 IVERPA
28142      CHARACTER*4 IDUPPA
28143      CHARACTER*4 IDDOPA
28144C
28145      CHARACTER*4 ISUBN0
28146C
28147C---------------------------------------------------------------------
28148C
28149      INCLUDE 'DPCOPA.INC'
28150C
28151      DIMENSION PX(*)
28152      DIMENSION PY(*)
28153C
28154      DIMENSION PXS(MAXPOP)
28155      DIMENSION PYS(MAXPOP)
28156      INCLUDE 'DPCOZZ.INC'
28157      EQUIVALENCE (GARBAG(IGRG10),PXS(1))
28158      EQUIVALENCE (GARBAG(IGRG11),PYS(1))
28159C
28160C-----COMMON----------------------------------------------------------
28161C
28162      INCLUDE 'DPCOGR.INC'
28163      INCLUDE 'DPCOBE.INC'
28164      INCLUDE 'DPCOP2.INC'
28165C
28166C-----START POINT-----------------------------------------------------
28167C
28168      ISUBN0='FIR2'
28169C
28170      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'FIR2')GOTO90
28171      WRITE(ICOUT,999)
28172  999 FORMAT(1X)
28173      CALL DPWRST('XXX','BUG ')
28174      WRITE(ICOUT,51)
28175   51 FORMAT('***** AT THE BEGINNING OF GRFIR2--')
28176      CALL DPWRST('XXX','BUG ')
28177      WRITE(ICOUT,52)NP
28178   52 FORMAT('NP = ',I8)
28179      CALL DPWRST('XXX','BUG ')
28180      DO55I=1,NP
28181      WRITE(ICOUT,56)I,PX(I),PY(I)
28182   56 FORMAT('I,PX(I),PY(I) = ',I8,2E15.7)
28183      CALL DPWRST('XXX','BUG ')
28184   55 CONTINUE
28185      WRITE(ICOUT,57)PXSPA2,PYSPA2
28186   57 FORMAT('PXSPA2,PYSPA2 = ',2E15.7)
28187      CALL DPWRST('XXX','BUG ')
28188      WRITE(ICOUT,58)IFACTO
28189   58 FORMAT('IFACTO = ',I8)
28190      CALL DPWRST('XXX','BUG ')
28191      WRITE(ICOUT,61)IHORPA,IVERPA,IDUPPA,IDDOPA
28192   61 FORMAT('IHORPA,IVERPA,IDUPPA,IDDOPA = ',A4,2X,A4,2X,A4,2X,A4)
28193      CALL DPWRST('XXX','BUG ')
28194      WRITE(ICOUT,69)IBUGG4,ISUBG4,IERRG4
28195   69 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
28196      CALL DPWRST('XXX','BUG ')
28197   90 CONTINUE
28198C
28199C               ************************************
28200C               **  STEP 1--                      **
28201C               **  SORT THE X COORDINATES        **
28202C               **  AND CARRY ALONG THE Y VALUES  **
28203C               ************************************
28204C
28205      IF(NP.LE.1000)GOTO1010
28206      GOTO1090
28207 1010 CONTINUE
28208      CALL SORTC(PX,PY,NP,PXS,PYS)
28209 1090 CONTINUE
28210C
28211C               **************************************
28212C               **  STEP 2--                        **
28213C               **  ITERATE WITHIN EACH X INTERVAL  **
28214C               **************************************
28215C
28216      NPM1=NP-1
28217      DO1100I=1,NPM1
28218      IP1=I+1
28219C
28220C               ****************************************
28221C               **  STEP 2.1--                        **
28222C               **  FIND THE MIDPOINT OF THE INTERVAL **
28223C               ****************************************
28224C
28225      IF(NP.LE.1000)GOTO1110
28226      GOTO1120
28227C
28228 1110 CONTINUE
28229      XI=PXS(I)
28230      YI=PYS(I)
28231      XIP1=PXS(IP1)
28232      YIP1=PYS(IP1)
28233      GOTO1180
28234C
28235 1120 CONTINUE
28236      XI=PX(I)
28237      YI=PY(I)
28238      XIP1=PX(IP1)
28239      YIP1=PY(IP1)
28240      GOTO1180
28241C
28242 1180 CONTINUE
28243      XMID=(XI+XIP1)/2.0
28244      YMID=(YI+YIP1)/2.0
28245C
28246      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1181)XI,YI,XIP1,YIP1,XMID,YMID
28247 1181 FORMAT('XI,YI,XIP1,YIP1,XMID,YMID = ',6E15.7)
28248      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
28249C
28250C               *************************************
28251C               **  STEP 2.2--                     **
28252C               **  FIND THE ENDPOINT COORDINATES  **
28253C               **  OF ONE BOUNDING LINE SEGMENT.  **
28254C               *************************************
28255C
28256      DO1200J=1,NPM1
28257      JP1=J+1
28258      J1=J
28259      J2=J1+1
28260      IF(PX(J).LE.XMID.AND.XMID.LE.PX(JP1))GOTO1250
28261      IF(PX(JP1).LE.XMID.AND.XMID.LE.PX(J))GOTO1250
28262 1200 CONTINUE
28263      J1=NP
28264      J2=1
28265 1250 CONTINUE
28266      PX1=PX(J1)
28267      PY1=PY(J1)
28268      PX2=PX(J2)
28269      PY2=PY(J2)
28270      J2SAVE=J2
28271C
28272      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1221)J1,J2,J2SAVE
28273 1221 FORMAT('J1,J2,J2SAVE = ',3I8)
28274      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
28275      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1222)PX1,PY1,PX2,PY2
28276 1222 FORMAT('PX1,PY1,PX2,PY2 = ',4E15.7)
28277      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
28278C
28279C               *******************************************
28280C               **  STEP 2.3--                           **
28281C               **  FIND THE ENDPOINT COORDINATES        **
28282C               **  OF THE OTHER BOUNDING LINE SEGMENT.  **
28283C               *******************************************
28284C
28285      J3=J2SAVE
28286      J4=J3+1
28287      IF(J4.GT.NP)J4=1
28288      JMIN=J2SAVE
28289      IF(JMIN.GE.NP)GOTO1350
28290      DO1300J=JMIN,NPM1
28291      JP1=J+1
28292      J3=J
28293      J4=J3+1
28294      IF(PX(J).LE.XMID.AND.XMID.LE.PX(JP1))GOTO1350
28295      IF(PX(JP1).LE.XMID.AND.XMID.LE.PX(J))GOTO1350
28296 1300 CONTINUE
28297      J3=NP
28298      J4=1
28299 1350 CONTINUE
28300      PX3=PX(J3)
28301      PY3=PY(J3)
28302      PX4=PX(J4)
28303      PY4=PY(J4)
28304C
28305      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1321)J1,J2,J2SAVE,JMIN,J3,J4
28306 1321 FORMAT('J1,J2,J2SAVE,JMIN,J3,J4 = ',6I8)
28307      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
28308      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1322)PX3,PY3,PX4,PY4
28309 1322 FORMAT('PX3,PY3,PX4,PY4 = ',4E15.7)
28310      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
28311C
28312C               *****************************************
28313C               **  STEP 2.4--                        **
28314C               **  DETERMINE THE INTERCEPT AND SLOPE  **
28315C               **  OF ONE BOUNDING LINE SEGMENT.      **
28316C               *****************************************
28317C
28318      IF(PX1.EQ.PX2)GOTO1411
28319      IF(PY1.EQ.PY2)GOTO1412
28320      GOTO1413
28321C
28322 1411 CONTINUE
28323      AM12=CPUMAX
28324      B12=CPUMAX
28325      GOTO1419
28326C
28327 1412 CONTINUE
28328      AM12=0.0
28329      B12=PY1
28330      GOTO1419
28331C
28332 1413 CONTINUE
28333      AM12=(PY2-PY1)/(PX2-PX1)
28334      B12=PY1-AM12*PX1
28335      GOTO1419
28336C
28337 1419 CONTINUE
28338C
28339      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1421)AM12,B12
28340 1421 FORMAT('AM12,B12 = ',2E15.7)
28341      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
28342C
28343C               *******************************************
28344C               **  STEP 2.5--                          **
28345C               **  DETERMINE THE INTERCEPT AND SLOPE    **
28346C               **  OF THE OTHER BOUNDING LINE SEGMENT.  **
28347C               *******************************************
28348C
28349      IF(PX3.EQ.PX4)GOTO1511
28350      IF(PY3.EQ.PY4)GOTO1512
28351      GOTO1513
28352C
28353 1511 CONTINUE
28354      AM34=CPUMAX
28355      B34=CPUMAX
28356      GOTO1519
28357C
28358 1512 CONTINUE
28359      AM34=0.0
28360      B34=PY3
28361      GOTO1519
28362C
28363 1513 CONTINUE
28364      AM34=(PY4-PY3)/(PX4-PX3)
28365      B34=PY3-AM34*PX3
28366      GOTO1519
28367C
28368 1519 CONTINUE
28369C
28370      IF(IBUGG4.EQ.'ON')WRITE(ICOUT,1521)AM34,B34
28371 1521 FORMAT('AM34,B34 = ',2E15.7)
28372      IF(IBUGG4.EQ.'ON')CALL DPWRST('XXX','BUG ')
28373C
28374C               *********************************
28375C               **  STEP 2.6--                 **
28376C               **  FILL THE LOCAL SUB-REGION  **
28377C               *********************************
28378C
28379      XDEL=PXSPA2
28380      X=XI-XDEL
28381 1600 CONTINUE
28382        X=X+XDEL
28383        IF(X.GT.XIP1)GOTO1690
28384        PX5=X
28385        PY5=PY1
28386        IF(AM12.NE.CPUMAX.AND.B12.NE.CPUMAX)PY5=AM12*X+B12
28387        PX6=X
28388        PY6=PY3
28389        IF(AM34.NE.CPUMAX.AND.B34.NE.CPUMAX)PY6=AM34*X+B34
28390C
28391        IF(IBUGG4.EQ.'ON')THEN
28392          WRITE(ICOUT,1611)X,PX5,PY5,PX6,PY6
28393 1611     FORMAT('X,PX5,PY5,PX6,PY6 = ',5E15.7)
28394          CALL DPWRST('XXX','BUG ')
28395        ENDIF
28396C
28397        CALL GRTRSD(PX5,PY5,IX5,IY5,ISUBN0)
28398        CALL GRTRSD(PX6,PY6,IX6,IY6,ISUBN0)
28399CCCCC   JULY 2001.  ADD COLOR INDEX (NEEDED FOR GD DEVICE)
28400CCCCC   CALL GRDRLI(IX5,IY5,IX6,IY6,PX5,PY5,PX6,PY6,IFACTO)
28401        CALL GRDRLI(IX5,IY5,IX6,IY6,PX5,PY5,PX6,PY6,IFACTO,JCOL)
28402      GOTO1600
28403C
28404 1690 CONTINUE
28405C
28406 1100 CONTINUE
28407C
28408C               *****************
28409C               **  STEP 90--  **
28410C               **  EXIT       **
28411C               *****************
28412C
28413      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'FIR2')GOTO9090
28414      WRITE(ICOUT,999)
28415      CALL DPWRST('XXX','BUG ')
28416      WRITE(ICOUT,9011)
28417 9011 FORMAT('***** AT THE END       OF GRFIR2--')
28418      CALL DPWRST('XXX','BUG ')
28419      WRITE(ICOUT,9012)NP
28420 9012 FORMAT('NP = ',I8)
28421      CALL DPWRST('XXX','BUG ')
28422      DO9015I=1,NP
28423      WRITE(ICOUT,9016)I,PX(I),PY(I)
28424 9016 FORMAT('I,PX(I),PY(I) = ',I8,2E15.7)
28425      CALL DPWRST('XXX','BUG ')
28426 9015 CONTINUE
28427      WRITE(ICOUT,9017)PXSPA2,PYSPA2
28428 9017 FORMAT('PXSPA2,PYSPA2 = ',2E15.7)
28429      CALL DPWRST('XXX','BUG ')
28430      WRITE(ICOUT,9018)IFACTO
28431 9018 FORMAT('IFACTO = ',I8)
28432      CALL DPWRST('XXX','BUG ')
28433      WRITE(ICOUT,9021)IHORPA,IVERPA,IDUPPA,IDDOPA
28434 9021 FORMAT('IHORPA,IVERPA,IDUPPA,IDDOPA = ',A4,2X,A4,2X,A4,2X,A4)
28435      CALL DPWRST('XXX','BUG ')
28436      WRITE(ICOUT,9029)IBUGG4,ISUBG4,IERRG4
28437 9029 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
28438      CALL DPWRST('XXX','BUG ')
28439 9090 CONTINUE
28440C
28441      RETURN
28442      END
28443      SUBROUTINE GRFIR3(PX,PY,NP,PXSPA,PYSPA,IFACTO,
28444     1                  IHORPA,IVERPA,IDUPPA,IDDOPA,
28445     1                  IPATT2,PTHICK,ICOL)
28446C
28447C     PURPOSE--FOR A GENERAL GRAPHICS DEVICE, FILL A POLYGON (CONVEX OR
28448C              CONCAVE) WITH A HATCH PATTERN.  THE ROUTINE GRHTCH
28449C              ACTUALLY DOES THE FILL.  THIS ROUTINE IS THE DRIVER FOR
28450C              THE 4 CASES OF VERTICAL, HORIZONTAL, UP DIAGONAL, DOWN
28451C              DIAGONAL.  SOLID FILLS ARE HANDLED VIA THE VERTICAL WITH
28452C              A SMALL SPACING.
28453C     NOTE--THE COORDINATES IN (PX(.),PY(.)) ARE IN
28454C           STANDARDIZED (0.0 TO 100.0) UNITS.
28455C     NOTE--THERE ARE NP SUCH COORDINATE PAIRS.
28456C
28457C     WRITTEN BY--JAMES J. FILLIBEN
28458C                 STATISTICAL ENGINEERING DIVISION
28459C                 CENTER FOR APPLIED MATHEMATICS
28460C                 NATIONAL BUREAU OF STANDARDS
28461C                 WASHINGTON, D. C. 20234
28462C                 PHONE--301-921-3651
28463C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
28464C           OF THE NATIONAL BUREAU OF STANDARDS.
28465C     LANGUAGE--ANSI FORTRAN (1977)
28466C     VERSION NUMBER--93.10
28467C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--OCTOBER   1993.
28468C     UPDATED         --JULY      2019. TWEAK SCRATCH STORAGE
28469C
28470C-----NON-COMMON VARIABLES (GRAPHICS)---------------------------------
28471C
28472      CHARACTER*4 IHORPA
28473      CHARACTER*4 IVERPA
28474      CHARACTER*4 IDUPPA
28475      CHARACTER*4 IDDOPA
28476C
28477      CHARACTER*4 ISUBN0
28478C
28479      CHARACTER*4 IPATT2
28480      CHARACTER*4 IFIG
28481      CHARACTER*4 ICOL
28482      CHARACTER*4 IDIR
28483C
28484      DIMENSION PX(*)
28485      DIMENSION PY(*)
28486C
28487      INCLUDE 'DPCOPA.INC'
28488      INCLUDE 'DPCOZZ.INC'
28489      DIMENSION PXS(MAXPOP)
28490      DIMENSION PYS(MAXPOP)
28491      EQUIVALENCE (GARBAG(IGRG10),PXS(1))
28492      EQUIVALENCE (GARBAG(IGRG11),PYS(1))
28493C
28494C
28495C
28496C-----COMMON----------------------------------------------------------
28497C
28498      INCLUDE 'DPCOGR.INC'
28499      INCLUDE 'DPCOBE.INC'
28500      INCLUDE 'DPCOP2.INC'
28501C
28502C-----START POINT-----------------------------------------------------
28503C
28504      ISUBN0='FIR3'
28505      IFIG='LINE'
28506C
28507      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'FIR3')GOTO90
28508      WRITE(ICOUT,999)
28509  999 FORMAT(1X)
28510      CALL DPWRST('XXX','BUG ')
28511      WRITE(ICOUT,51)
28512   51 FORMAT('***** AT THE BEGINNING OF GRFIR3--')
28513      CALL DPWRST('XXX','BUG ')
28514      WRITE(ICOUT,52)NP
28515   52 FORMAT('NP = ',I8)
28516      CALL DPWRST('XXX','BUG ')
28517      DO55I=1,NP
28518      WRITE(ICOUT,56)I,PX(I),PY(I)
28519   56 FORMAT('I,PX(I),PY(I) = ',I8,2E15.7)
28520      CALL DPWRST('XXX','BUG ')
28521   55 CONTINUE
28522      WRITE(ICOUT,57)PXSPA,PYSPA
28523   57 FORMAT('PXSPA,PYSPA = ',2E15.7)
28524      CALL DPWRST('XXX','BUG ')
28525      WRITE(ICOUT,58)IFACTO
28526   58 FORMAT('IFACTO = ',A4)
28527      CALL DPWRST('XXX','BUG ')
28528      WRITE(ICOUT,61)IHORPA,IVERPA,IDUPPA,IDDOPA
28529   61 FORMAT('IHORPA,IVERPA,IDUPPA,IDDOPA = ',A4,2X,A4,2X,A4,2X,A4)
28530      CALL DPWRST('XXX','BUG ')
28531      WRITE(ICOUT,69)IBUGG4,ISUBG4,IERRG4
28532   69 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
28533      CALL DPWRST('XXX','BUG ')
28534      WRITE(ICOUT,70)IPATT2,PTHICK,ICOL
28535   70 FORMAT('IPATT2,PTHICK,ICOL = ',A4,2X,E15.7,2X,A4)
28536      CALL DPWRST('XXX','BUG ')
28537   90 CONTINUE
28538C
28539C               ************************************
28540C               **  STEP 0--                      **
28541C               **  SORT THE X COORDINATES        **
28542C               **  AND CARRY ALONG THE Y VALUES  **
28543C               **  FILTER OUT POINTS IF NOT ENOUGH*
28544C               **  CHANGE.                       **
28545C               ************************************
28546C
28547      EPSX=0.001
28548      EPSY=0.001
28549C
28550      BXMIN=PX(1)
28551      BYMIN=PY(1)
28552      BXMAX=BXMIN
28553      BYMAX=BYMIN
28554      PXS(1)=PX(1)
28555      PYS(1)=PY(1)
28556      J=1
28557      DO10I=2,NP
28558        IF(ABS(PX(I)-PXS(J)).LE.EPSX .AND. ABS(PY(I)-PYS(J)).LE.EPSY)
28559     1     GOTO10
28560        J=J+1
28561        PXS(J)=PX(I)
28562        IF(PXS(J).LT.BXMIN)BXMIN=PXS(J)
28563        IF(PXS(J).GT.BXMAX)BXMAX=PXS(J)
28564        PYS(J)=PY(I)
28565        IF(PYS(J).LT.BYMIN)BYMIN=PYS(J)
28566        IF(PYS(J).GT.BYMAX)BYMAX=PYS(J)
28567 10   CONTINUE
28568      NP2=J
28569CCCCC IF(PXS(1).EQ.PXS(NP).AND.PYS(1).EQ.PYS(NP))NP2=NP-1
28570      BX=(BXMIN + BXMAX)/2.0
28571      BY=(BYMIN + BYMAX)/2.0
28572      IF(NP2.LT.3)GOTO9000
28573C
28574C               ***************************************************
28575C               **  STEP 1--                                     **
28576C               **  DRAW THE HORIZONTAL STRIPES (IF CALLED FOR)  **
28577C               ***************************************************
28578C
28579      IF(IHORPA.EQ.'ON')GOTO1100
28580      GOTO1190
28581 1100 CONTINUE
28582      IDIR='HORI'
28583      DIST=PXSPA
28584      CALL GRPLPX(PXS,PYS,NP2,IDIR,DIST,IPATT2,PTHICK,ICOL)
28585 1190 CONTINUE
28586C
28587C               ***************************************************
28588C               **  STEP 2--                                     **
28589C               **  DRAW THE VERTICAL   STRIPES (IF CALLED FOR)  **
28590C               ***************************************************
28591C
28592      IF(IVERPA.EQ.'ON')GOTO1200
28593      GOTO1290
28594 1200 CONTINUE
28595      IDIR='VERT'
28596      DIST=PYSPA
28597      CALL GRPLPX(PXS,PYS,NP2,IDIR,DIST,IPATT2,PTHICK,ICOL)
28598 1290 CONTINUE
28599C
28600C               ******************************************************
28601C               **  STEP 3--                                        **
28602C               **  DRAW THE UP-DIAGONAL   STRIPES (IF CALLED FOR)  **
28603C               ******************************************************
28604C
28605      IF(IDUPPA.EQ.'ON')GOTO1300
28606      GOTO1390
28607 1300 CONTINUE
28608      DX=1.0
28609      DY=1.0
28610      DIST=PXSPA
28611      CALL GRHTCH(PXS,PYS,NP2,BX,BY,DX,DY,DIST,IPATT2,PTHICK,ICOL)
28612C
28613 1390 CONTINUE
28614C
28615C               ******************************************************
28616C               **  STEP 4--                                        **
28617C               **  DRAW THE DOWN-DIAGONAL STRIPES (IF CALLED FOR)  **
28618C               ******************************************************
28619C
28620      IF(IDDOPA.EQ.'ON')GOTO1400
28621      GOTO1490
28622 1400 CONTINUE
28623      DX=1.0
28624      DY=-1.0
28625      DIST=PXSPA
28626      CALL GRHTCH(PXS,PYS,NP2,BX,BY,DX,DY,DIST,IPATT2,PTHICK,ICOL)
28627 1490 CONTINUE
28628C
28629C               *****************
28630C               **  STEP 90--  **
28631C               **  EXIT       **
28632C               *****************
28633C
28634 9000 CONTINUE
28635      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'FIR3')GOTO9090
28636      WRITE(ICOUT,999)
28637      CALL DPWRST('XXX','BUG ')
28638      WRITE(ICOUT,9011)
28639 9011 FORMAT('***** AT THE END       OF GRFIR3--')
28640      CALL DPWRST('XXX','BUG ')
28641      WRITE(ICOUT,9012)NP2
28642 9012 FORMAT('NP = ',I8)
28643      CALL DPWRST('XXX','BUG ')
28644      DO9015I=1,NP2
28645      WRITE(ICOUT,9016)I,PXS(I),PYS(I)
28646 9016 FORMAT('I,PXS(I),PYS(I) = ',I8,2E15.7)
28647      CALL DPWRST('XXX','BUG ')
28648 9015 CONTINUE
28649      WRITE(ICOUT,9017)PXSPA,PYSPA
28650 9017 FORMAT('PXSPA,PYSPA = ',2E15.7)
28651      CALL DPWRST('XXX','BUG ')
28652      WRITE(ICOUT,9018)IFACTO
28653 9018 FORMAT('IFACTO = ',A4)
28654      CALL DPWRST('XXX','BUG ')
28655      WRITE(ICOUT,9021)IHORPA,IVERPA,IDUPPA,IDDOPA
28656 9021 FORMAT('IHORPA,IVERPA,IDUPPA,IDDOPA = ',A4,2X,A4,2X,A4,2X,A4)
28657      CALL DPWRST('XXX','BUG ')
28658      WRITE(ICOUT,9029)IBUGG4,ISUBG4,IERRG4
28659 9029 FORMAT('IBUGG4,ISUBG4,IERRG4 = ',A4,2X,A4,2X,A4)
28660      CALL DPWRST('XXX','BUG ')
28661 9090 CONTINUE
28662C
28663      RETURN
28664      END
28665      SUBROUTINE GRHTCH(X,Y,N,BX,BY,DX,DY,DIST,
28666     1IPATT2,PTHICK,ICOL)
28667C
28668C     PURPOSE--ROUTINE TO FILL A POLYGON WITH A HATCHING PATTERN.
28669C              ASSUME EQUI-SPACED PARRALLEL LINES (DIST = DISTANCE
28670C              BETWEEN PARRALLEL LINES).  EACH LINE HAS A DIRECTION
28671C              VECTOR DX,DY AND A BASE VECTOR BX,BY).
28672C              MAXP IS THE LIMIT ON THE FACET SIZE (SHOULD BE
28673C              ADEQUATE FOR DATAPLOT PURPOSES).
28674C     ALGORITHM--CODE IS FROM "HIGH-RESOLUTION COMPUTER GRAPHICS USING
28675C              FORTRAN 77" BY ANGEL AND GRIFFITH (PP 93-94).
28676C     VERSION NUMBER--93.10
28677C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--OCTOBER   1993.
28678C
28679      PARAMETER(MAXP=1000)
28680      REAL X(*)
28681      REAL Y(*)
28682C
28683      REAL PX(2)
28684      REAL PY(2)
28685      REAL PX2(MAXP)
28686      REAL PY2(MAXP)
28687C
28688      CHARACTER*4 IFIG
28689      CHARACTER*4 IFLAG
28690      CHARACTER*4 IPATT2
28691      CHARACTER*4 ICOL
28692C
28693C-----COMMON VARIABLES (GENERAL)--------------------------------------
28694C
28695      INCLUDE 'DPCOP2.INC'
28696C
28697C-----START POINT-----------------------------------------------------
28698C
28699      IF(N.LE.3)GOTO9000
28700      EPS=0.000001
28701CCCCC FIND CMID, CMIN, CMAX
28702C
28703      CMID=DX*BY - DY*BX
28704      CMIN=DX*Y(1) - DY*X(1)
28705      CMAX=CMIN
28706      DO101I=2,N
28707        C=DX*Y(I)-DY*X(I)
28708        IF(C.LT.CMIN)THEN
28709          CMIN=C
28710        ELSEIF(C.GT.CMAX)THEN
28711          CMAX=C
28712        ENDIF
28713 101  CONTINUE
28714C
28715CCCCC CONSTRUCT VECTOR (SX,SY)
28716C
28717      DMOD=SQRT(DX**2+DY**2)
28718      SX=-DIST/DMOD*DY
28719      SY=DIST/DMOD*DX
28720C
28721CCCCC CALCULATE NMIN AND NMAX
28722C
28723      NMIN=IFIX((CMIN-CMID)/(DIST*DMOD)+0.9999)
28724      NMAX=IFIX((CMAX-CMID)/(DIST*DMOD))
28725C
28726CCCCC HATCH THE POLYGON
28727C
28728      DO401J=NMIN,NMAX
28729C
28730CCCCC FIND THE BASE VECTOR OF THE HATCHING LINE
28731C
28732        QX=BX+REAL(J)*SX
28733        QY=BY+REAL(J)*SY
28734C
28735CCCCC FIND THE INTERSECTIONS OF THE HATCHING LINE WITH THE
28736CCCCC EDGES OF THE POLYGON.
28737CCCCC EX = 0 (X(I)=X(NI)) AND EY = 0 (Y(I)=Y(NI)) ARE SPECIAL CASES.
28738C
28739        NINT=0
28740        NI=N
28741        DO201I=1,N
28742          EX=X(I)-X(NI)
28743          EY=Y(I)-Y(NI)
28744          CALL GRILL2(X(NI),Y(NI),EX,EY,QX,QY,DX,DY,XI,YI,ISEC)
28745          IF(ISEC.EQ.1)THEN
28746            NINT=NINT+1
28747            PX2(NINT)=XI
28748            PY2(NINT)=YI
28749          ENDIF
28750          NI=I
28751 201    CONTINUE
28752        IF(NINT.EQ.0)GOTO401
28753C
28754CCCCC SORT RMU VALUES INTO ORDER
28755C
28756        CALL SORTC(PX2,PY2,NINT,PX2,PY2)
28757C
28758CCCCC JOIN CORRESPONDING PAIRS OF INTERSECTIONS
28759C
28760        IFLAG='ON'
28761        IFIG='LINE'
28762        NP2=2
28763        NI=1
28764 399    CONTINUE
28765        IF(NI+1.LE.NINT)THEN
28766          PX(1)=PX2(NI)
28767          PY(1)=PY2(NI)
28768          PX(2)=PX2(NI+1)
28769          PY(2)=PY2(NI+1)
28770          CALL DPDRPL(PX,PY,NP2,
28771     1                IFIG,IPATT2,PTHICK,ICOL,
28772     1                JPATT,JTHICK,PTHIC2,JCOL,IFLAG)
28773          IFLAG='OFF'
28774          NI=NI+2
28775          GOTO399
28776        ENDIF
28777C
28778 401  CONTINUE
28779C
28780 9000 CONTINUE
28781      RETURN
28782      END
28783      SUBROUTINE GRIDD(NI,NJ,FC,GC,BFI,BFJ,POI,POJ,XX,YY,EPS3,CDFX,
28784     *   IFLAG)
28785CCCCC DOUBLE PRECISION VERSION OF GRID.  THE DOUBLY NON-CENTRAL T
28786CCCCC CDF FUNCTION SEEMS TO REQUIRE DOUBLE PRECISION (THE DOUBLY
28787CCCCC NON-CENTRAL F SEEMS TO WORK FINE IN SINGLE PRECISION).
28788C
28789C--- COMPUTE DOUBLE SUMMATION OF COMPONENTS OF THE T" C.D.F. OVER THE
28790C--- GRID I=IMIN TO IMAX AND J=JMIN TO JMAX
28791C
28792      IMPLICIT DOUBLE PRECISION (A-H,O-Z)
28793C
28794      DIMENSION BFI(*),BFJ(*),POI(*),POJ(*)
28795C
28796C--- COMPUTE BETA C.D.F. BY RECURRENCE WHEN I=IMIN, J=JMIN TO JMAX
28797C
28798      CALL EDGET(NJ,GC,FC,YY,XX,BFJ,CDFX,POJ,POI,EPS3,IFLAG,1)
28799      IF (NI.LE.1.OR.IFLAG.NE.0) RETURN
28800C
28801C--- COMPUTE BETA C.D.F. BY RECURRENCE WHEN J=JMIN, I=IMIN TO IMAX
28802C
28803      BFI(1) = BFJ(1)
28804      CALL EDGET (NI,FC,GC,XX,YY,BFI,CDFX,POI,POJ,EPS3,IFLAG,2)
28805      IF (NJ.LE.1.OR.IFLAG.NE.0) RETURN
28806C
28807C--- COMPUTE BETA C.D.F. BY RECURRENCE WHEN I>IMIN, J>JMIN
28808C
28809      DO 20 I = 2, NI
28810         BFJ(1) = BFI(I)
28811         DO 10 J = 2, NJ
28812            BFJ(J) = XX*BFJ(J)+YY*BFJ(J-1)
28813            CDFX = CDFX+POI(I)*POJ(J)*BFJ(J)
28814   10    CONTINUE
28815   20 CONTINUE
28816      RETURN
28817      END
28818      SUBROUTINE GRILL2(X1,Y1,X2,Y2,X3,Y3,X4,Y4,X,Y,ISEC)
28819C
28820C     PURPOSE--UTILITY ROUTINE USED BY GRHTCH
28821C              FIND THE POINT OF INTERSECTION (X,Y) OF 2 LINES
28822C              IN THE FORM (X1,Y1)+RMU*(X2,Y2) AND
28823C              (X2,Y3)*RLAM(X4,Y4).
28824C              ISEC IS 1 IF INTERSECTION EXISTS, 0 IF NOT.
28825C     ALGORITHM--CODE IS FROM "HIGH-RESOLUTION COMPUTER GRAPHICS USING
28826C              FORTRAN 77" BY ANGEL AND GRIFFITH (PP 44-45).
28827C     VERSION NUMBER--93.10
28828C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--OCTOBER   1993.
28829C
28830C-----COMMON VARIABLES (GENERAL)--------------------------------------
28831C
28832      INCLUDE 'DPCOP2.INC'
28833C
28834      DATA EPS/0.0000001/
28835C
28836C-----START POINT-----------------------------------------------------
28837C
28838      DELTA=X2*Y4-Y2*X4
28839C
28840C  IF DELTA IS ZERO, PARALLEL LINES
28841C  IF RMU > 1 OR RMU < 0, THEN POINT LIES OFF LINE.
28842C
28843      ISEC=0
28844      IF(ABS(DELTA).GE.EPS)THEN
28845        RMU=((X3-X1)*Y4 - (Y3-Y1)*X4)/DELTA
28846        IF(RMU.GE.0.0 .AND.RMU.LE.1.0)THEN
28847          ISEC=1
28848          X=X1+RMU*X2
28849          Y=Y1+RMU*Y2
28850        ENDIF
28851      ENDIF
28852C
28853      RETURN
28854      END
28855      SUBROUTINE GRPCOR(X,Y,W,N,IWRITE,CORR,
28856     1                  DIST,TEMP1,MAXOBV,
28857     1                  IBUGA3,ISUBRO,IERROR)
28858C
28859C     PURPOSE--THIS SUBROUTINE COMPUTES THE SAMPLE GROUPED DATA
28860C              CORRELATION COEFFIENT OF THE DATA IN X AND Y WITH THE
28861C              FREQUENCIES IN W.
28862C
28863C              THE DATA FOR A GROUPED CORRELATION IS TAKEN FROM A
28864C              BIVARIATE FREQUENCY TABLE.  FOR EXAMPLE, THE FOLLOWING
28865C              TABLE
28866C
28867C                       10-20    20-30     30-40    40-50    50-60
28868C                15-25    6        3         0        0        0
28869C                25-35    3       16        10        0        0
28870C                35-45    0       10        15        7        0
28871C                45-55    0        0         7       10        4
28872C                55-65    0        0         0        4        5
28873C
28874C              THIS WOULD BE CODED TO DATAPLOT AS
28875C
28876C                  X     Y  FREQ
28877C              =================
28878C                 20    15     6
28879C                 20    25  3
28880C                 20    35  0
28881C                 20    45  0
28882C                 20    55  0
28883C                 30    15  3
28884C                 30    25 16
28885C                 30    35 10
28886C                 30    45  0
28887C                 30    55  0
28888C                 40    15  0
28889C                 40    25 10
28890C                 40    35 15
28891C                 40    45  7
28892C                 40    55  0
28893C                 50    15  0
28894C                 50    25  0
28895C                 50    35  7
28896C                 50    45 10
28897C                 50    55  4
28898C                 60    15  0
28899C                 60    25  0
28900C                 60    35  0
28901C                 60    45  4
28902C                 60    55  5
28903C
28904C              THE COMPUTATIONAL FORMULA IS THEN
28905C
28906C                  r = N*C1 - C2*C3/SQRT(N*C4 - C2**2)*(N*C5 - C3**2))
28907C
28908C              WHERE
28909C
28910C                      F(i)   = THE FREQUENCY OF THE i-TH GROUP
28911C                      K      = THE NUMBER OF GROUPS
28912C                      N      = THE SUM OF ALL THE FREQUENCIES
28913C                      X(i)   = THE VALUE FOR RESPONSE VARIABLE ONE
28914C                               FOR THE i-TH GROUP
28915C                      Y(i)   = THE VALUE FOR RESPONSE VARIABLE TWO
28916C                               FOR THE i-TH GROUP
28917C                      C1     = SUM[i=1 to k][F(i)*X(i)*Y(i)]
28918C                      C2     = SUM[i=1 to k][F(i)*X(i)]
28919C                      C3     = SUM[i=1 to k][F(i)*Y(i)]
28920C                      C4     = SUM[i=1 to k][F(i)*X(i)**2]
28921C                      C5     = SUM[i=1 to k][F(i)*Y(i)**2]
28922C
28923C              IF THE CLASSES ARE EQUAL WIDTH, THEN THE X AND Y
28924C              CAN BE CODED FOR COMPUTATIONAL SIMPLICITY.
28925C
28926C     INPUT  ARGUMENTS--X      = THE SINGLE PRECISION VECTOR OF UNSORTED
28927C                                OBSERVATIONS FOR THE FIRST RESPONSE
28928C                                VARIABLE
28929C                     --Y      = THE SINGLE PRECISION VECTOR OF UNSORTED
28930C                                OBSERVATIONS FOR THE SECOND RESPONSE
28931C                                VARIABLE
28932C                     --W      = THE SINGLE PRECISION VECTOR OF
28933C                                FREQUENCIES.
28934C                     --N      = THE INTEGER NUMBER OF OBSERVATIONS
28935C                                IN THE VECTORS X, Y AND W.
28936C     OUTPUT ARGUMENTS--CORR   = THE SINGLE PRECISION VALUE OF THE
28937C                                COMPUTED SAMPLE GROUPED CORRELATION.
28938C     OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE SAMPLE GROUPED
28939C             CORRELATION OF THE INPUT VECTORS X AND Y.
28940C     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
28941C                   OF N FOR THIS SUBROUTINE.
28942C     OTHER DATAPAC   SUBROUTINES NEEDED--NONE.
28943C     FORTRAN LIBRARY SUBROUTINES NEEDED--SQRT.
28944C     MODE OF INTERNAL OPERATIONS--DOUBLE PRECISION.
28945C     LANGUAGE--ANSI FORTRAN (1977)
28946C     WRITTEN BY--ALAN HECKERT
28947C                 STATISTICAL ENGINEERING DIVISION
28948C                 INFORMATION TECHNOLOGY LABORATORY
28949C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
28950C                 GAITHERSBURG, MD 20899-8980
28951C                 PHONE--301-975-2899
28952C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
28953C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
28954C     LANGUAGE--ANSI FORTRAN (1977)
28955C     VERSION NUMBER--2018/11
28956C     ORIGINAL VERSION--NOVEMBER  2018.
28957C
28958C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
28959C
28960      CHARACTER*4 IWRITE
28961      CHARACTER*4 IBUGA3
28962      CHARACTER*4 ISUBRO
28963      CHARACTER*4 IERROR
28964C
28965      CHARACTER*4 ISUBN1
28966      CHARACTER*4 ISUBN2
28967C
28968C---------------------------------------------------------------------
28969C
28970      DOUBLE PRECISION DN
28971      DOUBLE PRECISION DX
28972      DOUBLE PRECISION DY
28973      DOUBLE PRECISION DW
28974      DOUBLE PRECISION DSUM1
28975      DOUBLE PRECISION DSUM2
28976      DOUBLE PRECISION DSUM3
28977      DOUBLE PRECISION DSUM4
28978      DOUBLE PRECISION DSUM5
28979      DOUBLE PRECISION DNUM
28980      DOUBLE PRECISION DENOM
28981C
28982      DIMENSION X(*)
28983      DIMENSION Y(*)
28984      DIMENSION W(*)
28985      DIMENSION DIST(*)
28986      DIMENSION TEMP1(*)
28987C
28988C-----COMMON----------------------------------------------------------
28989C
28990      INCLUDE 'DPCOP2.INC'
28991C
28992C-----START POINT-----------------------------------------------------
28993C
28994      ISUBN1='GRPC'
28995      ISUBN2='OR  '
28996      IERROR='NO'
28997C
28998      DN=0.0D0
28999      DSUM1=0.0D0
29000      DSUM2=0.0D0
29001      DSUM3=0.0D0
29002      DSUM4=0.0D0
29003      DSUM5=0.0D0
29004      CORR=0.0
29005C
29006      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PCOR')THEN
29007        WRITE(ICOUT,999)
29008  999   FORMAT(1X)
29009        CALL DPWRST('XXX','BUG ')
29010        WRITE(ICOUT,51)
29011   51   FORMAT('***** AT THE BEGINNING OF GRPCOR--')
29012        CALL DPWRST('XXX','BUG ')
29013        WRITE(ICOUT,52)IBUGA3,ISUBRO,N
29014   52   FORMAT('IBUGA3,ISUBRO,N = ',2(A4,2X),I8)
29015        CALL DPWRST('XXX','BUG ')
29016        DO55I=1,N
29017          WRITE(ICOUT,56)I,X(I),Y(I),W(I)
29018   56     FORMAT('I,X(I),Y(I),W(I) = ',I8,3G15.7)
29019          CALL DPWRST('XXX','BUG ')
29020   55   CONTINUE
29021      ENDIF
29022C
29023C               ********************************************
29024C               **  STEP 1--                              **
29025C               **  CHECK THE INPUT ARGUMENTS FOR ERRORS  **
29026C               ********************************************
29027C
29028C
29029      IF(N.LT.1)THEN
29030        WRITE(ICOUT,999)
29031        CALL DPWRST('XXX','BUG ')
29032        WRITE(ICOUT,111)
29033  111   FORMAT('***** ERROR IN GROUPED CORRELATION--')
29034        CALL DPWRST('XXX','BUG ')
29035        WRITE(ICOUT,112)
29036  112   FORMAT('      THE INPUT NUMBER OF OBSERVATIONS IS LESS THAN ',
29037     1         'ONE.')
29038        CALL DPWRST('XXX','BUG ')
29039        WRITE(ICOUT,117)N
29040  117   FORMAT('      THE INPUT NUMBER OF OBSERVATIONS = ',I8)
29041        CALL DPWRST('XXX','BUG ')
29042        IERROR='YES'
29043        GOTO9000
29044      ELSEIF(N.EQ.1)THEN
29045        CORR=1.0
29046        GOTO9000
29047      ENDIF
29048C
29049C     CODE THE X AND Y FOR BETTER NUMERICAL STABILITY (BUT ONLY
29050C     IF BINS APPEAR TO BE EQUAL WIDTH)
29051C
29052      ICODEX=1
29053      CALL DISTIN(X,N,IWRITE,DIST,NDIST,IBUGA3,IERROR)
29054      CALL SORT(DIST,NDIST,DIST)
29055      DEL=CPUMIN
29056      DO160I=2,NDIST
29057        DELT=DIST(I) - DIST(I-1)
29058        IF(DEL.GT.0.0)THEN
29059          IF(DELT.NE.DEL)THEN
29060            ICODEX=0
29061            GOTO164
29062          ENDIF
29063        ENDIF
29064  160 CONTINUE
29065  164 CONTINUE
29066      IF(ICODEX.EQ.1)THEN
29067        CALL CODE(X,N,IWRITE,TEMP1,DIST,MAXOBV,IBUGA3,IERROR)
29068        DO169I=1,N
29069          X(I)=TEMP1(I)
29070  169   CONTINUE
29071      ENDIF
29072C
29073      ICODEY=1
29074      CALL DISTIN(Y,N,IWRITE,DIST,NDIST,IBUGA3,IERROR)
29075      CALL SORT(DIST,NDIST,DIST)
29076      DEL=CPUMIN
29077      DO170I=2,NDIST
29078        DELT=DIST(I) - DIST(I-1)
29079        IF(DEL.GT.0.0)THEN
29080          IF(DELT.NE.DEL)THEN
29081            ICODEY=0
29082            GOTO174
29083          ELSE
29084            DEL=DELT
29085          ENDIF
29086        ENDIF
29087  170 CONTINUE
29088  174 CONTINUE
29089      IF(ICODEY.EQ.1)THEN
29090        CALL CODE(Y,N,IWRITE,TEMP1,DIST,MAXOBV,IBUGA3,IERROR)
29091        DO179I=1,N
29092          Y(I)=TEMP1(I)
29093  179   CONTINUE
29094      ENDIF
29095C
29096C     CHECK FOR NEGATIVE WEIGHTS, REMOVE ANY ROWS WITH
29097C     ZERO WEIGHT.  ALSO, SINCE THE WEIGHTS IN THIS CASE
29098C     ARE FRQUENCIES, ROUND TO NEAREST INTEGER.
29099C
29100      ICNT=0
29101      NTOT=0
29102      DO120I=1,N
29103C
29104        IF(W(I).LT.0.0)THEN
29105          WRITE(ICOUT,999)
29106          CALL DPWRST('XXX','BUG ')
29107          WRITE(ICOUT,111)
29108          CALL DPWRST('XXX','BUG ')
29109          WRITE(ICOUT,122)I,W(I)
29110  122     FORMAT('      ROW ',I8,' HAS A NEGATIVE WEIGHT (',G15.7,').')
29111          CALL DPWRST('XXX','BUG ')
29112          IERROR='YES'
29113          GOTO9000
29114        ELSEIF(W(I).GT.0.0)THEN
29115          IVAL=INT(W(I)+0.5)
29116          IF(IVAL.LT.1)GOTO120
29117          ICNT=ICNT+1
29118          NTOT=NTOT+IVAL
29119          Y(ICNT)=Y(I)
29120          X(ICNT)=X(I)
29121          W(ICNT)=REAL(IVAL)
29122        ENDIF
29123C
29124  120 CONTINUE
29125      N=ICNT
29126      DN=REAL(NTOT)
29127C
29128C               ************************************************
29129C               **  STEP 11--                                 **
29130C               **  COMPUTE THE GROUPED CORRELATION           **
29131C               ************************************************
29132C
29133      DO1100I=1,N
29134C
29135        DX=DBLE(X(I))
29136        DY=DBLE(Y(I))
29137        DW=DBLE(W(I))
29138        DSUM1=DSUM1 + DX*DY*DW
29139        DSUM2=DSUM2 + DX*DW
29140        DSUM3=DSUM3 + DY*DW
29141        DSUM4=DSUM4 + DX*DX*DW
29142        DSUM5=DSUM5 + DY*DY*DW
29143C
29144 1100 CONTINUE
29145      DNUM=DN*DSUM1 - DSUM2*DSUM3
29146      DENOM=(DN*DSUM4 - DSUM2**2)*(DN*DSUM5 - DSUM3**2)
29147      IF(DENOM.GT.0.0D0)THEN
29148        DENOM=DSQRT(DENOM)
29149        DCORR=DNUM/DENOM
29150        CORR=REAL(DCORR)
29151      ELSE
29152        CORR=0.0
29153      ENDIF
29154C
29155C               *******************************
29156C               **  STEP 12--                **
29157C               **  WRITE OUT A LINE         **
29158C               **  OF SUMMARY INFORMATION.  **
29159C               *******************************
29160C
29161      IF(IFEEDB.EQ.'ON' .AND. IWRITE.EQ.'ON')THEN
29162        WRITE(ICOUT,999)
29163        CALL DPWRST('XXX','BUG ')
29164        WRITE(ICOUT,1213)N,CORR
29165 1213   FORMAT('THE GROUPED CORRELATION OF THE ',I8,
29166     1           ' OBSERVATIONS = ',G15.7)
29167      ENDIF
29168C
29169C               *****************
29170C               **  STEP 90--  **
29171C               **  EXIT.      **
29172C               *****************
29173C
29174 9000 CONTINUE
29175      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PCOR')THEN
29176        WRITE(ICOUT,999)
29177        CALL DPWRST('XXX','BUG ')
29178        WRITE(ICOUT,9011)
29179 9011   FORMAT('***** AT THE END       OF GRPCOR--')
29180        CALL DPWRST('XXX','BUG ')
29181        WRITE(ICOUT,9014)IERROR,DN,DNUM,DENOM,DCORR
29182 9014   FORMAT('IERROR,DN,DNUM,DENOM,DCORR = ',A4,2X,4G15.7)
29183        CALL DPWRST('XXX','BUG ')
29184        WRITE(ICOUT,9015)DSUM1,DSUM2,DSUM3,DSUM4,DSUM5
29185 9015   FORMAT('DSUM1,DSUM2,DSUM3,DSUM4,DSUM5 = ',5G15.7)
29186        CALL DPWRST('XXX','BUG ')
29187        WRITE(ICOUT,9017)ICODEX,ICODEY
29188 9017   FORMAT('ICODEX,ICODEY = ',2I5)
29189        CALL DPWRST('XXX','BUG ')
29190        IF(ICODEX.EQ.1 .OR. ICODEY.EQ.1)THEN
29191          DO9019I=1,N
29192            WRITE(ICOUT,9018)I,X(I),Y(I)
29193 9018       FORMAT('I,X,Y = ',I8,2X,2F10.1)
29194            CALL DPWRST('XXX','BUG ')
29195 9019     CONTINUE
29196        ENDIF
29197      ENDIF
29198C
29199      RETURN
29200      END
29201      SUBROUTINE GRPLPX(X,Y,N,IDIR,DIST,IPATT2,PTHICK,ICOL)
29202C
29203C     PURPOSE--ROUTINE TO FILL A POLYGON WITH A HORIZONTAL OR VERTICAL
29204C              HATCHING PATTERN.
29205C              ASSUME EQUI-SPACED PARRALLEL LINES (DIST = DISTANCE
29206C              BETWEEN PARALLEL LINES).
29207C     ALGORITHM--CODE IS FROM "HIGH-RESOLUTION COMPUTER GRAPHICS USING
29208C              FORTRAN 77" BY ANGEL AND GRIFFITH (PP 95-96).
29209C              MODIFIED THEIR INTEGER VERSION TO ONE WITH REAL NUMBERS.
29210C     VERSION NUMBER--93.11
29211C     ORIGINAL VERSION (AS A SEPARATE SUBROUTINE)--NOVEMBER  1993.
29212C
29213      PARAMETER(MAXP=1000)
29214      REAL X(*)
29215      REAL Y(*)
29216C
29217      PARAMETER (MAXINT=100)
29218      REAL PX(MAXINT)
29219      REAL PY(MAXINT)
29220      REAL PX2(2)
29221      REAL PY2(2)
29222C
29223      CHARACTER*4 IDIR
29224      CHARACTER*4 IFIG
29225      CHARACTER*4 IFLAG
29226      CHARACTER*4 IPATT2
29227      CHARACTER*4 ICOL
29228C
29229C-----COMMON VARIABLES (GENERAL)--------------------------------------
29230C
29231      INCLUDE 'DPCOBE.INC'
29232      INCLUDE 'DPCOP2.INC'
29233C
29234C-----START POINT-----------------------------------------------------
29235C
29236      IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'PLPX')GOTO90
29237      WRITE(ICOUT,999)
29238  999 FORMAT(1X)
29239      CALL DPWRST('XXX','BUG ')
29240      WRITE(ICOUT,51)
29241   51 FORMAT('****** AT THE BEGINING OF GRPLPX ---')
29242      CALL DPWRST(ICOUT,'BUG ')
29243      WRITE(ICOUT,52)N,IDIR,DIST
29244   52 FORMAT('N,IDIR,DIST = ',I8,2X,A4,2X,E15.7)
29245      CALL DPWRST(ICOUT,'BUG ')
29246      WRITE(ICOUT,53)IPATT2,PTHICK,ICOL
29247   53 FORMAT('IPATT2,PTHICK,ICOL = ',A4,2X,E15.7,2X,A4)
29248      CALL DPWRST(ICOUT,'BUG ')
29249      DO54I=1,N
29250      WRITE(ICOUT,55)I,X(I),Y(I)
29251      CALL DPWRST(ICOUT,'BUG ')
29252 54   CONTINUE
29253 55   FORMAT('I,X(I),Y(I)=',I8,2X,E15.7,2X,E15.7)
29254C
29255 90   CONTINUE
29256C
29257      IF(N.LE.3)GOTO9000
29258      IF(X(1).NE.X(N).OR.Y(1).NE.Y(N))THEN
29259        N=N+1
29260        X(N)=X(1)
29261        Y(N)=Y(1)
29262      ENDIF
29263      IF(IDIR.EQ.'HORI')THEN
29264        AMAXY=Y(1)
29265        AMINY=Y(1)
29266        DO100I=2,N
29267          IF(Y(I).GT.AMAXY)AMAXY=Y(I)
29268          IF(Y(I).LT.AMINY)AMINY=Y(I)
29269 100    CONTINUE
29270        IF(AMAXY.GE.100.0)AMAXY=100.0
29271        IF(AMINY.LE.0.0)AMINY=0.0
29272C
29273        AY=AMINY
29274 300    CONTINUE
29275          IV=N
29276          NINT=0
29277          DO200NV=1,N
29278            IF(AMAX1(Y(IV),Y(NV)).GE.AY .AND.
29279     +         AMIN1(Y(IV),Y(NV)).LE.AY .AND.  Y(IV).NE.Y(NV)) THEN
29280              RMU=(AY-Y(IV))/(Y(NV)-Y(IV))
29281              NINT=NINT+1
29282              XI=(1.0-RMU)*X(IV) + RMU*X(NV)
29283              PX(NINT)=XI
29284C
29285              IF(IBUGG4.EQ.'OFF'.AND.ISUBG4.NE.'PLPX')GOTO390
29286              WRITE(ICOUT,999)
29287              CALL DPWRST('XXX','BUG ')
29288              WRITE(ICOUT,351)
29289  351         FORMAT('****** IN THE 200 LOOP ---')
29290              CALL DPWRST('XXX','BUG ')
29291              WRITE(ICOUT,352)AY,IV,NV
29292  352         FORMAT('AY,IV,NV=',E15.7,2X,I8,2X,I8)
29293              CALL DPWRST('XXX','BUG ')
29294              WRITE(ICOUT,353)RMU,XI,X(IV),X(NV)
29295  353         FORMAT('RMU,XI,X(IV),X(NV)=',4(E15.7,2X))
29296              CALL DPWRST('XXX','BUG ')
29297              WRITE(ICOUT,354)Y(IV),Y(NV)
29298  354         FORMAT('Y(IV),Y(NV)=',2(E15.7,2X))
29299              CALL DPWRST('XXX','BUG ')
29300 390          CONTINUE
29301C
29302            ENDIF
29303            IV=NV
29304 200      CONTINUE
29305          IF(NINT.LE.1)GOTO299
29306          CALL SORT(PX,NINT,PX)
29307          IFLAG='ON'
29308          IFIG='LINE'
29309          NP2=2
29310          DO250I=1,NINT,2
29311            IF(I+1.GT.NINT)GOTO299
29312            PX2(1)=PX(I)
29313            PX2(2)=PX(I+1)
29314            PY2(1)=AY
29315            PY2(2)=AY
29316            CALL DPDRPL(PX2,PY2,NP2,
29317     1                IFIG,IPATT2,PTHICK,ICOL,
29318     1                JPATT,JTHICK,PTHIC2,JCOL,IFLAG)
29319            IFLAG='OFF'
29320 250      CONTINUE
29321 299      CONTINUE
29322          AY=AY+DIST
29323          IF(AY.GT.AMAXY)GOTO9000
29324        GOTO300
29325      ELSEIF(IDIR.EQ.'VERT')THEN
29326        AMAXX=X(1)
29327        AMINX=X(1)
29328        DO400I=2,N
29329          IF(X(I).GT.AMAXX)AMAXX=X(I)
29330          IF(X(I).LT.AMINX)AMINX=X(I)
29331 400    CONTINUE
29332        IF(AMAXX.GE.100.0)AMAXX=100.0
29333        IF(AMINX.LE.0.0)AMINX=0.0
29334C
29335        AX=AMINX
29336 600    CONTINUE
29337          IV=N
29338          NINT=0
29339          DO500NV=1,N
29340            IF(AMAX1(X(IV),X(NV)).GE.AX .AND.
29341     +         AMIN1(X(IV),X(NV)).LE.AX .AND.  X(IV).NE.X(NV)) THEN
29342              RMU=(AX-X(IV))/(X(NV)-X(IV))
29343              NINT=NINT+1
29344              YI=(1.0-RMU)*Y(IV) + RMU*Y(NV)
29345              PY(NINT)=YI
29346            ENDIF
29347            IV=NV
29348 500      CONTINUE
29349          IF(NINT.LE.1)GOTO599
29350          CALL SORT(PY,NINT,PY)
29351          IFLAG='ON'
29352          IFIG='LINE'
29353          NP2=2
29354          DO550I=1,NINT,2
29355            IF(I+1.GT.NINT)GOTO599
29356            PY2(1)=PY(I)
29357            PY2(2)=PY(I+1)
29358            PX2(1)=AX
29359            PX2(2)=AX
29360            CALL DPDRPL(PX2,PY2,NP2,
29361     1                IFIG,IPATT2,PTHICK,ICOL,
29362     1                JPATT,JTHICK,PTHIC2,JCOL,IFLAG)
29363            IFLAG='OFF'
29364 550      CONTINUE
29365 599      CONTINUE
29366          AX=AX+DIST
29367          IF(AX.GT.AMAXX)GOTO9000
29368        GOTO600
29369      ENDIF
29370C
29371 9000 CONTINUE
29372      RETURN
29373      END
29374      SUBROUTINE GRPMEA(AMAT1,AMAT2,MAXROM,MAXCOM,NR1,NC1,
29375     1                  TAG,TAGDIS,NIJUNK,N2,NK,TEMP,IBUGA3,IERROR)
29376C
29377C     PURPOSE--THIS SUBROUTINE COMPUTES THE
29378C              GROUP MEANS OF A MATRIX.  THAT IS, A TAG VARIABLE
29379C              DIVIDES THE ROWS OF A MATRIX INTO DISTINCT GROUPS.
29380C              THE COMPUTED GROUP MEANS ARE RETURNED AS A MATRIX
29381C              (WHERE THE NUMBER OF ROWS EQUALS THE NUMBER OF GROUPS).
29382C     OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE
29383C             GROUP MEANS.
29384C     NOTE--THE TAG VARIABLE IS A GROUP IDENTIFIER THAT DEFINES
29385C           WHAT MATRIX A GIVEN ROW BELONGS TO.
29386C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
29387C     LANGUAGE--ANSI FORTRAN (1977)
29388C     WRITTEN BY--ALAN HECKERT
29389C                 STATISTICAL ENGINEERING DIVISION
29390C                 INFORMATION TECHNOLOGY LABORATORY
29391C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
29392C                 GAITHERSBURG, MD 20899
29393C                 PHONE--301-975-2899
29394C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
29395C           OF THE NATIONAL BUREAU OF STANDARDS.
29396C     LANGUAGE--ANSI FORTRAN (1977)
29397C     VERSION NUMBER--98.9
29398C     ORIGINAL VERSION--SEPTEMBER 1998.
29399C
29400C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
29401C
29402      CHARACTER*4 IBUGA3
29403      CHARACTER*4 IERROR
29404C
29405      CHARACTER*4 IWRITE
29406      CHARACTER*4 ISUBN1
29407      CHARACTER*4 ISUBN2
29408C
29409C---------------------------------------------------------------------
29410C
29411      DIMENSION AMAT1(MAXROM,MAXCOM)
29412      DIMENSION AMAT2(MAXROM,MAXCOM)
29413      DIMENSION TAG(*)
29414      DIMENSION TAGDIS(*)
29415      DIMENSION TEMP(*)
29416      DIMENSION NIJUNK(*)
29417C
29418C-----COMMON----------------------------------------------------------
29419C
29420      INCLUDE 'DPCOP2.INC'
29421C
29422C-----START POINT-----------------------------------------------------
29423C
29424      ISUBN1='GRPM'
29425      ISUBN2='EA  '
29426      IERROR='NO'
29427C
29428      IF(IBUGA3.EQ.'ON')THEN
29429        WRITE(ICOUT,999)
29430  999   FORMAT(1X)
29431        CALL DPWRST('XXX','BUG ')
29432        WRITE(ICOUT,51)
29433   51   FORMAT('***** AT THE BEGINNING OF GRPMEA--')
29434        CALL DPWRST('XXX','BUG ')
29435        WRITE(ICOUT,52)IBUGA3,N2,NR1,NC1
29436   52   FORMAT('IBUGA3,N2,NR1,NC1 = ',A4,2X,3I8)
29437        CALL DPWRST('XXX','BUG ')
29438      ENDIF
29439C
29440C               *************************************************
29441C               **  COMPUTE NUMBER OF DISTINCT ELEMENTS OF TAG **
29442C               *************************************************
29443C
29444      IWRITE='OFF'
29445      CALL DISTIN(TAG,NR1,IWRITE,TAGDIS,NK,IBUGA3,IERROR)
29446C
29447C               *************************************************
29448C               **  COMPUTE GROUP MEANS                        **
29449C               *************************************************
29450C
29451      DO95J=1,MAXCOM
29452        DO98I=1,MAXROM
29453          AMAT2(I,J)=0.0
29454   98   CONTINUE
29455   95 CONTINUE
29456      NSUM=0
29457C
29458      DO100IGROUP=1,NK
29459C
29460        ATEMP=TAGDIS(IGROUP)
29461        DO200J=1,NC1
29462          ICOUNT=0
29463          DO300I=1,NR1
29464            IF(TAG(I).EQ.ATEMP)THEN
29465              ICOUNT=ICOUNT+1
29466              TEMP(ICOUNT)=AMAT1(I,J)
29467            ENDIF
29468  300     CONTINUE
29469          IF(J.EQ.1)THEN
29470            NI=ICOUNT
29471            NIJUNK(IGROUP)=NI
29472          ENDIF
29473          CALL MEAN(TEMP,NI,IWRITE,XMEAN,IBUGA3,IERROR)
29474          AMAT2(IGROUP,J)=XMEAN
29475  200   CONTINUE
29476  100 CONTINUE
29477C
29478      DO400J=1,NC1
29479        CALL MEAN(AMAT2(1,J),NK,IWRITE,XMEAN,IBUGA3,IERROR)
29480        TEMP(J)=XMEAN
29481  400 CONTINUE
29482C
29483C
29484C               *****************
29485C               **  STEP 90--  **
29486C               **  EXIT.      **
29487C               *****************
29488C
29489      IF(IBUGA3.EQ.'ON')THEN
29490        WRITE(ICOUT,999)
29491        CALL DPWRST('XXX','BUG ')
29492        WRITE(ICOUT,9011)
29493 9011   FORMAT('***** AT THE END       OF GRPMEA--')
29494        CALL DPWRST('XXX','BUG ')
29495        WRITE(ICOUT,9012)IBUGA3,IERROR,NR1,NC1
29496 9012   FORMAT('IBUGA3,IERROR,NR1,NC1 = ',2(A4,2X),2I8)
29497        CALL DPWRST('XXX','BUG ')
29498      ENDIF
29499C
29500      RETURN
29501      END
29502      SUBROUTINE GRPRNK(Y,XSEQ,XH1,XH2,XH3,XH4,XH5,XH6,
29503     1                  N,NUMV2,MAXNXT,ICASCT,
29504     1                  XH1DIS,XH2DIS,XH3DIS,XH4DIS,XH5DIS,XH6DIS,XSEQD,
29505     1                  RANKSM,INRANK,
29506     1                  TEMP1,TEMP2,TEMP3,TEMP4,
29507     1                  Y2,NOUT,
29508     1                  ISUBRO,IBUGA3,IERROR)
29509C
29510C     PURPOSE--RETURN THE "AVERAGE" RANK FOR CROSS-TABULATED DATA.
29511C              THE SYNTAX OF THE COMMAND IS:
29512C
29513C                  LET AVERANK = AVERAGE RANK Y XSEQ X1 ..., XK
29514C
29515C              WHERE
29516C
29517C                  Y          = THE RESPONSE VARIABLE
29518C                  XSEQ       = THE SEQUENCE NUMBER VARIABLE
29519C                  X1 ... XK  = THE GROUP-ID VARIABLE
29520C
29521C              THE SEQUENCE NUMBER VARIABLE IS USED TO SUPPORT THE CASE
29522C              WHERE THE GROUPS MAY NOT CONTAIN THE SAME NUMBER OF
29523C              VALUES AND TO AVOID THE ASSUMPTION THAT THE VALUES ARE IN
29524C              SAME ORDER.  SO WE WANT THE AVERAGE RANK OVER ALL GROUPS
29525C              CORRESPONDING TO SEQUENCE NUMBER 1, SEQUENCE NUMBER 2,
29526C              AND SO ON.
29527C
29528C     WRITTEN BY--ALAN HECKERT
29529C                 STATISTICAL ENGINEERING DIVISION
29530C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
29531C                 GAITHERSBURG, MD 20899-8980
29532C                 PHONE--301-975-2899
29533C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
29534C           OF THE NATIONAL BUREAU OF STANDARDS.
29535C     LANGUAGE--ANSI FORTRAN (1977)
29536C     VERSION NUMBER--2018/07
29537C
29538C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
29539C
29540      CHARACTER*4 ICASCT
29541      CHARACTER*4 ISUBRO
29542      CHARACTER*4 IBUGA3
29543      CHARACTER*4 IERROR
29544C
29545      CHARACTER*4 IWRITE
29546      CHARACTER*4 ISUBN1
29547      CHARACTER*4 ISUBN2
29548      CHARACTER*4 ISTEPN
29549C
29550C---------------------------------------------------------------------
29551C
29552      DIMENSION Y(*)
29553      DIMENSION XSEQ(*)
29554      DIMENSION XH1(*)
29555      DIMENSION XH2(*)
29556      DIMENSION XH3(*)
29557      DIMENSION XH4(*)
29558      DIMENSION XH5(*)
29559      DIMENSION XH6(*)
29560      DIMENSION Y2(*)
29561C
29562      DIMENSION XSEQD(*)
29563      DIMENSION XH1DIS(*)
29564      DIMENSION XH2DIS(*)
29565      DIMENSION XH3DIS(*)
29566      DIMENSION XH4DIS(*)
29567      DIMENSION XH5DIS(*)
29568      DIMENSION XH6DIS(*)
29569      DIMENSION RANKSM(*)
29570      DIMENSION TEMP1(*)
29571      DIMENSION TEMP2(*)
29572      DIMENSION TEMP3(*)
29573      DIMENSION TEMP4(*)
29574      INTEGER INRANK(*)
29575C
29576      INCLUDE 'DPCOPA.INC'
29577      INCLUDE 'DPCOST.INC'
29578      INCLUDE 'DPCOHK.INC'
29579      INCLUDE 'DPCOP2.INC'
29580C
29581C-----START POINT-----------------------------------------------------
29582C
29583      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
29584        WRITE(ICOUT,70)
29585   70   FORMAT('AT THE BEGINNING OF GRPRNK--')
29586        CALL DPWRST('XXX','BUG ')
29587        WRITE(ICOUT,71)N,NUMV2,MAXNXT,ICASCT,PSTAMV
29588   71   FORMAT('N,NUMV2,MAXNXT,ICASCT,PSTAMV = ',3I8,2X,A4,2X,G15.7)
29589        CALL DPWRST('XXX','BUG ')
29590        DO72I=1,N
29591          WRITE(ICOUT,73)I,Y(I),XSEQ(I),XH1(I),XH2(I),XH3(I),XH4(I)
29592   73     FORMAT('I,Y(I),XSEQ(I),XH1(I),XH2(I),XH3(I),XH4(I) = ',
29593     1           I8,6G15.7)
29594          CALL DPWRST('XXX','BUG ')
29595   72   CONTINUE
29596      ENDIF
29597C
29598      ISUBN1='GRPR'
29599      ISUBN2='NK  '
29600C
29601      DO81II=1,MAXNXT
29602        RANKSM(II)=0.0
29603        INRANK(II)=0
29604   81 CONTINUE
29605C
29606C     CHECK THE INPUT ARGUMENTS FOR ERRORS
29607C
29608      NOUT=0
29609      IF(N.EQ.1)THEN
29610        Y2(1)=1.0
29611        NOUT=N
29612        GOTO9000
29613      ELSEIF(N.LE.0)THEN
29614        WRITE(ICOUT,999)
29615  999   FORMAT(1X)
29616        CALL DPWRST('XXX','BUG ')
29617        WRITE(ICOUT,11)
29618   11   FORMAT('***** ERROR IN LET ... = AVERAGE RANK ... --')
29619        CALL DPWRST('XXX','BUG ')
29620        WRITE(ICOUT,12)
29621   12   FORMAT('      THE NUMBER OF OBSERVATIONS MUST BE AT LEAST 1.')
29622        CALL DPWRST('XXX','BUG ')
29623        WRITE(ICOUT,14)N
29624   14   FORMAT('      THE NUMBER OF OBSERVATIONS = ',I6)
29625        CALL DPWRST('XXX','BUG ')
29626        WRITE(ICOUT,999)
29627        CALL DPWRST('XXX','BUG ')
29628        IERROR='YES'
29629        GOTO9000
29630      ELSEIF(NUMV2.LT.1 .OR. NUMV2.GT.8)THEN
29631        WRITE(ICOUT,999)
29632        CALL DPWRST('XXX','BUG ')
29633        WRITE(ICOUT,11)
29634        CALL DPWRST('XXX','BUG ')
29635        WRITE(ICOUT,22)
29636   22   FORMAT('      THE NUMBER OF VARIABLES MUST BE AT LEAST ',
29637     1         'ONE AND LESS THAN OR EQUAL TO EIGHT.')
29638        CALL DPWRST('XXX','BUG ')
29639        WRITE(ICOUT,24)NUMV2
29640   24   FORMAT('      THE NUMBER OF VARIBALES = ',I6)
29641        CALL DPWRST('XXX','BUG ')
29642        WRITE(ICOUT,999)
29643        CALL DPWRST('XXX','BUG ')
29644        IERROR='YES'
29645        GOTO9000
29646      ELSEIF(NUMV2.EQ.1)THEN
29647C
29648C       IF ONLY ONE VARIABLE GIVEN, THEN JUST RETURN THE RANKS
29649C       OF THAT VARIABLE.
29650C
29651        CALL RANK(Y,N,IWRITE,Y2,TEMP3,MAXNXT,IBUGA3,IERROR)
29652        NOUT=N
29653        GOTO9000
29654      ELSEIF(NUMV2.EQ.2)THEN
29655C
29656C       IF TWO VARIABLES GIVEN, CHECK TO SEE IF THERE IS
29657C       REPLICATION IN THE SECOND VARIABLE.  IF THERE IS,
29658C       TREAT AS A GROUP-ID VARIABLE.  OTHERWISE, ASSUME IT
29659C       IS THE SEQUENCE VARIABLE AND JUST RANK THE RESPONSE
29660C       VARIABLE.
29661C
29662C       SINCE WE WANT TO SUPPORT THE POSSIBILITY OF UNEQUAL
29663C       SIZES FOR THE CROSS-TAB CELLS, TREAT THE CASE WHERE
29664C       THE SECOND VARIABLE IS A GROUP-ID VARIABLE AS AN ERROR.
29665C
29666        CALL DISTIN(XSEQ,N,IWRITE,XSEQD,NUMSE0,IBUGA3,IERROR)
29667        IF(N.EQ.NUMSE0)THEN
29668          CALL RANK(Y,N,IWRITE,Y2,TEMP3,MAXNXT,IBUGA3,IERROR)
29669          GOTO9000
29670        ELSE
29671          WRITE(ICOUT,999)
29672          CALL DPWRST('XXX','BUG ')
29673          WRITE(ICOUT,11)
29674          CALL DPWRST('XXX','BUG ')
29675          WRITE(ICOUT,32)
29676   32     FORMAT('      FOR THE TWO VARIABLE CASE, THE SECOND ',
29677     1           'VARIABLE HAS REPLICATION.')
29678          CALL DPWRST('XXX','BUG ')
29679          WRITE(ICOUT,34)
29680   34     FORMAT('      FOR THE TWO VARIABLE CASE, THE SECOND ',
29681     1           'VARIABLE HAS REPLICATION.')
29682          CALL DPWRST('XXX','BUG ')
29683          WRITE(ICOUT,36)
29684   36     FORMAT('      THIS IMPLIES THAT IT IS A GROUP-ID VARIABLE ',
29685     1           'RATHER THAN A SEQUENCE VARIABLE.')
29686          CALL DPWRST('XXX','BUG ')
29687          WRITE(ICOUT,999)
29688          CALL DPWRST('XXX','BUG ')
29689          IERROR='YES'
29690          GOTO9000
29691        ENDIF
29692      ENDIF
29693C
29694      NUMGRP=NUMV2-2
29695      NUMSE0=0
29696      NUMSE1=0
29697      NUMSE2=0
29698      NUMSE3=0
29699      NUMSE4=0
29700      NUMSE5=0
29701      NUMSE6=0
29702      ANUMS0=NUMSE0
29703      ANUMS1=NUMSE1
29704      ANUMS2=NUMSE2
29705      ANUMS3=NUMSE3
29706      ANUMS4=NUMSE4
29707      ANUMS5=NUMSE5
29708      ANUMS6=NUMSE6
29709C
29710      CALL DISTIN(XSEQ,N,IWRITE,XSEQD,NUMSE0,IBUGA3,IERROR)
29711      CALL SORT(XSEQD,NUMSE0,XH1DIS)
29712C
29713      IF(NUMGRP.GE.1)THEN
29714        CALL DISTIN(XH1,N,IWRITE,XH1DIS,NUMSE1,IBUGA3,IERROR)
29715        CALL SORT(XH1DIS,NUMSE1,XH1DIS)
29716      ENDIF
29717      IF(NUMGRP.GE.2)THEN
29718        CALL DISTIN(XH2,N,IWRITE,XH2DIS,NUMSE2,IBUGA3,IERROR)
29719        CALL SORT(XH2DIS,NUMSE2,XH2DIS)
29720      ENDIF
29721      IF(NUMGRP.GE.3)THEN
29722        CALL DISTIN(XH3,N,IWRITE,XH3DIS,NUMSE3,IBUGA3,IERROR)
29723        CALL SORT(XH3DIS,NUMSE3,XH3DIS)
29724      ENDIF
29725      IF(NUMGRP.GE.4)THEN
29726        CALL DISTIN(XH4,N,IWRITE,XH4DIS,NUMSE4,IBUGA3,IERROR)
29727        CALL SORT(XH4DIS,NUMSE4,XH4DIS)
29728      ENDIF
29729      IF(NUMGRP.GE.5)THEN
29730        CALL DISTIN(XH5,N,IWRITE,XH5DIS,NUMSE5,IBUGA3,IERROR)
29731        CALL SORT(XH5DIS,NUMSE5,XH5DIS)
29732      ENDIF
29733      IF(NUMGRP.GE.6)THEN
29734        CALL DISTIN(XH6,N,IWRITE,XH6DIS,NUMSE6,IBUGA3,IERROR)
29735        CALL SORT(XH6DIS,NUMSE6,XH6DIS)
29736      ENDIF
29737C
29738      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
29739        WRITE(ICOUT,191)NUMGRP,NUMSE0,NUMSE1,NUMSE2,NUMSE3,NUMSE4,
29740     1                  NUMSE5,NUMSE6
29741  191   FORMAT('NUMGRP,NUMSE0,NUMSE1,NUMSE2,NUMSE3,NUMSE4,NUMSE5,',
29742     1         'NUMSE6 = ',8I8)
29743        CALL DPWRST('XXX','BUG ')
29744        NTEMP=MAX(NUMSE0,NUMSE1)
29745        NTEMP=MAX(NUMSE1,NUMSE2)
29746        NTEMP=MAX(NTEMP,NUMSE3)
29747        NTEMP=MAX(NTEMP,NUMSE4)
29748        NTEMP=MAX(NTEMP,NUMSE5)
29749        NTEMP=MAX(NTEMP,NUMSE6)
29750        DO195I=1,NTEMP
29751          WRITE(ICOUT,197)I,XSEQD(I),XH1DIS(I),XH2DIS(I),XH3DIS(I),
29752     1                    XH4DIS(I),XH5DIS(I),XH6DIS(I)
29753  197     FORMAT('I,XSEQD(I),XH1DIS(I),XH2DIS(I),XH3DIS(I),XH4DIS(I),',
29754     1           'XH5DIS(I),XH6DIS(I) = ',I8,7G15.7)
29755          CALL DPWRST('XXX','BUG ')
29756  195   CONTINUE
29757      ENDIF
29758C
29759C               **************************************
29760C               **  STEP 2--                        **
29761C               **  ONE GROUP ID VARIABLE.          **
29762C               **************************************
29763C
29764      ISTEPN='2'
29765      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PRNK')
29766     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
29767C
29768      IF(NUMGRP.EQ.1)THEN
29769C
29770        NOUT=0
29771        DO210I=1,NUMSE1
29772          NTEMP=0
29773          HOLD=XH1DIS(I)
29774          DO230J=1,N
29775            IF(XH1(J).EQ.HOLD)THEN
29776              NTEMP=NTEMP+1
29777              TEMP1(NTEMP)=Y(J)
29778              TEMP2(NTEMP)=XSEQ(J)
29779            ENDIF
29780  230     CONTINUE
29781C
29782          IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
29783            WRITE(ICOUT,231)I,NTEMP
29784  231       FORMAT('AT 230: I,NTEMP = ',2I8)
29785            CALL DPWRST('XXX','BUG ')
29786            DO235J=1,NTEMP
29787              WRITE(ICOUT,237)J,TEMP1(J),TEMP2(J)
29788  237         FORMAT('J,TEMP1(I),TEMP2(I) = ',I8,2G15.7)
29789              CALL DPWRST('XXX','BUG ')
29790  235      CONTINUE
29791          ENDIF
29792C
29793          IF(NTEMP.GT.0)THEN
29794            CALL RANK(TEMP1,NTEMP,IWRITE,TEMP3,TEMP4,MAXNXT,
29795     1                IBUGA3,IERROR)
29796            IF(IERROR.EQ.'YES')GOTO9000
29797            DO240J=1,NTEMP
29798              DO245K=1,NUMSE0
29799                IF(TEMP2(J).EQ.XSEQD(K))THEN
29800                  RANKSM(K)=RANKSM(K) + TEMP3(J)
29801                  INRANK(K)=INRANK(K) + 1
29802                  GOTO248
29803                ENDIF
29804  245         CONTINUE
29805  248         CONTINUE
29806  240       CONTINUE
29807          ENDIF
29808C
29809          IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
29810            WRITE(ICOUT,261)I,NTEMP
29811  261       FORMAT('I,NTEMP = ',2I8)
29812            CALL DPWRST('XXX','BUG ')
29813            DO265J=1,NUMSE0
29814              WRITE(ICOUT,268)J,XSEQD(J),RANKSM(J),INRANK(J)
29815  268         FORMAT('J,XSEQD(J),RANKSM(J),INRANK(J) = ',I8,3G15.7)
29816              CALL DPWRST('XXX','BUG ')
29817  265       CONTINUE
29818          ENDIF
29819C
29820  210   CONTINUE
29821C
29822C       NOW PROPOGATE DEPENDING ON WHETHER WE HAVE "COLLAPSE" OR
29823C       "EXPAND" OPTIONS
29824C
29825        IF(ICTALT.EQ.'EXPA')THEN
29826          DO270J=1,NUMSE0
29827            IF(INRANK(J).GT.0)THEN
29828              RANKSM(J)=RANKSM(J)/REAL(INRANK(J))
29829            ELSE
29830              RANKSM(J)=0.0
29831            ENDIF
29832  270     CONTINUE
29833C
29834          DO273K=1,N
29835            HOLD=XSEQ(K)
29836            DO275J=1,NUMSE0
29837              IF(HOLD.EQ.XSEQD(J))THEN
29838                Y2(K)=RANKSM(J)
29839                GOTO278
29840              ENDIF
29841  275       CONTINUE
29842  278       CONTINUE
29843  273     CONTINUE
29844          NOUT=N
29845        ELSEIF(ICTALT.EQ.'COLL')THEN
29846          DO280J=1,NUMSE0
29847            IF(INRANK(J).GT.0)THEN
29848              Y2(J)=RANKSM(J)/REAL(INRANK(J))
29849            ELSE
29850              Y2(J)=0.0
29851            ENDIF
29852  280     CONTINUE
29853          NOUT=NUMSE0
29854        ENDIF
29855      ELSEIF(NUMGRP.EQ.2)THEN
29856C
29857C               **************************************
29858C               **  STEP 3--                        **
29859C               **  TWO GROUP ID VARIABLE.          **
29860C               **************************************
29861C
29862       ISTEPN='3'
29863       IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PRNK')
29864     1    CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
29865C
29866        NOUT=0
29867        DO310II1=1,NUMSE1
29868          HOLD1=XH1DIS(II1)
29869          DO320II2=1,NUMSE2
29870            NTEMP=0
29871            HOLD2=XH2DIS(II2)
29872            DO330J=1,N
29873              IF(XH1(J).EQ.HOLD1 .AND. XH2(J).EQ.HOLD2)THEN
29874                NTEMP=NTEMP+1
29875                TEMP1(NTEMP)=Y(J)
29876                TEMP2(NTEMP)=XSEQ(J)
29877              ENDIF
29878  330       CONTINUE
29879C
29880            IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
29881              WRITE(ICOUT,331)II1,II2,NTEMP
29882  331         FORMAT('AT 330: II1,II2,NTEMP = ',3I8)
29883              CALL DPWRST('XXX','BUG ')
29884              DO335J=1,NTEMP
29885                WRITE(ICOUT,337)J,TEMP1(J),TEMP2(J)
29886  337           FORMAT('J,TEMP1(I),TEMP2(I) = ',I8,2G15.7)
29887                CALL DPWRST('XXX','BUG ')
29888  335        CONTINUE
29889            ENDIF
29890C
29891            IF(NTEMP.GT.0)THEN
29892              CALL RANK(TEMP1,NTEMP,IWRITE,TEMP3,TEMP4,MAXNXT,
29893     1                  IBUGA3,IERROR)
29894              IF(IERROR.EQ.'YES')GOTO9000
29895              DO340J=1,NTEMP
29896                DO345K=1,NUMSE0
29897                  IF(TEMP2(J).EQ.XSEQD(K))THEN
29898                    RANKSM(K)=RANKSM(K) + TEMP3(J)
29899                    INRANK(K)=INRANK(K) + 1
29900                    GOTO348
29901                  ENDIF
29902  345           CONTINUE
29903  348           CONTINUE
29904  340         CONTINUE
29905            ENDIF
29906C
29907            IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
29908              WRITE(ICOUT,361)II1,II2,NTEMP
29909  361         FORMAT('II1,II2,NTEMP = ',3I8)
29910              CALL DPWRST('XXX','BUG ')
29911              DO365J=1,NUMSE0
29912                WRITE(ICOUT,368)J,XSEQD(J),RANKSM(J),INRANK(J)
29913  368           FORMAT('J,XSEQD(J),RANKSM(J),INRANK(J) = ',I8,3G15.7)
29914                CALL DPWRST('XXX','BUG ')
29915  365         CONTINUE
29916            ENDIF
29917C
29918  320     CONTINUE
29919  310   CONTINUE
29920C
29921C       NOW PROPOGATE DEPENDING ON WHETHER WE HAVE "COLLAPSE" OR
29922C       "EXPAND" OPTIONS
29923C
29924        IF(ICTALT.EQ.'EXPA')THEN
29925          DO370J=1,NUMSE0
29926            IF(INRANK(J).GT.0)THEN
29927              RANKSM(J)=RANKSM(J)/REAL(INRANK(J))
29928            ELSE
29929              RANKSM(J)=0.0
29930            ENDIF
29931  370     CONTINUE
29932C
29933          DO373K=1,N
29934            HOLD=XSEQ(K)
29935            DO375J=1,NUMSE0
29936              IF(HOLD.EQ.XSEQD(J))THEN
29937                Y2(K)=RANKSM(J)
29938                GOTO378
29939              ENDIF
29940  375       CONTINUE
29941  378       CONTINUE
29942  373     CONTINUE
29943          NOUT=N
29944        ELSEIF(ICTALT.EQ.'COLL')THEN
29945          DO380J=1,NUMSE0
29946            IF(INRANK(J).GT.0)THEN
29947              Y2(J)=RANKSM(J)/REAL(INRANK(J))
29948            ELSE
29949              Y2(J)=0.0
29950            ENDIF
29951  380     CONTINUE
29952          NOUT=NUMSE0
29953        ENDIF
29954      ELSEIF(NUMGRP.EQ.3)THEN
29955C
29956C               **************************************
29957C               **  STEP 4--                        **
29958C               **  THREE GROUP ID VARIABLES.       **
29959C               **************************************
29960C
29961       ISTEPN='4'
29962       IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PRNK')
29963     1    CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
29964C
29965        NOUT=0
29966        DO410II1=1,NUMSE1
29967          HOLD1=XH1DIS(II1)
29968          DO415II2=1,NUMSE2
29969            HOLD2=XH2DIS(II2)
29970            DO420II3=1,NUMSE3
29971              NTEMP=0
29972              HOLD3=XH3DIS(II3)
29973              DO430J=1,N
29974                IF(XH1(J).EQ.HOLD1 .AND. XH2(J).EQ.HOLD2 .AND.
29975     1             XH3(J).EQ.HOLD3)THEN
29976                  NTEMP=NTEMP+1
29977                  TEMP1(NTEMP)=Y(J)
29978                  TEMP2(NTEMP)=XSEQ(J)
29979                ENDIF
29980  430         CONTINUE
29981C
29982              IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
29983                WRITE(ICOUT,441)II1,II2,II3,NTEMP
29984  441           FORMAT('AT 430: II1,II2,II3,NTEMP = ',4I8)
29985                CALL DPWRST('XXX','BUG ')
29986                DO445J=1,NTEMP
29987                  WRITE(ICOUT,447)J,TEMP1(J),TEMP2(J)
29988  447             FORMAT('J,TEMP1(I),TEMP2(I) = ',I8,2G15.7)
29989                  CALL DPWRST('XXX','BUG ')
29990  445           CONTINUE
29991              ENDIF
29992C
29993              IF(NTEMP.GT.0)THEN
29994                CALL RANK(TEMP1,NTEMP,IWRITE,TEMP3,TEMP4,MAXNXT,
29995     1                    IBUGA3,IERROR)
29996                IF(IERROR.EQ.'YES')GOTO9000
29997                DO450J=1,NTEMP
29998                  DO455K=1,NUMSE0
29999                    IF(TEMP2(J).EQ.XSEQD(K))THEN
30000                      RANKSM(K)=RANKSM(K) + TEMP3(J)
30001                      INRANK(K)=INRANK(K) + 1
30002                      GOTO458
30003                    ENDIF
30004  455             CONTINUE
30005  458             CONTINUE
30006  450           CONTINUE
30007              ENDIF
30008C
30009              IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30010                WRITE(ICOUT,461)II1,II2,II3,NTEMP
30011  461           FORMAT('II1,II2,II3,NTEMP = ',4I8)
30012                CALL DPWRST('XXX','BUG ')
30013                DO465J=1,NUMSE0
30014                  WRITE(ICOUT,468)J,XSEQD(J),RANKSM(J),INRANK(J)
30015  468             FORMAT('J,XSEQD(J),RANKSM(J),INRANK(J) = ',I8,3G15.7)
30016                  CALL DPWRST('XXX','BUG ')
30017  465           CONTINUE
30018              ENDIF
30019C
30020  420       CONTINUE
30021  415     CONTINUE
30022  410   CONTINUE
30023C
30024C       NOW PROPOGATE DEPENDING ON WHETHER WE HAVE "COLLAPSE" OR
30025C       "EXPAND" OPTIONS
30026C
30027        IF(ICTALT.EQ.'EXPA')THEN
30028          DO470J=1,NUMSE0
30029            IF(INRANK(J).GT.0)THEN
30030              RANKSM(J)=RANKSM(J)/REAL(INRANK(J))
30031            ELSE
30032              RANKSM(J)=0.0
30033            ENDIF
30034  470     CONTINUE
30035C
30036          DO473K=1,N
30037            HOLD=XSEQ(K)
30038            DO475J=1,NUMSE0
30039              IF(HOLD.EQ.XSEQD(J))THEN
30040                Y2(K)=RANKSM(J)
30041                GOTO478
30042              ENDIF
30043  475       CONTINUE
30044  478       CONTINUE
30045  473     CONTINUE
30046          NOUT=N
30047        ELSEIF(ICTALT.EQ.'COLL')THEN
30048          DO480J=1,NUMSE0
30049            IF(INRANK(J).GT.0)THEN
30050              Y2(J)=RANKSM(J)/REAL(INRANK(J))
30051            ELSE
30052              Y2(J)=0.0
30053            ENDIF
30054  480     CONTINUE
30055          NOUT=NUMSE0
30056        ENDIF
30057      ELSEIF(NUMGRP.EQ.4)THEN
30058C
30059C               **************************************
30060C               **  STEP 5--                        **
30061C               **  FOUR  GROUP ID VARIABLES.       **
30062C               **************************************
30063C
30064       ISTEPN='5'
30065       IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PRNK')
30066     1    CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
30067C
30068        NOUT=0
30069        DO510II1=1,NUMSE1
30070          HOLD1=XH1DIS(II1)
30071          DO515II2=1,NUMSE2
30072            HOLD2=XH2DIS(II2)
30073            DO520II3=1,NUMSE3
30074              HOLD3=XH3DIS(II3)
30075              DO525II4=1,NUMSE4
30076                NTEMP=0
30077                HOLD4=XH4DIS(II4)
30078                DO530J=1,N
30079                  IF(XH1(J).EQ.HOLD1 .AND. XH2(J).EQ.HOLD2 .AND.
30080     1               XH3(J).EQ.HOLD3 .AND. XH4(J).EQ.HOLD4)THEN
30081                    NTEMP=NTEMP+1
30082                    TEMP1(NTEMP)=Y(J)
30083                    TEMP2(NTEMP)=XSEQ(J)
30084                  ENDIF
30085  530           CONTINUE
30086C
30087                IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30088                  WRITE(ICOUT,541)II1,II2,II3,II4,NTEMP
30089  541             FORMAT('AT 530: II1,II2,II3,II4,NTEMP = ',5I8)
30090                  CALL DPWRST('XXX','BUG ')
30091                  DO545J=1,NTEMP
30092                    WRITE(ICOUT,547)J,TEMP1(J),TEMP2(J)
30093  547               FORMAT('J,TEMP1(I),TEMP2(I) = ',I8,2G15.7)
30094                    CALL DPWRST('XXX','BUG ')
30095  545             CONTINUE
30096                ENDIF
30097C
30098                IF(NTEMP.GT.0)THEN
30099                  CALL RANK(TEMP1,NTEMP,IWRITE,TEMP3,TEMP4,MAXNXT,
30100     1                      IBUGA3,IERROR)
30101                  IF(IERROR.EQ.'YES')GOTO9000
30102                  DO540J=1,NTEMP
30103                    DO555K=1,NUMSE0
30104                      IF(TEMP2(J).EQ.XSEQD(K))THEN
30105                        RANKSM(K)=RANKSM(K) + TEMP3(J)
30106                        INRANK(K)=INRANK(K) + 1
30107                        GOTO558
30108                      ENDIF
30109  555               CONTINUE
30110  558               CONTINUE
30111  540             CONTINUE
30112                ENDIF
30113C
30114                IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30115                  WRITE(ICOUT,561)II1,II2,II3,II4,NTEMP
30116  561             FORMAT('II1,II2,II3,II4,NTEMP = ',5I8)
30117                  CALL DPWRST('XXX','BUG ')
30118                  DO565J=1,NUMSE0
30119                    WRITE(ICOUT,568)J,XSEQD(J),RANKSM(J),INRANK(J)
30120  568               FORMAT('J,XSEQD(J),RANKSM(J),INRANK(J) = ',
30121     1                     I8,3G15.7)
30122                    CALL DPWRST('XXX','BUG ')
30123  565             CONTINUE
30124                ENDIF
30125C
30126  525         CONTINUE
30127  520       CONTINUE
30128  515     CONTINUE
30129  510   CONTINUE
30130C
30131C       NOW PROPOGATE DEPENDING ON WHETHER WE HAVE "COLLAPSE" OR
30132C       "EXPAND" OPTIONS
30133C
30134        IF(ICTALT.EQ.'EXPA')THEN
30135          DO570J=1,NUMSE0
30136            IF(INRANK(J).GT.0)THEN
30137              RANKSM(J)=RANKSM(J)/REAL(INRANK(J))
30138            ELSE
30139              RANKSM(J)=0.0
30140            ENDIF
30141  570     CONTINUE
30142C
30143          DO573K=1,N
30144            HOLD=XSEQ(K)
30145            DO575J=1,NUMSE0
30146              IF(HOLD.EQ.XSEQD(J))THEN
30147                Y2(K)=RANKSM(J)
30148                GOTO578
30149              ENDIF
30150  575       CONTINUE
30151  578       CONTINUE
30152  573     CONTINUE
30153          NOUT=N
30154        ELSEIF(ICTALT.EQ.'COLL')THEN
30155          DO580J=1,NUMSE0
30156            IF(INRANK(J).GT.0)THEN
30157              Y2(J)=RANKSM(J)/REAL(INRANK(J))
30158            ELSE
30159              Y2(J)=0.0
30160            ENDIF
30161  580     CONTINUE
30162          NOUT=NUMSE0
30163        ENDIF
30164      ELSEIF(NUMGRP.EQ.5)THEN
30165C
30166C               **************************************
30167C               **  STEP 6--                        **
30168C               **  FIVE  GROUP ID VARIABLES.       **
30169C               **************************************
30170C
30171       ISTEPN='6'
30172       IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PRNK')
30173     1    CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
30174C
30175        NOUT=0
30176        DO610II1=1,NUMSE1
30177          HOLD1=XH1DIS(II1)
30178          DO615II2=1,NUMSE2
30179            HOLD2=XH2DIS(II2)
30180            DO620II3=1,NUMSE3
30181              HOLD3=XH3DIS(II3)
30182              DO625II4=1,NUMSE4
30183                NTEMP=0
30184                HOLD4=XH4DIS(II4)
30185                DO628II5=1,NUMSE5
30186                  NTEMP=0
30187                  HOLD5=XH5DIS(II5)
30188                  DO630J=1,N
30189                    IF(XH1(J).EQ.HOLD1 .AND. XH2(J).EQ.HOLD2 .AND.
30190     1                 XH3(J).EQ.HOLD3 .AND. XH4(J).EQ.HOLD4 .AND.
30191     1                 XH5(J).EQ.HOLD5)THEN
30192                      NTEMP=NTEMP+1
30193                      TEMP1(NTEMP)=Y(J)
30194                      TEMP2(NTEMP)=XSEQ(J)
30195                    ENDIF
30196  630             CONTINUE
30197C
30198                  IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30199                    WRITE(ICOUT,641)II1,II2,II3,II4,II5,NTEMP
30200  641               FORMAT('AT 630: II1,II2,II3,II4,II5,NTEMP = ',6I8)
30201                    CALL DPWRST('XXX','BUG ')
30202                    DO645J=1,NTEMP
30203                      WRITE(ICOUT,647)J,TEMP1(J),TEMP2(J)
30204  647                 FORMAT('J,TEMP1(I),TEMP2(I) = ',I8,2G15.7)
30205                      CALL DPWRST('XXX','BUG ')
30206  645               CONTINUE
30207                  ENDIF
30208C
30209                  IF(NTEMP.GT.0)THEN
30210                    CALL RANK(TEMP1,NTEMP,IWRITE,TEMP3,TEMP4,MAXNXT,
30211     1                        IBUGA3,IERROR)
30212                    IF(IERROR.EQ.'YES')GOTO9000
30213                    DO640J=1,NTEMP
30214                      DO655K=1,NUMSE0
30215                        IF(TEMP2(J).EQ.XSEQD(K))THEN
30216                          RANKSM(K)=RANKSM(K) + TEMP3(J)
30217                          INRANK(K)=INRANK(K) + 1
30218                          GOTO658
30219                        ENDIF
30220  655                 CONTINUE
30221  658                 CONTINUE
30222  640               CONTINUE
30223                  ENDIF
30224C
30225                  IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30226                    WRITE(ICOUT,661)II1,II2,II3,II4,II5,NTEMP
30227  661               FORMAT('II1,II2,II3,II4,II5,NTEMP = ',6I8)
30228                    CALL DPWRST('XXX','BUG ')
30229                    DO665J=1,NUMSE0
30230                      WRITE(ICOUT,668)J,XSEQD(J),RANKSM(J),INRANK(J)
30231  668                 FORMAT('J,XSEQD(J),RANKSM(J),INRANK(J) = ',
30232     1                       I8,3G15.7)
30233                      CALL DPWRST('XXX','BUG ')
30234  665               CONTINUE
30235                  ENDIF
30236C
30237  628           CONTINUE
30238  625         CONTINUE
30239  620       CONTINUE
30240  615     CONTINUE
30241  610   CONTINUE
30242C
30243C       NOW PROPOGATE DEPENDING ON WHETHER WE HAVE "COLLAPSE" OR
30244C       "EXPAND" OPTIONS
30245C
30246        IF(ICTALT.EQ.'EXPA')THEN
30247          DO670J=1,NUMSE0
30248            IF(INRANK(J).GT.0)THEN
30249              RANKSM(J)=RANKSM(J)/REAL(INRANK(J))
30250            ELSE
30251              RANKSM(J)=0.0
30252            ENDIF
30253  670     CONTINUE
30254C
30255          DO673K=1,N
30256            HOLD=XSEQ(K)
30257            DO675J=1,NUMSE0
30258              IF(HOLD.EQ.XSEQD(J))THEN
30259                Y2(K)=RANKSM(J)
30260                GOTO678
30261              ENDIF
30262  675       CONTINUE
30263  678       CONTINUE
30264  673     CONTINUE
30265          NOUT=N
30266        ELSEIF(ICTALT.EQ.'COLL')THEN
30267          DO680J=1,NUMSE0
30268            IF(INRANK(J).GT.0)THEN
30269              Y2(J)=RANKSM(J)/REAL(INRANK(J))
30270            ELSE
30271              Y2(J)=0.0
30272            ENDIF
30273  680     CONTINUE
30274          NOUT=NUMSE0
30275        ENDIF
30276      ELSEIF(NUMGRP.EQ.6)THEN
30277C
30278C               **************************************
30279C               **  STEP 7--                        **
30280C               **  SIX   GROUP ID VARIABLES.       **
30281C               **************************************
30282C
30283       ISTEPN='7'
30284       IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PRNK')
30285     1    CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
30286C
30287        NOUT=0
30288        DO710II1=1,NUMSE1
30289          HOLD1=XH1DIS(II1)
30290          DO715II2=1,NUMSE2
30291            HOLD2=XH2DIS(II2)
30292            DO720II3=1,NUMSE3
30293              HOLD3=XH3DIS(II3)
30294              DO725II4=1,NUMSE4
30295                NTEMP=0
30296                HOLD4=XH4DIS(II4)
30297                DO728II5=1,NUMSE5
30298                  HOLD5=XH5DIS(II5)
30299                  DO729II6=1,NUMSE6
30300                    NTEMP=0
30301                    HOLD6=XH6DIS(II6)
30302                    DO730J=1,N
30303                      IF(XH1(J).EQ.HOLD1 .AND. XH2(J).EQ.HOLD2 .AND.
30304     1                   XH3(J).EQ.HOLD3 .AND. XH4(J).EQ.HOLD4 .AND.
30305     1                   XH5(J).EQ.HOLD5 .AND. XH6(J).EQ.HOLD6)THEN
30306                        NTEMP=NTEMP+1
30307                        TEMP1(NTEMP)=Y(J)
30308                        TEMP2(NTEMP)=XSEQ(J)
30309                      ENDIF
30310  730               CONTINUE
30311C
30312                    IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30313                      WRITE(ICOUT,731)II1,II2,II3,II4,II5,II6,NTEMP
30314  731                 FORMAT('AT 730: II1,II2,II3,II4,II5,II6,NTEMP = ',
30315     1                       7I8)
30316                      CALL DPWRST('XXX','BUG ')
30317                      DO735J=1,NTEMP
30318                        WRITE(ICOUT,737)J,TEMP1(J),TEMP2(J)
30319  737                   FORMAT('J,TEMP1(I),TEMP2(I) = ',I8,2G15.7)
30320                        CALL DPWRST('XXX','BUG ')
30321  735                 CONTINUE
30322                    ENDIF
30323C
30324                    IF(NTEMP.GT.0)THEN
30325                      CALL RANK(TEMP1,NTEMP,IWRITE,TEMP3,TEMP4,MAXNXT,
30326     1                          IBUGA3,IERROR)
30327                      IF(IERROR.EQ.'YES')GOTO9000
30328                      DO740J=1,NTEMP
30329                        DO745K=1,NUMSE0
30330                          IF(TEMP2(J).EQ.XSEQD(K))THEN
30331                            RANKSM(K)=RANKSM(K) + TEMP3(J)
30332                            INRANK(K)=INRANK(K) + 1
30333                            GOTO748
30334                          ENDIF
30335  745                   CONTINUE
30336  748                   CONTINUE
30337  740                 CONTINUE
30338                    ENDIF
30339C
30340                    IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30341                      WRITE(ICOUT,771)II1,II2,II3,II4,II5,II6,NTEMP
30342  771                 FORMAT('II1,II2,II3,II4,II5,II6,NTEMP = ',7I8)
30343                      CALL DPWRST('XXX','BUG ')
30344                      DO755J=1,NUMSE0
30345                        WRITE(ICOUT,758)J,XSEQD(J),RANKSM(J),INRANK(J)
30346  758                   FORMAT('J,XSEQD(J),RANKSM(J),INRANK(J) = ',
30347     1                         I8,3G15.7)
30348                        CALL DPWRST('XXX','BUG ')
30349  755                 CONTINUE
30350                    ENDIF
30351C
30352  729             CONTINUE
30353  728           CONTINUE
30354  725         CONTINUE
30355  720       CONTINUE
30356  715     CONTINUE
30357  710   CONTINUE
30358C
30359C       NOW PROPOGATE DEPENDING ON WHETHER WE HAVE "COLLAPSE" OR
30360C       "EXPAND" OPTIONS
30361C
30362        IF(ICTALT.EQ.'EXPA')THEN
30363          DO770J=1,NUMSE0
30364            IF(INRANK(J).GT.0)THEN
30365              RANKSM(J)=RANKSM(J)/REAL(INRANK(J))
30366            ELSE
30367              RANKSM(J)=0.0
30368            ENDIF
30369  770     CONTINUE
30370C
30371          DO773K=1,N
30372            HOLD=XSEQ(K)
30373            DO775J=1,NUMSE0
30374              IF(HOLD.EQ.XSEQD(J))THEN
30375                Y2(K)=RANKSM(J)
30376                GOTO778
30377              ENDIF
30378  775       CONTINUE
30379  778       CONTINUE
30380  773     CONTINUE
30381          NOUT=N
30382        ELSEIF(ICTALT.EQ.'COLL')THEN
30383          DO780J=1,NUMSE0
30384            IF(INRANK(J).GT.0)THEN
30385              Y2(J)=RANKSM(J)/REAL(INRANK(J))
30386            ELSE
30387              Y2(J)=0.0
30388            ENDIF
30389  780     CONTINUE
30390          NOUT=NUMSE0
30391        ENDIF
30392      ENDIF
30393C
30394C               ******************
30395C               **   STEP 90--  **
30396C               **   EXIT       **
30397C               ******************
30398C
30399 9000 CONTINUE
30400      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PRNK')THEN
30401        WRITE(ICOUT,999)
30402        CALL DPWRST('XXX','BUG ')
30403        WRITE(ICOUT,9011)
30404 9011   FORMAT('***** AT THE END       OF GRPRNK--')
30405        CALL DPWRST('XXX','BUG ')
30406        WRITE(ICOUT,9015)IERROR,NOUT
30407 9015   FORMAT('IERROR,NOUT = ',A4,2X,I8)
30408        CALL DPWRST('XXX','BUG ')
30409        DO9017I=1,N
30410          WRITE(ICOUT,9018)I,Y2(I)
30411 9018     FORMAT('I,Y2(I) = ',I8,G15.7)
30412          CALL DPWRST('XXX','BUG ')
30413 9017   CONTINUE
30414      ENDIF
30415C
30416      RETURN
30417      END
30418      SUBROUTINE GRPSD(AMAT1,AMAT2,MAXROM,MAXCOM,NR1,NC1,
30419     1TAG,TAGDIS,NIJUNK,N2,NK,TEMP,IBUGA3,IERROR)
30420C
30421C     PURPOSE--THIS SUBROUTINE COMPUTES THE
30422C              GROUP STANDARD DEVIATIONS OF A MATRIX.  THAT IS,
30423C              A TAG VARIABLE
30424C              DIVIDES THE ROWS OF A MATRIX INTO DISTINCT GROUPS.
30425C              THE COMPUTED GROUP SD'S ARE RETURNED AS A MATRIX
30426C              (WHERE THE NUMBER OF ROWS EQUALS THE NUMBER OF GROUPS).
30427C     OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE
30428C             GROUP STANDARD DEVIATIONS.
30429C     NOTE--THE TAG VARIABLE IS A GROUP IDENTIFIER THAT DEFINES
30430C           WHAT MATRIX A GIVEN ROW BELONGS TO.
30431C     FORTRAN LIBRARY SUBROUTINES NEEDED--NONE.
30432C     LANGUAGE--ANSI FORTRAN (1977)
30433C     WRITTEN BY--ALAN HECKERT
30434C                 STATISTICAL ENGINEERING DIVISION
30435C                 INFORMATION TECHNOLOGY LABORATORY
30436C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
30437C                 GAITHERSBURG, MD 20899
30438C                 PHONE--301-975-2899
30439C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
30440C           OF THE NATIONAL BUREAU OF STANDARDS.
30441C     LANGUAGE--ANSI FORTRAN (1977)
30442C     VERSION NUMBER--98.9
30443C     ORIGINAL VERSION--SEPTEMBER 1998.
30444C
30445C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
30446C
30447      CHARACTER*4 IBUGA3
30448      CHARACTER*4 IERROR
30449C
30450      CHARACTER*4 IWRITE
30451      CHARACTER*4 ISUBN1
30452      CHARACTER*4 ISUBN2
30453C
30454C---------------------------------------------------------------------
30455C
30456      DIMENSION AMAT1(MAXROM,MAXCOM)
30457      DIMENSION AMAT2(MAXROM,MAXCOM)
30458      DIMENSION TAG(*)
30459      DIMENSION TAGDIS(*)
30460      DIMENSION TEMP(*)
30461      DIMENSION NIJUNK(*)
30462C
30463C-----COMMON----------------------------------------------------------
30464C
30465      INCLUDE 'DPCOP2.INC'
30466C
30467C-----START POINT-----------------------------------------------------
30468C
30469      ISUBN1='GRPM'
30470      ISUBN2='EA  '
30471      IERROR='NO'
30472C
30473      IF(IBUGA3.EQ.'ON')THEN
30474        WRITE(ICOUT,999)
30475  999   FORMAT(1X)
30476        CALL DPWRST('XXX','BUG ')
30477        WRITE(ICOUT,51)
30478   51   FORMAT('***** AT THE BEGINNING OF GRPSD--')
30479        CALL DPWRST('XXX','BUG ')
30480        WRITE(ICOUT,53)NR1,N2,NC1,IBUGA3
30481   53   FORMAT('NR1,N2,NC1,IBUGA3 = ',3I8,2X,A4)
30482        CALL DPWRST('XXX','BUG ')
30483      ENDIF
30484C
30485C               *************************************************
30486C               **  COMPUTE NUMBER OF DISTINCT ELEMENTS OF TAG **
30487C               *************************************************
30488C
30489      IWRITE='OFF'
30490      CALL DISTIN(TAG,NR1,IWRITE,TAGDIS,NK,IBUGA3,IERROR)
30491C
30492C               *************************************************
30493C               **  COMPUTE GROUP MEANS                        **
30494C               *************************************************
30495C
30496      DO95J=1,MAXCOM
30497        DO98I=1,MAXROM
30498          AMAT2(I,J)=0.0
30499   98   CONTINUE
30500   95 CONTINUE
30501      NSUM=0
30502C
30503      DO100IGROUP=1,NK
30504C
30505        ATEMP=TAGDIS(IGROUP)
30506        DO200J=1,NC1
30507          ICOUNT=0
30508          DO300I=1,NR1
30509            IF(TAG(I).EQ.ATEMP)THEN
30510              ICOUNT=ICOUNT+1
30511              TEMP(ICOUNT)=AMAT1(I,J)
30512            ENDIF
30513  300     CONTINUE
30514          IF(J.EQ.1)THEN
30515            NI=ICOUNT
30516            NIJUNK(IGROUP)=NI
30517          ENDIF
30518          CALL SD(TEMP,NI,IWRITE,XSD,IBUGA3,IERROR)
30519          AMAT2(IGROUP,J)=XSD
30520  200   CONTINUE
30521  100 CONTINUE
30522C
30523      DO400J=1,NC1
30524        CALL SD(AMAT2(1,J),NK,IWRITE,XSD,IBUGA3,IERROR)
30525        TEMP(J)=XSD
30526  400 CONTINUE
30527C
30528C
30529C               *****************
30530C               **  STEP 90--  **
30531C               **  EXIT.      **
30532C               *****************
30533C
30534      IF(IBUGA3.EQ.'ON')THEN
30535        WRITE(ICOUT,999)
30536        CALL DPWRST('XXX','BUG ')
30537        WRITE(ICOUT,9011)
30538 9011   FORMAT('***** AT THE END       OF GRPSD--')
30539        CALL DPWRST('XXX','BUG ')
30540        WRITE(ICOUT,9013)NR1,NC1,IERROR
30541 9013   FORMAT('NR1,NC1,IERROR = ',2I8,2X,A4)
30542        CALL DPWRST('XXX','BUG ')
30543      ENDIF
30544C
30545      RETURN
30546      END
30547      SUBROUTINE GRPSHU(Y,X,N,XINDEX,N2,
30548     1                  IWRITE,Y2,X2,
30549     1                  IINDEX,TEMP1,XDIST,
30550     1                  IBUGA3,ISUBRO,IERROR)
30551C
30552C     PURPOSE--GIVEN A RESPONSE VARIABLE, Y, AND A GROUP-ID
30553C              VARIABLE, X, RE-ARRANGE THE GROUPS BASED ON THE
30554C              INDEX VARIABLE, XINDEX.  NOTE THAT THE DATA ARE NOT
30555C              RANDOMIZED WITHIN THE GROUPS.
30556C
30557C              THE MOTIVATION FOR THIS IS TO RANDOMIZE THE
30558C              ROWS (OR COLUMNS) OF A MATRIX OR IMAGE.
30559C
30560C              NOTE THAT THE RANDOMIZATION CAN BE EITHER WITH OR
30561C              WITHOUT REPLACEMENT (THIS IS DETERMINED BY THE
30562C              XINDEX VARIABLE).  THE SHUFFLED GROUP-ID VARIABLE
30563C              MAY OR MAY NOT BE OF INTEREST (THE "SHUFFLE GROUPS"
30564C              LET SUBCOMMAND DOES NOT CURRENTLY SAVE THIS VARIABLE.
30565C
30566C     INPUT  ARGUMENTS--Y      = SINGLE PRECISION VARIABLE CONTAINING
30567C                                THE RESPONSE VARIABLE.
30568C                     --X      = SINGLE PRECISION VARIABLE CONTAINING
30569C                                THE GROUP-ID VARIABLE.
30570C                     --XINDEX = SINGLE PRECISION VARIABLE CONTAINING
30571C                                THE INDEX VARIABLE.
30572C     OUTPUT ARGUMENTS--Y2     = SINGLE PRECISION VARIABLE CONTAINING
30573C                                THE SHUFFLED RESPONSE VARIABLE.
30574C                     --X2     = SINGLE PRECISION VARIABLE CONTAINING
30575C                                THE SHUFFLED GROUP-ID VARIABLE.
30576C     WRITTEN BY--ALAN HECKERT
30577C                 STATISTICAL ENGINEERING DIVISION
30578C                 INFORMATION TECHNOLOGY LABORATORY
30579C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
30580C                 GAITHERSBURG, MD 20899-8980
30581C                 PHONE--301-975-2899
30582C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
30583C           OF THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY.
30584C     LANGUAGE--ANSI FORTRAN (1977)
30585C     VERSION NUMBER--2014/7
30586C     ORIGINAL VERSION--JULY      2014.
30587C
30588C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
30589C
30590      CHARACTER*4 IWRITE
30591      CHARACTER*4 IBUGA3
30592      CHARACTER*4 ISUBRO
30593      CHARACTER*4 IERROR
30594C
30595      CHARACTER*4 ISUBN1
30596      CHARACTER*4 ISUBN2
30597C
30598C---------------------------------------------------------------------
30599C
30600      INCLUDE 'DPCOPA.INC'
30601C
30602      DIMENSION Y(*)
30603      DIMENSION X(*)
30604      DIMENSION XINDEX(*)
30605      DIMENSION Y2(*)
30606      DIMENSION X2(*)
30607      DIMENSION XDIST(*)
30608      DIMENSION TEMP1(*)
30609      DIMENSION IINDEX(*)
30610C
30611C-----COMMON VARIABLES (GENERAL)--------------------------------------
30612C
30613      INCLUDE 'DPCOP2.INC'
30614C
30615C-----START POINT-----------------------------------------------------
30616C
30617      ISUBN1='GRPS'
30618      ISUBN2='HU  '
30619      IERROR='NO'
30620C
30621      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSHU')THEN
30622        WRITE(ICOUT,999)
30623  999   FORMAT(1X)
30624        CALL DPWRST('XXX','BUG ')
30625        WRITE(ICOUT,51)
30626   51   FORMAT('***** AT THE BEGINNING OF GRPSHU--')
30627        CALL DPWRST('XXX','BUG ')
30628        WRITE(ICOUT,52)N,N2
30629   52   FORMAT('N,N2 = ',2I8)
30630        CALL DPWRST('XXX','BUG ')
30631        DO55I=1,N
30632          WRITE(ICOUT,56)I,Y(I),X(I)
30633   56     FORMAT('I,Y(I),X(I) = ',I8,2G15.7)
30634          CALL DPWRST('XXX','BUG ')
30635   55   CONTINUE
30636        DO65I=1,N2
30637          WRITE(ICOUT,66)I,XINDEX(I)
30638   66     FORMAT('I,XINDEX(I) = ',I8,G15.7)
30639          CALL DPWRST('XXX','BUG ')
30640   65   CONTINUE
30641      ENDIF
30642C
30643C               ****************************************
30644C               **  STEP 11--                         **
30645C               **  CHECK THE INDEX VARIABLE          **
30646C               ****************************************
30647C
30648      CALL CODE(X,N,IWRITE,TEMP1,XDIST,MAXOBV,IBUGA3,IERROR)
30649      CALL DISTIN(TEMP1,N,IWRITE,XDIST,NDIST,IBUGA3,IERROR)
30650      DO91I=1,N
30651        X(I)=TEMP1(I)
30652   91 CONTINUE
30653C
30654      IF(N2.NE.NDIST)THEN
30655        WRITE(ICOUT,999)
30656        CALL DPWRST('XXX','BUG ')
30657        WRITE(ICOUT,101)
30658  101   FORMAT('***** ERROR IN SHUFFLE GROUPS--')
30659        CALL DPWRST('XXX','BUG ')
30660        WRITE(ICOUT,103)
30661  103   FORMAT('      THE NUMBER OF DISTINCT VALUES IN THE GROUP-ID ',
30662     1         'VARIABLE')
30663        CALL DPWRST('XXX','BUG ')
30664        WRITE(ICOUT,105)
30665  105   FORMAT('      DOES NOT MATCH THE NUMBER OF VALUES IN THE ',
30666     1         'INDEX VARIABLE.')
30667        CALL DPWRST('XXX','BUG ')
30668        WRITE(ICOUT,107)NDIST
30669  107   FORMAT('      THE NUMBER OF DISTINCT VALUES IN THE GROUP-ID ',
30670     1         'VARIABLE: ',I8)
30671        CALL DPWRST('XXX','BUG ')
30672        WRITE(ICOUT,109)N2
30673  109   FORMAT('      THE NUMBER OF VALUES IN THE INDEX ',
30674     1         'VARIABLE: ',I8)
30675        CALL DPWRST('XXX','BUG ')
30676        IERROR='YES'
30677        GOTO9000
30678      ENDIF
30679C
30680      DO110I=1,N2
30681        IINDEX(I)=INT(XINDEX(I)+0.5)
30682        IF(I.EQ.1)THEN
30683          IMINX=IINDEX(I)
30684          IMAXX=IINDEX(I)
30685        ELSE
30686          IF(IINDEX(I).LT.IMINX)IMINX=IINDEX(I)
30687          IF(IINDEX(I).GT.IMAXX)IMAXX=IINDEX(I)
30688        ENDIF
30689  110 CONTINUE
30690C
30691      IF(IMINX.LT.1 .OR. IMAXX.GT.N2)THEN
30692        WRITE(ICOUT,999)
30693        CALL DPWRST('XXX','BUG ')
30694        WRITE(ICOUT,101)
30695        CALL DPWRST('XXX','BUG ')
30696        WRITE(ICOUT,111)IMINX
30697  111   FORMAT('      THE MINIMUM INDEX VALUE IS: ',I8)
30698        CALL DPWRST('XXX','BUG ')
30699        WRITE(ICOUT,113)IMAXX
30700  113   FORMAT('      THE MAXIMUM INDEX VALUE IS: ',I8)
30701        CALL DPWRST('XXX','BUG ')
30702        WRITE(ICOUT,114)N2
30703  114   FORMAT('      THE NUMBER OF ELEMENTS IN THE INDEX VARIABLE ',
30704     1         'IS: ',I8)
30705        CALL DPWRST('XXX','BUG ')
30706        WRITE(ICOUT,115)NDIST
30707  115   FORMAT('      THE NUMBER OF DISTINCT VALUES IN THE GROUP-ID ',
30708     1         'VARIABLE IS: ',I8)
30709        CALL DPWRST('XXX','BUG ')
30710        IERROR='YES'
30711        GOTO9000
30712      ENDIF
30713C
30714C               ****************************************
30715C               **  STEP 2--                          **
30716C               **  NOW PERFORM THE RE-ORDERING       **
30717C               ****************************************
30718C
30719      ICNT=0
30720      DO200II=1,N2
30721        ITAG=IINDEX(II)
30722        DO210IROW=1,N
30723          IJUNK=INT(X(IROW)+0.5)
30724          IF(IJUNK.EQ.ITAG)THEN
30725            ICNT=ICNT+1
30726            X2(ICNT)=REAL(II)
30727            Y2(ICNT)=Y(IROW)
30728          ENDIF
30729  210   CONTINUE
30730  200 CONTINUE
30731C
30732C               *****************
30733C               **  STEP 90--  **
30734C               **  EXIT.      **
30735C               *****************
30736C
30737 9000 CONTINUE
30738      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSHU')THEN
30739        WRITE(ICOUT,999)
30740        CALL DPWRST('XXX','BUG ')
30741        WRITE(ICOUT,9011)
30742 9011   FORMAT('***** AT THE END       OF GRPSHU--')
30743        CALL DPWRST('XXX','BUG ')
30744        DO9042I=1,N
30745          WRITE(ICOUT,9043)I,X(I),Y(I),X2(I),Y2(I)
30746 9043     FORMAT('I,X(I),Y(I),X2(I),Y2(I) = ',I8,4G15.7)
30747          CALL DPWRST('XXX','BUG ')
30748 9042   CONTINUE
30749      ENDIF
30750C
30751      RETURN
30752      END
30753      SUBROUTINE GRPSTA(Y,YTEMP,YTEMP2,
30754     1                  XH1,XH2,XH3,XH4,XH5,XH6,N,NUMRES,NUMV2,
30755     1                  ICASCT,ICASC2,ICASS7,MAXNXT,
30756     1                  XH1DIS,XH2DIS,XH3DIS,XH4DIS,XH5DIS,XH6DIS,
30757     1                  ZTEMP1,ZTEMP2,ZTEMP3,
30758     1                  TEMP3,TEMP4,TEMP5,
30759     1                  Y2,
30760     1                  ISEED,ITEMP1,ITEMP2,ITEMP3,
30761     1                  ITEMP4,ITEMP5,ITEMP6,
30762     1                  DTEMP1,DTEMP2,DTEMP3,
30763     1                  ISUBRO,IBUGA3,IERROR)
30764C
30765C     PURPOSE--STANDARDIZE A VARIABLE:
30766C              1) Z-SCORE (I.E., SUBTRACT MEAN, DIVIDE BY STANDARD
30767C                 DEVIATION) OR BY SUBTRACTING MEAN ONLY.
30768C              2) CAN HAVE 0, 1, 2, 3, OR 4 GROUP ID VARIABLES.  NOTE
30769C                 THAT THE STANDARDIZATION IS BY GROUP CELL (I.E.,
30770C                 IF TWO GROUP VARIABLES, CROSS TABULATE AND
30771C                 DO THE STANDARDIZATION WITHIN EACH CELL).
30772C              3) SUPPORT VARIOUS LOCATION AND SCALE STATISTICS
30773C                 (DEFAULT WILL BE MEAN AND STANDARD DEVIATION).
30774C     WRITTEN BY--ALAN HECKERT
30775C                 STATISTICAL ENGINEERING DIVISION
30776C                 NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
30777C                 GAITHERSBURG, MD 20899-8980
30778C                 PHONE--301-975-2899
30779C     NOTE--DATAPLOT IS A REGISTERED TRADEMARK
30780C           OF THE NATIONAL BUREAU OF STANDARDS.
30781C     LANGUAGE--ANSI FORTRAN (1977)
30782C     VERSION NUMBER--2001/3
30783C     UPDATED         --SEPTEMBER     2001. ADD SUPORT FOR MINIMUM
30784C                                           AS LOCATION STAT AND RANGE
30785C                                           AND INTERQUARTILE RANGE AS
30786C                                           SCALE STATISTIC.
30787C                                           ALSO, ADD SUPPORT FOR
30788C                                           SCALE ONLY OPTION.
30789C     UPDATED         --SEPTEMBER     2001. ADD A "CROSS-TAB" OPTION.
30790C                                           THIS PUTS THE VALUE OF
30791C                                           THE REQUESTED STATISTIC
30792C                                           IN THE OUTPUT VECTOR.
30793C     UPDATED         --NOVEMBER      2001. BIWEIGHT LOCATION
30794C     UPDATED         --NOVEMBER      2001. BIWEIGHT SCALE
30795C     UPDATED         --AUGUST        2002. USE "CMPSTA" TO COMPUTE
30796C                                           STATISTIC FOR CROSS
30797C                                           TABULATE CASE
30798C     UPDATED         --APRIL         2003. ADD SN AND QN, REQUIRED
30799C                                           ADDITIONAL SCRATCH ARRAYS
30800C     UPDATED         --NOVEMBER      2007. DOUBLE PRECISION ARRAYS FOR
30801C                                           CMPSTA
30802C     UPDATED         --FEBRUARY      2009. SUPPORT FOR "COLLAPSE"
30803C                                           OPTION
30804C     UPDATED         --FEBRUARY      2009. SUPPORT 3 OR 4 GROUP
30805C                                           VARIABLES
30806C     UPDATED         --FEBRUARY      2009. GROUP ONE
30807C                                           GROUP TWO
30808C                                           GROUP THREE
30809C                                           GROUP FOUR
30810C                                           (THESE EXTRACT THE VALUE OF
30811C                                           GROUP-ID VARIABLES, ONLY
30812C                                           USEFUL IN "COLLAPSE" MODE)
30813C     UPDATED         --SEPTEMBER     2009. FIX:
30814C                                           LET XD1 = CROSS TABULATE
30815C                                               GROUP ONE X1
30816C     UPDATED         --JUNE          2010. CALL LIST TO CMPSTA
30817C     UPDATED         --JULY          2011. SUPPORT FOR
30818C                                           SET LET CROSS TABU EMPTY
30819C                                           SET LET CROSS TABU COMPLEMENT
30820C     UPDATED         --JULY          2011. CONSOLIDATE GRPSTA, GRPST2,
30821C                                           AND GRPST3 INTO SINGLE
30822C                                           ROUTINE
30823C     UPDATED         --JANUARY       2012. SUPPORT FOR CUMULATIVE <STAT>:
30824C                                           LET YOUT = CROSS TABULATE
30825C                                                      CUMULATIVE MEAN Y X
30826C     UPDATED         --JANUARY       2014. SUPPORT UP TO 6 GROUP
30827C                                           VARIABLES
30828C     UPDATED         --JUNE          2016. WHEN THERE IS A SINGLE GROUP-ID
30829C                                           VARIABLE, SUPPORT CONTIGUOUS
30830C                                           OPTION (ICTAGR)
30831C
30832C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
30833C
30834      CHARACTER*4 ICASCT
30835      CHARACTER*4 ICASC2
30836      CHARACTER*4 ICASS7
30837      CHARACTER*4 ILOC
30838      CHARACTER*4 ISCALE
30839      CHARACTER*4 ISUBRO
30840      CHARACTER*4 IBUGA3
30841      CHARACTER*4 IERROR
30842C
30843      CHARACTER*4 IWRITE
30844      CHARACTER*4 ISUBN1
30845      CHARACTER*4 ISUBN2
30846      CHARACTER*4 ISTEPN
30847      CHARACTER*4 ICTAL2
30848C
30849C---------------------------------------------------------------------
30850C
30851      DIMENSION Y(*)
30852      DIMENSION YTEMP(*)
30853      DIMENSION YTEMP2(*)
30854      DIMENSION XH1(*)
30855      DIMENSION XH2(*)
30856      DIMENSION XH3(*)
30857      DIMENSION XH4(*)
30858      DIMENSION XH5(*)
30859      DIMENSION XH6(*)
30860      DIMENSION Y2(*)
30861C
30862      DIMENSION XH1DIS(*)
30863      DIMENSION XH2DIS(*)
30864      DIMENSION XH3DIS(*)
30865      DIMENSION XH4DIS(*)
30866      DIMENSION XH5DIS(*)
30867      DIMENSION XH6DIS(*)
30868      DIMENSION ZTEMP1(*)
30869      DIMENSION ZTEMP2(*)
30870      DIMENSION ZTEMP3(*)
30871      DIMENSION TEMP3(*)
30872      DIMENSION TEMP4(*)
30873      DIMENSION TEMP5(*)
30874      INTEGER ITEMP1(*)
30875      INTEGER ITEMP2(*)
30876      INTEGER ITEMP3(*)
30877      INTEGER ITEMP4(*)
30878      INTEGER ITEMP5(*)
30879      INTEGER ITEMP6(*)
30880      DOUBLE PRECISION DTEMP1(*)
30881      DOUBLE PRECISION DTEMP2(*)
30882      DOUBLE PRECISION DTEMP3(*)
30883C
30884      INCLUDE 'DPCOPA.INC'
30885      INCLUDE 'DPCOST.INC'
30886      INCLUDE 'DPCOHK.INC'
30887      INCLUDE 'DPCOP2.INC'
30888C
30889C-----START POINT-----------------------------------------------------
30890C
30891      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
30892        WRITE(ICOUT,70)
30893   70   FORMAT('AT THE BEGINNING OF GRPSTA--')
30894        CALL DPWRST('XXX','BUG ')
30895        WRITE(ICOUT,71)N,NUMV2,NUMRES,ICASCT,ICASC2,PSTAMV
30896   71   FORMAT('N,NUMV2,NUMRES,ICASCT,ICASC2,PSTAMV = ',
30897     1         3I8,2(2X,A4),2X,G15.7)
30898        CALL DPWRST('XXX','BUG ')
30899        DO72I=1,N
30900          WRITE(ICOUT,73)I,Y(I),YTEMP(I),YTEMP2(I),XH1(I),XH2(I)
30901   73     FORMAT('I,Y(I),YTEMP(I),YTEMP2(I),XH1(I),XH2(I) = ',
30902     1           I8,5G15.7)
30903          CALL DPWRST('XXX','BUG ')
30904   72   CONTINUE
30905      ENDIF
30906C
30907C     2018/07: TURN OFF "SET LET CROSS TABULATE COLLAPSE" SWITCH FOR
30908C              STANDARDIZE CASE
30909C
30910      ICTAL2=ICTALT
30911      IF(ICASCT.EQ.'STAN')ICTALT='EXPA'
30912      IF(ICASCT.EQ.'ZSCO')ICTALT='EXPA'
30913      IF(ICASCT.EQ.'USCO')ICTALT='EXPA'
30914      IF(ICASCT.EQ.'LSTA')ICTALT='EXPA'
30915      IF(ICASCT.EQ.'LSST')ICTALT='EXPA'
30916      IF(ICASCT.EQ.'LOCA')ICTALT='EXPA'
30917      IF(ICASCT.EQ.'SCAL')ICTALT='EXPA'
30918C
30919      ISUBN1='GRPS'
30920      ISUBN2='TA  '
30921C
30922      ILOC=ISTALO
30923      ISCALE=ISTASC
30924      IF(ICASCT.EQ.'ZSCO')THEN
30925        ILOC='MEAN'
30926        ISCALE='SD'
30927      ELSEIF(ICASCT.EQ.'USCO')THEN
30928        ILOC='MINI'
30929        ISCALE='RANG'
30930      ENDIF
30931C
30932      AN=REAL(N)
30933C
30934C     CHECK THE INPUT ARGUMENTS FOR ERRORS
30935C
30936      IF(N.LE.1)THEN
30937        WRITE(ICOUT,999)
30938  999   FORMAT(1X)
30939        CALL DPWRST('XXX','BUG ')
30940        WRITE(ICOUT,31)
30941   31   FORMAT('***** ERROR IN LET ... = CROSS TABULATE ... --')
30942        CALL DPWRST('XXX','BUG ')
30943        WRITE(ICOUT,32)
30944   32   FORMAT('      THE NUMBER OF OBSERVATIONS MUST BE AT LEAST 2.')
30945        CALL DPWRST('XXX','BUG ')
30946        WRITE(ICOUT,34)N
30947   34   FORMAT('      THE ENTERED NUMBER OF OBSERVATIONS HERE = ',I6)
30948        CALL DPWRST('XXX','BUG ')
30949        WRITE(ICOUT,999)
30950        CALL DPWRST('XXX','BUG ')
30951        IERROR='YES'
30952        GOTO9000
30953      ENDIF
30954C
30955      IF(ICASCT.NE.'CRTA')THEN
30956        IF(NUMRES.GT.1)THEN
30957          WRITE(ICOUT,999)
30958          CALL DPWRST('XXX','BUG ')
30959          WRITE(ICOUT,31)
30960          CALL DPWRST('XXX','BUG ')
30961          WRITE(ICOUT,37)
30962   37     FORMAT('      FOR THE LOCATION OR SCALE CASES, THE NUMBER')
30963          CALL DPWRST('XXX','BUG ')
30964          WRITE(ICOUT,38)
30965   38     FORMAT('      OF RESPONSE VARIABLES MUST BE EXACTLY ONE.')
30966          CALL DPWRST('XXX','BUG ')
30967          WRITE(ICOUT,39)NUMRES
30968   39     FORMAT('      THE NUMBER OF RESPONSE VARIABLES  = ',I8)
30969          CALL DPWRST('XXX','BUG ')
30970          IERROR='YES'
30971          GOTO9000
30972        ENDIF
30973      ENDIF
30974C               ******************************************************
30975C               **  STEP 1--                                        **
30976C               **  1-VARIABLE CASE, I.E. NO GROUP ID VARIABLES.    **
30977C               ******************************************************
30978C
30979      ISTEPN='1'
30980      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSTA')
30981     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
30982C
30983      IWRITE='OFF'
30984      IF(NUMV2.EQ.NUMRES)THEN
30985C
30986CCCCC   IF(ICASS7(1:3).EQ.'GRO')THEN
30987CCCCC     IERROR='YES'
30988CCCCC     GOTO8000
30989CCCCC   ENDIF
30990C
30991        IF(ICASCT.EQ.'CRTA')THEN
30992          CALL CMPSTA(
30993     1         Y,YTEMP,YTEMP2,TEMP3,TEMP4,TEMP5,MAXNXT,
30994     1         N,N,N,NUMRES,ICASS7,
30995     1         ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
30996     1         DTEMP1,DTEMP2,DTEMP3,
30997CCCCC1         IQUAME,IQUASE,PSTAMV,
30998     1         STAT1,
30999     1         ISUBRO,IBUGA3,IERROR)
31000          IF(IERROR.EQ.'YES')GOTO9000
31001C
31002          IF(ICTALT.EQ.'COLL')THEN
31003             Y2(1)=STAT1
31004          ELSE
31005            DO111I=1,N
31006              Y2(I)=STAT1
31007  111       CONTINUE
31008          ENDIF
31009        ELSEIF(ICASCT.EQ.'CTCU')THEN
31010          DO121I=1,N
31011            NTEMP=I
31012            CALL CMPSTA(
31013     1           Y,YTEMP,YTEMP2,TEMP3,TEMP4,TEMP5,MAXNXT,
31014     1           NTEMP,NTEMP,NTEMP,NUMRES,ICASS7,
31015     1           ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31016     1           DTEMP1,DTEMP2,DTEMP3,
31017CCCCC1           IQUAME,IQUASE,PSTAMV,
31018     1           STAT1,
31019     1           ISUBRO,IBUGA3,IERROR)
31020                 IF(IERROR.EQ.'YES')THEN
31021                   Y2(I)=PSTAMV
31022                 ELSE
31023                   Y2(I)=STAT1
31024                 ENDIF
31025  121     CONTINUE
31026        ELSE
31027          STAT1=0.0
31028          STAT2=1.0
31029          IF(ICASCT.NE.'SCAL')THEN
31030            CALL CMPSTA(
31031     1      Y,YTEMP,YTEMP2,TEMP3,TEMP4,TEMP5,MAXOBV,
31032     1      N,N,N,NUMRES,ILOC,
31033     1      ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31034     1      DTEMP1,DTEMP2,DTEMP3,
31035CCCCC1      IQUAME,IQUASE,PSTAMV,
31036     1      STAT1,
31037     1      ISUBRO,IBUGA3,IERROR)
31038            IF(IERROR.EQ.'YES')GOTO9000
31039          ENDIF
31040C
31041          IF(ICASCT.NE.'LOCA')THEN
31042            CALL CMPSTA(
31043     1      Y,YTEMP,YTEMP2,TEMP3,TEMP4,TEMP5,MAXOBV,
31044     1      N,N,N,NUMRES,ISCALE,
31045     1      ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31046     1      DTEMP1,DTEMP2,DTEMP3,
31047CCCCC1      IQUAME,IQUASE,PSTAMV,
31048     1      STAT2,
31049     1      ISUBRO,IBUGA3,IERROR)
31050            IF(IERROR.EQ.'YES')GOTO9000
31051          ENDIF
31052          DO113I=1,N
31053            Y2(I)=(Y(I)-STAT1)/STAT2
31054  113     CONTINUE
31055        ENDIF
31056        GOTO9000
31057      ENDIF
31058C
31059      NUMGRP=NUMV2-NUMRES
31060      NUMSE1=0
31061      NUMSE2=0
31062      NUMSE3=0
31063      NUMSE4=0
31064      NUMSE5=0
31065      NUMSE6=0
31066      ANUMS1=NUMSE1
31067      ANUMS2=NUMSE2
31068      ANUMS3=NUMSE3
31069      ANUMS4=NUMSE4
31070      ANUMS5=NUMSE5
31071      ANUMS6=NUMSE6
31072      IF(NUMGRP.GE.1)THEN
31073        IF(ICTAGR.EQ.'NONC')THEN
31074          CALL DISTIN(XH1,N,IWRITE,XH1DIS,NUMSE1,IBUGA3,IERROR)
31075          CALL SORT(XH1DIS,NUMSE1,XH1DIS)
31076        ENDIF
31077      ENDIF
31078      IF(NUMGRP.GE.2)THEN
31079        CALL DISTIN(XH2,N,IWRITE,XH2DIS,NUMSE2,IBUGA3,IERROR)
31080        CALL SORT(XH2DIS,NUMSE2,XH2DIS)
31081      ENDIF
31082      IF(NUMGRP.GE.3)THEN
31083        CALL DISTIN(XH3,N,IWRITE,XH3DIS,NUMSE3,IBUGA3,IERROR)
31084        CALL SORT(XH3DIS,NUMSE3,XH3DIS)
31085      ENDIF
31086      IF(NUMGRP.GE.4)THEN
31087        CALL DISTIN(XH4,N,IWRITE,XH4DIS,NUMSE4,IBUGA3,IERROR)
31088        CALL SORT(XH4DIS,NUMSE4,XH4DIS)
31089      ENDIF
31090      IF(NUMGRP.GE.5)THEN
31091        CALL DISTIN(XH5,N,IWRITE,XH5DIS,NUMSE5,IBUGA3,IERROR)
31092        CALL SORT(XH5DIS,NUMSE5,XH5DIS)
31093      ENDIF
31094      IF(NUMGRP.GE.6)THEN
31095        CALL DISTIN(XH6,N,IWRITE,XH6DIS,NUMSE6,IBUGA3,IERROR)
31096        CALL SORT(XH6DIS,NUMSE6,XH6DIS)
31097      ENDIF
31098C
31099      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
31100        WRITE(ICOUT,191)NUMGRP,NUMSE1,NUMSE2,NUMSE3,NUMSE4
31101  191   FORMAT('NUMGRP,NUMSE1,NUMSE2,NUMSE3,NUMSE4 = ',5I8)
31102        CALL DPWRST('XXX','BUG ')
31103        NTEMP=MAX(NUMSE1,NUMSE2)
31104        NTEMP=MAX(NTEMP,NUMSE3)
31105        NTEMP=MAX(NTEMP,NUMSE4)
31106        DO195I=1,NTEMP
31107          WRITE(ICOUT,197)I,XH1DIS(I),XH2DIS(I),XH3DIS(I),XH4DIS(I)
31108  197     FORMAT('I,XH1DIS(I),XH2DIS(I),XH3DIS(I),XH4DIS(I) = ',
31109     1           I8,4G15.7)
31110          CALL DPWRST('XXX','BUG ')
31111  195   CONTINUE
31112      ENDIF
31113C
31114C               **************************************
31115C               **  STEP 2--                        **
31116C               **  ONE GROUP ID VARIABLE.          **
31117C               **************************************
31118C
31119      ISTEPN='2'
31120      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSTA')
31121     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
31122C
31123      IF(NUMGRP.EQ.1)THEN
31124C
31125        NOUT=0
31126C
31127C       JULY 2011: THE SET LET CROSS TABULATE COMPLEMENT OPTION HAS THE
31128C                  FOLLOWING OPTIONS:
31129C
31130C                  1) OFF  - DEFAULT BEHAVIOR, EXTRACT DATA AS DEFINED BY
31131C                            THE GROUP-ID VARIABLES
31132C
31133C                  2) ON   - FOR THE LAST GROUP-ID VARIABLE, EXTRACT ALL
31134C                            DATA THAT IS NOT EQUAL TO THE SPECIFIED GROUP
31135C                            VALUE.
31136C
31137C                  3) ONE  - FOR THE LAST GROUP-ID VARIABLE, THE FIRST
31138C                            RESPONSE VARIABLE WILL EXTRACT THE VALUES
31139C                            NOT EQUAL TO THE SPECIFIED GROUP VALUE AND
31140C                            THE SECOND RESPONSE VARIABLE WILL EXTRACT
31141C                            THE VALUES EQUAL TO THE SPECIFIED GROUP VALUE.
31142C
31143C                  4) TWO  - FOR THE LAST GROUP-ID VARIABLE, THE FIRST
31144C                            RESPONSE VARIABLE WILL EXTRACT THE VALUES
31145C                            EQUAL TO THE SPECIFIED GROUP VALUE AND THE
31146C                            SECOND RESPONSE VARIABLE WILL EXTRACT THE
31147C                            VALUES NOT EQUAL TO THE SPECIFIED GROUP VALUE.
31148C
31149C       JUNE 2016: IF THE "SET LET CROSS TABULATE GROUPS CONTIGUOUS ON"
31150C                  IS GIVEN, THEN DON'T COMPUTE DISTINCT VALUES.
31151C                  INSTEAD LOOP THROUGH THE GROUP-ID VARIABLE AND SPLIT
31152C                  INTO GROUPS WHEN VALUE OF GROUP-ID VARIABLE CHANGES.
31153C                  THAT IS, GROUP BY CONTIGUOUS VALUES FOR THE GROUP-ID
31154C                  VARIABLE.
31155C
31156        IF(ICTAGR.EQ.'CONT')THEN
31157          JSTRT=1
31158          IFRST=1
31159          ILAST=1
31160          HOLD=XH1(1)
31161          JCNTR=1
31162C
31163 2210     CONTINUE
31164C
31165          NTEMP=0
31166          NTEMP1=0
31167          NTEMP2=0
31168          NTEMP3=0
31169          IFRST=JSTRT
31170C
31171          IF(ICTACO.EQ.'ON')THEN
31172            DO2220J=JSTRT,N
31173              JCNTR=J
31174              IF(XH1(J).EQ.HOLD)THEN
31175                NTEMP=NTEMP+1
31176                ZTEMP1(NTEMP)=Y(J)
31177                ZTEMP2(NTEMP)=YTEMP(J)
31178                ZTEMP3(NTEMP)=YTEMP2(J)
31179              ELSE
31180                JSTRT=J
31181                HOLD=XH1(J)
31182                ILAST=J-1
31183                GOTO2229
31184              ENDIF
31185 2220       CONTINUE
31186 2229       CONTINUE
31187            IF(JCNTR.EQ.N)ILAST=J
31188          ELSE
31189            DO2230J=JSTRT,N
31190              JCNTR=J
31191              IF(XH1(J).EQ.HOLD)THEN
31192                NTEMP=NTEMP+1
31193                ZTEMP1(NTEMP)=Y(J)
31194                ZTEMP2(NTEMP)=YTEMP(J)
31195                ZTEMP3(NTEMP)=YTEMP2(J)
31196              ELSE
31197                JSTRT=J
31198                HOLD=XH1(J)
31199                ILAST=J-1
31200                GOTO2239
31201              ENDIF
31202 2230       CONTINUE
31203 2239       CONTINUE
31204            IF(JCNTR.EQ.N)ILAST=J
31205          ENDIF
31206C
31207          IF(NTEMP.GT.0)THEN
31208            NTEMP1=NTEMP
31209            NTEMP2=NTEMP
31210            NTEMP3=NTEMP
31211          ENDIF
31212          IFLAG=1
31213          IFLAG2=0
31214          IF(NUMRES.EQ.1 .AND. NTEMP1.LE.0)THEN
31215            IFLAG=0
31216          ELSEIF(NUMRES.EQ.2)THEN
31217            IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0)THEN
31218              IFLAG=0
31219            ENDIF
31220          ELSEIF(NUMRES.EQ.3)THEN
31221            IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0 .OR. NTEMP3.LE.0)THEN
31222              IFLAG=0
31223            ENDIF
31224          ENDIF
31225          IF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')IFLAG2=1
31226C
31227          IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
31228            WRITE(ICOUT,2291)ISET1,IFLAG,IFLAG2
31229 2291       FORMAT('ISET1,IFLAG,IFLAG2 = ',3I8)
31230            CALL DPWRST('XXX','BUG ')
31231            WRITE(ICOUT,393)NTEMP,NTEMP1,NTEMP2,NTEMP3
31232            CALL DPWRST('XXX','BUG ')
31233          ENDIF
31234C
31235          IWRITE='OFF'
31236          IF(IFLAG.EQ.1 .OR. IFLAG2.EQ.1)THEN
31237            IF(ICASS7.EQ.'GRO1')THEN
31238              STAT1=XH1DIS(I)
31239              NOUT=NOUT+1
31240              Y2(NOUT)=STAT1
31241            ELSEIF(ICASS7(1:3).EQ.'GRO')THEN
31242              WRITE(ICOUT,297)ICASS7
31243              CALL DPWRST('XXX','BUG ')
31244              IERROR='YES'
31245              GOTO8000
31246            ELSEIF(ICASCT.EQ.'CRTA')THEN
31247              IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)THEN
31248                STAT1=PSTAMV
31249              ELSEIF(NTEMP.GT.0)THEN
31250                CALL CMPSTA(
31251     1               ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31252     1               MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ICASS7,
31253     1               ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31254     1               DTEMP1,DTEMP2,DTEMP3,
31255     1               STAT1,
31256     1               ISUBRO,IBUGA3,IERROR)
31257                IF(IERROR.EQ.'YES')GOTO9000
31258              ELSE
31259                STAT1=PSTAMV
31260              ENDIF
31261              IF(ICTALT.EQ.'COLL')THEN
31262                NOUT=NOUT+1
31263                Y2(NOUT)=STAT1
31264              ELSE
31265                DO2260J=IFRST,ILAST
31266                  Y2(J)=STAT1
31267 2260           CONTINUE
31268              ENDIF
31269            ELSEIF(ICASCT.EQ.'CTCU')THEN
31270              DO2261J=1,NTEMP1
31271                NTEMPZ=J
31272                CALL CMPSTA(
31273     1               ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31274     1               MAXNXT,NTEMPZ,NTEMPZ,NTEMPZ,NUMRES,ICASS7,
31275     1               ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31276     1               DTEMP1,DTEMP2,DTEMP3,
31277     1               STAT1,
31278     1               ISUBRO,IBUGA3,IERROR)
31279                NOUT=NOUT+1
31280                IF(IERROR.EQ.'YES')THEN
31281                  Y2(NOUT)=PSTAMV
31282                ELSE
31283                  Y2(NOUT)=STAT1
31284                ENDIF
31285 2261         CONTINUE
31286            ELSEIF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')THEN
31287              STAT1=PSTAMV
31288              NOUT=NOUT+1
31289              Y2(NOUT)=STAT1
31290            ELSE
31291              STAT1=0.0
31292              STAT2=1.0
31293              IF(ICASCT.NE.'SCAL')THEN
31294                CALL CMPSTA(
31295     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31296     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ILOC,
31297     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31298     1            DTEMP1,DTEMP2,DTEMP3,
31299     1            STAT1,
31300     1            ISUBRO,IBUGA3,IERROR)
31301                  IF(IERROR.EQ.'YES')GOTO9000
31302              ENDIF
31303C
31304              IF(ICASCT.NE.'LOCA')THEN
31305                CALL CMPSTA(
31306     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31307     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ISCALE,
31308     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31309     1            DTEMP1,DTEMP2,DTEMP3,
31310     1            STAT2,
31311     1            ISUBRO,IBUGA3,IERROR)
31312                IF(IERROR.EQ.'YES')GOTO9000
31313              ENDIF
31314              DO2280J=IFRST,ILAST
31315                Y2(J)=(Y(J)-STAT1)/STAT2
31316 2280         CONTINUE
31317            ENDIF
31318          ENDIF
31319C
31320          IF(JCNTR.LT.N)GOTO2210
31321          IF(ICTALT.EQ.'COLL')N=NOUT
31322          GOTO9000
31323C
31324        ENDIF
31325C
31326        DO210I=1,NUMSE1
31327          NTEMP=0
31328          NTEMP1=0
31329          NTEMP2=0
31330          NTEMP3=0
31331          IF(ICTACO.EQ.'ON')THEN
31332            DO220J=1,N
31333              IF(XH1(J).NE.XH1DIS(I))THEN
31334                NTEMP=NTEMP+1
31335                ZTEMP1(NTEMP)=Y(J)
31336                ZTEMP2(NTEMP)=YTEMP(J)
31337                ZTEMP3(NTEMP)=YTEMP2(J)
31338              ENDIF
31339  220       CONTINUE
31340          ELSEIF(ICTACO.EQ.'ONE')THEN
31341            DO221J=1,N
31342              IF(XH1(J).EQ.XH1DIS(I))THEN
31343                NTEMP2=NTEMP2+1
31344                ZTEMP2(NTEMP2)=YTEMP(J)
31345                NTEMP3=NTEMP3+1
31346                ZTEMP3(NTEMP3)=YTEMP2(J)
31347              ELSEIF(XH1(J).NE.XH1DIS(I))THEN
31348                NTEMP1=NTEMP1+1
31349                ZTEMP1(NTEMP1)=Y(J)
31350              ENDIF
31351  221       CONTINUE
31352          ELSEIF(ICTACO.EQ.'TWO')THEN
31353            DO222J=1,N
31354              IF(XH1(J).EQ.XH1DIS(I))THEN
31355                NTEMP1=NTEMP1+1
31356                ZTEMP1(NTEMP1)=Y(J)
31357                NTEMP3=NTEMP3+1
31358                ZTEMP3(NTEMP3)=YTEMP2(J)
31359              ELSEIF(XH1(J).NE.XH1DIS(I))THEN
31360                NTEMP2=NTEMP2+1
31361                ZTEMP2(NTEMP2)=YTEMP(J)
31362              ENDIF
31363  222       CONTINUE
31364          ELSE
31365            DO230J=1,N
31366              IF(XH1(J).EQ.XH1DIS(I))THEN
31367                NTEMP=NTEMP+1
31368                ZTEMP1(NTEMP)=Y(J)
31369                ZTEMP2(NTEMP)=YTEMP(J)
31370                ZTEMP3(NTEMP)=YTEMP2(J)
31371              ENDIF
31372  230       CONTINUE
31373          ENDIF
31374C
31375          IF(NTEMP.GT.0)THEN
31376            NTEMP1=NTEMP
31377            NTEMP2=NTEMP
31378            NTEMP3=NTEMP
31379          ENDIF
31380          IFLAG=1
31381          IFLAG2=0
31382          IF(NUMRES.EQ.1 .AND. NTEMP1.LE.0)THEN
31383            IFLAG=0
31384          ELSEIF(NUMRES.EQ.2)THEN
31385            IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0)THEN
31386              IFLAG=0
31387            ENDIF
31388          ELSEIF(NUMRES.EQ.3)THEN
31389            IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0 .OR. NTEMP3.LE.0)THEN
31390              IFLAG=0
31391            ENDIF
31392          ENDIF
31393          IF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')IFLAG2=1
31394C
31395          IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
31396            WRITE(ICOUT,291)ISET1,IFLAG,IFLAG2
31397  291       FORMAT('ISET1,IFLAG,IFLAG2 = ',3I8)
31398            CALL DPWRST('XXX','BUG ')
31399            WRITE(ICOUT,393)NTEMP,NTEMP1,NTEMP2,NTEMP3
31400            CALL DPWRST('XXX','BUG ')
31401          ENDIF
31402C
31403          IWRITE='OFF'
31404          IF(IFLAG.EQ.1 .OR. IFLAG2.EQ.1)THEN
31405CCCCC       IF(ICASS7.EQ.'NUMB')THEN
31406CCCCC         IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)STAT1=PSTAMV
31407CCCCC         STAT1=NTEMP
31408CCCCC         NOUT=NOUT+1
31409CCCCC         Y2(NOUT)=STAT1
31410CCCCC       ELSEIF(ICASS7.EQ.'GRO1')THEN
31411            IF(ICASS7.EQ.'GRO1')THEN
31412              STAT1=XH1DIS(I)
31413              NOUT=NOUT+1
31414              Y2(NOUT)=STAT1
31415            ELSEIF(ICASS7(1:3).EQ.'GRO')THEN
31416              WRITE(ICOUT,297)ICASS7
31417  297         FORMAT('INVALID CASE: ',A4)
31418              CALL DPWRST('XXX','BUG ')
31419              IERROR='YES'
31420              GOTO8000
31421            ELSEIF(ICASCT.EQ.'CRTA')THEN
31422              IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)THEN
31423                STAT1=PSTAMV
31424              ELSEIF(NTEMP.GT.0)THEN
31425                CALL CMPSTA(
31426     1               ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31427     1               MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ICASS7,
31428     1               ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31429     1               DTEMP1,DTEMP2,DTEMP3,
31430CCCCC1               IQUAME,IQUASE,PSTAMV,
31431     1               STAT1,
31432     1               ISUBRO,IBUGA3,IERROR)
31433                IF(IERROR.EQ.'YES')GOTO9000
31434              ELSE
31435                STAT1=PSTAMV
31436              ENDIF
31437              IF(ICTALT.EQ.'COLL')THEN
31438                NOUT=NOUT+1
31439                Y2(NOUT)=STAT1
31440              ELSE
31441                DO260J=1,N
31442                  IF(XH1(J).EQ.XH1DIS(I))THEN
31443                    Y2(J)=STAT1
31444                  ENDIF
31445  260           CONTINUE
31446              ENDIF
31447            ELSEIF(ICASCT.EQ.'CTCU')THEN
31448              DO261J=1,NTEMP1
31449                NTEMPZ=J
31450                CALL CMPSTA(
31451     1               ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31452     1               MAXNXT,NTEMPZ,NTEMPZ,NTEMPZ,NUMRES,ICASS7,
31453     1               ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31454     1               DTEMP1,DTEMP2,DTEMP3,
31455CCCCC1               IQUAME,IQUASE,PSTAMV,
31456     1               STAT1,
31457     1               ISUBRO,IBUGA3,IERROR)
31458                NOUT=NOUT+1
31459                IF(IERROR.EQ.'YES')THEN
31460                  Y2(NOUT)=PSTAMV
31461                ELSE
31462                  Y2(NOUT)=STAT1
31463                ENDIF
31464  261         CONTINUE
31465            ELSEIF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')THEN
31466              STAT1=PSTAMV
31467              NOUT=NOUT+1
31468              Y2(NOUT)=STAT1
31469            ELSE
31470              STAT1=0.0
31471              STAT2=1.0
31472              IF(ICASCT.NE.'SCAL')THEN
31473                CALL CMPSTA(
31474     1          ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31475     1          MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ILOC,
31476     1          ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31477     1          DTEMP1,DTEMP2,DTEMP3,
31478CCCCC1          IQUAME,IQUASE,PSTAMV,
31479     1          STAT1,
31480     1          ISUBRO,IBUGA3,IERROR)
31481                IF(IERROR.EQ.'YES')GOTO9000
31482              ENDIF
31483C
31484              IF(ICASCT.NE.'LOCA')THEN
31485                CALL CMPSTA(
31486     1          ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31487     1          MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ISCALE,
31488     1          ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31489     1          DTEMP1,DTEMP2,DTEMP3,
31490CCCCC1          IQUAME,IQUASE,PSTAMV,
31491     1          STAT2,
31492     1          ISUBRO,IBUGA3,IERROR)
31493                IF(IERROR.EQ.'YES')GOTO9000
31494              ENDIF
31495              DO280J=1,N
31496                IF(XH1(J).EQ.XH1DIS(I))THEN
31497                  Y2(J)=(Y(J)-STAT1)/STAT2
31498                ENDIF
31499  280         CONTINUE
31500            ENDIF
31501          ENDIF
31502  210   CONTINUE
31503        IF(ICTALT.EQ.'COLL')N=NOUT
31504        GOTO9000
31505      ENDIF
31506C
31507C               **************************************
31508C               **  STEP 3--                        **
31509C               **  TWO GROUP ID VARIABLES          **
31510C               **************************************
31511C
31512      ISTEPN='3'
31513      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSTA')
31514     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
31515C
31516      IF(NUMGRP.EQ.2)THEN
31517C
31518        NOUT=0
31519        DO310ISET1=1,NUMSE1
31520          DO320ISET2=1,NUMSE2
31521            NTEMP=0
31522            NTEMP1=0
31523            NTEMP2=0
31524            NTEMP3=0
31525            IF(ICTACO.EQ.'ON')THEN
31526              DO330J=1,N
31527                IF(XH1(J).EQ.XH1DIS(ISET1))THEN
31528                  IF(XH2(J).NE.XH2DIS(ISET2))THEN
31529                    NTEMP=NTEMP+1
31530                    ZTEMP1(NTEMP)=Y(J)
31531                    ZTEMP2(NTEMP)=YTEMP(J)
31532                    ZTEMP3(NTEMP)=YTEMP2(J)
31533                  ENDIF
31534                ENDIF
31535  330         CONTINUE
31536            ELSEIF(ICTACO.EQ.'ONE')THEN
31537              DO331J=1,N
31538                IF(XH1(J).EQ.XH1DIS(ISET1))THEN
31539                  IF(XH2(J).EQ.XH2DIS(ISET2))THEN
31540                    NTEMP2=NTEMP2+1
31541                    ZTEMP2(NTEMP2)=YTEMP(J)
31542                    NTEMP3=NTEMP3+1
31543                    ZTEMP3(NTEMP3)=YTEMP2(J)
31544                  ELSEIF(XH2(J).NE.XH2DIS(ISET2))THEN
31545                    NTEMP1=NTEMP1+1
31546                    ZTEMP1(NTEMP1)=Y(J)
31547                  ENDIF
31548                ENDIF
31549  331         CONTINUE
31550            ELSEIF(ICTACO.EQ.'TWO')THEN
31551              DO332J=1,N
31552                IF(XH1(J).EQ.XH1DIS(ISET1))THEN
31553                  IF(XH2(J).EQ.XH2DIS(ISET2))THEN
31554                    NTEMP1=NTEMP1+1
31555                    ZTEMP1(NTEMP1)=Y(J)
31556                    NTEMP3=NTEMP3+1
31557                    ZTEMP3(NTEMP3)=YTEMP2(J)
31558                  ELSEIF(XH2(J).NE.XH2DIS(ISET2))THEN
31559                    NTEMP2=NTEMP2+1
31560                    ZTEMP2(NTEMP2)=YTEMP(J)
31561                  ENDIF
31562                ENDIF
31563  332         CONTINUE
31564            ELSE
31565              DO370J=1,N
31566                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31567     1             XH2(J).EQ.XH2DIS(ISET2))THEN
31568                  NTEMP=NTEMP+1
31569                  ZTEMP1(NTEMP)=Y(J)
31570                  ZTEMP2(NTEMP)=YTEMP(J)
31571                  ZTEMP3(NTEMP)=YTEMP2(J)
31572                ENDIF
31573  370         CONTINUE
31574            ENDIF
31575C
31576            IF(NTEMP.GT.0)THEN
31577              NTEMP1=NTEMP
31578              NTEMP2=NTEMP
31579              NTEMP3=NTEMP
31580            ENDIF
31581            IFLAG=1
31582            IFLAG2=0
31583            IF(NUMRES.EQ.0 .AND. NTEMP.LE.0)THEN
31584              IFLAG=0
31585            ELSEIF(NUMRES.EQ.1 .AND. NTEMP1.LE.0)THEN
31586              IFLAG=0
31587            ELSEIF(NUMRES.EQ.2)THEN
31588              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0)THEN
31589                IFLAG=0
31590              ENDIF
31591            ELSEIF(NUMRES.EQ.3)THEN
31592              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0 .OR. NTEMP3.LE.0)THEN
31593                IFLAG=0
31594              ENDIF
31595            ENDIF
31596            IF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')IFLAG2=1
31597C
31598            IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
31599              WRITE(ICOUT,391)ISET1,ISET2,IFLAG,IFLAG2
31600  391         FORMAT('ISET1,ISET2,IFLAG,IFLAG2 = ',4I8)
31601              CALL DPWRST('XXX','BUG ')
31602              WRITE(ICOUT,393)NTEMP,NTEMP1,NTEMP2,NTEMP3
31603  393         FORMAT('NTEMP,NTEMP1,NTEMP2,NTEMP3 = ',4I8)
31604              CALL DPWRST('XXX','BUG ')
31605            ENDIF
31606C
31607            IWRITE='OFF'
31608            IF(IFLAG.EQ.1 .OR. IFLAG2.EQ.1)THEN
31609CCCCC         IF(ICASS7.EQ.'NUMB')THEN
31610CCCCC           IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)STAT1=PSTAMV
31611CCCCC           STAT1=NTEMP
31612CCCCC           NOUT=NOUT+1
31613CCCCC           Y2(NOUT)=STAT1
31614CCCCC         ELSEIF(ICASS7.EQ.'GRO1')THEN
31615              IF(ICASS7.EQ.'GRO1')THEN
31616                STAT1=XH1DIS(ISET1)
31617                NOUT=NOUT+1
31618                Y2(NOUT)=STAT1
31619              ELSEIF(ICASS7.EQ.'GRO2')THEN
31620                STAT1=XH2DIS(ISET2)
31621                NOUT=NOUT+1
31622                Y2(NOUT)=STAT1
31623              ELSEIF(ICASS7(1:3).EQ.'GRO')THEN
31624                WRITE(ICOUT,397)ICASS7
31625  397           FORMAT('INVALID CASE: ',A4)
31626                CALL DPWRST('XXX','BUG ')
31627                IERROR='YES'
31628                GOTO8000
31629              ELSEIF(ICASCT.EQ.'CRTA')THEN
31630                IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)THEN
31631                  STAT1=PSTAMV
31632                ELSEIF(NTEMP1.GT.0)THEN
31633                  CALL CMPSTA(
31634     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31635     1                 MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ICASS7,
31636     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31637     1                 DTEMP1,DTEMP2,DTEMP3,
31638CCCCC1                 IQUAME,IQUASE,PSTAMV,
31639     1                 STAT1,
31640     1                 ISUBRO,IBUGA3,IERROR)
31641                  IF(IERROR.EQ.'YES')GOTO9000
31642                ELSE
31643                  STAT1=PSTAMV
31644                ENDIF
31645                IF(ICTALT.EQ.'COLL')THEN
31646                  NOUT=NOUT+1
31647                  Y2(NOUT)=STAT1
31648                ELSE
31649                  DO380J=1,N
31650                    IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31651     1                 XH2(J).EQ.XH2DIS(ISET2))THEN
31652                      Y2(J)=STAT1
31653                    ENDIF
31654  380             CONTINUE
31655                ENDIF
31656              ELSEIF(ICASCT.EQ.'CTCU')THEN
31657                DO381J=1,NTEMP1
31658                  NTEMPZ=J
31659                  CALL CMPSTA(
31660     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31661     1                 MAXNXT,NTEMPZ,NTEMPZ,NTEMPZ,NUMRES,ICASS7,
31662     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31663     1                 DTEMP1,DTEMP2,DTEMP3,
31664CCCCC1                 IQUAME,IQUASE,PSTAMV,
31665     1                 STAT1,
31666     1                 ISUBRO,IBUGA3,IERROR)
31667                  NOUT=NOUT+1
31668                  IF(IERROR.EQ.'YES')THEN
31669                    Y2(NOUT)=PSTAMV
31670                  ELSE
31671                    Y2(NOUT)=STAT1
31672                  ENDIF
31673  381           CONTINUE
31674              ELSEIF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')THEN
31675                STAT1=PSTAMV
31676                NOUT=NOUT+1
31677                Y2(NOUT)=STAT1
31678              ELSE
31679                STAT1=0.0
31680                STAT2=1.0
31681                IF(ICASCT.NE.'SCAL')THEN
31682                  CALL CMPSTA(
31683     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31684     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ILOC,
31685     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31686     1            DTEMP1,DTEMP2,DTEMP3,
31687CCCCC1            IQUAME,IQUASE,PSTAMV,
31688     1            STAT1,
31689     1            ISUBRO,IBUGA3,IERROR)
31690                  IF(IERROR.EQ.'YES')GOTO9000
31691                ENDIF
31692C
31693                IF(ICASCT.NE.'LOCA')THEN
31694                  CALL CMPSTA(
31695     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31696     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ISCALE,
31697     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31698     1            DTEMP1,DTEMP2,DTEMP3,
31699CCCCC1            IQUAME,IQUASE,PSTAMV,
31700     1            STAT2,
31701     1            ISUBRO,IBUGA3,IERROR)
31702                  IF(IERROR.EQ.'YES')GOTO9000
31703                ENDIF
31704                DO390J=1,N
31705                  IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31706     1               XH2(J).EQ.XH2DIS(ISET2))THEN
31707                    Y2(J)=(Y(J)-STAT1)/STAT2
31708                  ENDIF
31709  390           CONTINUE
31710              ENDIF
31711            ENDIF
31712C
31713  320     CONTINUE
31714  310   CONTINUE
31715        IF(ICTALT.EQ.'COLL')N=NOUT
31716        GOTO9000
31717      ENDIF
31718C
31719C               **************************************
31720C               **  STEP 4--                        **
31721C               **  THREE GROUP ID VARIABLES        **
31722C               **************************************
31723C
31724      ISTEPN='4'
31725      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSTA')
31726     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
31727C
31728      IF(NUMGRP.EQ.3)THEN
31729C
31730        NOUT=0
31731        DO410ISET1=1,NUMSE1
31732          DO420ISET2=1,NUMSE2
31733          DO430ISET3=1,NUMSE3
31734            NTEMP=0
31735            NTEMP1=0
31736            NTEMP2=0
31737            NTEMP3=0
31738            IF(ICTACO.EQ.'ON')THEN
31739              DO440J=1,N
31740                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31741     1             XH2(J).EQ.XH2DIS(ISET2))THEN
31742                  IF(XH3(J).NE.XH3DIS(ISET3))THEN
31743                    NTEMP=NTEMP+1
31744                    ZTEMP1(NTEMP)=Y(J)
31745                    ZTEMP2(NTEMP)=YTEMP(J)
31746                    ZTEMP3(NTEMP)=YTEMP2(J)
31747                  ENDIF
31748                ENDIF
31749  440         CONTINUE
31750            ELSEIF(ICTACO.EQ.'ONE')THEN
31751              DO441J=1,N
31752                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31753     1             XH2(J).EQ.XH2DIS(ISET2))THEN
31754                  IF(XH3(J).EQ.XH3DIS(ISET3))THEN
31755                    NTEMP2=NTEMP2+1
31756                    ZTEMP2(NTEMP2)=YTEMP(J)
31757                    NTEMP3=NTEMP3+1
31758                    ZTEMP3(NTEMP3)=YTEMP2(J)
31759                  ELSEIF(XH3(J).NE.XH3DIS(ISET3))THEN
31760                    NTEMP1=NTEMP1+1
31761                    ZTEMP1(NTEMP1)=Y(J)
31762                  ENDIF
31763                ENDIF
31764  441         CONTINUE
31765            ELSEIF(ICTACO.EQ.'TWO')THEN
31766              DO442J=1,N
31767                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31768     1             XH2(J).EQ.XH2DIS(ISET2))THEN
31769                  IF(XH3(J).EQ.XH3DIS(ISET3))THEN
31770                    NTEMP1=NTEMP1+1
31771                    ZTEMP1(NTEMP1)=Y(J)
31772                    NTEMP3=NTEMP3+1
31773                    ZTEMP3(NTEMP3)=YTEMP2(J)
31774                  ELSEIF(XH3(J).NE.XH3DIS(ISET3))THEN
31775                    NTEMP2=NTEMP2+1
31776                    ZTEMP2(NTEMP2)=YTEMP(J)
31777                  ENDIF
31778                ENDIF
31779  442         CONTINUE
31780            ELSE
31781              DO470J=1,N
31782                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31783     1             XH2(J).EQ.XH2DIS(ISET2).AND.
31784     1             XH3(J).EQ.XH3DIS(ISET3))THEN
31785                  NTEMP=NTEMP+1
31786                  ZTEMP1(NTEMP)=Y(J)
31787                  ZTEMP2(NTEMP)=YTEMP(J)
31788                  ZTEMP3(NTEMP)=YTEMP2(J)
31789                ENDIF
31790  470         CONTINUE
31791            ENDIF
31792C
31793            IF(NTEMP.GT.0)THEN
31794              NTEMP1=NTEMP
31795              NTEMP2=NTEMP
31796              NTEMP3=NTEMP
31797            ENDIF
31798            IFLAG=1
31799            IFLAG2=0
31800            IF(NUMRES.LE.1 .AND. NTEMP1.LE.0)THEN
31801              IFLAG=0
31802            ELSEIF(NUMRES.EQ.2)THEN
31803              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0)THEN
31804                IFLAG=0
31805              ENDIF
31806            ELSEIF(NUMRES.EQ.3)THEN
31807              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0 .OR. NTEMP3.LE.0)THEN
31808                IFLAG=0
31809              ENDIF
31810            ENDIF
31811            IF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')IFLAG2=1
31812C
31813CCCCC       IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
31814CCCCC         WRITE(ICOUT,491)ISET1,ISET2,ISET3,IFLAG,IFLAG2
31815CC491         FORMAT('ISET1,ISET2,ISET3,IFLAG,IFLAG2 = ',5I8)
31816CCCCC         CALL DPWRST('XXX','BUG ')
31817CCCCC         WRITE(ICOUT,393)NTEMP,NTEMP1,NTEMP2,NTEMP3
31818CCCCC         CALL DPWRST('XXX','BUG ')
31819CCCCC       ENDIF
31820C
31821CCCCC       IWRITE='OFF'
31822            IF(IFLAG.EQ.1 .OR. IFLAG2.EQ.1)THEN
31823CCCCC         IF(ICASS7.EQ.'NUMB')THEN
31824CCCCC           IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)STAT1=PSTAMV
31825CCCCC           STAT1=NTEMP
31826CCCCC           NOUT=NOUT+1
31827CCCCC           Y2(NOUT)=STAT1
31828CCCCC         ELSEIF(ICASS7.EQ.'GRO1')THEN
31829              IF(ICASS7.EQ.'GRO1')THEN
31830                STAT1=XH1DIS(ISET1)
31831                NOUT=NOUT+1
31832                Y2(NOUT)=STAT1
31833              ELSEIF(ICASS7.EQ.'GRO2')THEN
31834                STAT1=XH2DIS(ISET2)
31835                NOUT=NOUT+1
31836                Y2(NOUT)=STAT1
31837              ELSEIF(ICASS7.EQ.'GRO3')THEN
31838                STAT1=XH3DIS(ISET3)
31839                NOUT=NOUT+1
31840                Y2(NOUT)=STAT1
31841              ELSEIF(ICASS7(1:3).EQ.'GRO')THEN
31842                WRITE(ICOUT,497)ICASS7
31843  497           FORMAT('INVALID CASE: ',A4)
31844                CALL DPWRST('XXX','BUG ')
31845                IERROR='YES'
31846                GOTO8000
31847              ELSEIF(ICASCT.EQ.'CRTA')THEN
31848                IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)THEN
31849                  STAT1=PSTAMV
31850                ELSEIF(NTEMP.GT.0)THEN
31851                  CALL CMPSTA(
31852     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31853     1                 MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ICASS7,
31854     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31855     1                 DTEMP1,DTEMP2,DTEMP3,
31856CCCCC1                 IQUAME,IQUASE,PSTAMV,
31857     1                 STAT1,
31858     1                 ISUBRO,IBUGA3,IERROR)
31859                  IF(IERROR.EQ.'YES')GOTO9000
31860                ELSE
31861                  STAT1=PSTAMV
31862                ENDIF
31863                IF(ICTALT.EQ.'COLL')THEN
31864                  NOUT=NOUT+1
31865                  Y2(NOUT)=STAT1
31866                ELSE
31867                  DO480J=1,N
31868                    IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31869     1                 XH2(J).EQ.XH2DIS(ISET2).AND.
31870     1                 XH3(J).EQ.XH3DIS(ISET3))THEN
31871                      Y2(J)=STAT1
31872                    ENDIF
31873  480             CONTINUE
31874                ENDIF
31875              ELSEIF(ICASCT.EQ.'CTCU')THEN
31876                DO481J=1,NTEMP1
31877                  NTEMPZ=J
31878                  CALL CMPSTA(
31879     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31880     1                 MAXNXT,NTEMPZ,NTEMPZ,NTEMPZ,NUMRES,ICASS7,
31881     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31882     1                 DTEMP1,DTEMP2,DTEMP3,
31883CCCCC1                 IQUAME,IQUASE,PSTAMV,
31884     1                 STAT1,
31885     1                 ISUBRO,IBUGA3,IERROR)
31886                  NOUT=NOUT+1
31887                  IF(IERROR.EQ.'YES')THEN
31888                    Y2(NOUT)=PSTAMV
31889                  ELSE
31890                    Y2(NOUT)=STAT1
31891                  ENDIF
31892  481           CONTINUE
31893              ELSEIF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')THEN
31894                STAT1=PSTAMV
31895                NOUT=NOUT+1
31896                Y2(NOUT)=STAT1
31897              ELSE
31898                STAT1=0.0
31899                STAT2=1.0
31900                IF(ICASCT.NE.'SCAL')THEN
31901                  CALL CMPSTA(
31902     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31903     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ILOC,
31904     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31905     1            DTEMP1,DTEMP2,DTEMP3,
31906CCCCC1            IQUAME,IQUASE,PSTAMV,
31907     1            STAT1,
31908     1            ISUBRO,IBUGA3,IERROR)
31909                  IF(IERROR.EQ.'YES')GOTO9000
31910                ENDIF
31911C
31912                IF(ICASCT.NE.'LOCA')THEN
31913                  CALL CMPSTA(
31914     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
31915     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ISCALE,
31916     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
31917     1            DTEMP1,DTEMP2,DTEMP3,
31918CCCCC1            IQUAME,IQUASE,PSTAMV,
31919     1            STAT2,
31920     1            ISUBRO,IBUGA3,IERROR)
31921                  IF(IERROR.EQ.'YES')GOTO9000
31922                ENDIF
31923                DO490J=1,N
31924                  IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31925     1               XH2(J).EQ.XH2DIS(ISET2).AND.
31926     1               XH3(J).EQ.XH3DIS(ISET3))THEN
31927                    Y2(J)=(Y(J)-STAT1)/STAT2
31928                  ENDIF
31929  490           CONTINUE
31930              ENDIF
31931            ENDIF
31932C
31933  430     CONTINUE
31934  420     CONTINUE
31935  410   CONTINUE
31936        IF(ICTALT.EQ.'COLL')N=NOUT
31937        GOTO9000
31938      ENDIF
31939C
31940C               **************************************
31941C               **  STEP 5--                        **
31942C               **  FOUR GROUP ID VARIABLES         **
31943C               **************************************
31944C
31945      ISTEPN='4'
31946      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSTA')
31947     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
31948C
31949      IF(NUMGRP.EQ.4)THEN
31950C
31951        NOUT=0
31952        DO510ISET1=1,NUMSE1
31953          DO520ISET2=1,NUMSE2
31954          DO530ISET3=1,NUMSE3
31955          DO540ISET4=1,NUMSE4
31956            NTEMP=0
31957            NTEMP1=0
31958            NTEMP2=0
31959            NTEMP3=0
31960            IF(ICTACO.EQ.'ON')THEN
31961              DO550J=1,N
31962                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31963     1             XH2(J).EQ.XH2DIS(ISET2).AND.
31964     1             XH3(J).EQ.XH3DIS(ISET3))THEN
31965                  IF(XH4(J).NE.XH4DIS(ISET4))THEN
31966                    NTEMP=NTEMP+1
31967                    ZTEMP1(NTEMP)=Y(J)
31968                    ZTEMP2(NTEMP)=YTEMP(J)
31969                    ZTEMP3(NTEMP)=YTEMP2(J)
31970                  ENDIF
31971                ENDIF
31972  550         CONTINUE
31973            ELSEIF(ICTACO.EQ.'ONE')THEN
31974              DO551J=1,N
31975                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31976     1             XH2(J).EQ.XH2DIS(ISET2).AND.
31977     1             XH3(J).EQ.XH3DIS(ISET3))THEN
31978                  IF(XH4(J).EQ.XH4DIS(ISET4))THEN
31979                    NTEMP2=NTEMP2+1
31980                    ZTEMP2(NTEMP2)=YTEMP(J)
31981                    NTEMP3=NTEMP3+1
31982                    ZTEMP3(NTEMP3)=YTEMP2(J)
31983                  ELSEIF(XH4(J).NE.XH4DIS(ISET4))THEN
31984                    NTEMP1=NTEMP1+1
31985                    ZTEMP1(NTEMP1)=Y(J)
31986                  ENDIF
31987                ENDIF
31988  551         CONTINUE
31989            ELSEIF(ICTACO.EQ.'TWO')THEN
31990              DO552J=1,N
31991                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
31992     1             XH2(J).EQ.XH2DIS(ISET2).AND.
31993     1             XH3(J).EQ.XH3DIS(ISET3))THEN
31994                  IF(XH4(J).EQ.XH4DIS(ISET4))THEN
31995                    NTEMP1=NTEMP1+1
31996                    ZTEMP1(NTEMP1)=Y(J)
31997                    NTEMP3=NTEMP3+1
31998                    ZTEMP3(NTEMP3)=YTEMP2(J)
31999                  ELSEIF(XH4(J).NE.XH4DIS(ISET4))THEN
32000                    NTEMP2=NTEMP2+1
32001                    ZTEMP2(NTEMP2)=YTEMP(J)
32002                  ENDIF
32003                ENDIF
32004  552         CONTINUE
32005            ELSE
32006              DO570J=1,N
32007                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32008     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32009     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32010     1             XH4(J).EQ.XH4DIS(ISET4))THEN
32011                  NTEMP=NTEMP+1
32012                  ZTEMP1(NTEMP)=Y(J)
32013                  ZTEMP2(NTEMP)=YTEMP(J)
32014                  ZTEMP3(NTEMP)=YTEMP2(J)
32015                ENDIF
32016  570         CONTINUE
32017            ENDIF
32018C
32019            IF(NTEMP.GT.0)THEN
32020              NTEMP1=NTEMP
32021              NTEMP2=NTEMP
32022              NTEMP3=NTEMP
32023            ENDIF
32024            IFLAG=1
32025            IFLAG2=0
32026            IF(NUMRES.EQ.1 .AND. NTEMP1.LE.0)THEN
32027              IFLAG=0
32028            ELSEIF(NUMRES.EQ.2)THEN
32029              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0)THEN
32030                IFLAG=0
32031              ENDIF
32032            ELSEIF(NUMRES.EQ.3)THEN
32033              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0 .OR. NTEMP3.LE.0)THEN
32034                IFLAG=0
32035              ENDIF
32036            ENDIF
32037            IF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')IFLAG2=1
32038C
32039            IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
32040              WRITE(ICOUT,591)ISET1,ISET2,ISET3,ISET4,IFLAG,IFLAG2
32041  591         FORMAT('ISET1,ISET2,ISET3,ISET4,IFLAG,IFLAG2 = ',6I8)
32042              CALL DPWRST('XXX','BUG ')
32043              WRITE(ICOUT,393)NTEMP,NTEMP1,NTEMP2,NTEMP3
32044              CALL DPWRST('XXX','BUG ')
32045            ENDIF
32046C
32047            IWRITE='OFF'
32048            IF(IFLAG.EQ.1 .OR. IFLAG2.EQ.1)THEN
32049CCCCC         IF(ICASS7.EQ.'NUMB')THEN
32050CCCCC           IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)STAT1=PSTAMV
32051CCCCC           STAT1=NTEMP
32052CCCCC           NOUT=NOUT+1
32053CCCCC           Y2(NOUT)=STAT1
32054CCCCC         ELSEIF(ICASS7.EQ.'GRO1')THEN
32055              IF(ICASS7.EQ.'GRO1')THEN
32056                STAT1=XH1DIS(ISET1)
32057                NOUT=NOUT+1
32058                Y2(NOUT)=STAT1
32059              ELSEIF(ICASS7.EQ.'GRO2')THEN
32060                STAT1=XH2DIS(ISET2)
32061                NOUT=NOUT+1
32062                Y2(NOUT)=STAT1
32063              ELSEIF(ICASS7.EQ.'GRO3')THEN
32064                STAT1=XH3DIS(ISET3)
32065                NOUT=NOUT+1
32066                Y2(NOUT)=STAT1
32067              ELSEIF(ICASS7.EQ.'GRO4')THEN
32068                STAT1=XH4DIS(ISET4)
32069                NOUT=NOUT+1
32070                Y2(NOUT)=STAT1
32071              ELSEIF(ICASS7(1:3).EQ.'GRO')THEN
32072                WRITE(ICOUT,597)ICASS7
32073  597           FORMAT('INVALID CASE: ',A4)
32074                CALL DPWRST('XXX','BUG ')
32075                IERROR='YES'
32076                GOTO8000
32077              ELSEIF(ICASCT.EQ.'CRTA')THEN
32078                IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)THEN
32079                  STAT1=PSTAMV
32080                ELSEIF(NTEMP.GT.0)THEN
32081                  CALL CMPSTA(
32082     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32083     1                 MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ICASS7,
32084     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32085     1                 DTEMP1,DTEMP2,DTEMP3,
32086CCCCC1                 IQUAME,IQUASE,PSTAMV,
32087     1                 STAT1,
32088     1                 ISUBRO,IBUGA3,IERROR)
32089                  IF(IERROR.EQ.'YES')GOTO9000
32090                ELSE
32091                  STAT1=PSTAMV
32092                ENDIF
32093                IF(ICTALT.EQ.'COLL')THEN
32094                  NOUT=NOUT+1
32095                  Y2(NOUT)=STAT1
32096                ELSE
32097                  DO580J=1,N
32098                    IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32099     1                 XH2(J).EQ.XH2DIS(ISET2).AND.
32100     1                 XH3(J).EQ.XH3DIS(ISET3).AND.
32101     1                 XH4(J).EQ.XH4DIS(ISET4))THEN
32102                      Y2(J)=STAT1
32103                    ENDIF
32104  580             CONTINUE
32105                ENDIF
32106              ELSEIF(ICASCT.EQ.'CTCU')THEN
32107                DO581J=1,NTEMP1
32108                  NTEMPZ=J
32109                  CALL CMPSTA(
32110     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32111     1                 MAXNXT,NTEMPZ,NTEMPZ,NTEMPZ,NUMRES,ICASS7,
32112     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32113     1                 DTEMP1,DTEMP2,DTEMP3,
32114CCCCC1                 IQUAME,IQUASE,PSTAMV,
32115     1                 STAT1,
32116     1                 ISUBRO,IBUGA3,IERROR)
32117                  NOUT=NOUT+1
32118                  IF(IERROR.EQ.'YES')THEN
32119                    Y2(NOUT)=PSTAMV
32120                  ELSE
32121                    Y2(NOUT)=STAT1
32122                  ENDIF
32123  581           CONTINUE
32124              ELSEIF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')THEN
32125                STAT1=PSTAMV
32126                NOUT=NOUT+1
32127                Y2(NOUT)=STAT1
32128              ELSE
32129                STAT1=0.0
32130                STAT2=1.0
32131                IF(ICASCT.NE.'SCAL')THEN
32132                  CALL CMPSTA(
32133     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32134     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ILOC,
32135     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32136     1            DTEMP1,DTEMP2,DTEMP3,
32137CCCCC1            IQUAME,IQUASE,PSTAMV,
32138     1            STAT1,
32139     1            ISUBRO,IBUGA3,IERROR)
32140                  IF(IERROR.EQ.'YES')GOTO9000
32141                ENDIF
32142C
32143                IF(ICASCT.NE.'LOCA')THEN
32144                  CALL CMPSTA(
32145     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32146     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ISCALE,
32147     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32148     1            DTEMP1,DTEMP2,DTEMP3,
32149CCCCC1            IQUAME,IQUASE,PSTAMV,
32150     1            STAT2,
32151     1            ISUBRO,IBUGA3,IERROR)
32152                  IF(IERROR.EQ.'YES')GOTO9000
32153                ENDIF
32154                DO590J=1,N
32155                  IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32156     1               XH2(J).EQ.XH2DIS(ISET2).AND.
32157     1               XH3(J).EQ.XH3DIS(ISET3).AND.
32158     1               XH4(J).EQ.XH4DIS(ISET4))THEN
32159                    Y2(J)=(Y(J)-STAT1)/STAT2
32160                  ENDIF
32161  590           CONTINUE
32162              ENDIF
32163            ENDIF
32164C
32165  540     CONTINUE
32166  530     CONTINUE
32167  520     CONTINUE
32168  510   CONTINUE
32169        IF(ICTALT.EQ.'COLL')N=NOUT
32170        GOTO9000
32171      ENDIF
32172C
32173      GOTO9000
32174C
32175C               **************************************
32176C               **  STEP 6--                        **
32177C               **  FIVE GROUP ID VARIABLES         **
32178C               **************************************
32179C
32180      ISTEPN='5'
32181      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSTA')
32182     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
32183C
32184      IF(NUMGRP.EQ.5)THEN
32185C
32186        NOUT=0
32187        DO610ISET1=1,NUMSE1
32188          DO620ISET2=1,NUMSE2
32189          DO630ISET3=1,NUMSE3
32190          DO640ISET4=1,NUMSE4
32191          DO650ISET5=1,NUMSE5
32192            NTEMP=0
32193            NTEMP1=0
32194            NTEMP2=0
32195            NTEMP3=0
32196            IF(ICTACO.EQ.'ON')THEN
32197              DO651J=1,N
32198                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32199     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32200     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32201     1             XH4(J).EQ.XH4DIS(ISET4))THEN
32202                  IF(XH5(J).NE.XH5DIS(ISET5))THEN
32203                    NTEMP=NTEMP+1
32204                    ZTEMP1(NTEMP)=Y(J)
32205                    ZTEMP2(NTEMP)=YTEMP(J)
32206                    ZTEMP3(NTEMP)=YTEMP2(J)
32207                  ENDIF
32208                ENDIF
32209  651         CONTINUE
32210            ELSEIF(ICTACO.EQ.'ONE')THEN
32211              DO653J=1,N
32212                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32213     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32214     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32215     1             XH4(J).EQ.XH4DIS(ISET4))THEN
32216                  IF(XH5(J).EQ.XH5DIS(ISET5))THEN
32217                    NTEMP2=NTEMP2+1
32218                    ZTEMP2(NTEMP2)=YTEMP(J)
32219                    NTEMP3=NTEMP3+1
32220                    ZTEMP3(NTEMP3)=YTEMP2(J)
32221                  ELSEIF(XH5(J).NE.XH5DIS(ISET5))THEN
32222                    NTEMP1=NTEMP1+1
32223                    ZTEMP1(NTEMP1)=Y(J)
32224                  ENDIF
32225                ENDIF
32226  653         CONTINUE
32227            ELSEIF(ICTACO.EQ.'TWO')THEN
32228              DO655J=1,N
32229                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32230     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32231     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32232     1             XH4(J).EQ.XH4DIS(ISET4))THEN
32233                  IF(XH5(J).EQ.XH5DIS(ISET5))THEN
32234                    NTEMP1=NTEMP1+1
32235                    ZTEMP1(NTEMP1)=Y(J)
32236                    NTEMP3=NTEMP3+1
32237                    ZTEMP3(NTEMP3)=YTEMP2(J)
32238                  ELSEIF(XH5(J).NE.XH5DIS(ISET5))THEN
32239                    NTEMP2=NTEMP2+1
32240                    ZTEMP2(NTEMP2)=YTEMP(J)
32241                  ENDIF
32242                ENDIF
32243  655         CONTINUE
32244            ELSE
32245              DO670J=1,N
32246                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32247     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32248     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32249     1             XH4(J).EQ.XH4DIS(ISET4).AND.
32250     1             XH5(J).EQ.XH5DIS(ISET5))THEN
32251                  NTEMP=NTEMP+1
32252                  ZTEMP1(NTEMP)=Y(J)
32253                  ZTEMP2(NTEMP)=YTEMP(J)
32254                  ZTEMP3(NTEMP)=YTEMP2(J)
32255                ENDIF
32256  670         CONTINUE
32257            ENDIF
32258C
32259            IF(NTEMP.GT.0)THEN
32260              NTEMP1=NTEMP
32261              NTEMP2=NTEMP
32262              NTEMP3=NTEMP
32263            ENDIF
32264            IFLAG=1
32265            IFLAG2=0
32266            IF(NUMRES.EQ.1 .AND. NTEMP1.LE.0)THEN
32267              IFLAG=0
32268            ELSEIF(NUMRES.EQ.2)THEN
32269              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0)THEN
32270                IFLAG=0
32271              ENDIF
32272            ELSEIF(NUMRES.EQ.3)THEN
32273              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0 .OR. NTEMP3.LE.0)THEN
32274                IFLAG=0
32275              ENDIF
32276            ENDIF
32277            IF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')IFLAG2=1
32278C
32279            IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
32280              WRITE(ICOUT,691)ISET1,ISET2,ISET3,ISET4,ISET5,
32281     1                        IFLAG,IFLAG2
32282  691         FORMAT('ISET1,ISET2,ISET3,ISET4,ISET5,IFLAG,IFLAG2 = ',
32283     1               7I8)
32284              CALL DPWRST('XXX','BUG ')
32285              WRITE(ICOUT,393)NTEMP,NTEMP1,NTEMP2,NTEMP3
32286              CALL DPWRST('XXX','BUG ')
32287            ENDIF
32288C
32289            IWRITE='OFF'
32290            IF(IFLAG.EQ.1 .OR. IFLAG2.EQ.1)THEN
32291CCCCC         IF(ICASS7.EQ.'NUMB')THEN
32292CCCCC           IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)STAT1=PSTAMV
32293CCCCC           STAT1=NTEMP
32294CCCCC           NOUT=NOUT+1
32295CCCCC           Y2(NOUT)=STAT1
32296CCCCC         ELSEIF(ICASS7.EQ.'GRO1')THEN
32297              IF(ICASS7.EQ.'GRO1')THEN
32298                STAT1=XH1DIS(ISET1)
32299                NOUT=NOUT+1
32300                Y2(NOUT)=STAT1
32301              ELSEIF(ICASS7.EQ.'GRO2')THEN
32302                STAT1=XH2DIS(ISET2)
32303                NOUT=NOUT+1
32304                Y2(NOUT)=STAT1
32305              ELSEIF(ICASS7.EQ.'GRO3')THEN
32306                STAT1=XH3DIS(ISET3)
32307                NOUT=NOUT+1
32308                Y2(NOUT)=STAT1
32309              ELSEIF(ICASS7.EQ.'GRO4')THEN
32310                STAT1=XH4DIS(ISET4)
32311                NOUT=NOUT+1
32312                Y2(NOUT)=STAT1
32313              ELSEIF(ICASS7.EQ.'GRO5')THEN
32314                STAT1=XH5DIS(ISET5)
32315                NOUT=NOUT+1
32316                Y2(NOUT)=STAT1
32317              ELSEIF(ICASS7(1:3).EQ.'GRO')THEN
32318                WRITE(ICOUT,697)ICASS7
32319  697           FORMAT('INVALID CASE: ',A4)
32320                CALL DPWRST('XXX','BUG ')
32321                IERROR='YES'
32322                GOTO8000
32323              ELSEIF(ICASCT.EQ.'CRTA')THEN
32324                IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)THEN
32325                  STAT1=PSTAMV
32326                ELSEIF(NTEMP.GT.0)THEN
32327                  CALL CMPSTA(
32328     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32329     1                 MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ICASS7,
32330     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32331     1                 DTEMP1,DTEMP2,DTEMP3,
32332CCCCC1                 IQUAME,IQUASE,PSTAMV,
32333     1                 STAT1,
32334     1                 ISUBRO,IBUGA3,IERROR)
32335                  IF(IERROR.EQ.'YES')GOTO9000
32336                ELSE
32337                  STAT1=PSTAMV
32338                ENDIF
32339                IF(ICTALT.EQ.'COLL')THEN
32340                  NOUT=NOUT+1
32341                  Y2(NOUT)=STAT1
32342                ELSE
32343                  DO680J=1,N
32344                    IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32345     1                 XH2(J).EQ.XH2DIS(ISET2).AND.
32346     1                 XH3(J).EQ.XH3DIS(ISET3).AND.
32347     1                 XH4(J).EQ.XH4DIS(ISET4).AND.
32348     1                 XH5(J).EQ.XH5DIS(ISET5))THEN
32349                      Y2(J)=STAT1
32350                    ENDIF
32351  680             CONTINUE
32352                ENDIF
32353              ELSEIF(ICASCT.EQ.'CTCU')THEN
32354                DO681J=1,NTEMP1
32355                  NTEMPZ=J
32356                  CALL CMPSTA(
32357     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32358     1                 MAXNXT,NTEMPZ,NTEMPZ,NTEMPZ,NUMRES,ICASS7,
32359     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32360     1                 DTEMP1,DTEMP2,DTEMP3,
32361CCCCC1                 IQUAME,IQUASE,PSTAMV,
32362     1                 STAT1,
32363     1                 ISUBRO,IBUGA3,IERROR)
32364                  NOUT=NOUT+1
32365                  IF(IERROR.EQ.'YES')THEN
32366                    Y2(NOUT)=PSTAMV
32367                  ELSE
32368                    Y2(NOUT)=STAT1
32369                  ENDIF
32370  681           CONTINUE
32371              ELSEIF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')THEN
32372                STAT1=PSTAMV
32373                NOUT=NOUT+1
32374                Y2(NOUT)=STAT1
32375              ELSE
32376                STAT1=0.0
32377                STAT2=1.0
32378                IF(ICASCT.NE.'SCAL')THEN
32379                  CALL CMPSTA(
32380     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32381     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ILOC,
32382     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32383     1            DTEMP1,DTEMP2,DTEMP3,
32384CCCCC1            IQUAME,IQUASE,PSTAMV,
32385     1            STAT1,
32386     1            ISUBRO,IBUGA3,IERROR)
32387                  IF(IERROR.EQ.'YES')GOTO9000
32388                ENDIF
32389C
32390                IF(ICASCT.NE.'LOCA')THEN
32391                  CALL CMPSTA(
32392     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32393     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ISCALE,
32394     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32395     1            DTEMP1,DTEMP2,DTEMP3,
32396CCCCC1            IQUAME,IQUASE,PSTAMV,
32397     1            STAT2,
32398     1            ISUBRO,IBUGA3,IERROR)
32399                  IF(IERROR.EQ.'YES')GOTO9000
32400                ENDIF
32401                DO690J=1,N
32402                  IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32403     1               XH2(J).EQ.XH2DIS(ISET2).AND.
32404     1               XH3(J).EQ.XH3DIS(ISET3).AND.
32405     1               XH4(J).EQ.XH4DIS(ISET4).AND.
32406     1               XH5(J).EQ.XH5DIS(ISET5))THEN
32407                    Y2(J)=(Y(J)-STAT1)/STAT2
32408                  ENDIF
32409  690           CONTINUE
32410              ENDIF
32411            ENDIF
32412C
32413  650     CONTINUE
32414  640     CONTINUE
32415  630     CONTINUE
32416  620     CONTINUE
32417  610   CONTINUE
32418        IF(ICTALT.EQ.'COLL')N=NOUT
32419        GOTO9000
32420      ENDIF
32421C
32422      GOTO9000
32423C
32424C               **************************************
32425C               **  STEP 7--                        **
32426C               **  SIX  GROUP ID VARIABLES         **
32427C               **************************************
32428C
32429      ISTEPN='6'
32430      IF(IBUGA3.EQ.'ON'.OR.ISUBRO.EQ.'PSTA')
32431     1CALL TRACE2(ISTEPN,ISUBN1,ISUBN2)
32432C
32433      IF(NUMGRP.EQ.6)THEN
32434C
32435        NOUT=0
32436        DO710ISET1=1,NUMSE1
32437          DO720ISET2=1,NUMSE2
32438          DO730ISET3=1,NUMSE3
32439          DO740ISET4=1,NUMSE4
32440          DO750ISET5=1,NUMSE5
32441          DO760ISET6=1,NUMSE6
32442            NTEMP=0
32443            NTEMP1=0
32444            NTEMP2=0
32445            NTEMP3=0
32446            IF(ICTACO.EQ.'ON')THEN
32447              DO761J=1,N
32448                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32449     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32450     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32451     1             XH4(J).EQ.XH4DIS(ISET4).AND.
32452     1             XH5(J).EQ.XH5DIS(ISET5))THEN
32453                  IF(XH6(J).NE.XH6DIS(ISET6))THEN
32454                    NTEMP=NTEMP+1
32455                    ZTEMP1(NTEMP)=Y(J)
32456                    ZTEMP2(NTEMP)=YTEMP(J)
32457                    ZTEMP3(NTEMP)=YTEMP2(J)
32458                  ENDIF
32459                ENDIF
32460  761         CONTINUE
32461            ELSEIF(ICTACO.EQ.'ONE')THEN
32462              DO763J=1,N
32463                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32464     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32465     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32466     1             XH4(J).EQ.XH4DIS(ISET4).AND.
32467     1             XH5(J).EQ.XH5DIS(ISET5))THEN
32468                  IF(XH6(J).EQ.XH6DIS(ISET6))THEN
32469                    NTEMP2=NTEMP2+1
32470                    ZTEMP2(NTEMP2)=YTEMP(J)
32471                    NTEMP3=NTEMP3+1
32472                    ZTEMP3(NTEMP3)=YTEMP2(J)
32473                  ELSEIF(XH5(J).NE.XH5DIS(ISET5))THEN
32474                    NTEMP1=NTEMP1+1
32475                    ZTEMP1(NTEMP1)=Y(J)
32476                  ENDIF
32477                ENDIF
32478  763         CONTINUE
32479            ELSEIF(ICTACO.EQ.'TWO')THEN
32480              DO765J=1,N
32481                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32482     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32483     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32484     1             XH4(J).EQ.XH4DIS(ISET4).AND.
32485     1             XH5(J).EQ.XH5DIS(ISET5))THEN
32486                  IF(XH6(J).EQ.XH6DIS(ISET6))THEN
32487                    NTEMP1=NTEMP1+1
32488                    ZTEMP1(NTEMP1)=Y(J)
32489                    NTEMP3=NTEMP3+1
32490                    ZTEMP3(NTEMP3)=YTEMP2(J)
32491                  ELSEIF(XH6(J).NE.XH6DIS(ISET6))THEN
32492                    NTEMP2=NTEMP2+1
32493                    ZTEMP2(NTEMP2)=YTEMP(J)
32494                  ENDIF
32495                ENDIF
32496  765         CONTINUE
32497            ELSE
32498              DO770J=1,N
32499                IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32500     1             XH2(J).EQ.XH2DIS(ISET2).AND.
32501     1             XH3(J).EQ.XH3DIS(ISET3).AND.
32502     1             XH4(J).EQ.XH4DIS(ISET4).AND.
32503     1             XH5(J).EQ.XH5DIS(ISET5).AND.
32504     1             XH6(J).EQ.XH6DIS(ISET6))THEN
32505                  NTEMP=NTEMP+1
32506                  ZTEMP1(NTEMP)=Y(J)
32507                  ZTEMP2(NTEMP)=YTEMP(J)
32508                  ZTEMP3(NTEMP)=YTEMP2(J)
32509                ENDIF
32510  770         CONTINUE
32511            ENDIF
32512C
32513            IF(NTEMP.GT.0)THEN
32514              NTEMP1=NTEMP
32515              NTEMP2=NTEMP
32516              NTEMP3=NTEMP
32517            ENDIF
32518            IFLAG=1
32519            IFLAG2=0
32520            IF(NUMRES.EQ.1 .AND. NTEMP1.LE.0)THEN
32521              IFLAG=0
32522            ELSEIF(NUMRES.EQ.2)THEN
32523              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0)THEN
32524                IFLAG=0
32525              ENDIF
32526            ELSEIF(NUMRES.EQ.3)THEN
32527              IF(NTEMP1.LE.0 .OR. NTEMP2.LE.0 .OR. NTEMP3.LE.0)THEN
32528                IFLAG=0
32529              ENDIF
32530            ENDIF
32531            IF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')IFLAG2=1
32532C
32533            IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
32534              WRITE(ICOUT,791)ISET1,ISET2,ISET3,ISET4,ISET5,ISET6,
32535     1                        IFLAG,IFLAG2
32536  791         FORMAT('ISET1,ISET2,ISET3,ISET4,ISET5,ISET6,',
32537     1               'IFLAG,IFLAG2 = ',8I8)
32538              CALL DPWRST('XXX','BUG ')
32539              WRITE(ICOUT,393)NTEMP,NTEMP1,NTEMP2,NTEMP3
32540              CALL DPWRST('XXX','BUG ')
32541            ENDIF
32542C
32543            IWRITE='OFF'
32544            IF(IFLAG.EQ.1 .OR. IFLAG2.EQ.1)THEN
32545CCCCC         IF(ICASS7.EQ.'NUMB')THEN
32546CCCCC           IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)STAT1=PSTAMV
32547CCCCC           STAT1=NTEMP
32548CCCCC           NOUT=NOUT+1
32549CCCCC           Y2(NOUT)=STAT1
32550CCCCC         ELSEIF(ICASS7.EQ.'GRO1')THEN
32551              IF(ICASS7.EQ.'GRO1')THEN
32552                STAT1=XH1DIS(ISET1)
32553                NOUT=NOUT+1
32554                Y2(NOUT)=STAT1
32555              ELSEIF(ICASS7.EQ.'GRO2')THEN
32556                STAT1=XH2DIS(ISET2)
32557                NOUT=NOUT+1
32558                Y2(NOUT)=STAT1
32559              ELSEIF(ICASS7.EQ.'GRO3')THEN
32560                STAT1=XH3DIS(ISET3)
32561                NOUT=NOUT+1
32562                Y2(NOUT)=STAT1
32563              ELSEIF(ICASS7.EQ.'GRO4')THEN
32564                STAT1=XH4DIS(ISET4)
32565                NOUT=NOUT+1
32566                Y2(NOUT)=STAT1
32567              ELSEIF(ICASS7.EQ.'GRO5')THEN
32568                STAT1=XH5DIS(ISET5)
32569                NOUT=NOUT+1
32570                Y2(NOUT)=STAT1
32571              ELSEIF(ICASS7.EQ.'GRO6')THEN
32572                STAT1=XH6DIS(ISET6)
32573                NOUT=NOUT+1
32574                Y2(NOUT)=STAT1
32575              ELSEIF(ICASS7(1:3).EQ.'GRO')THEN
32576                WRITE(ICOUT,797)ICASS7
32577  797           FORMAT('INVALID CASE: ',A4)
32578                CALL DPWRST('XXX','BUG ')
32579                IERROR='YES'
32580                GOTO8000
32581              ELSEIF(ICASCT.EQ.'CRTA')THEN
32582                IF(IFLAG.EQ.0 .AND. IFLAG2.EQ.1)THEN
32583                  STAT1=PSTAMV
32584                ELSEIF(NTEMP.GT.0)THEN
32585                  CALL CMPSTA(
32586     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32587     1                 MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ICASS7,
32588     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32589     1                 DTEMP1,DTEMP2,DTEMP3,
32590CCCCC1                 IQUAME,IQUASE,PSTAMV,
32591     1                 STAT1,
32592     1                 ISUBRO,IBUGA3,IERROR)
32593                  IF(IERROR.EQ.'YES')GOTO9000
32594                ELSE
32595                  STAT1=PSTAMV
32596                ENDIF
32597                IF(ICTALT.EQ.'COLL')THEN
32598                  NOUT=NOUT+1
32599                  Y2(NOUT)=STAT1
32600                ELSE
32601                  DO780J=1,N
32602                    IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32603     1                 XH2(J).EQ.XH2DIS(ISET2).AND.
32604     1                 XH3(J).EQ.XH3DIS(ISET3).AND.
32605     1                 XH4(J).EQ.XH4DIS(ISET4).AND.
32606     1                 XH5(J).EQ.XH5DIS(ISET5).AND.
32607     1                 XH6(J).EQ.XH6DIS(ISET6))THEN
32608                      Y2(J)=STAT1
32609                    ENDIF
32610  780             CONTINUE
32611                ENDIF
32612              ELSEIF(ICASCT.EQ.'CTCU')THEN
32613                DO781J=1,NTEMP1
32614                  NTEMPZ=J
32615                  CALL CMPSTA(
32616     1                 ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32617     1                 MAXNXT,NTEMPZ,NTEMPZ,NTEMPZ,NUMRES,ICASS7,
32618     1                 ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32619     1                 DTEMP1,DTEMP2,DTEMP3,
32620CCCCC1                 IQUAME,IQUASE,PSTAMV,
32621     1                 STAT1,
32622     1                 ISUBRO,IBUGA3,IERROR)
32623                  NOUT=NOUT+1
32624                  IF(IERROR.EQ.'YES')THEN
32625                    Y2(NOUT)=PSTAMV
32626                  ELSE
32627                    Y2(NOUT)=STAT1
32628                  ENDIF
32629  781           CONTINUE
32630              ELSEIF(ICTAEM.EQ.'INCL' .AND. ICTALT.EQ.'COLL')THEN
32631                STAT1=PSTAMV
32632                NOUT=NOUT+1
32633                Y2(NOUT)=STAT1
32634              ELSE
32635                STAT1=0.0
32636                STAT2=1.0
32637                IF(ICASCT.NE.'SCAL')THEN
32638                  CALL CMPSTA(
32639     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32640     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ILOC,
32641     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32642     1            DTEMP1,DTEMP2,DTEMP3,
32643CCCCC1            IQUAME,IQUASE,PSTAMV,
32644     1            STAT1,
32645     1            ISUBRO,IBUGA3,IERROR)
32646                  IF(IERROR.EQ.'YES')GOTO9000
32647                ENDIF
32648C
32649                IF(ICASCT.NE.'LOCA')THEN
32650                  CALL CMPSTA(
32651     1            ZTEMP1,ZTEMP2,ZTEMP3,TEMP3,TEMP4,TEMP5,
32652     1            MAXNXT,NTEMP1,NTEMP2,NTEMP3,NUMRES,ISCALE,
32653     1            ISEED,ITEMP1,ITEMP2,ITEMP3,ITEMP4,ITEMP5,ITEMP6,
32654     1            DTEMP1,DTEMP2,DTEMP3,
32655CCCCC1            IQUAME,IQUASE,PSTAMV,
32656     1            STAT2,
32657     1            ISUBRO,IBUGA3,IERROR)
32658                  IF(IERROR.EQ.'YES')GOTO9000
32659                ENDIF
32660                DO790J=1,N
32661                  IF(XH1(J).EQ.XH1DIS(ISET1).AND.
32662     1               XH2(J).EQ.XH2DIS(ISET2).AND.
32663     1               XH3(J).EQ.XH3DIS(ISET3).AND.
32664     1               XH4(J).EQ.XH4DIS(ISET4).AND.
32665     1               XH5(J).EQ.XH5DIS(ISET5).AND.
32666     1               XH6(J).EQ.XH6DIS(ISET6))THEN
32667                    Y2(J)=(Y(J)-STAT1)/STAT2
32668                  ENDIF
32669  790           CONTINUE
32670              ENDIF
32671            ENDIF
32672C
32673  760     CONTINUE
32674  750     CONTINUE
32675  740     CONTINUE
32676  730     CONTINUE
32677  720     CONTINUE
32678  710   CONTINUE
32679        IF(ICTALT.EQ.'COLL')N=NOUT
32680        GOTO9000
32681      ENDIF
32682C
32683      GOTO9000
32684C
32685 8000 CONTINUE
32686      WRITE(ICOUT,999)
32687      CALL DPWRST('XXX','BUG ')
32688      WRITE(ICOUT,8011)
32689 8011 FORMAT('***** ERROR IN LET ... = CROSS TABULATE ... --')
32690      CALL DPWRST('XXX','BUG ')
32691      WRITE(ICOUT,8013)
32692 8013 FORMAT('      USE OF    GROUP <ONE/TWO/THREE/FOUR>   OPTION')
32693      CALL DPWRST('XXX','BUG ')
32694      WRITE(ICOUT,8015)
32695 8015 FORMAT('      IS NOT VALID IN THIS CASE.  NOTHING DONE.')
32696      CALL DPWRST('XXX','BUG ')
32697      GOTO9000
32698C
32699C               ******************
32700C               **   STEP 90--  **
32701C               **   EXIT       **
32702C               ******************
32703C
32704 9000 CONTINUE
32705      ICTALT=ICTAL2
32706      IF(IBUGA3.EQ.'ON' .OR. ISUBRO.EQ.'PSTA')THEN
32707        WRITE(ICOUT,999)
32708        CALL DPWRST('XXX','BUG ')
32709        WRITE(ICOUT,9011)
32710 9011   FORMAT('***** AT THE END       OF GRPSTA--')
32711        CALL DPWRST('XXX','BUG ')
32712        WRITE(ICOUT,9015)N,NOUT
32713 9015   FORMAT('N,NOUT = ',2I8)
32714        CALL DPWRST('XXX','BUG ')
32715        DO9017I=1,N
32716          WRITE(ICOUT,9018)I,Y2(I)
32717 9018     FORMAT('I,Y2(I) = ',I8,G15.7)
32718          CALL DPWRST('XXX','BUG ')
32719 9017   CONTINUE
32720      ENDIF
32721C
32722      RETURN
32723      END
32724      SUBROUTINE GRSTRI(ICTEXT,NCTEXT)
32725C
32726C     PURPOSE--CHANGE LC() AND UC() IN CHARACTER STRINGS TO
32727C              ASCII UPPER AND LOWER CASE.  ALSO, CONVERT SP()
32728C              TO AN ASCII SPACE.  THIS IS DONE FOR HARDWARE GENERATED
32729C              TEXT ONLY (SOFTWARE GENERATED TEXT ALREADY HANDLES
32730C              IT AT A LOWER LEVEL).
32731C     INPUT  ARGUMENTS--ICTEXT      (CHARACTER)
32732C                       NCTEXT      (INTEGER)
32733C     OUTPUT ARGUMENTS--ICSTRING
32734C                       NCTEXT
32735C               WRITTEN BY -
32736C                      ALAN HECKERT
32737C                      CENTER FOR APPLIED MATHEMATICS,
32738C                      NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
32739C                      WASHINGTON, DC 20234
32740C                      TELEPHONE 301-975-2899
32741C     LANGUAGE--ANSI FORTRAN (1977)
32742C     VERSION NUMBER--93/3
32743C     ORIGINAL VERSION--MARCH     1993. (ALAN)
32744C     UPDATED         --OCTOBER   1993. TEXT NO LONGER GARUNTEED TO
32745C                                       COME IN AS UPPER CASE (ALAN)
32746C     UPDATED         --FEBRUARY  2006. FOR SP(), CHECK THAT WE
32747C                                       DON'T HABE UNSP() CASE
32748C
32749C-----CHARACTER STATEMENTS FOR NON-COMMON VARIABLES-------------------
32750C
32751      CHARACTER*4 IFLAG
32752      CHARACTER*4 ICTEXT(*)
32753      CHARACTER*1 ICTEMP
32754CCCCC ADD FOLLOWING 4 LINES.                OCTOBER 1993
32755      CHARACTER*1 IA1
32756      CHARACTER*1 IA2
32757      CHARACTER*1 IA3
32758      CHARACTER*1 IA4
32759C
32760C-----COMMON----------------------------------------------------------
32761C
32762      INCLUDE 'DPCOP2.INC'
32763C
32764C-----START POINT-----------------------------------------------------
32765C
32766      IF(NCTEXT.LT.4)GOTO9000
32767C
32768      J=0
32769      ISKIP=0
32770      IFLAG='UC'
32771CCCCC OCTOBER 1993.  FOLLOWING LOOP RECODED TO ACCOUNT FOR THE FACT
32772CCCCC TEXT COMING IN IS NO LONGER NECCESSARILY UPPER CASE!!!
32773      DO100I=1,NCTEXT
32774        IF(ISKIP.LE.0)GOTO110
32775          ISKIP=ISKIP-1
32776          GOTO100
32777  110   CONTINUE
32778        IF(I+3.GT.NCTEXT)GOTO150
32779C
32780C  CONVERT TO UPPER CASE (FIRST 2 CHARACTERS ONLY SINCE 3 AND 4 CHECKING
32781C  FOR ().
32782C
32783        IA1=ICTEXT(I)(1:1)
32784        CALL DPCOAN(IA1,IVAL)
32785        IF(IVAL.GE.97.AND.IVAL.LE.122)IVAL=IVAL-32
32786        CALL DPCONA(IVAL,IA1)
32787        IA2=ICTEXT(I+1)(1:1)
32788        CALL DPCOAN(IA2,IVAL)
32789        IF(IVAL.GE.97.AND.IVAL.LE.122)IVAL=IVAL-32
32790        CALL DPCONA(IVAL,IA2)
32791        IA3=ICTEXT(I+2)(1:1)
32792        IA4=ICTEXT(I+3)(1:1)
32793C
32794        IF(IA1.NE.'S'.OR.IA2.NE.'P'.OR.IA3.NE.'('.OR.IA4.NE.')')GOTO115
32795C
32796          IF(I.GE.3)THEN
32797            IF(
32798     1      (ICTEXT(I-2)(1:1).EQ.'U'.OR.ICTEXT(I-2)(1:1).EQ.'u').AND.
32799     1      (ICTEXT(I-1)(1:1).EQ.'N'.OR.ICTEXT(I-1)(1:1).EQ.'n'))THEN
32800            GOTO115
32801            ENDIF
32802          ENDIF
32803C
32804          J=J+1
32805          ICTEXT(J)=' '
32806          ISKIP=3
32807          GOTO100
32808  115   CONTINUE
32809        IF(IA1.NE.'U'.OR.IA2.NE.'C'.OR.IA3.NE.'('.OR.IA4.NE.')')GOTO120
32810          IFLAG='UC'
32811          ISKIP=3
32812          GOTO100
32813  120   CONTINUE
32814        IF(IA1.NE.'L'.OR.IA2.NE.'C'.OR.IA3.NE.'('.OR.IA4.NE.')')GOTO150
32815          IFLAG='LC'
32816          ISKIP=3
32817          GOTO100
32818  150   CONTINUE
32819        ICTEMP=ICTEXT(I)(1:1)
32820        CALL DPCOAN(ICTEMP,IVALT)
32821        IF(IFLAG.EQ.'LC'.AND.IVALT.GE.65.AND.IVALT.LE.90)GOTO160
32822          J=J+1
32823          ICTEXT(J)=ICTEMP
32824          GOTO100
32825  160   CONTINUE
32826        J=J+1
32827        IVALT=IVALT+32
32828        CALL DPCONA(IVALT,ICTEMP)
32829        ICTEXT(J)=ICTEMP
32830  100 CONTINUE
32831      NCTEXT=J
32832C
32833 9000 CONTINUE
32834      RETURN
32835      END
32836