C PROGRAM TO COMPUTE PRESSURE BROADENING CROSS SECTIONS, C SIG(JA,JB;JA1,JB1;K) (CF SHAFER & GORDON, JCP 58, 5422 (1973)) C FROM S-MATRICES SAVED ON TAPE BY SCATTERING PROG. C COMPATBILE WITH MOLSCAT SAVE TAPES THROUGH VERSION 14. C N.B. S-MATRICES AT MATCHING PAIRS OF ENERGIES FOR REQUESTED C JA,JB MUST BE PRESENT ON THE SAVE TAPE. C THIS PROGRAM IS PARTICULARLY USEFUL FOR CALCULATING ADDITIONAL C CROSS SECTIONS (E.G. LINE COUPLING) AFTER AN INITIAL MOLSCAT C RUN, OR FOR CALCULATING VALUES FROM A TAPE ASSEMBLED FROM C MULTIPLE RUNS AT DIFFERENT JTOT RANGES. C THIS PROGRAM CALLS THE REGULAR MOLSCAT PRESSURE BROADENING C ROUTINES, BUT USES S-MATRICES FROM A SAVE TAPE RATHER THAN C CALCULTAING THEM. C IF CALCULATING MANY CROSS SECTIONS YOU MIGHT WANT TO INCREASE C PARAMETER NREC IN SUBROUTINE DASIZE TO ALLOW FOR MORE C INTERNAL WORKING STORAGE. C ------------------------------------------------------------------ C C NAMELIST &INPUT PARAMETERS --- C NLPRBR (EQUIV TO IFLS), LINE, LTYPE, ARE STANDARD MOLSCAT C &INPUT VALUES -- SEE MOLSCAT DOCUMENTATION C ILSU IS NO LONGER USED. C IFEGEN FORCED TO ZERO HERE AS ENERGIES CANNOT BE ADDED C JMOD - PRINTS ACCUM PRBR SIG ONLY FOR MOD(JTOT,JMOD)=0 C JPRINT - SUPPRESSES PRINTING OF PRBR SIGS FOR JTOT 0 CONTRIBUTION FROM EVERY JSTEPZ'TH JTOT ONLY. C ------------------------------------------------------------------ C C PROGRAM HISTORY - C 12 FEB 1985 MODIFIED TO SKIP SOME INPUT JTOT ON JSTEPZ PARM C 01 MAR 1989 JMOD,JPRINT ADDED TO INPUT: CONTROL PRINTING C DA FILE (11) SIMULATED BY IN-CORE STORAGE C 25 JUN 1992 ADDS ABILITY TO READ UNFORMATTED (V11 AND LATER) C SAVE TAPES. CONTROLLED BY LFMT. C 02 SEP 1994 UPDATED TO VERSION 14; N.B. DUMMY CHKSTR USED C WHICH WILL PRECLUDE ITYPE=3 CALCS. C ------------------------------------------------------------------ C C KNOWN BUG: C IMPLEMENTAION LIMIT ON ITYPE=3; JLEVEL IS NOT SET PROPERLY. C ------------------------------------------------------------------ C IMPLICIT DOUBLE PRECISION (A-H,O-Z) C PARAMETER(MXNRG=100,MXCH=500,MXLVQN=700,MXLN=300,MXLEV=1000) C MXNRG IS MAX. NO. OF ENERGIES C MXCH IS MAX. NO OF CHANNESL PER S-MATRIX C MXLEV IS DIM OF ELEVEL - MUST BE CONSISTENT W/ CMBASE C MXLVQN IS MAX. NLEV*NQN (DIMENSIN OF JLEV) INTEGER LABEL(20),ITYPE,NLEV,NQN,NNRG,NOPEN, 1 JLEV(MXLVQN),J(MXCH),L(MXCH) DIMENSION ENERGY(MXNRG),WVEC(MXCH), 1 SREAL(MXCH*MXCH),SIMAG(MXCH*MXCH) C PRBR VARIABLES INTEGER PRNTLV,LINE(4*MXLN),LTYPE(MXLN) EQUIVALENCE(NLPRBR,IFLS) DIMENSION IC(MXCH),IL(MXCH),NBASIS(MXCH) DIMENSION IC1(MXCH),IL1(MXCH) LOGICAL LFMT C C INFORMATION ORIGINALLY PASSED AS ENTRY PRBRBS, NOW IN COMMON LOGICAL MPLMIN C VERSION 14 DIMENSIONS FOR /CMBASE/ COMMON /CMBASE/ ROTI(12),ELEVEL(1000),EMAX,WX(2),SPNUC, 1 NLEVEL,JLEVEL(4000),MISC(30) EQUIVALENCE (IDENT,MISC(28)) COMMON /PRBASE/ ITYPE,NQN,NLEV,MVALUE,IEXCH,MPLMIN C C DYNAMIC STORAGE COMMON BLOCK; HOLDS NIPR NEEDED IN DASIZE COMMON /MEMORY/ MX,IXNEXT,NIPR,IVLFL,X(1) C NAMELIST/INPUT/LINE,LTYPE,ILSU,PRNTLV,IFLS,NLPRBR,IFEGEN 1 ,JSTEPZ,JMOD,JPRINT,LFMT C C INPUT UNIT (IT) DATA IT/10/ C TOLERANCE FOR ENERGY CHECK DATA TOL/1.E-6/ C FORMATTED/UNFORMATTED TAPE (DEFAULT UNFORMATTED) DATA LFMT/.FALSE./ C C FORMATS FOR SAVE TAPE (IN CASE LFMT=.TRUE.) C 100 FORMAT(20A4/3I4,F8.4,I4) 101 FORMAT(20I4) 102 FORMAT(I4/(5E16.8)) 103 FORMAT(2I4,E16.8,I4,E16.8,I4) 104 FORMAT(I4/(2I4,E16.8) ) 105 FORMAT(5E16.8) C C SUPPRESS UNDERFLOWS VIA APPROPRIATE MACHINE DEPENDENT METHOD C CALL XUFLOW(0) C NIPR=2 C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C * READ BEGINNING OF TAPE. * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * IF (LFMT) THEN READ(IT,100) LABEL,ITYPE,NLEV,NQN,URED,IP ELSE READ(IT) LABEL,ITYPE,NLEV,NQN,URED,IP ENDIF WRITE(6,600) IT,LABEL,ITYPE,NLEV,NQN,URED,IP 600 FORMAT('1 PROGRAM TO CALCULATE PRESSURE BROADENING FROM ', 1 'SAVE TAPE ON UNIT',I4/' LABEL =',20A4/ 2 ' ITYPE =',I3,5X,'NLEV, NQN =',2I4,5X,'URED =',F8.4, 3 5X,'IPROGM =',I3) C C JLEV CONTAINS THE QUANTUM NUMBERS FOR EACH 'LEVEL' C ((JLEV(I,NQ),NQ=1,NQN),I=1,NLEV) C NSQ=NLEV*NQN IF (NSQ.LE.MXLVQN) GO TO 1991 WRITE(6,619) NSQ,MXLVQN 619 FORMAT(/' *** ERROR. NLEV*NQN EXCEEDS MXLVQN',2I6) STOP 1991 IF (LFMT) THEN READ(IT,101) (JLEV(I),I=1,NSQ) ELSE READ(IT) (JLEV(I),I=1,NSQ) ENDIF C DO 1002 I=1,NLEV 1002 WRITE(6,601) I,(JLEV(NLEV*(K-1)+I),K=1,NQN) 601 FORMAT(/' FOR LEVEL',I4,' QUANTUM NOS. ARE',10I4) C IF (IP.LT.3) THEN WRITE(6,*) ' *** NO IMPLEMENTATION FOR IPROGM.LT.3' STOP ENDIF IF (LFMT) THEN READ(IT,102) NLEVEL,(ELEVEL(I),I=1,NLEVEL) ELSE READ(IT) NLEVEL,(ELEVEL(I),I=1,NLEVEL) ENDIF IF (NLEVEL.LE.MXLEV) GO TO 1000 WRITE(6,699) 699 FORMAT(/' *** ERROR. NLEVEL. GT. MXLEV') STOP 1000 WRITE(6,603) NLEVEL,(ELEVEL(I),I=1,NLEVEL) 603 FORMAT(' ',I4,' ROTATIONAL LEVELS'/(' ',8E16.8)) C C NNRG IS NUMBER OF ENERGIES FOR WHICH SCATTERING CALC WAS DONE. C ENERGY(I),I=1,NNRG ARE THE ENERGIES (IN (1/CM)) IF (LFMT) THEN READ(IT,102) NNRG,(ENERGY(I),I=1,NNRG) ELSE READ(IT) NNRG,(ENERGY(I),I=1,NNRG) ENDIF IF (NNRG.LE.MXNRG) GO TO 1881 WRITE(6,618) NNRG,MXNRG 618 FORMAT(/' *** ERROR. NNRG EXCEEDS MXNRG',2I6) STOP 1881 WRITE(6,602) NNRG,(ENERGY(I),I=1,NNRG) 602 FORMAT(/,1X,I4,' ENERGIES ARE'/(' ',8D16.8)) C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C * C SET UP FOR PRESSURE BROADENING; READ &INPUT AND CALL PRBRIN * C * C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ILSU=11 JSTEPZ=0 JMOD=1 JPRINT=999 PRNTLV=3 DO 1101 I=1,MXLN 1101 LTYPE(I)=-1 DO 1102 I=1,MXCH 1102 NBASIS(I)=I C MPLMIN IS TRUE IN CURRENT VERSIONS OF MOLSCAT MPLMIN=.TRUE. C FORCE RM=1., SINCE WVEC ON TAPE HAS BEEN CONVERTED TO 1/ANG. RM=1. READ(5,INPUT,END=9000) C FORCE IFEGEN TO ZERO SINCE ENERGIES CANNOT BE ADDED TO TAPE. IFEGEN=0 C CALL PARMPR(JSTEPZ,JMOD,JPRINT) CALL PRBRIN(IFLS,LINE,LTYPE,MXLN,ILSU,NNRG,ENERGY,NNRG,IFEGEN, 1 JLEV,PRNTLV) C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C START LOOP OVER JTOT / ENERGY VALUES . . . * C JTOT,INRG,ENERGY(INRG) HEAD EACH BLOCK OF S-MATRICES. * C N.B. SAME JTOT,INRG MAY BE REPEATED FOR NON-INTERACTING PARITIES* C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C JTOLD PROCESSING USED TO GET JSTEP. JSTEPX=-1 JTOLD=-1 2000 IF (LFMT) THEN READ(IT,103,END=9000) JTOT,INRG,ECHK,IEXCH,WT,M ELSE IF (IP.LT.14) THEN READ(IT,END=9000) JTOT,INRG,ECHK,IEXCH,WT,M ELSE READ(IT,END=9000) JTOT,INRG,ECHK,IEXCH,WT,M,NOPEN ENDIF ENDIF C *** C FOR COUPLED STATES CASES, SET MVALUE; IN MOLSCAT, DONE IN BASE. C CODE HERE ASSUMES MPLMIN=.TRUE. AS IN CCP6 VERSION 9 MVALUE=M-1 C *** C IF THIS IS A NEW JTOT, OUTPUT PRBR CROSS SECTIONS IF (JTOT.EQ.JTOLD) GO TO 2011 IF (JTOLD.EQ.-1) GO TO 2011 JSTEP=JTOT-JTOLD IF (JSTEP.EQ.JSTEPX) GO TO 2911 IF (JSTEPX.EQ.-1) GO TO 2912 WRITE(6,691) JSTEP,JSTEPX 691 FORMAT(/' ***** ERROR. JSTEP INCONSISTENCY. CURRENT, OLD',2I4) JSTEP=0 2912 JSTEPX=JSTEP 2911 WRITE(6,617) JTOLD 617 FORMAT(//' **** **** **** ACCUMULATED THROUGH JTOT =',I4) C SKIP OUTPUT IF JTOT (I.E., JTOLD) WAS SKIPPED FOR JSTEPZ IF (JSTEPZ.LE.1) GO TO 4001 IF (JTOLD-JSTEPZ*(JTOLD/JSTEPZ).EQ.0) GO TO 4001 WRITE(6,627) JSTEPZ 627 FORMAT(/' **** **** **** JTOT SKIPPED BECAUSE OF JSTEPZ =',I4) GO TO 2011 4001 CONTINUE C (3/1/89) CUT DOWN ON OUTPUT IF (JTOLD-JMOD*(JTOLD/JMOD).NE.0.AND.JTOLD.LE.JPRINT) GO TO 2011 IF (PRNTLV.GE.3) CALL PRBOUT(JPB(JSTEP,JSTEPZ)) 2011 JTOLD=JTOT IF (PRNTLV.GE.4) WRITE(6,662) JTOT,ECHK,IEXCH,WT,M 662 FORMAT(' JTOT,ENERGY,IEXCH,WT,M-VAL=',I4,E16.8,I4,E16.8,I4) C N.B. JTOT .LT. 0 INDICATES A 'CHECKPOINT' RECORD. NO S-MATRICES. IF (JTOT.GE.0) GO TO 2001 JTOT=-JTOT IF (PRNTLV.GE.4) WRITE(6,698) JTOT 698 FORMAT(' *** NOTE. ROLLOUT MARKER ENCOUNTERED. NROLL =',I6) GO TO 2000 C BELOW CHECKS THAT ENERGY(INRG) CORRESPONDS WITH HEADER RECORD. . . 2001 IF (ABS((ECHK-ENERGY(INRG))/ECHK).LE.TOL) GO TO 2002 WRITE(6,697) INRG,ECHK 697 FORMAT(' *** WARNING. FOR ',I4,'-TH ENERGY, ECHECK =',D16.8) C 2002 IF (LFMT) THEN READ(IT,104,END=9999) NOPEN,(J(I),L(I),WVEC(I),I=1,NOPEN) ELSE IF (IP.LT.14) THEN READ(IT,END=9999) NOPEN,(J(I),L(I),WVEC(I),I=1,NOPEN) ELSE READ(IT,END=9999) (J(I),L(I),WVEC(I),I=1,NOPEN) ENDIF ENDIF IF (NOPEN.LE.MXCH) GO TO 2003 696 FORMAT(/' *** ERROR. NO. OF OPEN CHANNELS EXCEEDS',I6, 1 ' JTOT,INRG =',2I6) WRITE(6,696) MXCH,JTOT,INRG STOP 2003 NSQ=NOPEN*NOPEN C C GET S-MATRICES IF (LFMT) THEN READ(IT,105,END=9999) (SREAL(I),I=1,NSQ) READ(IT,105,END=9999) (SIMAG(I),I=1,NSQ) ELSE CALL SREAD(IT,NOPEN,SREAL,IEND) IF (IEND.NE.0) GO TO 9999 CALL SREAD(IT,NOPEN,SIMAG,IEND) IF (IEND.NE.0) GO TO 9999 ENDIF C ALLOW FOR SKIPPING THIS JTOT ON JSTEPZ IF (JSTEPZ.LE.1) GO TO 4000 IF (JTOT-JSTEPZ*(JTOT/JSTEPZ).EQ.0) GO TO 4000 IF (PRNTLV.GE.4) WRITE(6,693) JTOT,INRG,M,JSTEPZ 693 FORMAT(' JTOT,INRG,M =',3I4,' SKIPPED DUE TO JSTEPZ =',I4) GO TO 2000 C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C PROCESS THIS SET OF S-MATRICES FOR PRESSURE BROADENING CROSS SECT* C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C 4000 CALL PRBR(JTOT,M,NOPEN,INRG,RM,NBASIS,J,L,WVEC,SREAL,SIMAG,IC,IL, 1 IC1,IL1, 2 JLEV,MXPAR,WT,PRNTLV,ILSU) C C GO BACK FOR MORE JTOT, INRG SETS . . . GO TO 2000 C 9999 WRITE(6,*) ' *** UNEXPECTED EOF ENCOUNTERED ON UNIT (10)' GO TO 9001 C END OF FILE ON (10) 9000 WRITE(6,695) 695 FORMAT(/' *** NOTE. END OF FILE REACHED ON UNIT (10).') WRITE(6,617) JTOLD 9001 CALL PRBOUT(JPB(JSTEP,JSTEPZ)) CALL DACLOS C STOP END SUBROUTINE PARMPR(JSTEPZ,JMOD,JPRINT) IF (JSTEPZ.GT.1) WRITE(6,600) JSTEPZ 600 FORMAT('0 ***'/' *** WILL SKIP SOME JTOT BASED ON JSTEPZ =',I4/ 1 ' ***') IF(JPRINT.LE.1) RETURN WRITE(6,601) JPRINT,JMOD 601 FORMAT('0 ***'/' *** FOR JTOT .LT.',I4,' ONLY MOD(JTOT,',I2, 1 ')=0 WILL BE PRINTED.'/' ***') RETURN END FUNCTION JPB(JXTEP,JXTEPZ) JSTEP=ABS(JXTEP) JSTEPZ=MAX(ABS(JXTEPZ),1) JBIG=MAX(JSTEP,JSTEPZ) JSMALL=MIN(JSTEP,JSTEPZ) IF (JBIG.EQ.JSMALL) GO TO 2000 IF (JBIG-JSMALL*(JBIG/JSMALL).EQ.0) GO TO 3000 C HERE THERE IS NO COMMON DENOMINATOR, USE PRODUCT JPB=JBIG*JSMALL GO TO 9000 C HERE JBIG IS EVEN MULTIPLE OF JSMALL, USE BIGGER 3000 JPB=JBIG GO TO 9000 C HERE BOTH ARE SAME, USE EITHER 2000 JPB=JBIG 9000 RETURN END SUBROUTINE CHKSTR(NUSED) WRITE(6,*) ' *** CHKSTR. ERROR' WRITE(6,*) ' *** PRBR_SAVE IMPLEMENTATION DOES NOT USE', 1 ' /MEMORY/' WRITE(6,*) ' *** TERMINATING.' STOP END SUBROUTINE SWRITE(IU,N,S) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION S(N,N) C WRITE(IU) ((S(I,J),J=1,I),I=1,N) RETURN C ENTRY SREAD(IU,N,S,IEND) IEND=0 READ(IU,END=9999) ((S(I,J),J=1,I),I=1,N) DO 1000 I=1,N DO 1000 J=1,I-1 1000 S(J,I)=S(I,J) RETURN 9999 IEND=1 RETURN END SUBROUTINE PRBR(JTOT,M,N,INRG,RM, 1 NBASIS,LEV,L,WVEC,SREAL,SIMAG,IC,IL,IC1,IL1, 2 JLEV,MXPAR,WGHT,PRINT,ILSU) IMPLICIT DOUBLE PRECISION (A-H,O-Z) SAVE C C *** AUG 76 NEW COUPLED STATES TREATMENT (KOURI ET AL.) C *** JUL 86 (CCP6 VERSION 9) MOD 26 AUG 86 TO GET MXREC PROPERLY. C *** AND MOD 21 OCT 86 : EDIFMX C *** OCT 86 VERSION FOR 'OFF-DIAGONAL' CROSS SECTIONS C *** JAN 87 CHANGES TO GET MPLMIN HANDLING CORRECT FOR ITYPE=25,26 C *** AND ADD JSTEP TO ENTRY PRBOUT (REQUIRES CHANGE IN DRIVER) C *** MAR 87 CORRECTIONS FOR ITYPE=26 C *** DEC 88 INCLUDE ITYPE=7 AND Q=0 C *** MAR 89 HAS 'IN-CORE' D.A. SIMULATION C *** (NEED SUBROUTINE DASIZE/ENTRIES DARD1,DARD2,DAWR1,DAWR2) C *** JUL 92 REMOVES ALL REFERENCES TO LCSOLD (OLD, INCORRECT, C *** FORMULATION FOR COUPLED STATES: SEE, E.G., C *** GREEN, ET AL. JCP, 66, 1409 (1977)) C *** CALLS TO ENTRIES (IN PRBR3) ALSO HAVE BEEN TRAPPED THERE. C *** JUN 93 FIXES BUG IN PRBR3 AND USES /MEMORY/ TO ELIMINATE LIMITS. C *** AUG 94 V14: ENTRY PRBCNT ADDED AND COMMON CMBASE CHANGED C C CALCULATES SIGMA(JA1,JB1;JA,JB;K) C WHERE A/B INDICATE INITIAL/FINAL SPECTRAL LINES, C A1/B1 ARE AFTER COLLISION, AND K IS TENSOR ORDER C SEE, E.G., SHAFER AND GORDON, JCP 58, 5422 (1973). C C SUPPOSED TO BE UPWARD COMPATIBLE IF LDIAG=.TRUE.: C LDIAG=.TRUE. TAKES *OLD* INPUT LINE=LEVA,LEVB, LEVA,LEVB, ... , C AND SETS LEVA1=LEVA, LEVB1=LEVB FOR ALL LINES. C LDIAG=.FALSE. INPUT IS LINE=LEVA,LEVB,LEVA1,LEVB1, C LEVA,LEVB,LEVA1,LEVB1, ... C N.B. LDIAG FORCED TO TRUE FOR ITYPE=3 CALCULATIONS. C C ENTRY PRBRIN ACCEPTS &INPUT DATA AND SETS UP PRES. BROAD. CALC. C ENTRY PRBOUT PRINTS OUT ACCUMULATED SIGR, SIGI. C ENTRY PRBCNT FINDS WHETHER AN S-MATRIX WILL BE USED FOR PB CALC C C PRBR SPECIFICATIONS -------------------------------------- C DIMENSION NBASIS(1),LEV(1),L(1),IC(1),IL(1),IC1(1),IL1(1), 1 JLEV(NLEV,NQN) DIMENSION WVEC(1),SREAL(1),SIMAG(1) C C JTOT IS TOTAL ANGULAR MOMENTUM C M = 0 FOR LAST PARITY STEP AT THIS JTOT. C N IS NUMBER OF OPEN CHANNELS, DETERMINES DIMENSION OF VECTORS. C INRG IS INDEX FOR ENERGY VALUES C RM IS SCALING FACTOR FOR RADIAL WAVEFUNCTION. C NBASIS (I) POINTS TO LEV,L VALUES FOR ITH OPEN CHANNEL. C LEV IS VECTOR OF BASIS SET LEVELS C L IS VECTOR OF BASIS ORBITAL ANGULAR MOMENTA. C WVEC IS VECTOR OF WAVEVECTORS C SREAL(N,N) IS REAL PART OF S MATRIX. C SIMAG(N,N) IS IMAGINARY PART OF S MATRIX. C LOGICAL ITYPE3,EPM,LCSNEW,MPLMIN,LCSSYM INTEGER JT(2) C C PRBRIN SPECIFICATIONS ------------------------------------ C INTEGER NLPRBR,MXLN,LINE(MXLN),ILSU,NNRG,PRINT,MXNRG,IFEGEN INTEGER T(MXLN) DIMENSION ENERGY(NNRG) C C NLPRBR =0 FOR NO LINE SHAPE CALC. C =N (GT.0) GIVES NO. OF LINES FOR WHICH TO COMPUTE L.S. C LINE(4*I-3),... ,I=1,NLPRBR IS LEVEL DATA FOR LINES. C ILSU (NOW REDUNDANT) WAS DIRECT ACCESS FILE FOR WORKING STORAGE C ENERGY(NNRG) ARE ENERGIES AT WHICH S MATRIX IS CALCULATED. C MXNRG IS MAXIMUM DIMENSION OF ENERGY ARRAY C IFEGEN .GT. 0 REQUESTS GENERATION OF ADDITIONAL ENERGY VALUES. C PRINT IS INTEGER PRINT CONTROL. C LOGICAL NOCALC,PF,NDEBUG LOGICAL LDIAG,EXISTS,LDIAGX CHARACTER*8 PTP(3) C STORAGE DIMENSIONED FOR NO. OF LINES = MAXLN. DIMENSION LN(400,9) DIMENSION EREL(400),SIGR(400),SIGI(400) DIMENSION P(2),PRTY(4) C C INFORMATION ORIGINALLY PASSED AS ENTRY PRBRBS, NOW IN COMMON C COMMON /CMBASE/ ROTI(12),ELEVEL(1000),EMAX,WT(2),SPNUC, 1 NLEVEL,JLEVEL(4000),MISC(26),JHALF,IDENT,MXJL,MXEL COMMON /PRBASE/ ITYPE,NQN,NLEV,MVALUE,IEXCH,MPLMIN COMMON /ASSVAR/ IDA C C NLEV AND NLEVEL ARE NO. OF LEVELS IN BASIS SET. C JLEV AND JLEVEL ARE QUANTUM NUMBERS FOR THESE LEVELS. C ELEVEL ARE ENERGIES OF THESE LEVELS. C C DYNAMIC STORAGE COMMON BLOCK ... COMMON /MEMORY/ MX,IXNEXT,NIPR,IVLFL,X(1) C C --- DATA INITIALIZATIONS --- C DATA PTP/' Q = 0 ',' DIPOLE ',' RAMAN '/ DATA P/1.D0,-1.D0/, PRTY/1.D0,-1.D0,-1.D0,1.D0/ C *** BELOW REPLACES JMH'S CRITERION OF 1.D-10 FOR ENERGY DIFFERENCE C *** SMALLER VALUE MAY BE NEEDED FOR RESONANCE CALCULATIONS. DATA EDIFMX/5.D-6/ C FOR COMPATBILITY WITH OLD INPUT, SET LDIAG=.TRUE. DATA LDIAGX/.FALSE./ C IF NDEBUG .EQ. .FALSE. CHECK FOR 'IMPOSSIBLE' NUMBERS OF MATCHES. DATA NDEBUG/.FALSE./ C DIMENSION LIMITATION ... DATA MAXLN/400/ C FOR CHECKING OVER-WRITE OF "DA FILE" DATA JCHKSV/-1/ C C STATEMENT FUNCTION (LOGICAL) EXISTS(I) = I.GT.0 .AND. I.LE.NLEVEL C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C IF (NOCALC) RETURN IF (JCHKSV.EQ.-1) JCHKSV=JTOT DO 3000 IA=1,2 C IA=1 CHECKS FOR USE OF THIS JTOT,INRG WITH J(ALPHA). C IA=2 FOR J(BETA). IB=3-IA C FIND LINES, I, WHICH USE THIS INRG, JTOT S MATRIX. IKEEP=0 DO 3100 I=1,NLINE IF (LN(I,IA+3).NE.INRG) GO TO 3100 K=LN(I,3) JDIFMX=K IF (LCSNEW) JDIFMX=0 JDM=MAX(JDM,JDIFMX) IF (ITYPE3) GO TO 3211 C FOR ITYPE=1,2,5 GET J-VALUE FROM 1ST COL OF JLEV. JA=JLEV(LN(I,1),1) JB=JLEV(LN(I,2),1) JA1=JLEV(LN(I,8),1) JB1=JLEV(LN(I,9),1) C PARITY FACTOR FOR CS WITH MPLMIN; THIS IS NORMALLY +1. F3PJ=PARITY(JA+JA1+JB+JB1) C FIND BASIS FNS. CORRESPONDING TO JA/JA1 (JB/JB1) AND GET L VALUES. C ROWS=>JA1,IC1,IL1 COLS=>JA,IC,IL C FOR DIAG CASE (JA=JA1), IC/IC1 AND IL/IL1 HAVE SAME VALUES. NLVAL=0 NLVAL1=0 DO 3200 II=1,N JJ=NBASIS(II) IF (LEV(JJ).NE.LN(I,IA)) GO TO 3201 NLVAL=NLVAL+1 IC(NLVAL)=II IL(NLVAL)=L(JJ) 3201 IF (LEV(JJ).NE.LN(I,IA+7)) GO TO 3200 NLVAL1=NLVAL1+1 IC1(NLVAL1)=II IL1(NLVAL1)=L(JJ) 3200 CONTINUE GO TO 3212 C C FOR ITYPE=3 GET J-VALUE FROM JLEVEL. RECALL J1,J2 PACKED IN ORDER C 3211 JA=JLEVEL(2*LN(I,1)-1) JB=JLEVEL(2*LN(I,2)-1) C BELOW MAY BE NEEDED FOR COMPATIBILITY IN OFF-DIAG CODE JA1=JA JB1=JB C ALLOCATE TEMPORARY STORAGE FOR SR,SI,TR,JBAR,ISTB,NBLK,LVAL NSQ=N*N NINT=(N+NIPR-1)/NIPR IT1=IXNEXT IT2=IT1+NSQ IT3=IT2+NSQ IT4=IT3+NSQ IT5=IT4+NINT IT6=IT5+NINT IT7=IT6+NINT IXNEXT=IT7+NINT C WRITE(6,*) ' IT1-IT7,IXNEXT',IT1,IT2,IT3,IT4,IT5,IT6,IT7,IXNEXT NUSED=0 CALL CHKSTR(NUSED) CALL PRBR3(N,SREAL,SIMAG,JTOT,NLEV,NQN,JLEV,NBASIS,LEV,L,NPACK, 1 LN(I,IA),NLVAL,IC,IL, 2 X(IT1),X(IT2),X(IT3),X(IT4),X(IT5),X(IT6),X(IT7)) C N.B. ONLY SR,SI NEED TO BE KEPT, IXNEXT COULD BE REDUCED HERE ... C IXNEXT=IT3 C>>SG 1 JUN 93: NLVAL1,IL1,IC1 MUST BE ALSO BE SET (CF. DIAGONAL CASE). NLVAL1=NLVAL DO 3311 II=1,NLVAL IL1(II)=IL(II) 3311 IC1(II)=IC(II) C<