SUBROUTINE CHI0P(NFILE,N,TITLE,LORD,JFIX,HFIX,ANU0,S20,ANORM,ACHI) C This routine reads in the constants and degrees-of-freedom parameters C for multiple chi-square distributions. It prints out informataion C about the distributions, computes and returns normalizing constants C for the densities, and one draw from each distribution. One of the C "chi-squares" is fixed at a pre-set value. C Inputs: C NFILE File number for reading input information C N Number of chi-square distributions C TITLE Information printed at start C LORD If .TRUE., drawings must be in ascending order C JFIX Precision to be fixed C HFIX Value of fixed precision C Outputs: C ANU0 Degrees of freedom parameters C S20 Constant parametrs C ANORM Log normalizing constant for joint chi-square distribution C ACHI Drawings from distribution IMPLICIT REAL*8 (A-H,O-Z) REAL*4 CPSEC DATA TIME,SD,JUMP/60.0D0,1.0D-3,2500/ CHARACTER*(*)TITLE PARAMETER(LD=100) COMMON/SCRA/V1(LD),V2(LD),A1(LD,LD),A2(LD,LD) DIMENSION ANU0(N),S20(N),ACHI(N) IF(LORD)GO TO 100 WRITE(6,10)TITLE 10 FORMAT(/,' Chi-square prior for ',A,/, 1 ' Degrees of freedom Scale parameter Initial draw') AA=0.0D0 DO 30 I=1,N IF(I.NE.JFIX)GO TO 20 ACHI(I)=HFIX WRITE(6,15)ACHI(I) 15 FORMAT(15X,'----',16X,'----',1PE17.7) GO TO 30 20 READ(NFILE,*,END=40,ERR=50)ANU0(I),S20(I) CALL PINTR('Degrees of freedom',ANU0(I),0.0D0,1.D1000) CALL PINTR('Constant parameter',S20(I),0.0D0,1.D1000) AA=AA+CHIN(S20(I),ANU0(I)) ACHI(I)=CHI(S20(I),ANU0(I)) WRITE(6,25)ANU0(I),S20(I),ACHI(I) 25 FORMAT(1PE19.7,1PE20.7,1PE17.7) 30 CONTINUE ANORM=AA RETURN 40 CALL PEND('UNANTICIPATED END-OF-FILE READING CHISQUARE PRIOR') 50 CALL PEND('ERROR READING CHISQUARE PRIOR') C Ordered distribution 100 WRITE(6,110)TITLE 110 FORMAT(/,' Ordered chi-square prior for ',A,/, 1 ' Degrees of freedom Scale parameter Initial draw') AA=0.0D0 DO 120 I=1,N ACHI(I)=HFIX IF(I.EQ.JFIX)GO TO 120 READ(NFILE,*,END=40,ERR=50)ANU0(I),S20(I) CALL PINTR('Degrees of freedom',ANU0(I),0.0D0,1.D1000) CALL PINTR('Constant parameter',S20(I),0.0D0,1.D1000) ACHI(I)=CHI(S20(I),ANU0(I)) AA=AA+CHIN(S20(I),ANU0(I)) 120 CONTINUE CALL CHIOP(N,S20,ANU0,20,JFIX,ACHI) DO 130 I=1,N IF(I.EQ.JFIX)WRITE(6,15)ACHI(I) 130 IF(I.NE.JFIX)WRITE(6,25)ANU0(I),S20(I),ACHI(I) C Adjust normalization constant for ordering NITER=0 NTOT=0 CLOCK=CPSEC() V1(JFIX)=HFIX 140 DO 160 IREP=1,JUMP DO 150 I=1,N 150 IF(I.NE.JFIX)V1(I)=CHI(S20(I),ANU0(I)) 160 IF(LORDER(N,V1))NTOT=NTOT+1 NITER=NITER+JUMP P=DREAL(NTOT)/NITER SE=DSQRT(P*(1.0D0-P)/NITER) CLOCK1=CPSEC()-CLOCK IF((SE.GT.SD).AND.(CLOCK1.LT.TIME))GO TO 140 IF(NTOT.EQ.0)CALL PEND 1 ('Ordering of precisions inconsistent with prior parameters') ANORM=AA-DLOG(P) WRITE(6,170)SE,CLOCK1 170 FORMAT( 1 ' ...Standard deviation of approximation of log prior kernel:' 2 ,1PE15.5,/, 3 ' Computation time:' 4 ,0PF8.2) RETURN END