C     path:      /stormrc1/aer_lblrtm/src/SCCS/s.oprop.f
C     revision:  5.12
C     created:   03/28/00  10:58:04
C     presently: 03/28/00  11:05:14

      SUBROUTINE HIRAC1 (MPTS) 2,50
C
      IMPLICIT REAL*8           (V)
C
C
C**********************************************************************
C*
C*
C*    CALCULATES MONOCHROMATIC ABSORPTION COEFFICIENT FOR SINGLE LAYER
C*
C*
C*            USES APPROXIMATE VOIGT ALGORITHM
C*
C*
C*              VAN VLECK WEISSKOPF LINE SHAPE
C*
C**********************************************************************
C
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C                  IMPLEMENTATION:    R.D. WORSHAM
C
C             ALGORITHM REVISIONS:    S.A. CLOUGH
C                                     R.D. WORSHAM
C                                     J.L. MONCET
C
C
C                     ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC.
C                     840 MEMORIAL DRIVE,  CAMBRIDGE, MA   02139
C
C----------------------------------------------------------------------
C
C               WORK SUPPORTED BY:    THE ARM PROGRAM
C                                     OFFICE OF ENERGY RESEARCH
C                                     DEPARTMENT OF ENERGY
C
C
C      SOURCE OF ORIGINAL ROUTINE:    AFGL LINE-BY-LINE MODEL
C
C                                             FASCOD3
C
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C
C     Common blocks from analytic derivatives
C     -------------------------
      COMMON /ADRPNM/ CDUM1,PTHODI,PTHODT,PTHRDR
C     -------------------------
      COMMON /RCNTRL/ ILNFLG
      COMMON VNU(250),SP(250),ALFA0(250),EPP(250),MOL(250),HWHMS(250),
     *       TMPALF(250),PSHIFT(250),IFLG(250),SPPSP(250),RECALF(250),
     *       ZETAI(250),IZETA(250)
C
C     DIMENSION RR1 =  NBOUND   + 1 + DIM(R1)
C     DIMENSION RR2 =  NBOUND/2 + 1 + DIM(R2)
C     DIMENSION RR3 =  NBOUND/4 + 1 + DIM(R3)
C
      COMMON RR1(6099),RR2(2075),RR3(429)
      COMMON /IOU/ IOUT(250)
      COMMON /ABSORB/ V1ABS,V2ABS,DVABS,NPTABS,ABSRB(2030)
      COMMON /ADRIVE/ LOWFLG,IREAD,MODEL,ITYPE,NOZERO,NP,H1F,H2F,
     *                ANGLEF,RANGEF,BETAF,LENF,AV1,AV2,RO,IPUNCH,
     *                XVBAR, HMINF,PHIF,IERRF,HSPACE
      COMMON /MANE/ P0,TEMP0,NLAYRS,DVXM,H2OSLF,WTOT,ALBAR,ADBAR,AVBAR,
     *              AVFIX,LAYRFX,SECNT0,SAMPLE,DVSET,ALFAL0,AVMASS,
     *              DPTMIN,DPTFAC,ALTAV,AVTRAT,TDIFF1,TDIFF2,ALTD1,
     *              ALTD2,ANGLE,IANT,LTGNT,LH1,LH2,IPFLAG,PLAY,TLAY,
     *              EXTID(10)
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /HVERSN/  HVRLBL,HVRCNT,HVRFFT,HVRATM,HVRLOW,HVRNCG,
     *                HVROPR,HVRPST,HVRPLT,HVRTST,HVRUTL,HVRXMR
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /XSUB/ VBOT,VTOP,VFT,LIMIN,ILO,IHI,IEOF,IPANEL,ISTOP,IDATA
      COMMON /LBLF/ V1R4,V2R4,DVR4,NPTR4,BOUND4,R4(2502),RR4(2502)
      COMMON /CMSHAP/ HWF1,DXF1,NX1,N1MAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      COMMON /SUB1/ MAX1,MAX2,MAX3,NLIM1,NLIM2,NLIM3,NLO,NHI,DVR2,DVR3,
     *              N1R1,N2R1,N1R2,N2R2,N1R3,N2R3
      COMMON /XPANEL/ V1P,V2P,DVP,NLIM,RMIN,RMAX,NPNLXP,NSHIFT,NPTS
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,TF4,TF4RDF,TF4CNV,
     *               TF4PNL,TXS,TXSRDF,TXSCNV,TXSPNL
      COMMON /VOICOM/ AVRAT(102),CGAUSS(102),CF1(102),CF2(102),
     *                CF3(102),CER(102)
C
      PARAMETER (NFPTS=2001,NFMX=1.3*NFPTS)
C
      COMMON /FNSH/ IFN,F1(NFMX),F2(NFMX),F3(NFMX),FG(NFMX),XVER(NFMX)
      COMMON /R4SUB/ VLOF4,VHIF4,ILOF4,IST,IHIF4,LIMIN4,LIMOUT,ILAST,
     *               DPTMN4,DPTFC4,ILIN4,ILIN4T
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
C
      PARAMETER (NTMOL=36,NSPECI=85)
C
      COMMON /ISVECT/ ISOVEC(NTMOL),ISO82(NSPECI),ISONM(NTMOL),
     *                SMASSI(NSPECI)
      COMMON /LNC1/ RHOSLF(NSPECI),ALFD1(NSPECI),SCOR(NSPECI),ALFMAX,
     *              BETACR,DELTMP,DPTFC,DPTMN,XKT,NMINUS,NPLUS,NLIN,
     *              LINCNT,NCHNG,SUMALF,SUMZET,TRATIO,RHORAT,PAVP0,
     *              PAVP2,RECTLC,TMPDIF,ILC
      COMMON /FLFORM/ CFORM
      COMMON /L4TIMG/ L4TIM,L4TMR,L4TMS,L4NLN,L4NLS,LOTHER
      COMMON /IODFLG/ DVOUT
C
      REAL L4TIM,L4TMR,L4TMS,LOTHER
      CHARACTER*55 CDUM1,PTHODI,PTHODT,PTHRDR
      CHARACTER*10 HFMODL
      CHARACTER CFORM*11,KODLYR*57,PTHODE*55,PTHODD*55
      CHARACTER*8 HVRLBL,HVRCNT,HVRFFT,HVRATM,HVRLOW,HVRNCG,HVROPR,
     *            HVRPLT,HVRPST,HVRTST,HVRUTL,HVRXMR
      LOGICAL OP
C
      DIMENSION MEFDP(64),FILHDR(2),IWD(2)
      DIMENSION R1(4050),R2(1050),R3(300)
C
      EQUIVALENCE (IHIRAC,FSCDID(1)) , (ILBLF4,FSCDID(2)),
     *            (IXSCNT,FSCDID(3)) , (IAERSL,FSCDID(4)),
     *            (JRAD,FSCDID(9)) , (IMRG,FSCDID(11)),
     *            (IATM,FSCDID(15)) , (YI1,IOD) , (XID(1),FILHDR(1)),
     *            (V1P,IWD(1)) , (NPNLXP,LSTWDX)
      EQUIVALENCE (R1(1), RR1(2049)),(R2(1),RR2(1025)),(R3(1),RR3(129))
C
C
C     NOTE that DXFF1 = (HWFF1/(NFPTS-1))
C     and       DXFF2 = (HWFF2/(NFPTS-1))
C     and       DXFF3 = (HWFF3/(NFPTS-1))
C
      DATA HWFF1 /  4. /,DXFF1 / 0.002 /,NXF1 / NFPTS /,NF1MAX / NFMX /
      DATA HWFF2 / 16. /,DXFF2 / 0.008 /,NXF2 / NFPTS /,NF2MAX / NFMX /
      DATA HWFF3 / 64. /,DXFF3 / 0.032 /,NXF3 / NFPTS /,NF3MAX / NFMX /
C
      DATA MEFDP / 64*0 /
C
      PTHODE = 'ODexact_'
      PTHODD = 'ODdeflt_'
      DATA KODLYR /
     *     '                                                         '/
      DATA HFMODL /'         '/
C
      CALL CPUTIM (TIMEH0)
C
C     ASSIGN SCCS VERSION NUMBER TO MODULE
C
      HVROPR = '5.12'
C
C     Initialize timing for the group "OTHER" in the TAPE6 output
C
      TLNCOR = 0.0
      TXINT = 0.0
      TSHAPE = 0.0
      TLOOPS = 0.0
      TODFIL = 0.0
      TMOLEC = 0.0
C
      LSTWDX = -654321
      NPNLXP = NWDL(IWD,LSTWDX)
      ICNTNM = MOD(IXSCNT,10)
      IXSECT = IXSCNT/10
C
C     SET INPUT FLAG FOR USE BY X-SECTIONS
C
      IFST = -99
      IR4 = 0
      IENTER = 0
C
C     SET COMMON BLOCK CMSHAP
C
      HWF1 = HWFF1
      DXF1 = DXFF1
      NX1 = NXF1
      N1MAX = NF1MAX
      HWF2 = HWFF2
      DXF2 = DXFF2
      NX2 = NXF2
      N2MAX = NF2MAX
      HWF3 = HWFF3
      DXF3 = DXFF3
      NX3 = NXF3
      N3MAX = NF3MAX
C
      DPTMN = DPTMIN
      IF (JRAD.NE.1) DPTMN = DPTMIN/RADFN(V2,TAVE/RADCN2)
      DPTFC = DPTFAC
      ILIN4 = 0
      ILIN4T = 0
      NPTS = MPTS
      LIMIN = 250
      NSHIFT = 32
C
C     SAMPLE IS AVERAGE ALPHA / DV
C
      NBOUND = 4.*(2.*HWF3)*SAMPLE+0.01
      NLIM1 = 2401
      NLIM2 = (NLIM1/4)+1
      NLIM3 = (NLIM2/4)+1
C
      IF (IFN.EQ.0) THEN
         CALL CPUTIM(TPAT0)
         CALL SHAPEL (F1,F2,F3)
         CALL SHAPEG (FG)
         CALL VERFN (XVER)
         IFN = IFN+1
         CALL CPUTIM(TPAT1)
         TSHAPE = TSHAPE+TPAT1-TPAT0
      ENDIF
C
      CALL CPUTIM(TPAT0)
      CALL MOLEC (1,SCOR,RHOSLF,ALFD1)
      CALL CPUTIM(TPAT1)
      TMOLEC = TMOLEC+TPAT1-TPAT0
      REWIND LINFIL
      TIMRDF = 0.
      TIMCNV = 0.
      TIMPNL = 0.
      TF4 = 0.
      TF4RDF = 0.
      TF4CNV = 0.
      TF4PNL = 0.
      TXS = 0.
      TXSRDF = 0.
      TXSCNV = 0.
      TXSPNL = 0.
      IEOF = 0
      ILO = 0
      IHI = -999
      NMINUS = 0
      NPLUS = 0
C
C     NOTE (DXF3/DXF1) IS 16 AND (DXF3/DXF2) IS 4
C
      DVP = DV
      DVR2 = (DXF2/DXF1)*DV
      DVR3 = (DXF3/DXF1)*DV
      MAX1 = NSHIFT+NLIM1+(NBOUND/2)
      MAX2 = MAX1/4
      MAX3 = MAX1/16
      MAX1 = MAX1+NSHIFT+1+16
      MAX2 = MAX2+NSHIFT+1+4
      MAX3 = MAX3+NSHIFT+1+1
C
C     FOR CONSTANTS IN PROGRAM  MAX1=4018  MAX2=1029  MAX3=282
C
      CALL CPUTIM(TPAT0)
      BOUND = FLOAT(NBOUND)*DV/2.
      BOUNF3 = BOUND/2.
      ALFMAX = BOUND/HWF3
      NLO = NSHIFT+1
      NHI = NLIM1+NSHIFT-1
      DO 10 I = 1, MAX1
         R1(I) = 0.
   10 CONTINUE
      DO 20 I = 1, MAX2
         R2(I) = 0.
   20 CONTINUE
      DO 30 I = 1, MAX3
         R3(I) = 0.
   30 CONTINUE
      IF (ILBLF4.EQ.0) THEN
         DO 40 I = 1, 2502
            R4(I) = 0.
   40    CONTINUE
      ENDIF
C
      IF (IATM.GE.1.AND.IATM.LE.5) CALL YDIH1 (H1F,H2F,ANGLEF,YID)
      CALL CPUTIM(TPAT1)
      TLOOPS = TLOOPS + TPAT1-TPAT0
C
C     ---------------------------------------------------------------
C
C     - If IOD = 1 or 4 then calculate optical depths for each
C       layer with DV = DVOUT (using DVSET if IOD=4) and maintain
C       separately. Use PTHODI as the name of the optical depth files.
C       This requires the format HFMODL, which is produced by
C       calling the SUBROUTINE QNTIFY.
C
C     - If IOD = 2 and IMERGE = 1 then calculate optical depths
C       for each layer using the exact DV of each layer
C       Use PTHODE as the name of the optical depth files.
C       This requires the format HFMODL, which is produced by
C       calling the SUBROUTINE QNTIFY.
C
C     - If calculating layer optical depths and cumulative layer
C       optical depths for an analytic derivative calculation
C       (IOD=3, IMRG=10), or when using the same criteria but not
C       calculating the cumulative optical depths (IOD=3),
C       then use PTHODI as the name of the optical depth files.
C       This requires the format HFMODL, which is produced by
C       calling the SUBROUTINE QNTIFY.
C
C     - If calculating layer absorptance coefficients for an
C       analytic derivative calculation (IEMIT=3, IOD=3, and
C       IMRG>40), then use TAPE10 as the name of the layer
C       absorptance coefficient files.
C
C     - If calculating optical depths using the default procedure,
C       sending output to a different file for each layer (IEMIT=0,
C       IOD=0, and IMRG=1), then use PTHODI for the optical depth
C       pathnames.
C
C     - Otherwise, use TAPE10.  For IOD=1, calculate optical depths
C       for each layer with DV = DVOUT (from DVSET in TAPE5, carried
C       in by COMMON BLOCK /IODFLG/ (interpolation in PNLINT).
C
      CALL CPUTIM(TPAT0)
      IF ((IOD.EQ.1).OR.(IOD.EQ.4)) THEN
         CALL QNTIFY(PTHODI,HFMODL)
         WRITE (KODLYR,HFMODL) PTHODI,LAYER
         INQUIRE (UNIT=KFILE,OPENED=OP)
         IF (OP) CLOSE (KFILE)
         OPEN (KFILE,FILE=KODLYR,FORM=CFORM,STATUS='UNKNOWN')
         REWIND KFILE
         DVSAV = DV
         IF (DVOUT.NE.0.) DV = DVOUT
         CALL BUFOUT (KFILE,FILHDR(1),NFHDRF)
         DV = DVSAV
         IF (NOPR.EQ.0) WRITE (IPR,900) KFILE,DV,BOUNF3
      ELSEIF (IOD.EQ.2) THEN
         CALL QNTIFY(PTHODE,HFMODL)
         WRITE(KODLYR,HFMODL) PTHODE,LAYER
         INQUIRE (UNIT=KFILE,OPENED=OP)
         IF (OP) CLOSE (KFILE)
         OPEN (KFILE,FILE=KODLYR,FORM=CFORM,STATUS='UNKNOWN')
         REWIND KFILE
         DVOUT = DV
         CALL BUFOUT (KFILE,FILHDR(1),NFHDRF)
         IF (NOPR.EQ.0) WRITE (IPR,900) KFILE,DVOUT,BOUNF3
      ELSEIF (IOD.EQ.3) THEN
         IF ((IMRG.EQ.10).OR.(IMRG.EQ.1)) THEN
            CALL QNTIFY(PTHODI,HFMODL)
            WRITE (KODLYR,HFMODL) PTHODI,LAYER
            INQUIRE (UNIT=KFILE,OPENED=OP)
            IF (OP) CLOSE (KFILE)
            OPEN (KFILE,FILE=KODLYR,FORM=CFORM,STATUS='UNKNOWN')
            REWIND KFILE
            DVSAV = DV
            DV = DVOUT
            CALL BUFOUT (KFILE,FILHDR(1),NFHDRF)
            DV = DVSAV
            IF (NOPR.EQ.0) WRITE (IPR,900) KFILE,DV,BOUNF3
         ELSEIF (IMRG.GE.40) THEN
            DVSAV = DV
            DV = DVOUT
            CALL BUFOUT (KFILE,FILHDR(1),NFHDRF)
            DV = DVSAV
            IF (NOPR.EQ.0) WRITE (IPR,900) KFILE,DV,BOUNF3
         ENDIF
      ELSE
         IF (IMRG.EQ.1) THEN
            CALL QNTIFY(PTHODD,HFMODL)
            WRITE (KODLYR,HFMODL) PTHODD,LAYER
            INQUIRE (UNIT=KFILE,OPENED=OP)
            IF (OP) CLOSE (KFILE)
            OPEN (KFILE,FILE=KODLYR,FORM=CFORM,STATUS='UNKNOWN')
            REWIND KFILE
         ENDIF
         IF (IOD.EQ.1) THEN
            DVSAV = DV
            IF (DVOUT.NE.0.) DV = DVOUT
            CALL BUFOUT (KFILE,FILHDR(1),NFHDRF)
            DV = DVSAV
         ELSE
            DVOUT = 0.0
            CALL BUFOUT (KFILE,FILHDR(1),NFHDRF)
         ENDIF
         IF (NOPR.EQ.0) WRITE (IPR,900) KFILE,DV,BOUNF3
      ENDIF
      CALL CPUTIM(TPAT1)
      TODFIL = TODFIL + TPAT1-TPAT0
C
      IF (IHIRAC.EQ.9) THEN
         DO 50 M = 1, NMOL
            WK(M) = 0.
   50    CONTINUE
      ENDIF
C
C     ---------------------------------------------------------------
C
      VFT = V1-FLOAT(NSHIFT)*DV
      VBOT = V1-BOUND
      VTOP = V2+BOUND
C
      LINCNT = 0
      NLIN = 0
      AVALF = 0.
      AVZETA = 0.
      SUMALF = 0.
      SUMZET = 0.
      NCHNG = 0
      NLNCR = 0
C
      V1R4ST = V1R4
      V2R4ST = V2R4
      IF (ILBLF4.GE.1) CALL LBLF4 (JRAD,V1R4ST,V2R4ST)
C
      IFPAN = 1
C
   60 CONTINUE
C
      CALL CPUTIM (TIME0)
      IF (IEOF.NE.0) GO TO 80
C
C     THERE ARE (LIMIN * 9) QUANTITIES READ IN:
C     VNU,SP,ALFA0,EPP,MOL,HWHMS,TMPALF,PSHIFT,IFLG
C
      CALL RDLIN
C
      CALL CPUTIM (TIME)
      TIMRDF = TIMRDF+TIME-TIME0
C
      IF (IEOF.NE.0) GO TO 80
C
C     MODIFY LINE DATA FOR TEMPERATURE, PRESSURE, AND COLUMN DENSITY
C
      CALL CPUTIM(TPAT0)
      CALL LNCOR1 (NLNCR,IHI,ILO,MEFDP)
      CALL CPUTIM(TPAT1)
      TLNCOR = TLNCOR+TPAT1-TPAT0
C
   70 CONTINUE
C
      CALL CNVFNV (VNU,SP,SPPSP,RECALF,R1,R2,R3,F1,F2,F3,FG,XVER,ZETAI,
     *             IZETA)
C
      IF (IPANEL.EQ.0) GO TO 60
C
   80 CONTINUE
C
C        FOR FIRST PANEL     N1R1=   1    N1R2=  1    N1R3=  1
C     FOR SUBSEQUENT PANELS  N1R1=  33   *N1R2= 13   *N1R3=  6
C         FOR ALL PANELS     N2R1=2432   *N2R2=612   *N2R3=155
C
C            NOTE: THE VALUES FOR N1R2, N1R3, N2R2 AND N2R3 WHICH
C                  ARE MARKED WITH AN ASTERISK, CONTAIN A 4 POINT
C                  OFFSET WHICH PROVIDES THE NECESSARY OVERLAP FOR
C                  THE INTERPOLATION OF R3 INTO R2, AND R2 INTO R1.
C
      IF (IFPAN.EQ.1) THEN
         IFPAN = 0
         N1R1 = 1
         N1R2 = 1
         N1R3 = 1
      ELSE
         N1R1 = NSHIFT+1
         N1R2 = (NSHIFT/4)+1+4
         N1R3 = (NSHIFT/16)+1+3
      ENDIF
      N2R1 = NLIM1+NSHIFT-1
      N2R2 = NLIM2+(NSHIFT/4)-1+4
      N2R3 = NLIM3+(NSHIFT/16)-1+3
C
      IF (VFT.LE.0.) THEN
         CALL RSYM (R1,DV,VFT)
         CALL RSYM (R2,DVR2,VFT)
         CALL RSYM (R3,DVR3,VFT)
      ENDIF
C
      IF (IXSECT.GE.1.AND.IR4.EQ.0) THEN
         CALL CPUTIM (TIME0)
         CALL XSECTM (IFST,IR4)
         CALL CPUTIM (TIME)
         TXS = TXS+TIME-TIME0
      ENDIF
C
      CALL CPUTIM(TPAT0)
      IF (ILBLF4.GE.1)
     *    CALL XINT (V1R4,V2R4,DVR4,R4,1.0,VFT,DVR3,R3,N1R3,N2R3)
      IF (ICNTNM.GE.1)
     *    CALL XINT (V1ABS,V2ABS,DVABS,ABSRB,1.,VFT,DVR3,R3,N1R3,N2R3)
      CALL CPUTIM(TPAT1)
      TXINT = TXINT + TPAT1-TPAT0
C
      CALL PANEL (R1,R2,R3,KFILE,JRAD,IENTER)
C
      IF (ISTOP.NE.1) THEN
         IF (ILBLF4.GE.1) THEN
            VF1 = VFT-2.*DVR4
            VF2 = VFT+2.*DVR4+FLOAT(N2R3+4)*DVR3
            IF (VF2.GT.V2R4.AND.V2R4.NE.V2R4ST) THEN
               CALL LBLF4 (JRAD,VF1,V2R4ST)
               IF (IXSECT.GE.1.AND.IR4.EQ.1) THEN
                  CALL CPUTIM (TIME0)
                  CALL XSECTM (IFST,IR4)
                  CALL CPUTIM (TIME)
                  TXS = TXS+TIME-TIME0
               ENDIF
            ENDIF
         ENDIF
         GO TO 70
      ENDIF
C
      CALL CPUTIM (TIMEH1)
      TIME = TIMEH1-TIMEH0-TF4-TXS
C
      IF (NOPR.NE.1) THEN
         IF (ILBLF4.GE.1) WRITE (IPR,905) DVR4,BOUND4
         IF (NMINUS.GT.0) WRITE (IPR,910) NMINUS
         IF (NPLUS.GT.0) WRITE (IPR,915) NPLUS
         TOTHHI = TLNCOR+TXINT+TSHAPE+TLOOPS+TODFIL+TMOLEC
         WRITE (IPR,920) L4TIM,L4TMR,L4TMS,LOTHER,L4NLN,L4NLS,
     *                   TXS,TXSRDF,TXSCNV,TXSPNL,
     *                   TF4,TF4RDF,TF4CNV,TF4PNL,ILIN4T,ILIN4,
     *                   TIME,TIMRDF,TIMCNV,TIMPNL,TOTHHI,
     *                   NLIN,LINCNT,NCHNG
         WRITE(IPR,935)
         IF (LINCNT.GE.1) THEN
            AVALF = SUMALF/FLOAT(LINCNT)
            AVZETA = SUMZET/FLOAT(LINCNT)
         ENDIF
         WRITE (IPR,925) AVALF,AVZETA
C
         DO 90 M = 1, NMOL
            IF (MEFDP(M).GT.0) WRITE (IPR,930) MEFDP(M),M
   90    CONTINUE
      ENDIF
C
      RETURN
C
  900 FORMAT ('0  * HIRAC1 *  OUTPUT ON FILE ',I5,10X,' DV = ',F12.8,
     *        10X,' BOUNDF3(CM-1) = ',F8.4)
  905 FORMAT ('0 DV FOR LBLF4 = ',F10.5,5X,'BOUND FOR LBLF4 =',F10.4)
  910 FORMAT ('0 -------------------------',I5,' HALF WIDTH CHANGES')
  915 FORMAT ('0 +++++++++++++++++++++++++',I5,' HALF WIDTH CHANGES')
  920 FORMAT ('0',20X,'TIME',11X,'READ',4X,'CONVOLUTION',10X,'PANEL',
     *        9X,'OTHER+',
     *        6X,'NO. LINES',3X,'AFTER REJECT',5X,'HW CHANGES',/,
     *        2x,'LINF4',3X,2F15.3,15X,2F15.3,2I15,/,
     *        2X,'XSECT ',2X,4F15.3,/,2X,'LBLF4 ',2X,4F15.3,15X,2I15,/,
     *        2X,'HIRAC1',2X,5F15.3,3I15)
  925 FORMAT ('0  * HIRAC1 *  AVERAGE WIDTH = ',F8.6,
     *        ',  AVERAGE ZETA = ',F8.6)
  930 FORMAT ('0 ********  HIRAC1  ********',I5,' STRENGTHS FOR',
     *        '  TRANSITIONS WITH UNKNOWN EPP FOR MOL =',I5,
     *        ' SET TO ZERO')
 935  FORMAT (/,'0     + OTHER timing includes:',/,
     *          '0             In LINF4:  MOLEC, BUFIN, BUFOUT, ',
     *          'NWDL, ENDFIL, and SHRINK',/,
     *          '0             In HIRAC:  LNCOR, XINT, SHAPEL, ',
     *          'SHAPEG, VERFN, MOLEC, and other loops and ',
     *          'file maintenance within HIRAC',/)
C
      END
      BLOCK DATA BHIRAC
C
      PARAMETER (NFPTS=2001,NFMX=1.3*NFPTS)
C
      COMMON /FNSH/ IFN,F1(NFMX),F2(NFMX),F3(NFMX),FG(NFMX),XVER(NFMX)
C
      DATA IFN / 0 /
C
      END

      SUBROUTINE RDLIN 1,3
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE RDLIN INPUTS LINE DATA FROM FILE LINFIL
C
      CHARACTER*8      HLINID,BMOLID,HID1
      CHARACTER*1 CNEGEPP(8)

      integer *4 molcnt,mcntlc,
     *           mcntnl,linmol,
     *           lincnt,ilinlc,ilinnl,irec,irectl
      real *4 sumstr,flinlo,flinhi
c
      COMMON /LINHDR/ HLINID(10),BMOLID(64),MOLCNT(64),MCNTLC(64),
     *                MCNTNL(64),SUMSTR(64),LINMOL,FLINLO,FLINHI,
     *                LINCNT,ILINLC,ILINNL,IREC,IRECTL,HID1(2),LSTWDL

      COMMON VNU(250),SP(250),ALFA0(250),EPP(250),MOL(250),HWHMS(250),
     *       TMPALF(250),PSHIFT(250),IFLG(250),SPPSP(250),RECALF(250),
     *       ZETAI(250),IZETA(250)

      dimension    amol(250)
      equivalence (mol(1),amol(1))

      common /rdlnpnl/ vmin,vmax,nrec,nwds
      integer *4 nrec,nwds,lnfl,leof,npnlhd

      common /rdlnbuf/ vlin(250),str(250),hw_f(250),e_low(250),
     *     mol_id(250),hw_s(250),hw_T(250),shft(250),jflg(250)
      dimension xmol(250)
      equivalence (vmin,rdpnl(1)),(mol_id(1),xmol(1))

      real *4 str,hw_f,e_low,xmol,hw_s,hw_T,shft,rdpnl(2),dum(2)
      integer *4 mol_id,jflg,n_one

      COMMON /XSUB/ VBOT,VTOP,VFT,LIMIN,ILO,IHI,IEOF,IPANEL,ISTOP,IDATA
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /IOU/ IOUT(250)
      common /eppinfo/ negepp_flag
      common /bufid2/ n_negepp(64),n_resetepp(64),xspace(4096),lstwdl2
      integer *4 negepp_flag,n_negepp,n_resetepp
      real *4 xspace
C

**************************************************************************
c
      data n_one/ 1/ npnlhd/ 6/


      lnfl = linfil
C
C     THERE ARE (LIMIN * 9) QUANTITIES READ IN:
C     VNU,SP,ALFA0,EPP,MOL,HWHMS,TMPALF,PSHIFT,IFLG
C
      ILNGTH = NLNGTH*LIMIN
      IDATA = 0
C
C     BUFFER PAST FILE HEADER if necessary
C
      IF (ILO.LE.0) THEN
         REWIND LNFL
         read (lnfl)    HLINID
         READ (HLINID(7),950) CNEGEPP
         IF (CNEGEPP(8).eq.'^') THEN
            read (lnfl) n_negepp,n_resetepp,xspace
         endif
      ENDIF
C
   10 CALL BUFINln (Lnfl,LEOF,rdpnl(1),npnlhd)
      IF (LEOF.EQ.0) THEN
         IF (NOPR.EQ.0) WRITE (IPR,900)
         IEOF = 1
         RETURN
      ENDIF
C
      IF (NREC.GT.LIMIN) STOP 'RDLIN; NREC GT LIMIN'
c
      IF (VMAX.LT.VBOT) THEN
         CALL BUFINln (Lnfl,LEOF,DUM(1),n_one)
         GO TO 10
      ENDIF
c
      CALL BUFINln (Lnfl,LEOF,vlin(1),NWDS)
c
c     precision conversion occurs here:
c     incoming on right: vlin is real*8, others real*4 and integer*4
c
      do 15 i=1,nrec

         IFLG(i)  = jflg(i)
         VNU(i)   = vlin(i)
         SP(i)    = str(i)
         ALFA0(i) = hw_f(i)
         EPP(i)   = e_low(i)
         if (iflg(i) .ge.  0) then
            MOL(i)   = mol_id(i)
         else
            amol(i)  = xmol(i)
         endif
         HWHMS(i) = hw_s(i)
         TMPALF(i)= hw_T(i)
         PSHIFT(i)= shft(i)

 15   continue

      IF ((ILO.EQ.0).AND.(VMIN.GT.VBOT)) WRITE (IPR,905)
      ILO = 1
C
      IJ = 0
      DO 20 I = 1, NREC
         IF (IFLG(I).GE.0) THEN
            IJ = IJ+1
            IOUT(IJ) = I
         ENDIF
   20 CONTINUE
C
      DO 30 I = IJ+1, 250
         IOUT(I) = NREC
   30 CONTINUE
C
      IF (VMIN.LT.VBOT) THEN
         DO 40 J = 1, IJ
            I = IOUT(J)
            ILO = J
            IF (VNU(I).GE.VBOT) GO TO 50
   40    CONTINUE
      ENDIF
C
   50 CONTINUE
      DO 60 J = ILO, IJ
         I = IOUT(J)
         IF (MOL(I).GT.0) THEN
            IHI = J
            IF (VNU(I).GT.VTOP) GO TO 70
         ENDIF
   60 CONTINUE

c     the following test is to see if more data is required
c     idata = 1 means data requirements have been met

   70 IF (IHI.LT.IJ) IDATA = 1
C
      RETURN
C
  900 FORMAT ('  EOF ON LINFIL (MORE LINES MAY BE REQUIRED) ')
  905 FORMAT (
     *   ' FIRST LINE ON LINFIL USED (MORE LINES MAY BE REQUIRED) ')
 950  FORMAT (8a1)
C
      END

      SUBROUTINE LNCOR1 (NLNCR,IHI,ILO,MEFDP) 1,1
C
      IMPLICIT REAL*8           (V)
C
      CHARACTER*1 FREJ(250),HREJ,HNOREJ
      COMMON /RCNTRL/ ILNFLG
      COMMON VNU(250),S(250),ALFA0(250),EPP(250),MOL(250),HWHMS(250),
     *       TMPALF(250),PSHIFT(250),IFLG(250),SPPSP(250),RECALF(250),
     *       ZETAI(250),IZETA(250)
      COMMON /IOU/ IOUT(250)
      COMMON /MANE/ P0,TEMP0,NLAYRS,DVXM,H2OSLF,WTOT,ALBAR,ADBAR,AVBAR,
     *              AVFIX,LAYRFX,SECNT0,SAMPLE,DVSET,ALFAL0,AVMASS,
     *              DPTMIN,DPTFAC,ALTAV,AVTRAT,TDIFF1,TDIFF2,ALTD1,
     *              ALTD2,ANGLE,IANT,LTGNT,LH1,LH2,IPFLAG,PLAY,TLAY,
     *              EXTID(10)
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /XSUB/ VBOT,VTOP,VFT,DUM(7)
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /LBLF/ V1R4,V2R4,DVR4,NPTR4,BOUND4,R4(2502),RR4(2502)
      COMMON /CMSHAP/ HWF1,DXF1,NX1,N1MAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      COMMON /VOICOM/ AVRAT(102),CGAUSS(102),CF1(102),CF2(102),
     *                CF3(102),CER(102)
C
      PARAMETER (NTMOL=36,NSPECI=85)
C
      COMMON /ISVECT/ ISOVEC(NTMOL),ISO82(NSPECI),ISONM(NTMOL),
     *                SMASSI(NSPECI)
      COMMON /LNC1/ RHOSLF(NSPECI),ALFD1(NSPECI),SCOR(NSPECI),ALFMAX,
     *              BETACR,DELTMP,DPTFC,DPTMN,XKT,NMINUS,NPLUS,NLIN,
     *              LINCNT,NCHNG,SUMALF,SUMZET,TRATIO,RHORAT,PAVP0,
     *              PAVP2,RECTLC,TMPDIF,ILC
      DIMENSION MEFDP(64),FILHDR(2),AMOL(250),SP(250)
      DIMENSION A(4),B(4),TEMPLC(4)
C
      EQUIVALENCE (MOL(1),AMOL(1)) , (      EQUIVALENCE (IHIRAC,FSCDID(1)) , (ILBLF4,FSCDID(2)),
     *            (IXSCNT,FSCDID(3)) , (IAERSL,FSCDID(4)),
     *            (JRAD,FSCDID(9)) , (XID(1),FILHDR(1))
C
C     TEMPERATURES FOR LINE COUPLING COEFFICIENTS
C
      DATA TEMPLC / 200.0,250.0,296.0,340.0 /
      DATA HREJ /'0'/,HNOREJ /'1'/
      DATA NWDTH /0/
C
      NLNCR = NLNCR+1
      IF (NLNCR.EQ.1) THEN
C
         XKT0 = TEMP0/RADCN2
         XKT = TAVE/RADCN2
         DELTMP = ABS(TAVE-TEMP0)
         BETACR = (1./XKT)-(1./XKT0)
         CALL MOLEC (2,SCOR,RHOSLF,ALFD1)
C
         TRATIO = TAVE/TEMP0
         RHORAT = (PAVE/P0)*(TEMP0/TAVE)
C
         PAVP0 = PAVE/P0
         PAVP2 = PAVP0*PAVP0
C
C     FIND CORRECT TEMPERATURE AND INTERPOLATE FOR Y AND G
C
         DO 10 IL = 1, 3
            ILC = IL
            IF (TAVE.LT.TEMPLC(ILC+1)) GO TO 20
   10    CONTINUE
   20    IF (ILC.EQ.4) ILC = 3
C
         RECTLC = 1.0/(TEMPLC(ILC+1)-TEMPLC(ILC))
         TMPDIF = TAVE-TEMPLC(ILC)
C
      ENDIF
C
      IF (ILNFLG.EQ.2) READ(15)(FREJ(J),J=ILO,IHI)
C
      DO 30 J = ILO, IHI
         YI = 0.
         GI = 0.
         GAMMA1 = 0.
         GAMMA2 = 0.
         I = IOUT(J)
         IFLAG = IFLG(I)
         M = MOD(MOL(I),100)
C
C     ISO=(MOD(MOL(I),1000)-M)/100   IS PROGRAMMED AS:
C
         ISO = MOD(MOL(I),1000)/100
         ILOC = ISOVEC(M)+ISO
C
         IF ((M.GT.NMOL).OR.(M.LT.1)) GO TO 25
C
         MOL(I) = M
         SUI = S(I)*WK(M)
C
         IF (SUI.EQ.0.) GO TO 25
C
         NLIN = NLIN+1
C
C     Y'S AND G'S ARE STORED IN I+1 POSTION OF VNU,S,ALFA0,EPP...
C       A(1-4),  B(1-4) CORRESPOND TO TEMPERATURES TEMPLC(1-4) ABOVE
C
         IF (IFLAG.EQ.1.OR.IFLAG.EQ.3) THEN
            A(1) = VNU(I+1)
            B(1) = S(I+1)
            A(2) = ALFA0(I+1)
            B(2) = EPP(I+1)
            A(3) = AMOL(I+1)
            B(3) = HWHMS(I+1)
            A(4) = TMPALF(I+1)
            B(4) = PSHIFT(I+1)
C
C     CALCULATE SLOPE AND EVALUATE
C
            SLOPEA = (            SLOPEB = (C
            IF (IFLAG.EQ.1) THEN
               YI = A(ILC)+SLOPEA*TMPDIF
               GI = B(ILC)+SLOPEB*TMPDIF
            ELSE
               GAMMA1 = A(ILC)+SLOPEA*TMPDIF
               GAMMA2 = B(ILC)+SLOPEB*TMPDIF
            ENDIF
         ENDIF
C
C     IFLAG = 2 IS RESERVED FOR LINE COUPLING COEFFICIENTS ASSOCIATED
C               WITH AN EXACT TREATMENT (NUMERICAL DIAGONALIZATION)
C
C     IFLAG = 3 TREATS LINE COUPLING IN TERMS OF REDUCED WIDTHS
C
         VNU(I) = VNU(I)+RHORAT*PSHIFT(I)
C
C     TEMPERATURE CORRECTION OF THE HALFWIDTH
C     SELF TEMP DEPENDENCE TAKEN THE SAME AS FOREIGN
C
         TMPCOR = TRATIO**TMPALF(I)
         ALFA0I = ALFA0(I)*TMPCOR
         HWHMSI = HWHMS(I)*TMPCOR
         ALFL = ALFA0I*(RHORAT-RHOSLF(ILOC))+HWHMSI*RHOSLF(ILOC)
C
         IF (IFLAG.EQ.3) ALFL = ALFL*(1.0-GAMMA1*PAVP0-GAMMA2*PAVP2)
C
         ALFAD = VNU(I)*ALFD1(ILOC)
         ZETA = ALFL/(ALFL+ALFAD)
         ZETAI(I) = ZETA
         FZETA = 100.*ZETA
         IZ = FZETA + ONEPL
         IZETA(I) = IZ
         ZETDIF = FZETA - FLOAT(IZ-1)
         ALFV = (AVRAT(IZ)+ZETDIF*(AVRAT(IZ+1)-AVRAT(IZ)))*(ALFL+ALFAD)
         IF (ALFV.LT.DV) THEN
            ALFV = DV
            NMINAD = 1
         ELSE
            NMINAD = 0
         ENDIF
         IF (ALFV.GT.ALFMAX) THEN
            ALFV = ALFMAX
            NPLSAD = 1
         ELSE
            NPLSAD = 0
         ENDIF
C
         IF (HWF3*ALFV+VNU(I) .LT. VFT) GO TO 25
C
         RECALF(I) = 1./ALFV
C
C     TREAT TRANSITIONS WITH UNKNOWN EPP AS SPECIAL CASE
C
         IF (EPP(I).LT.0.) THEN
            IF (DELTMP.LE.10.) THEN
               EPP(I) = 0.
            ELSE
               MEFDP(M) = MEFDP(M)+1
               GO TO 25
            ENDIF
         ENDIF
         IF (JRAD.NE.1) SUI = SUI*SCOR(ILOC)*
     *                        EXP(-EPP(I)*BETACR)*(1.+EXP(-VNU(I)/XKT))
         IF (JRAD.EQ.1) SUI = SUI*SCOR(ILOC)*VNU(I)*
     *                        EXP(-EPP(I)*BETACR)*(1.-EXP(-VNU(I)/XKT))
C
         IF (IFLAG.EQ.0) THEN
            IF (ILNFLG.LE.1) THEN
               FREJ(J) = HNOREJ
               SPEAK = SUI*RECALF(I)
               IF (DVR4.LE.0.) THEN
                  IF (SPEAK.LE.DPTMN) THEN
                     FREJ(J) = HREJ
                     GO TO 25
                  ENDIF
               ELSE
                  JJ = (VNU(I)-V1R4)/DVR4+1.
                  JJ = MAX(JJ,1)
                  JJ = MIN(JJ,NPTR4)
                  IF (SPEAK.LE.(DPTMN+DPTFC*R4(JJ))) THEN
                     FREJ(J) = HREJ
                     GO TO 25
                  ENDIF
               ENDIF
            ELSE
C      "ELSE" IS TRUE WHEN "ILNFLG" EQUALS 2
C
               IF (FREJ(J).EQ.HREJ) GO TO 25
            ENDIF
         ENDIF
C
         NMINUS = NMINUS+NMINAD
         NPLUS = NPLUS+NPLSAD
         SUMALF = SUMALF+ALFV
         SUMZET = SUMZET+ZETA
         LINCNT = LINCNT+1
C
         SP(I) = SUI*(1.+GI*PAVP2)
         SPPI = SUI*YI*PAVP0
         SPPSP(I) = SPPI/SP(I)
C
         GO TO 30
C
   25    SP(I) = 0.
         SPPSP(I) = 0.
C
   30 CONTINUE
C
      NCHNG = NMINUS+NPLUS
      IF (ILNFLG.EQ.1) WRITE(15)(FREJ(J),J=ILO,IHI)
C
      RETURN
C
      END

      SUBROUTINE CNVFNV (VNU,SP,SPPSP,RECALF,R1,R2,R3,F1,F2,F3,FG, 1,2
     *                   XVER,ZETAI,IZETA)
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE CNVFNV PERFORMS THE CONVOLUTION OF THE LINE DATA WITH
C     THE VOIGT LINE SHAPE (APPROXIMATED)
C
C     CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C
C     IMPLEMENTATION:    R.D. WORSHAM
C
C     ALGORITHM REVISIONS:    S.A. CLOUGH
C     R.D. WORSHAM
C     J.L. MONCET
C
C
C     ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC.
C     840 MEMORIAL DRIVE,  CAMBRIDGE, MA   02139
C
C     ------------------------------------------------------------------
C
C     WORK SUPPORTED BY:    THE ARM PROGRAM
C     OFFICE OF ENERGY RESEARCH
C     DEPARTMENT OF ENERGY
C
C
C     SOURCE OF ORIGINAL ROUTINE:    AFGL LINE-BY-LINE MODEL
C
C     FASCOD3
C
C
C     CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /XSUB/ VBOT,VTOP,VFT,LIMIN,ILO,IHI,IEOF,IPANEL,ISTOP,IDATA
      COMMON /XPANEL/ V1P,V2P,DVP,NLIM,RMIN,RMAX,NPNLXP,NSHIFT,NPTS
      COMMON /CMSHAP/ HWF1,DXF1,NX1,N1MAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      COMMON /SUB1/ MAX1,MAX2,MAX3,NLIM1,NLIM2,NLIM3,NLO,NHI,DVR2,DVR3,
     *              N1R1,N2R1,N1R2,N2R2,N1R3,N2R3
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,TF4,TF4RDF,TF4CNV,
     *               TF4PNL,TXS,TXSRDF,TXSCNV,TXSPNL
      COMMON /VOICOM/ AVRAT(102),CGAUSS(102),CF1(102),CF2(102),
     *                CF3(102),CER(102)
      COMMON /IOU/ IOUT(250)
C
      DIMENSION VNU(*),SP(*),SPPSP(*),RECALF(*)
      DIMENSION R1(*),R2(*),R3(*)
      DIMENSION F1(*),F2(*),F3(*)
      DIMENSION FG(*),XVER(*)
      DIMENSION IZETA(*),ZETAI(*)
C
      CALL CPUTIM (TIME0)
C
      CLC1 = 4./(FLOAT(NX1-1))
      CLC2 = 16./(FLOAT(NX2-1))
      CLC3 = 64./(FLOAT(NX3-1))
      WAVDXF = DV/DXF1
      HWDXF = HWF1/DXF1
      CONF2 = DV/DVR2
      CONF3 = DV/DVR3
      ILAST = ILO-1
C
      IF (ILO.LE.IHI) THEN
         DO 30 J = ILO, IHI
            I = IOUT(J)
            IF (SP(I).NE.0.) THEN
               DEPTHI = SP(I)*RECALF(I)
               IZM = IZETA(I)
               ZETDIF = 100.*ZETAI(I)-FLOAT(IZM-1)
               STRF1 = DEPTHI*(CF1(IZM)+ZETDIF*(CF1(IZM+1)-CF1(IZM)))
               STRF2 = DEPTHI*(CF2(IZM)+ZETDIF*(CF2(IZM+1)-CF2(IZM)))
               STRF3 = DEPTHI*(CF3(IZM)+ZETDIF*(CF3(IZM+1)-CF3(IZM)))
               STRD = DEPTHI*(CGAUSS(IZM)+ZETDIF*(CGAUSS(IZM+1)-
     *               CGAUSS(IZM)))
               STRVER = DEPTHI*(CER(IZM)+ZETDIF*(CER(IZM+1)-CER(IZM)) )
C
               ZSLOPE = RECALF(I)*WAVDXF
               ZINT = (VNU(I)-VFT)/DV
               BHWDXF = HWDXF/ZSLOPE
               JMAX1 = ZINT+BHWDXF+1.5
               IF (JMAX1.GT.MAX1) THEN
                  ILAST = J-1
                  IPANEL = 1
                  GO TO 40
               ENDIF
               JMIN1 = ZINT-BHWDXF+1.5
               RSHFT = 0.5
               IF (ZINT.LT.0.0) RSHFT = -RSHFT
               J2SHFT = ZINT*(1.-CONF2)+RSHFT
               J3SHFT = ZINT*(1.-CONF3)+RSHFT
               JMIN2 = JMIN1-J2SHFT
               JMIN3 = JMIN1-J3SHFT
               ZF1L = (FLOAT(JMIN1-2)-ZINT)*ZSLOPE
               ZF2L = (FLOAT(JMIN2-2)-ZINT*CONF2)*ZSLOPE
               ZF3L = (FLOAT(JMIN3-2)-ZINT*CONF3)*ZSLOPE
               ZF1 = ZF1L
               ZF2 = ZF2L
               ZF3 = ZF3L
               DO 10 J1 = JMIN1, JMAX1
                  J2 = J1-J2SHFT
                  J3 = J1-J3SHFT
                  ZF3 = ZF3+ZSLOPE
                  ZF2 = ZF2+ZSLOPE
                  ZF1 = ZF1+ZSLOPE
                  IZ3 = ABS(ZF3)+1.5
                  IZ2 = ABS(ZF2)+1.5
                  IZ1 = ABS(ZF1)+1.5
                  R3(J3) = R3(J3)+STRF3*F3(IZ3)
                  R2(J2) = R2(J2)+STRF2*F2(IZ2)
                  R1(J1) = R1(J1)+STRF1*F1(IZ1)+STRD*FG(IZ1)+STRVER*XVER
     *               (IZ1)
   10          CONTINUE
C
               IF (SPPSP(I).NE.0.) THEN
C
C                 THE FOLLOWING DOES LINE COUPLING
C
C                 SPPSP(I) = SPP(I)/SP(I)
C
                  DPTRAT = SPPSP(I)
                  STRF3 = STRF3*CLC3*DPTRAT
                  STRF2 = STRF2*CLC2*DPTRAT
                  STRF1 = STRF1*CLC1*DPTRAT
                  STRD = STRD*CLC1*DPTRAT
                  STRVER = STRVER*CLC1*DPTRAT
C
C
                  DO 20 J1 = JMIN1, JMAX1
                     J2 = J1-J2SHFT
                     J3 = J1-J3SHFT
                     ZF3L = ZF3L+ZSLOPE
                     ZF2L = ZF2L+ZSLOPE
                     ZF1L = ZF1L+ZSLOPE
                     IZ3 = ABS(ZF3L)+1.5
                     IZ2 = ABS(ZF2L)+1.5
                     IZ1 = ABS(ZF1L)+1.5
                     R3(J3) = R3(J3)+STRF3*F3(IZ3)*ZF3L
                     R2(J2) = R2(J2)+STRF2*F2(IZ2)*ZF2L
                     R1(J1) = R1(J1)+(STRF1*F1(IZ1)+STRD*FG(IZ1)+STRVER*
     *                  XVER(IZ1))*ZF1L
   20             CONTINUE
C
               ENDIF
            ENDIF
C
   30    CONTINUE
         ILAST = IHI
C
C        IDATA=0 FOR MORE DATA REQUIRED
C        IDATA=1 IF NO MORE DATA REQUIRED
C
         IPANEL = IDATA
      ELSE
         IPANEL = 1
      ENDIF
C
   40 ILO = ILAST+1
      CALL CPUTIM (TIME)
      TIMCNV = TIMCNV+TIME-TIME0
      RETURN
C
      END

      SUBROUTINE PANEL (R1,R2,R3,KFILE,JRAD,IENTER) 1,7
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE PANEL COMBINES RESULTS OF R3, R2, AND R1 INTO R1 ARRAY
C     AND OUTPUTS THE ARRAY R1
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C               LAST MODIFICATION:    28 AUGUST 1992
C
C                  IMPLEMENTATION:    R.D. WORSHAM
C
C             ALGORITHM REVISIONS:    S.A. CLOUGH
C                                     R.D. WORSHAM
C                                     J.L. MONCET
C
C
C                     ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC.
C                     840 MEMORIAL DRIVE,  CAMBRIDGE, MA   02139
C
C----------------------------------------------------------------------
C
C               WORK SUPPORTED BY:    THE ARM PROGRAM
C                                     OFFICE OF ENERGY RESEARCH
C                                     DEPARTMENT OF ENERGY
C
C
C      SOURCE OF ORIGINAL ROUTINE:    AFGL LINE-BY-LINE MODEL
C
C                                             FASCOD3
C
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /XSUB/ VBOT,VTOP,VFT,LIMIN,ILO,IHI,IEOF,IPANEL,ISTOP,IDATA
      COMMON /SUB1/ MAX1,MAX2,MAX3,NLIM1,NLIM2,NLIM3,NLO,NHI,DVR2,DVR3,
     *              N1R1,N2R1,N1R2,N2R2,N1R3,N2R3
      COMMON /XPANEL/ V1P,V2P,DVP,NLIM,RMIN,RMAX,NPNLXP,NSHIFT,NPTS
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,TF4,TF4RDF,TF4CNV,
     *               TF4PNL,TXS,TXSRDF,TXSCNV,TXSPNL
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KDUMM,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /IODFLG/ DVOUT
      DIMENSION R1(*),R2(*),R3(*)
      DIMENSION PNLHDR(2)
C
      EQUIVALENCE (V1P,PNLHDR(1))
C
      CALL CPUTIM (TIME0)
      X00 = -7./128.
      X01 = 105./128.
      X02 = 35./128.
      X03 = -5./128.
      X10 = -1./16.
      X11 = 9./16.
      ISTOP = 0
C
C     Test for last panel.  If last, set the last point to one point
C     greater than V1 specified on TAPE5 (to ensure last point for
C     every layer is the same)
C
      IF ((VFT+(NHI-1)*DVP).GT.V2) THEN
         NHI = (V2-VFT)/DVP + 1.
         V2P = VFT+FLOAT(NHI-1)*DVP
         IF (V2P.LT.V2) THEN
            V2P = V2P+DVP
            NHI = NHI+1
         ENDIF
         ISTOP = 1
      ELSE
         V2P = VFT+FLOAT(NHI-1)*DV
      ENDIF
      NLIM = NHI-NLO+1
      V1P = VFT+FLOAT(NLO-1)*DV
C
      LIMLO = N1R2
      IF (N1R2.EQ.1) LIMLO = LIMLO+4
      LIMHI = (NHI/4)+1
C
      DO 10 J = LIMLO, LIMHI, 4
         J3 = (J-1)/4+1
         R2(J) = R2(J)+R3(J3)
         R2(J+1) = R2(J+1)+X00*R3(J3-1)+X01*R3(J3)+X02*R3(J3+1)+
     *             X03*R3(J3+2)
         R2(J+2) = R2(J+2)+X10*(R3(J3-1)+R3(J3+2))+
     *             X11*(R3(J3)+R3(J3+1))
         R2(J+3) = R2(J+3)+X03*R3(J3-1)+X02*R3(J3)+X01*R3(J3+1)+
     *             X00*R3(J3+2)
   10 CONTINUE
      DO 20 J = NLO, NHI, 4
         J2 = (J-1)/4+1
         R1(J) = R1(J)+R2(J2)
         R1(J+1) = R1(J+1)+X00*R2(J2-1)+X01*R2(J2)+X02*R2(J2+1)+
     *             X03*R2(J2+2)
         R1(J+2) = R1(J+2)+X10*(R2(J2-1)+R2(J2+2))+
     *             X11*(R2(J2)+R2(J2+1))
         R1(J+3) = R1(J+3)+X03*R2(J2-1)+X02*R2(J2)+X01*R2(J2+1)+
     *             X00*R2(J2+2)
   20 CONTINUE
C
C     IN THE FOLLOWING SECTION THE ABSORPTION COEFFICIENT IS MULTIPIIED
C     BY THE RADIATION FIELD
C
      IF (JRAD.EQ.0) THEN
C
         XKT = TAVE/RADCN2
         VI = V1P-DV
         VITST = VI
         RDLAST = -1.
         NPTSI1 = NLO-1
         NPTSI2 = NLO-1
C
   30    NPTSI1 = NPTSI2+1
C
         VI = VFT+FLOAT(NPTSI1-1)*DV
         RADVI = RADFNI(VI,DV,XKT,VITST,RDEL,RDLAST)
C
         NPTSI2 = (VITST-VFT)/DV+1.001
         NPTSI2 = MIN(NPTSI2,NHI)
C
         DO 40 I = NPTSI1, NPTSI2
C           VI = VI+DV
            R1(I) = R1(I)*RADVI
            RADVI = RADVI+RDEL
   40    CONTINUE
C
         IF (NPTSI2.LT.NHI) GO TO 30
C
      ENDIF
C
C     V1P IS FIRST FREQ OF PANEL
C     V2P IS LAST FREQ OF PANEL
C
C     If DVOUT (carried in from COMMON BLOCK /IODFLG/) is zero,
C     then no interpolation is necessary.  For nozero DVOUT
C     (in case of IOD=1,3), call PNLINT.
C
      IF (DVOUT.EQ.0.) THEN
         CALL BUFOUT (KFILE,PNLHDR(1),NPHDRF)
         CALL BUFOUT (KFILE,R1(NLO),NLIM)
C
         IF (NPTS.GT.0) CALL R1PRNT (V1P,DVP,NLIM,R1,NLO,NPTS,KFILE,
     *                               IENTER)
      ELSE
         CALL PNLINT (R1(NLO),IENTER)
      ENDIF
C
      VFT = VFT+FLOAT(NLIM1-1)*DV
      IF (ISTOP.NE.1) THEN
         DO 50 J = NLIM1, MAX1
            R1(J-NLIM1+1) = R1(J)
   50    CONTINUE
         DO 60 J = MAX1-NLIM1+2, MAX1
            R1(J) = 0.
   60    CONTINUE
         DO 70 J = NLIM2, MAX2
            R2(J-NLIM2+1) = R2(J)
   70    CONTINUE
         DO 80 J = MAX2-NLIM2+2, MAX2
            R2(J) = 0.
   80    CONTINUE
         DO 90 J = NLIM3, MAX3
            R3(J-NLIM3+1) = R3(J)
   90    CONTINUE
         DO 100 J = MAX3-NLIM3+2, MAX3
            R3(J) = 0.
  100    CONTINUE
         NLO = NSHIFT+1
      ENDIF
      CALL CPUTIM (TIME)
      TIMPNL = TIMPNL+TIME-TIME0
C
      RETURN
C
      END

      SUBROUTINE PNLINT (R1,IENTER) 1,8
C
      IMPLICIT REAL*8           (V)
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C               LAST MODIFICATION:    6 May 1994 pdb
C               LAST MODIFICATION:    9 APRIL 1991
C
C                  IMPLEMENTATION:    R.D. WORSHAM
C
C                       ALGORITHM:    R.D. WORSHAM
C                                     S.A. CLOUGH
C                                     J.L. MONCET
C
C
C                     ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC.
C                     840 MEMORIAL DRIVE,  CAMBRIDGE, MA   02139
C
C----------------------------------------------------------------------
C
C               WORK SUPPORTED BY:    THE ARM PROGRAM
C                                     OFFICE OF ENERGY RESEARCH
C                                     DEPARTMENT OF ENERGY
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZ1,PZ2,TZ1,TZ2,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /XSUB/ VBOT,VTOP,VFT,LIMIN,ILO,IHI,IEOF,IPANEL,ISTOP,IDATA
      COMMON /XPANEL/ V1P,V2P,DVP,NLIM,RMIN,RMAX,NPNLXP,NSHIFT,NPTS
      COMMON /XPANO/ V1PO,V2PO,DVPO,NLIM2,RMINO,RMAXO,NPNXPO
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /R1SAV/ R1OUT(2410)
      COMMON /IODFLG/ DVOUT
C
C     SAVE statement to preserve value of NLIM1 when returning to
C     subroutine
C
      SAVE NLIM1
C
      DIMENSION A1(0:100),A2(0:100),A3(0:100),A4(0:100)
      DIMENSION R1(*)
      DIMENSION PNLHDR(2),PNLHDO(2)
C
      EQUIVALENCE (PNLHDR(1),V1P),(PNLHDO(1),V1PO)
C
      DATA LIMOUT / 2400 /
C
C     The data for NM1 and N0 are used instead of directly inserting
C     '-1' and '0' into the subscripts for R1 (lines 1158-9) to avoid
C     compiler warnings 'CONSTANT SUBSCRIPT IS OUT OF BOUNDS'
C
      DATA NM1/-1/,N0/0/
C
C      CALL CPUTIM (TIME)
C      WRITE (IPR,900) TIME
C
C     The value of DVOUT is carried from COMMON BLOCK /IODFLG/
C
      NPNXPO = NPNLXP
      DVPO = DVOUT
      NPPANL = 1
      ATYPE = 9.999E09
      IF (DVP.EQ.DVOUT) ATYPE = 0.
      IF (DVOUT.GT.DVP) ATYPE = DVP/(DVOUT-DVP)+0.5
      IF (DVOUT.LT.DVP) ATYPE = -DVOUT/(DVP-DVOUT)-0.5
      IF (ABS(DVOUT-DVP).LT.1.E-8) ATYPE = 0.
C
C
C     1/1 ratio only
C
      IF (ATYPE.EQ.0.) THEN
         CALL PMNMX (R1,NLIM,RMIN,RMAX)
         CALL BUFOUT (KFILE,PNLHDR(1),NPHDRF)
         CALL BUFOUT (KFILE,R1(1),NLIM)
C
         IF (NPTS.GT.0) CALL R1PRNT (V1P,DVP,NLIM,R1,1,NPTS,KFILE,
     *                               IENTER)
C
         GO TO 40
      ENDIF
C
C     All ratios except 1/1
C
      DO 10 JP = 0, 100
         APG = JP
         P = 0.01*APG
C
C        Constants for the Lagrange 4 point interpolation
C
         A1(JP) = -P*(P-1.0)*(P-2.0)/6.0
         A2(JP) = (P**2-1.0)*(P-2.0)*0.5
         A3(JP) = -P*(P+1.0)*(P-2.0)*0.5
         A4(JP) = P*(P**2-1.0)/6.0
   10 CONTINUE
C
C     Zero point of first panel
C
      IF (V1PO.EQ.0.0) THEN
         R1(NM1) = R1(1)
         R1(N0) = R1(1)
         V1PO = V1P
         NLIM1 = 1
      ENDIF
C
C     Add points to end of last panel for interpolation
C
      IF (ISTOP.EQ.1) THEN
         R1(NLIM+1) = R1(NLIM)
         R1(NLIM+2) = R1(NLIM)
         NLIM = NLIM + 2
         V2P = V2P + 2.*DVP
      ENDIF
C
C     *** BEGINNING OF LOOP THAT DOES INTERPOLATION  ***
C
   20 CONTINUE
C
C     Determine potential last point for the outgoing panel (2400 pts.)
C
      V2PO = V1PO+FLOAT(LIMOUT)*DVOUT
C
      IF (V2P.LE.V2PO+DVP.AND.ILAST.EQ.0.AND.NPPANL.LE.0) GO TO 40
C
C     Four possibilities:
C       1a.  Last panel to be done, set the appropriate
C            final output point and total number of points in panel.
C
C       1b.  Would be last panel, but need more incoming points to
C            fill panel.
C
C       2a.  More panels to come, set last point in panel.
C
C       2b.  More panels to come, but need more incoming points to
C            fill panel.
C
      IF ((V1PO+(LIMOUT-1)*DVOUT).GT.V2) THEN
         NLIM2 = (V2-V1PO)/DVOUT + 1.
         V2PO = V1PO+FLOAT(NLIM2-1)*DVOUT
         IF (V2PO.LT.V2) THEN
            V2PO = V2PO+DVOUT
            NLIM2 = NLIM2+1
         ENDIF
         ILAST = 1
         IF (V2PO.GT.V2P-DVP) THEN
            NLIM2 = ((V2P-DVP-V1PO)/DVOUT) + 1.
            V2PO = V1PO+FLOAT(NLIM2-1)*DVOUT
            IF (V2PO+DVOUT.LT.V2P-DVP) THEN
               NLIM2 = NLIM2+1
               V2PO = V2PO+DVOUT
            ENDIF
            ILAST = 0
         ENDIF
      ELSE
         NLIM2 = LIMOUT
         V2PO = V1PO+FLOAT(NLIM2-1)*DVOUT
         IF (V2PO.GT.V2P-DVP) THEN
            NLIM2 = ((V2P-DVP-V1PO)/DVOUT) + 1.
            V2PO = V1PO+FLOAT(NLIM2-1)*DVOUT
            IF (V2PO+DVOUT.LT.V2P-DVP) THEN
               NLIM2 = NLIM2+1
               V2PO = V2PO+DVOUT
            ENDIF
         ENDIF
         ILAST = 0
      ENDIF
C
      RATDV = DVOUT/DVP
C
C     FJJ is offset by 2. for rounding purposes
C
      FJ1DIF = (V1PO-V1P)/DVP+1.+2.
C
C     Interpolate R1 to DVOUT
C
      DO 30 II = NLIM1, NLIM2
         FJJ = FJ1DIF+RATDV*FLOAT(II-1)
         JJ  = IFIX(FJJ)-2
         JP  = (FJJ-FLOAT(JJ))*100.-199.5
         R1OUT(II) = A1(JP)*R1(JJ-1)+A2(JP)*R1(JJ)+A3(JP)*R1(JJ+1)+
     *               A4(JP)*R1(JJ+2)
   30 CONTINUE
C
C     Two possibilities:
C       1.  Buffer out whole panel (NLIM2 = 2400) or the remaining
C           interpolated points
C
C       2.  Return to PANEL to obtain more incoming points to fill
C           outgoing panel
C
      IF (NLIM2.EQ.LIMOUT.OR.ILAST.EQ.1) THEN
         CALL PMNMX (R1OUT,NLIM2,RMINO,RMAXO)
         CALL BUFOUT (KFILE,PNLHDO(1),NPHDRF)
         CALL BUFOUT (KFILE,R1OUT(1),NLIM2)
         IF (NPTS.GT.0) CALL R1PRNT (V1PO,DVOUT,NLIM2,R1OUT,1,NPTS,
     *        KFILE,IENTER)
         NLIM1 = 1
         NPPANL = 0
         V1PO = V2PO+DVOUT
         IF ((V1PO+FLOAT(LIMOUT)*DVOUT).GT.(V2P-DVP)) NPPANL = 1
      ELSE
         NLIM1 = NLIM2+1
         NPPANL = -1
      ENDIF
C
C     If not at last point, continue interpolation
C
      IF (ILAST.NE.1) GO TO 20
C
C     Reset variables
C
      V1PO = 0.0
      NPPANL = 1
   40 CONTINUE
C
C      CALL CPUTIM (TIME1)
C      TIM = TIME1-TIME
C      WRITE (IPR,905) TIME1,TIM
C
      RETURN
C
C  900 FORMAT ('0 THE TIME AT THE START OF PNLINT IS ',F12.3)
C  905 FORMAT ('0 THE TIME AT THE END OF PNLINT IS ',F12.3/F12.3,
C     *   ' SECS WERE REQUIRED FOR THIS INTERPOLATION ')
C
      END

      SUBROUTINE PMNMX (R1,NLIM,RMIN,RMAX) 2
C
      DIMENSION R1(NLIM)
C
      RMIN = R1(1)
      RMAX = R1(1)
C
      DO 10 I = 2, NLIM
         RMIN = MIN(RMIN,R1(I))
         RMAX = MAX(RMAX,R1(I))
   10 CONTINUE
C
      RETURN
C
      END

      SUBROUTINE SHAPEL (F1,F2,F3) 1
C
C     SUBROUTINE SHAPEL CONSTRUCTS THE SUB-FUNCTIONS FOR THE
C     LORENTZ LINE SHAPE
C
      COMMON /CMSHAP/ HWF1,DXF1,NX1,N1MAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      DIMENSION F1(*),F2(*),F3(*)
C
      XLORNZ(XSQ) = 1./(1.+XSQ)
      Q1FN(XSQ) = A1+B1*XSQ
      Q2FN(XSQ) = A2+B2*XSQ
      Q3FN(XSQ) = A3+B3*XSQ
C
      A(Z0) = (1.+2.*Z0*Z0)/(1.+Z0*Z0)**2
      B(Z0) = -1./(1.+Z0*Z0)**2
      RECPI = 1./(2.*ASIN(1.))
      TOTAL = 0.
      A1 = A(HWF1)
      B1 = B(HWF1)
C
      A2 = A(HWF2)
      B2 = B(HWF2)
C
      A3 = A(HWF3)
      B3 = B(HWF3)
C
      DO 10 I = 1, N1MAX
         F1(I) = 0.
   10 CONTINUE
      F1(1) = RECPI*(XLORNZ(0.)-Q1FN(0.))
      SUM = F1(1)
      DO 20 JJ = 2, NX1
         X = FLOAT(JJ-1)*DXF1
         XSQ = X*X
         F1(JJ) = RECPI*(XLORNZ(XSQ)-Q1FN(XSQ))
         SUM = SUM+F1(JJ)*2.
   20 CONTINUE
      F1(NX1) = 0.
      SUM = SUM*DXF1
      TOTAL = TOTAL+SUM
C
      DO 30 I = 1, N2MAX
         F2(I) = 0.
   30 CONTINUE
      F2(1) = RECPI*(Q1FN(0.)-Q2FN(0.))
      SUM = F2(1)
      J1LIM = HWF1/DXF2+1.001
      DO 40 JJ = 2, J1LIM
         X = FLOAT(JJ-1)*DXF2
         XSQ = X*X
         F2(JJ) = RECPI*(Q1FN(XSQ)-Q2FN(XSQ))
         SUM = SUM+F2(JJ)*2.
   40 CONTINUE
      J1LIMP = J1LIM+1
      DO 50 JJ = J1LIMP, NX2
         X = FLOAT(JJ-1)*DXF2
         XSQ = X*X
         F2(JJ) = RECPI*(XLORNZ(XSQ)-Q2FN(XSQ))
         SUM = SUM+F2(JJ)*2.
   50 CONTINUE
      F2(NX2) = 0.
      SUM = SUM*DXF2
      TOTAL = TOTAL+SUM
C
      DO 60 I = 1, N3MAX
         F3(I) = 0.
   60 CONTINUE
      F3(1) = RECPI*(Q2FN(0.)-Q3FN(0.))
      SUM = F3(1)
      J2LIM = HWF2/DXF3+1.001
      DO 70 JJ = 2, J2LIM
         X = FLOAT(JJ-1)*DXF3
         XSQ = X*X
         F3(JJ) = RECPI*(Q2FN(XSQ)-Q3FN(XSQ))
         SUM = SUM+F3(JJ)*2.
   70 CONTINUE
      J2LIMP = J2LIM+1
      DO 80 JJ = J2LIMP, NX3
         X = FLOAT(JJ-1)*DXF3
         XSQ = X*X
         F3(JJ) = RECPI*(XLORNZ(XSQ)-Q3FN(XSQ))
         SUM = SUM+F3(JJ)*2.
   80 CONTINUE
      SUM = SUM*DXF3
      TOTAL = TOTAL+SUM
C
      RETURN
C
      END

      SUBROUTINE SHAPEG (FG) 3
C
C     SUBROUTINE SHAPEG CONSTRUCTS THE FUNCTION FOR THE DOPPLER PROFILE
C
      COMMON /CMSHAP/ HWF1,DXF1,NX1,N1MAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      DIMENSION FG(*)
C
      FGAUSS(XSQ) = EXP(-FLN2*XSQ)
      FLN2 = ALOG(2.)
      RECPI = 1./(2.*ASIN(1.))
      FGNORM = SQRT(FLN2*RECPI)
      TOTAL = 0.
      DO 10 I = 1, N1MAX
         FG(I) = 0.
   10 CONTINUE
      FG(1) = FGNORM*FGAUSS(0.)
      SUM = FG(1)
      DO 20 JJ = 2, NX1
         X = FLOAT(JJ-1)*DXF1
         XSQ = X*X
         FG(JJ) = FGNORM*FGAUSS(XSQ)
         SUM = SUM+FG(JJ)*2.
   20 CONTINUE
      FG(NX1) = 0.
      SUM = SUM*DXF1
      TOTAL = TOTAL+SUM
C
      RETURN
C
      END

      SUBROUTINE VERFN (XVER) 1
C
C     VERFN IS A FUNCTION USED TO IMPROVE THE ACCURACY OF THE
C     VOIGT APPROXIMATION IN THE DOMAIN 0 - 4 HALFWIDTHS.
C
      COMMON /CMSHAP/ HWF1,DXF1,NX1,N1MAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      DIMENSION XVER(*)
C
C     FOR ZETA = 0.3
C
      DATA CEXP,CE0,CE2,CE4 / 0.45,1.,-.20737285249,-.00872684335747 /
      DATA SUM0,SUM2,SUM4,SUMER / 4*0. /
C
      ERFN(Z2) = (1./(CE0+CE2+CE4))*(CE0+CE2*AE2*Z2+CE4*AE4*Z2*Z2)*XE0
C
      IF (SUMER.NE.0.) RETURN
      PI = 2.*ASIN(1.)
      SE0 = SQRT(CEXP/PI)
      AE0 = 1.
      AE2 = 2.*CEXP
      AE4 = AE2*AE2/3.
      FACTOR = 1.
C
      DO 10 I = 1, N1MAX
         XVER(I) = 0.
   10 CONTINUE
C
      DO 20 I = 1, N1MAX
         Z = DXF1*FLOAT(I-1)
         Z2 = Z*Z
         XE0 = SE0*EXP(-CEXP*Z2)
         XE2 = AE2*Z2*XE0
         XE4 = AE4*Z2*Z2*XE0
         XVER(I) = ERFN(Z2)
         SUM0 = SUM0+FACTOR*DXF1*XE0
         SUM2 = SUM2+FACTOR*DXF1*XE2
         SUM4 = SUM4+FACTOR*DXF1*XE4
         SUMER = SUMER+FACTOR*DXF1*XVER(I)
         FACTOR = 2.
   20 CONTINUE
C
CPRT  WRITE (IPR,900) Z,SUM0,SUM2,SUM4,SUMER
C
      RETURN
C
  900 FORMAT (F10.3,6F15.10)
C
      END
      BLOCK DATA VOICON
C
C     AVRAT CONTAINS THE PARAMTERS AS A FUNCTION OF ZETA USED TO
C     OBTAIN THE VOIGTS' WIDTH FROM THE LORENTZ AND DOPPLER WIDTHS.
C
C     COMMON /VOICOM/ AVRAT(102),
C    C                CGAUSS(102),CF1(102),CF2(102),CF3(102),CER(102)
C
      COMMON /VOICOM/ AV01(50),AV51(52),CG01(50),CG51(52),CFA01(50),
     *                CFA51(52),CFB01(50),CFB51(52),CFC01(50),
     *                CFC51(52),CER01(50),CER51(52)
C
       DATA AV01/
     *  .10000E+01,  .99535E+00,  .99073E+00,  .98613E+00,  .98155E+00,
     *  .97700E+00,  .97247E+00,  .96797E+00,  .96350E+00,  .95905E+00,
     *  .95464E+00,  .95025E+00,  .94589E+00,  .94156E+00,  .93727E+00,
     *  .93301E+00,  .92879E+00,  .92460E+00,  .92045E+00,  .91634E+00,
     *  .91227E+00,  .90824E+00,  .90425E+00,  .90031E+00,  .89641E+00,
     *  .89256E+00,  .88876E+00,  .88501E+00,  .88132E+00,  .87768E+00,
     *  .87410E+00,  .87058E+00,  .86712E+00,  .86372E+00,  .86039E+00,
     *  .85713E+00,  .85395E+00,  .85083E+00,  .84780E+00,  .84484E+00,
     *  .84197E+00,  .83919E+00,  .83650E+00,  .83390E+00,  .83141E+00,
     *  .82901E+00,  .82672E+00,  .82454E+00,  .82248E+00,  .82053E+00/
       DATA AV51/
     *  .81871E+00,  .81702E+00,  .81547E+00,  .81405E+00,  .81278E+00,
     *  .81166E+00,  .81069E+00,  .80989E+00,  .80925E+00,  .80879E+00,
     *  .80851E+00,  .80842E+00,  .80852E+00,  .80882E+00,  .80932E+00,
     *  .81004E+00,  .81098E+00,  .81214E+00,  .81353E+00,  .81516E+00,
     *  .81704E+00,  .81916E+00,  .82154E+00,  .82418E+00,  .82708E+00,
     *  .83025E+00,  .83370E+00,  .83742E+00,  .84143E+00,  .84572E+00,
     *  .85029E+00,  .85515E+00,  .86030E+00,  .86573E+00,  .87146E+00,
     *  .87747E+00,  .88376E+00,  .89035E+00,  .89721E+00,  .90435E+00,
     *  .91176E+00,  .91945E+00,  .92741E+00,  .93562E+00,  .94409E+00,
     *  .95282E+00,  .96179E+00,  .97100E+00,  .98044E+00,  .99011E+00,
     *  .10000E+01,  .10000E+01/
      DATA CG01 /
     *  1.00000E+00, 1.01822E+00, 1.03376E+00, 1.04777E+00, 1.06057E+00,
     *  1.07231E+00, 1.08310E+00, 1.09300E+00, 1.10204E+00, 1.11025E+00,
     *  1.11766E+00, 1.12429E+00, 1.13014E+00, 1.13523E+00, 1.13955E+00,
     *  1.14313E+00, 1.14595E+00, 1.14803E+00, 1.14936E+00, 1.14994E+00,
     *  1.14978E+00, 1.14888E+00, 1.14723E+00, 1.14484E+00, 1.14170E+00,
     *  1.13782E+00, 1.13319E+00, 1.12782E+00, 1.12171E+00, 1.11485E+00,
     *  1.10726E+00, 1.09893E+00, 1.08986E+00, 1.08006E+00, 1.06953E+00,
     *  1.05828E+00, 1.04631E+00, 1.03363E+00, 1.02024E+00, 1.00617E+00,
     *  9.91403E-01, 9.75966E-01, 9.59868E-01, 9.43123E-01, 9.25745E-01,
     *  9.07752E-01, 8.89162E-01, 8.69994E-01, 8.50272E-01, 8.30017E-01/
      DATA CG51 /
     *  8.09256E-01, 7.88017E-01, 7.66327E-01, 7.44219E-01, 7.21726E-01,
     *  6.98886E-01, 6.75729E-01, 6.52299E-01, 6.28637E-01, 6.04787E-01,
     *  5.80794E-01, 5.56704E-01, 5.32565E-01, 5.08428E-01, 4.84343E-01,
     *  4.60364E-01, 4.36543E-01, 4.12933E-01, 3.89589E-01, 3.66564E-01,
     *  3.43913E-01, 3.21688E-01, 2.99940E-01, 2.78720E-01, 2.58077E-01,
     *  2.38056E-01, 2.18701E-01, 2.00053E-01, 1.82148E-01, 1.65021E-01,
     *  1.48701E-01, 1.33213E-01, 1.18579E-01, 1.04815E-01, 9.19338E-02,
     *  7.99428E-02, 6.88453E-02, 5.86399E-02, 4.93211E-02, 4.08796E-02,
     *  3.33018E-02, 2.65710E-02, 2.06669E-02, 1.55667E-02, 1.12449E-02,
     *  7.67360E-03, 4.82345E-03, 2.66344E-03, 1.16151E-03, 2.84798E-04,
     *  0.         , 0.         /
      DATA CFA01 /
     *  0.         ,-2.56288E-03,-3.05202E-03,-2.50689E-03,-1.18504E-03,
     *  7.84668E-04, 3.32528E-03, 6.38605E-03, 9.93124E-03, 1.39345E-02,
     *  1.83758E-02, 2.32392E-02, 2.85120E-02, 3.41837E-02, 4.02454E-02,
     *  4.66897E-02, 5.35099E-02, 6.07003E-02, 6.82556E-02, 7.61711E-02,
     *  8.44422E-02, 9.30647E-02, 1.02034E-01, 1.11348E-01, 1.21000E-01,
     *  1.30988E-01, 1.41307E-01, 1.51952E-01, 1.62921E-01, 1.74208E-01,
     *  1.85808E-01, 1.97716E-01, 2.09927E-01, 2.22436E-01, 2.35236E-01,
     *  2.48321E-01, 2.61684E-01, 2.75318E-01, 2.89215E-01, 3.03367E-01,
     *  3.17764E-01, 3.32399E-01, 3.47260E-01, 3.62338E-01, 3.77620E-01,
     *  3.93096E-01, 4.08752E-01, 4.24575E-01, 4.40550E-01, 4.56665E-01/
      DATA CFA51 /
     *  4.72901E-01, 4.89244E-01, 5.05675E-01, 5.22177E-01, 5.38731E-01,
     *  5.55315E-01, 5.71913E-01, 5.88502E-01, 6.05059E-01, 6.21561E-01,
     *  6.37986E-01, 6.54308E-01, 6.70504E-01, 6.86549E-01, 7.02417E-01,
     *  7.18083E-01, 7.33520E-01, 7.48703E-01, 7.63607E-01, 7.78204E-01,
     *  7.92472E-01, 8.06384E-01, 8.19918E-01, 8.33050E-01, 8.45759E-01,
     *  8.58025E-01, 8.69828E-01, 8.81151E-01, 8.91979E-01, 9.02298E-01,
     *  9.12097E-01, 9.21366E-01, 9.30098E-01, 9.38289E-01, 9.45935E-01,
     *  9.53036E-01, 9.59594E-01, 9.65613E-01, 9.71101E-01, 9.76064E-01,
     *  9.80513E-01, 9.84460E-01, 9.87919E-01, 9.90904E-01, 9.93432E-01,
     *  9.95519E-01, 9.97184E-01, 9.98445E-01, 9.99322E-01, 9.99834E-01,
     *  1.00000E+00, 1.00000E+00/
      DATA CFB01 /
     *  0.         , 1.15907E-02, 2.32978E-02, 3.51022E-02, 4.69967E-02,
     *  5.89773E-02, 7.10411E-02, 8.31858E-02, 9.54097E-02, 1.07711E-01,
     *  1.20089E-01, 1.32541E-01, 1.45066E-01, 1.57663E-01, 1.70330E-01,
     *  1.83065E-01, 1.95868E-01, 2.08737E-01, 2.21669E-01, 2.34664E-01,
     *  2.47718E-01, 2.60830E-01, 2.73998E-01, 2.87219E-01, 3.00491E-01,
     *  3.13812E-01, 3.27178E-01, 3.40587E-01, 3.54035E-01, 3.67520E-01,
     *  3.81037E-01, 3.94583E-01, 4.08155E-01, 4.21747E-01, 4.35356E-01,
     *  4.48978E-01, 4.62606E-01, 4.76237E-01, 4.89864E-01, 5.03482E-01,
     *  5.17086E-01, 5.30669E-01, 5.44225E-01, 5.57746E-01, 5.71226E-01,
     *  5.84657E-01, 5.98032E-01, 6.11342E-01, 6.24580E-01, 6.37736E-01/
      DATA CFB51 /
     *  6.50802E-01, 6.63769E-01, 6.76626E-01, 6.89365E-01, 7.01974E-01,
     *  7.14444E-01, 7.26764E-01, 7.38924E-01, 7.50912E-01, 7.62717E-01,
     *  7.74328E-01, 7.85735E-01, 7.96925E-01, 8.07888E-01, 8.18612E-01,
     *  8.29087E-01, 8.39302E-01, 8.49246E-01, 8.58910E-01, 8.68284E-01,
     *  8.77358E-01, 8.86125E-01, 8.94577E-01, 9.02706E-01, 9.10506E-01,
     *  9.17972E-01, 9.25100E-01, 9.31885E-01, 9.38325E-01, 9.44419E-01,
     *  9.50166E-01, 9.55568E-01, 9.60625E-01, 9.65340E-01, 9.69718E-01,
     *  9.73763E-01, 9.77481E-01, 9.80878E-01, 9.83962E-01, 9.86741E-01,
     *  9.89223E-01, 9.91419E-01, 9.93337E-01, 9.94989E-01, 9.96385E-01,
     *  9.97536E-01, 9.98452E-01, 9.99146E-01, 9.99628E-01, 9.99909E-01,
     *  1.00000E+00, 1.00000E+00/
      DATA CFC01 /
     *  0.         , 9.88700E-03, 1.98515E-02, 2.99036E-02, 4.00474E-02,
     *  5.02856E-02, 6.06200E-02, 7.10521E-02, 8.15830E-02, 9.22137E-02,
     *  1.02945E-01, 1.13778E-01, 1.24712E-01, 1.35749E-01, 1.46889E-01,
     *  1.58132E-01, 1.69478E-01, 1.80928E-01, 1.92480E-01, 2.04136E-01,
     *  2.15894E-01, 2.27754E-01, 2.39716E-01, 2.51780E-01, 2.63943E-01,
     *  2.76205E-01, 2.88564E-01, 3.01020E-01, 3.13571E-01, 3.26214E-01,
     *  3.38948E-01, 3.51771E-01, 3.64679E-01, 3.77670E-01, 3.90741E-01,
     *  4.03888E-01, 4.17108E-01, 4.30397E-01, 4.43750E-01, 4.57162E-01,
     *  4.70628E-01, 4.84142E-01, 4.97700E-01, 5.11293E-01, 5.24915E-01,
     *  5.38560E-01, 5.52218E-01, 5.65882E-01, 5.79542E-01, 5.93190E-01/
      DATA CFC51 /
     *  6.06816E-01, 6.20408E-01, 6.33957E-01, 6.47451E-01, 6.60877E-01,
     *  6.74223E-01, 6.87477E-01, 7.00624E-01, 7.13651E-01, 7.26544E-01,
     *  7.39288E-01, 7.51868E-01, 7.64268E-01, 7.76474E-01, 7.88470E-01,
     *  8.00240E-01, 8.11768E-01, 8.23041E-01, 8.34042E-01, 8.44756E-01,
     *  8.55171E-01, 8.65271E-01, 8.75044E-01, 8.84478E-01, 8.93562E-01,
     *  9.02285E-01, 9.10639E-01, 9.18616E-01, 9.26210E-01, 9.33414E-01,
     *  9.40227E-01, 9.46644E-01, 9.52666E-01, 9.58293E-01, 9.63528E-01,
     *  9.68373E-01, 9.72833E-01, 9.76915E-01, 9.80625E-01, 9.83973E-01,
     *  9.86967E-01, 9.89617E-01, 9.91935E-01, 9.93933E-01, 9.95622E-01,
     *  9.97015E-01, 9.98125E-01, 9.98965E-01, 9.99549E-01, 9.99889E-01,
     *  1.00000E+00, 1.00000E+00/
      DATA CER01 /
     *  0.         ,-2.11394E-02,-4.08818E-02,-5.97585E-02,-7.79266E-02,
     * -9.54663E-02,-1.12425E-01,-1.28834E-01,-1.44713E-01,-1.60076E-01,
     * -1.74933E-01,-1.89289E-01,-2.03149E-01,-2.16515E-01,-2.29388E-01,
     * -2.41768E-01,-2.53653E-01,-2.65043E-01,-2.75936E-01,-2.86328E-01,
     * -2.96217E-01,-3.05601E-01,-3.14476E-01,-3.22839E-01,-3.30686E-01,
     * -3.38015E-01,-3.44822E-01,-3.51105E-01,-3.56859E-01,-3.62083E-01,
     * -3.66773E-01,-3.70928E-01,-3.74546E-01,-3.77625E-01,-3.80164E-01,
     * -3.82161E-01,-3.83618E-01,-3.84534E-01,-3.84911E-01,-3.84749E-01,
     * -3.84051E-01,-3.82821E-01,-3.81062E-01,-3.78778E-01,-3.75976E-01,
     * -3.72663E-01,-3.68845E-01,-3.64532E-01,-3.59733E-01,-3.54461E-01/
      DATA CER51 /
     * -3.48726E-01,-3.42543E-01,-3.35927E-01,-3.28893E-01,-3.21461E-01,
     * -3.13650E-01,-3.05477E-01,-2.96967E-01,-2.88142E-01,-2.79029E-01,
     * -2.69652E-01,-2.60040E-01,-2.50221E-01,-2.40225E-01,-2.30084E-01,
     * -2.19829E-01,-2.09493E-01,-1.99109E-01,-1.88712E-01,-1.78335E-01,
     * -1.68014E-01,-1.57782E-01,-1.47673E-01,-1.37721E-01,-1.27957E-01,
     * -1.18414E-01,-1.09120E-01,-1.00105E-01,-9.13939E-02,-8.30122E-02,
     * -7.49818E-02,-6.73226E-02,-6.00518E-02,-5.31840E-02,-4.67313E-02,
     * -4.07029E-02,-3.51053E-02,-2.99424E-02,-2.52153E-02,-2.09229E-02,
     * -1.70614E-02,-1.36249E-02,-1.06056E-02,-7.99360E-03,-5.77750E-03,
     * -3.94443E-03,-2.48028E-03,-1.36995E-03,-5.97540E-04,-1.46532E-04,
     *  0.         , 0.         /
C
      END

      SUBROUTINE RSYM (R,DV,VFT) 3
C
      IMPLICIT REAL*8           (V)
C
      DIMENSION R(*)
C
      IP = (-VFT/DV)+1.-.000001
      IP = IP+1
      P = (FLOAT(IP-1)+VFT/DV)*2.
      PST = P
      IF (P.GT.1.) P = P-1.
C
C     VFT/DV- INT(VFT/DV)= 0. TO 0.5
C
      WN1 = -P*(P-1.)*(P-2.)/6.
      W0 = (P*P-1.)*(P-2.)/2.
      W1 = -P*(P+1.)*(P-2.)/2.
      W2 = P*(P*P-1.)/6.
      K = IP
      IPMAX = IP+IP-1
      IF (PST.LE.1.) GO TO 20
      B1 = R(IP-2)
      B2 = R(IP-1)
      C1 = R(K)
      DO 10 I = IP, IPMAX
         K = K-1
         C2 = C1
         IF (K.LT.1) GO TO 40
         C1 = R(K)
         R(K) = R(K)+WN1*R(I+1)+W0*R(I)+W1*B2+W2*B1
         B1 = B2
         B2 = R(I)
         IF (K.LE.2) GO TO 10
         R(I) = R(I)+WN1*C2+W0*C1+W1*R(K-1)+W2*R(K-2)
   10 CONTINUE
      GO TO 40
C
C    VFT/DV- INT(VFT/DV) = 0.5 TO 1.0
C
   20 C1 = R(IP)
      C2 = R(IP+1)
      B2 = R(IP-1)
      DO 30 I = IP, IPMAX
         K = K-1
         B1 = B2
         B2 = R(I)
         IF (K.LE.1) GO TO 40
         R(I) = R(I)+WN1*C2+W0*C1+W1*R(K)+W2*R(K-1)
         C2 = C1
         C1 = R(K)
         R(K) = R(K)+WN1*R(I+2)+W0*R(I+1)+W1*B2+W2*B1
   30 CONTINUE
C
   40 RETURN
C
      END

      SUBROUTINE XINT (V1A,V2A,DVA,A,AFACT,VFT,DVR3,R3,N1R3,N2R3) 20
C
      IMPLICIT REAL*8           (V)
C
C     THIS SUBROUTINE INTERPOLATES THE A ARRAY STORED
C     FROM V1A TO V2A IN INCREMENTS OF DVA USING A MULTIPLICATIVE
C     FACTOR AFACT, INTO THE R3 ARRAY FROM LOCATION N1R3 TO N2R3 IN
C     INCREMENTS OF DVR3
C
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
      DIMENSION A(*),R3(*)
C
      RECDVA = 1./DVA
      ILO = (V1A+DVA-VFT)/DVR3+1.+ONEMI
      ILO = MAX(ILO,N1R3)
      IHI = (V2A-DVA-VFT)/DVR3+ONEMI
      IHI = MIN(IHI,N2R3)
C
      DO 10 I = ILO, IHI
         VI = VFT+DVR3*FLOAT(I-1)
         J = (VI-V1A)*RECDVA+ONEPL
         VJ = V1A+DVA*FLOAT(J-1)
         P = RECDVA*(VI-VJ)
         C = (3.-2.*P)*P*P
         B = 0.5*P*(1.-P)
         B1 = B*(1.-P)
         B2 = B*P
         CONTI = -A(J-1)*B1+A(J)*(1.-C+B2)+A(J+1)*(C+B1)-A(J+2)*B2
         R3(I) = R3(I)+CONTI*AFACT
   10 CONTINUE
C
      RETURN
C
      END

      FUNCTION RADFN (VI,XKT) 19
C
      IMPLICIT REAL*8           (V)
C
C     FUNCTION RADFN CALCULATES THE RADIATION TERM FOR THE LINE SHAPE
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C               LAST MODIFICATION:    12 AUGUST 1991
C
C                  IMPLEMENTATION:    R.D. WORSHAM
C
C             ALGORITHM REVISIONS:    S.A. CLOUGH
C                                     R.D. WORSHAM
C                                     J.L. MONCET
C
C
C                     ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC.
C                     840 MEMORIAL DRIVE,  CAMBRIDGE, MA   02139
C
C----------------------------------------------------------------------
C
C               WORK SUPPORTED BY:    THE ARM PROGRAM
C                                     OFFICE OF ENERGY RESEARCH
C                                     DEPARTMENT OF ENERGY
C
C
C      SOURCE OF ORIGINAL ROUTINE:    AFGL LINE-BY-LINE MODEL
C
C                                             FASCOD3
C
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
C
C      IN THE SMALL XVIOKT REGION 0.5 IS REQUIRED
C
      XVI = VI
C
      IF (XKT.GT.0.0) THEN
C
         XVIOKT = XVI/XKT
C
         IF (XVIOKT.LE.0.01) THEN
            RADFN = 0.5*XVIOKT*XVI
C
         ELSEIF (XVIOKT.LE.10.0) THEN
            EXPVKT = EXP(-XVIOKT)
            RADFN = XVI*(1.-EXPVKT)/(1.+EXPVKT)
C
         ELSE
            RADFN = XVI
         ENDIF
C
      ELSE
         RADFN = XVI
      ENDIF
C
      RETURN
C
      END

      FUNCTION RADFNI (VI,DVI,XKT,VINEW,RDEL,RDLAST) 49
C
      IMPLICIT REAL*8           (V)
C
C     FUNCTION RADFNI CALCULATES THE RADIATION TERM FOR THE LINE SHAPE
C     OVER INTERVAL VI TO VINEW
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
C               LAST MODIFICATION:    23 AUGUST 1991
C
C                  IMPLEMENTATION:    R.D. WORSHAM
C
C             ALGORITHM REVISIONS:    S.A. CLOUGH
C                                     R.D. WORSHAM
C                                     J.L. MONCET
C
C
C                     ATMOSPHERIC AND ENVIRONMENTAL RESEARCH INC.
C                     840 MEMORIAL DRIVE,  CAMBRIDGE, MA   02139
C
C----------------------------------------------------------------------
C
C               WORK SUPPORTED BY:    THE ARM PROGRAM
C                                     OFFICE OF ENERGY RESEARCH
C                                     DEPARTMENT OF ENERGY
C
C
C      SOURCE OF ORIGINAL ROUTINE:    AFGL LINE-BY-LINE MODEL
C
C                                             FASCOD3
C
C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
      DATA FACT1 / 3.0E-03 /
C
C     RADFNI IS COMPUTED AT VI AND AND CALCULATES THE
C     WAVENUMBER VALUE (VINEW) FOR NEXT RADFNI CALC.
C
C     IN THE SMALL XVIOKT REGION 0.5 IS REQUIRED
C
      XVI = VI
C
C     IF FIRST CALL, INITIALIZE RDLAST
C
      IF (RDLAST.LT.0.) THEN
         IF (XKT.GT.0.0) THEN
            XVIOKT = XVI/XKT
C
            IF (XVIOKT.LE.0.01) THEN
               RDLAST = 0.5*XVIOKT*XVI
C
            ELSEIF (XVIOKT.LE.10.0) THEN
               EXPVKT = EXP(-XVIOKT)
               RDLAST = XVI*(1.-EXPVKT)/(1.+EXPVKT)
C
            ELSE
               RDLAST = XVI
            ENDIF
         ELSE
            RDLAST = XVI
         ENDIF
      ENDIF
C
C     SET RADFNI EQUAL TO RADIATION FUNCTION AT VI
C
C     RDLAST IS RADFNI(VI) FOR EACH SUBSEQUENT CALL
C
      RADFNI = RDLAST
C
      INTVLS = 1
      IF (XKT.GT.0.0) THEN
C
         XVIOKT = XVI/XKT
C
         IF (XVIOKT.LE.0.01) THEN
            IF (VINEW.GE.0.0) THEN
               VINEW = VI+FACT1*0.5*XVI
               INTVLS = (VINEW-VI)/DVI
               INTVLS = MAX(INTVLS,1)
               VINEW = VI+DVI*FLOAT(INTVLS)
            ELSE
               VINEW = ABS(VINEW)
               INTVLS = (VINEW-VI)/DVI
               INTVLS = MAX(INTVLS,1)
            ENDIF
            XVINEW = VINEW
C
            RDNEXT = 0.5*XVIOKT*XVINEW
C
         ELSEIF (XVIOKT.LE.10.0) THEN
            EXPVKT = EXP(-XVIOKT)
            XMINUS = 1.-EXPVKT
            XPLUS = 1.+EXPVKT
            IF (VINEW.GE.0.0) THEN
               CVIKT = XVIOKT*EXPVKT
               VINEW = VI+FACT1*XVI/(1.+(CVIKT/XMINUS+CVIKT/XPLUS))
               INTVLS = (VINEW-VI)/DVI
               INTVLS = MAX(INTVLS,1)
               VINEW = VI+DVI*FLOAT(INTVLS)
            ELSE
               VINEW = ABS(VINEW)
               INTVLS = (VINEW-VI)/DVI
               INTVLS = MAX(INTVLS,1)
            ENDIF
            XVINEW = VINEW
C
            RDNEXT = XVINEW*XMINUS/XPLUS
C
         ELSE
            IF (VINEW.GE.0.0) THEN
               VINEW = VI+(FACT1*XVI)
               INTVLS = (VINEW-VI)/DVI
               INTVLS = MAX(INTVLS,1)
               VINEW = VI+DVI*FLOAT(INTVLS)
            ELSE
               VINEW = ABS(VINEW)
               INTVLS = (VINEW-VI)/DVI
               INTVLS = MAX(INTVLS,1)
            ENDIF
            XVINEW = VINEW
C
            RDNEXT = XVINEW
         ENDIF
      ELSE
         IF (VINEW.GE.0.0) THEN
            VINEW = VI+(FACT1*XVI)
            INTVLS = (VINEW-VI)/DVI
            INTVLS = MAX(INTVLS,1)
            VINEW = VI+DVI*FLOAT(INTVLS)
         ELSE
            VINEW = ABS(VINEW)
            INTVLS = (VINEW-VI)/DVI
            INTVLS = MAX(INTVLS,1)
         ENDIF
         XVINEW = VINEW
C
         RDNEXT = XVI
      ENDIF
C
      RDEL = (RDNEXT-RADFNI)/FLOAT(INTVLS)
C
      RDLAST = RDNEXT
C
      RETURN
C
      END

      SUBROUTINE MOLEC (IND,SCOR,RHOSLF,ALFD1) 4,3
C
      IMPLICIT REAL*8           (V)
C
      PARAMETER (NTMOL=36,Nspeci=85)
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /ISVECT/ ISOVEC(NTMOL),ISO82(NSPECI),ISONM(NTMOL),
     *                SMASSI(NSPECI)
      COMMON /QTOT/ QCOEF(NSPECI,3,5),Q296(NSPECI),AQ(NSPECI),
     *              BQ(NSPECI),GJ(NSPECI)
      COMMON /MANE/ P0,TEMP0,NLAYRS,DVXM,H2OSLF,WTOT,ALBAR,ADBAR,AVBAR,
     *              AVFIX,LAYRFX,SECNT0,SAMPLE,DVSET,ALFAL0,AVMASS,
     *              DPTMIN,DPTFAC,ALTAV,AVTRAT,TDIFF1,TDIFF2,ALTD1,
     *              ALTD2,ANGLE,IANT,LTGNT,LH1,LH2,IPFLAG,PLAY,TLAY,
     *              EXTID(10)
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,P   ,TEMP,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      DIMENSION SCOR(*),RHOSLF(*),ALFD1(*)
      COMMON /SMOLEC/ W(42,9),ND(42,9),FAD
      COMMON /XMOLEC/ NV(42),IVIB(42,2,9),XR(42),ROTFAC(42),QV0(42)
      COMMON /MOLNAM/ MOLID(0:NTMOL)
      CHARACTER*6 MOLID
C
C     IS EQUIV. TO THE FOLLOWING DIMENSION AND EQUIVALENT STATEMENTS
C
      DIMENSION IV(2)
      EQUIVALENCE (IV(1),IVIB(1,1,1))
C
      DATA MDIM / 42 /,NVDIM / 9 /
C
c
c
c    Program TIPS written by R.R. Gamache
c
c     This is an updated version of TIPS: TIPS_97
c     obtained from R.R. Gamache on 28 April 1998
c
c***************
c
c     Modifications have been made to the partition sums for
c     hno3, c2h6, sf6, o, and clono2 by tony clough on 30 april 98,
c     based on data provided by R. Gamache.
c
c***************
c
c    This program enables the user to calculate the Total Internal
c    Partition Sum (TIPS) for a given molecule, isotopic variant, and
c    temperature.  Current limitations are the molecular species on the
c    HITRAN molecular database and the temperature range 70 - 3000 K.
c
c...This program calculates the TIPS by the formula
c...     Q(T) = A + B*T + C*T*T + D*T*T*T + E*T*T*T*T
c...Reference: R.R. Gamache, R.L. Hawkins, and L.S. Rothman,
c    J.Mol.Spectrosc. 142, 205-219 (1990)
c
c     Program modified by Tony Clough
c
c     Converted to single precision
c
c     Substantive changes have retained original record as comment with c%
c
C     THIS PROGRAM ENABLES THE USER TO CALCULATE THE TOTAL INTERNAL
C     PARTITION SUM (TIPS) FOR A GIVEN MOLECULE, ISOTOPIC SPECIES,
C     AND TEMPERATURE.  CURRENT LIMITATIONS ARE THE MOLECULAR SPECIES
C     ON THE HITRAN MOLECULAR DATABASE AND THE TEMPERATURE RANGE
C     70 - 3000 K.
C
C     MOLEC MAKES THE MOLECULAR IDENTIFICATIONS
C
C     SCOR IS THE FACTOR BY WHICH THE LINE INTENSITY IS CHANGED DUE TO
C        TEMPERATURE DEPENDENCE OF THE VIB AND ROT PARTITION SUMS
C
C     RHOSLF IS A QUANTITY ('PARTIAL DENSITY') FOR CORRECTING THE
C        COLLISION WIDTH FOR SELF BROADENING
C
C     ALFD1 CONTAINS THE DOPPLER WIDTHS AT 1 CM-1
C
      IF (IND.EQ.1) THEN
c
c...Set up molecule isotope vectors:
c
         CALL vecIso
c
c 5       WRITE (IPR,'(8x,A,/,8x,A////////////)')
c     +     'This program calculates the Total Internal Partition Sum'
c     +,'       for the molecular species on the HITRAN database.'
c%%
C
         DO 10 M = 1, NMOL
            READ (MOLID(M),900) HMOLID(M)
 10      CONTINUE
C
         FLN2 = ALOG(2.)
         FAD = FLN2*2.*AVOG*BOLTZ/(CLIGHT*CLIGHT)
         XKT0 = TEMP0/RADCN2
C
         DO 30 M = 1, MDIM
            DO 20 K = 1, NVDIM
               LOC = 2*MDIM*(K-1)+2*(M-1)
               W(M,K) = IV(LOC+1)
               ND(M,K) = IV(LOC+2)
 20         CONTINUE
            NVM = NV(M)
 30      CONTINUE
         RETURN
      ELSE
C

         RHORAT = (P/P0)*(TEMP0/TEMP)
         XKT = TEMP/RADCN2
C
         DO 50 M = 1, NMOL
C
            DO 40 ISO = 1, ISONM(M)
               ILOC = ISOVEC(M)+ISO
c
               CALL QOFT (M,ISO,296.,QT_296)
               CALL QOFT (M,ISO,TEMP,QT)

               SCOR(iloc) = QT_296/QT


c              Stop program if covering a molecule and isotope
c              not valid for T > 500K.

               if ((iloc.ge.29).and.(wk(m).gt.0.).and.
     *              (TEMP.GT.500.)) then
                  write(ipr,*) 'TIPS calculation of Isotope ',
     *                 iso82(iloc),' for molecule ',m,
     *                 ' not valid for T = ',TEMP
                  write(*,*) 'TIPS calculation of Isotope ',
     *                 iso82(iloc),' for molecule ',m,
     *                 ' not valid for T = ',TEMP
                  stop 'SUBROUTINE MOLEC'
               endif

c              Stop program if covering a molecule of nonzero amount
c              and which has an isotope with no TIPs coefficients.

               if ((scor(iloc).lt.0.).and.(wk(m).gt.0.)) then
                  write(ipr,*) 'Isotope ',iso82(iloc),' for molecule ',
     *                 m,' not included in TIPs'
                  write(*,*) 'Isotope ',iso82(iloc),' for molecule ',
     *                 m,' not included in TIPs'
                  stop 'SUBROUTINE MOLEC'
               endif

               RHOSLF(ILOC) = RHORAT*WK(M)/WTOT
               ALFD1(ILOC) = SQRT(FAD*TEMP/SMASSI(ILOC))
 40         CONTINUE
 50      CONTINUE
C     RETURN
C
      ENDIF
C
 900  FORMAT (A6)
C
      END
      BLOCK DATA BMOLEC
C
      COMMON /XMOLEC/
     2  NV1(7),NV2(7),NV3(7),NV4(7),NV5(7),NV6(7),
     3  IV11(14),IV12(14),IV13(14),IV14(14),IV15(14),IV16(14),
     4  IV21(14),IV22(14),IV23(14),IV24(14),IV25(14),IV26(14),
     5  IV31(14),IV32(14),IV33(14),IV34(14),IV35(14),IV36(14),
     6  IV41(14),IV42(14),IV43(14),IV44(14),IV45(14),IV46(14),
     7  IV51(14),IV52(14),IV53(14),IV54(14),IV55(14),IV56(14),
     8  IV61(14),IV62(14),IV63(14),IV64(14),IV65(14),IV66(14),
     9  IV71(14),IV72(14),IV73(14),IV74(14),IV75(14),IV76(14),
     *  IV81(14),IV82(14),IV83(14),IV84(14),IV85(14),IV86(14),
     1  IV91(14),IV92(14),IV93(14),IV94(14),IV95(14),IV96(14),
     2  XR1(7),XR2(7),XR3(7),XR4(7),XR5(7),XR6(7),
     3  ROTFC1(7),ROTFC2(7),ROTFC3(7),ROTFC4(7),ROTFC5(7),ROTFC6(7),
     4  QV0(42)
C
      DATA NV1,IV11,IV21,IV31,IV41,IV51,IV61,IV71,IV81,IV91,XR1,ROTFC1/
C
C          H2O      CO2       O3      N2O       CO      CH4       O2
     C       3 ,      3 ,      3 ,      3 ,      1 ,      4 ,      1 ,
     1  3657,1 , 1388,1 , 1103,1 , 1285,1 , 2143,1 , 2917,1 , 1556,1 ,
     2  1595,1 ,  667,2 ,  701,1 ,  589,2 ,    0,0 , 1533,2 ,    0,0 ,
     3  3756,1 , 2349,1 , 1042,1 , 2224,1 ,    0,0 , 3019,3 ,    0,0 ,
     4     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 , 1311,3 ,    0,0 ,
     5     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     6     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     7     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     8     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     9     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     X     0.5 ,    0.25,    0.5 ,    0.5 ,    0.5 ,    0.5 ,    0.5 ,
     Y     1.5 ,    1.0 ,    1.5 ,    1.0 ,    1.0 ,    1.5 ,    1.0 /
C
      DATA NV2,IV12,IV22,IV32,IV42,IV52,IV62,IV72,IV82,IV92,XR2,ROTFC2/
C
C           NO      SO2      NO2      NH3     HNO3       OH       HF
     C       1 ,      3 ,      3 ,      4 ,      9 ,      1 ,      1 ,
     1  1876,1 , 1152,1 , 1318,1 , 3337,1 , 3550,1 , 3569,1 , 3961,1 ,
     2     0,0 ,  518,1 ,  750,1 ,  950,1 , 1710,1 ,    0,0 ,    0,0 ,
     3     0,0 , 1362,1 , 1617,1 , 3444,2 , 1331,1 ,    0,0 ,    0,0 ,
     4     0,0 ,    0,0 ,    0,0 , 1627,2 , 1325,1 ,    0,0 ,    0,0 ,
     5     0,0 ,    0,0 ,    0,0 ,    0,0 ,  879,1 ,    0,0 ,    0,0 ,
     6     0,0 ,    0,0 ,    0,0 ,    0,0 ,  647,1 ,    0,0 ,    0,0 ,
     7     0,0 ,    0,0 ,    0,0 ,    0,0 ,  579,1 ,    0,0 ,    0,0 ,
     8     0,0 ,    0,0 ,    0,0 ,    0,0 ,  762,1 ,    0,0 ,    0,0 ,
     9     0,0 ,    0,0 ,    0,0 ,    0,0 ,  456,1 ,    0,0 ,    0,0 ,
     X     0.5 ,    0.5 ,    0.5 ,    0.5 ,    0.5 ,    0.5 ,    0.5 ,
     Y     1.0 ,    1.5 ,    1.5 ,    1.5 ,    1.5 ,    1.0 ,    1.0 /
C
      DATA NV3,IV13,IV23,IV33,IV43,IV53,IV63,IV73,IV83,IV93,XR3,ROTFC3/
C
C          HCL      HBR       HI      CLO      OCS     H2CO     HOCL
     C       1 ,      1 ,      1 ,      1 ,      3 ,      6 ,      3 ,
     1  2885,1 , 2558,1 , 2229,1 ,  842,1 ,  859,1 , 2782,1 , 3609,1 ,
     2     0,0 ,    0,0 ,    0,0 ,    0,0 ,  520,2 , 1746,1 , 1238,1 ,
     3     0,0 ,    0,0 ,    0,0 ,    0,0 , 2062,1 , 1500,1 ,  740,1 ,
     4     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 , 1167,1 ,    0,0 ,
     5     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 , 2843,1 ,    0,0 ,
     6     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 , 1249,1 ,    0,0 ,
     7     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     8     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     9     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     X     0.5 ,    0.5 ,    0.5 ,    0.25,    0.5 ,    0.5 ,    0.5 ,
     Y     1.0 ,    1.0 ,    1.0 ,    1.0 ,    1.0 ,    1.5 ,    1.5 /
C
      DATA NV4,IV14,IV24,IV34,IV44,IV54,IV64,IV74,IV84,IV94,XR4,ROTFC4/
C
C           N2      HCN    CH3CL     H2O2     C2H2     C2H6      PH3
     C       1 ,      3 ,      6 ,      6 ,      5 ,      9 ,      4 ,
     1  2330,1 , 2089,1 , 2968,1 , 3607,1 , 3374,1 , 2899,1 , 2327,1 ,
     2     0,0 ,  713,2 , 1355,1 , 1394,1 , 1974,1 , 1375,1 ,  992,1 ,
     3     0,0 , 3311,1 ,  732,1 ,  864,1 , 3295,1 ,  993,1 , 1118,2 ,
     4     0,0 ,    0,0 , 3039,2 ,  317,1 ,  612,2 ,  275,1 , 2421,2 ,
     5     0,0 ,    0,0 , 1455,2 , 3608,1 ,  730,2 , 2954,1 ,    0,0 ,
     6     0,0 ,    0,0 , 1015,2 , 1269,1 ,    0,0 , 1379,1 ,    0,0 ,
     7     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 , 2994,2 ,    0,0 ,
     8     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 , 1486,1 ,    0,0 ,
     9     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,  822,2 ,    0,0 ,
     X     0.5 ,    0.5 ,    0.5 ,    0.5 ,    0.5 ,    0.5 ,    0.5 ,
     Y     1.0 ,    1.0 ,    1.5 ,    1.5 ,    1.0 ,    1.5 ,    1.5 /
C
      DATA NV5,IV15,IV25,IV35,IV45,IV55,IV65,IV75,IV85,IV95,XR5,ROTFC5/
C
C         COF2      SF6      H2S    HCOOH      HO2        O   CLONO2
     C       0 ,      0 ,      0 ,      0 ,      0 ,      0 ,      0 ,
     1  0000,1 , 0000,0 , 0000,0 , 0000,0 , 0000,0 , 0000,0 , 0000,0 ,
     2     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     3     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     4     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     5     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     6     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     7     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     8     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     9     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     X     0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,
     Y     0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 /
C
      DATA NV6,IV16,IV26,IV36,IV46,IV56,IV66,IV76,IV86,IV96,XR6,ROTFC6/
C
C          NO+      ???      ???      ???      ???      ???      ???
     C       0 ,      0 ,      0 ,      0 ,      0 ,      0 ,      0 ,
     1  0000,1 , 0000,0 , 0000,0 , 0000,0 , 0000,0 , 0000,0 , 0000,0 ,
     2     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     3     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     4     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     5     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     6     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     7     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     8     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     9     0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,    0,0 ,
     X     0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,
     Y     0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 ,    0.0 /
C
      END

      FUNCTION QV (M,XKT,W,ND,NV,MDIM,NVDIM)
C
C     FUNCTION QV CALCULATES THE VIBRATIONAL PARTITION SUM
C
      DIMENSION W(MDIM,NVDIM),ND(MDIM,NVDIM)
      QV = 1.
      DO 10 I = 1, NV
         SV = 1.-EXP(-W(M,I)/XKT)
         IF (ND(M,I).GT.1) SV = SV**ND(M,I)
         QV = QV/SV
   10 CONTINUE
C
      RETURN
C
      END
c***********************************************

      SUBROUTINE vecIso 2
c***********************************************
c
      PARAMETER (NMOL=36,Nspeci=85)
      COMMON /ISVECT/ ISOVEC(NMOL),ISO82(Nspeci),ISONM(NMOL),
     *     sdum(Nspeci)
c
c...Isotope vector information
c     Set up ISOVEC:
         ISOVEC(1) = 0
         DO 20 I = 2,NMOL
          ISOVEC(I) = 0
          DO 10 J = 1,I-1
           ISOVEC(I) = ISOVEC(I)+ISONM(J)
   10     CONTINUE
   20    CONTINUE
c
      RETURN
      END
c  ****************************************
      BLOCK DATA Isotop
c  ****************************************
C$$   IMPLICIT DOUBLE PRECISION (a-h,o-z)
c
      PARAMETER (NMOL=36,Nspeci=85)
      COMMON /ISVECT/ ISOVEC(NMOL),ISO82(Nspeci),ISONM(NMOL),
     *     smassi(Nspeci)
c
c    The number of isotopes for a particular molecule:
      DATA (ISONM(I),I=1,NMOL)/
c     H2O, CO2, O3, N2O, CO, CH4, O2,
     +  4,   8,  5,   5,  6,   3,  3,
c      NO, SO2, NO2, NH3, HNO3, OH, HF, HCl, HBr, HI,
     +  3,   2,   1,   2,    1,  3,  1,   2,   2,  1,
c     ClO, OCS, H2CO, HOCl, N2, HCN, CH3Cl, H2O2, C2H2, C2H6, PH3
     +  2,   4,    3,    2,  1,   3,     2,    1,    2,    1,   1,
c     COF2, SF6, H2S, HCOOH, HO2, O, ClONO2,  NO+
     +  1,   1,   3,     1,   1,  1,     2,    1/
c
      DATA ISO82/
c       H2O
     +  161,181,171,162,
c       CO2
     +  626,636,628,627,638,637,828,728,
c       O3
     +  666,668,686,667,676,
c       N2O
     +  446,456,546,448,447,
c       CO,                 CH4
     +  26,36,28,27,38,37,  211,311,212,
c       O2,        NO,        SO2
     +  66,68,67,  46,56,48  ,626,646,
c      NO2,   NH3,        HNO3
     + 646,   4111,5111,  146,
c       OH,        HF,  HCl,    HBr,    HI
     +  61,81,62,  19,  15,17,  19,11,  17,
c       ClO,    OCS,              H2CO
     +  56,76,  622,624,632,822,  126,136,128,
c       HOCl,     N2,  HCN
     +  165,167,  44,  124,134,125
c      CH3Cl,    H2O2,  C2H2,       C2H6,  PH3
     +,215,217,  1661,  1221,1231,  1221,  1111,
c     COF2, SF6, H2S,            HCOOH,  HO2, O,   ClONO2      NO+
     + 269,  29,  121,141,131,   126,    166, 6,   5646,7646,  46/
c
C
C     MOLECULAR MASSES FOR EACH ISOTOPE
C
      DATA SMASSI/
C     H2O:   161,   181,   171,   162
     *       18.01, 20.01, 19.01, 19.01,
C     CO2:   626,   636,   628,   627,   638,   637,   828,   728
     *       43.98, 44.98, 45.98, 44.98, 46.98, 45.98, 47.98, 46.98,
C     O3:    666,   668,   686    667    676
     *       47.97, 49.97, 49.97, 48.99, 48.99,
C     N2O:   446,   456,   546,   448,   447
     *       43.99, 44.99, 44.99, 45.99, 44.99,
C     CO:    26,    36,    28,    27,    38     37
     *       27.99, 28.99, 29.99, 28.99, 30.99, 30.00,
C     CH4:   211,   311,   212;   O2:    66,    68,    67
     *       16.04, 17.04, 17.04,        31.98, 33.98, 32.98,
C     NO:    46,    56,    48;    SO2:   626,   646
     *       29.99, 30.99, 31.99,        63.95, 65.95,
C     NO2:   646;   NH3:   4111,  5111;  HNO3:  146
     *       45.98,        17.03, 18.03,        62.98,
C     OH:    61,    81,    62;    HF:    19
     *       17.00, 19.00, 18.00,        20.01,
C     HCL:   15,    17;    HBR:   19,    11;    HI:    17
     *       35.98, 37.98,        79.92, 81.92,        127.91,
C     CLO:   56,    76;    OCS:   622,   624,   632,   822
     *       50.96, 52.96,        59.96, 61.96, 60.96, 61.96,
C     H2CO:  126,   136,   128;   HOCL:  165,   167
     *       30.01, 31.01, 32.01,        51.97, 53.97,
C     N2:    44;    HCN:   124,   134,   125
     *       28.00,        27.01, 28.01, 28.01,
C     CH3CL: 215,   217;   H2O2:  1661;  C2H2:  1221,  1231
     *       50.00, 52.00,        34.00,        26.02, 27.02,
C     C2H6:  1221;  PH3:   1111;  COF2:  269;   SF6:   29
     *       30.06,        34.00,        65.99,        145.97,
C     H2S:   121    141    131;   HCOOH: 126;   HO2:   166
     *       33.99, 35.98, 34.99,        46.00,        33.00,
C     O:     6      ClONO2:5646   7646;  NO+:   46
     *       15.99,        96.96, 98.95,        30.00 /
C
      END

c
C*******************************************

      SUBROUTINE QofT(Mol, Iso, Tout, QT) 2
C*******************************************
c...date last changed:  September 19, 1997
c
c...input - Mol, Iso, and a temperature Tout
c...output - Total internal partition sum, QT, at T=Tout
c
c$$$      IMPLICIT DOUBLE PRECISION (a-h,o-z)
c
c++
      PARAMETER (NMOL=36,Nspeci=85)
c++
      COMMON /ISVECT/ ISOVEC(NMOL),ISO82(Nspeci),ISONM(NMOL),
     *     sdum(Nspeci)
c++:  bd-QT
      common/Qtot/ Qcoef(Nspeci,3,5), Q296(Nspeci), aQ(Nspeci),
     + bQ(Nspeci), gj(Nspeci)
c
      ivec = isovec(Mol) + iso
c
c...value depends on temperature range
      IF (Tout.lt.70. .OR. Tout.gt.3005.) THEN
        QT = -1.
        WRITE (*,*) '  OUT OF TEMPERATURE RANGE'
        GOTO 99
      ENDIF
      IF (Tout .ge.  70. .and. Tout .le.  500.) irange = 1
      IF (Tout .gt. 500. .and. Tout .le. 1500.) irange = 2
      IF (Tout .gt. 1500.) irange = 3
c
        QT = Qcoef(ivec,irange,1)
     +       + Qcoef(ivec,irange,2)*Tout
     +       + Qcoef(ivec,irange,3)*Tout*Tout
     +       + Qcoef(ivec,irange,4)*Tout*Tout*Tout
     +       + Qcoef(ivec,irange,5)*Tout*Tout*Tout*Tout
c
   99 RETURN
      END

c**************************************
      BLOCK DATA QTdata
c**************************************
c$$$      IMPLICIT DOUBLE PRECISION (a-h,o-z)
c
c
c++
      PARAMETER (NMOL=36,Nspeci=85)
c++:  bd-QT
      common/Qtot/ Qcoef(Nspeci,3,5), Q296(Nspeci), aQ(Nspeci),
     + bQ(Nspeci), gj(Nspeci)
c
c...State independent degeneracy factors: gj
c...(includes general nuclear factor (P(2I+1)), (2S+1), and (2-dl0)
c... when applicable)
c              H2O              CO2                     O3
      DATA gj/1.,1.,6.,6.,  1.,2.,1.,6.,2.,12.,1.,6.,  1.,1.,1.,6.,6.,
c              N2O                CO             CH4        O2
     +  9.,6.,6.,9.,54.,  1.,2.,1.,6.,2.,12.,  1.,2.,3.,  1.,1.,6.,
c          NO        SO2    NO2    NH3   HNO3    OH        HF    HCl
     +  1.,1.,1.,  1.,1.,  3.,  3.,2.,  6.,  1.,1.,1.,  4.,  8.,8.,
c        HBr    HI     ClO      OCS          H2CO      HOCl         N2
     +  8.,8.,  12.,  1.,1.,  1.,1.,2.,1.,  1.,2.,1.,  8.,8.,  1,
c        HCN        CH3Cl  H2O2  C2H2   C2H6  PH3
     +  6.,12.,4.,  4.,4.,  1.,  1.,8.,  64.,  2.,
c      COF2,  SF6,  H2S,  HCOOH
     +  1.,  1.,  1.,1.,4.,  4.,
c        HO2, O,   ClONO2    NO+
     +   2.,  1.,   12.,12.,   3./
c
c...Total internal partition sums for T<=70 to <=500 K range:
c...   H2O  --   161
      DATA (Qcoef( 1,1,j),j=1,5)/-.44405E+01, .27678E+00,
     +                .12536E-02,-.48938E-06, 0.   /
c...   H2O  --   181
      DATA (Qcoef( 2,1,j),j=1,5)/-.43624E+01, .27647E+00,
     +                .12802E-02,-.52046E-06, 0.   /
c...   H2O  --   171
      DATA (Qcoef( 3,1,j),j=1,5)/-.25767E+02, .16458E+01,
     +                .76905E-02,-.31668E-05, 0.   /
c...   H2O  --   162
      DATA (Qcoef( 4,1,j),j=1,5)/-.23916E+02, .13793E+01,
     +                .61246E-02,-.21530E-05, 0.   /
c...   CO2  --   626
      DATA (Qcoef( 5,1,j),j=1,5)/-.13617E+01, .94899E+00,
     +               -.69259E-03, .25974E-05, 0.   /
c...   CO2  --   636
      DATA (Qcoef( 6,1,j),j=1,5)/-.20631E+01, .18873E+01,
     +               -.13669E-02, .54032E-05, 0.   /
c...   CO2  --   628
      DATA (Qcoef( 7,1,j),j=1,5)/-.29175E+01, .20114E+01,
     +               -.14786E-02, .55941E-05, 0.   /
c...   CO2  --   627
      DATA (Qcoef( 8,1,j),j=1,5)/-.16558E+02, .11733E+02,
     +               -.85844E-02, .32379E-04, 0.   /
c...   CO2  --   638
      DATA (Qcoef( 9,1,j),j=1,5)/-.44685E+01, .40330E+01,
     +               -.29590E-02, .11770E-04, 0.   /
c...   CO2  --   637
      DATA (Qcoef(10,1,j),j=1,5)/-.26263E+02, .23350E+02,
     +               -.17032E-01, .67532E-04, 0.   /
c...   CO2  --   828
      DATA (Qcoef(11,1,j),j=1,5)/-.14811E+01, .10667E+01,
     +               -.78758E-03, .30133E-05, 0.   /
c...   CO2  --   728
      DATA (Qcoef(12,1,j),j=1,5)/-.17600E+02, .12445E+02,
     +               -.91837E-02, .34915E-04, 0.   /
c...    O3  --   666
      DATA (Qcoef(13,1,j),j=1,5)/-.16443E+03, .69047E+01,
     +                .10396E-01, .26669E-04, 0.   /
c...    O3  --   668
      DATA (Qcoef(14,1,j),j=1,5)/-.35222E+03, .14796E+02,
     +                .21475E-01, .59891E-04, 0.   /
c...    O3  --   686
      DATA (Qcoef(15,1,j),j=1,5)/-.17466E+03, .72912E+01,
     +                .10093E-01, .29991E-04, 0.   /
c...    O3  --   667
      DATA (Qcoef(16,1,j),j=1,5)/-.20540E+04, .85998E+02,
     +                .12667E+00, .33026E-03, 0.   /
c...    O3  --   676
      DATA (Qcoef(17,1,j),j=1,5)/-.10148E+04, .42494E+02,
     +                .62586E-01, .16319E-03, 0.   /
c...   N2O  --   446
      DATA (Qcoef(18,1,j),j=1,5)/ .24892E+02, .14979E+02,
     +               -.76213E-02, .46310E-04, 0.   /
c...   N2O  --   456
      DATA (Qcoef(19,1,j),j=1,5)/ .36318E+02, .95497E+01,
     +               -.23943E-02, .26842E-04, 0.   /
c...   N2O  --   546
      DATA (Qcoef(20,1,j),j=1,5)/ .24241E+02, .10179E+02,
     +               -.43002E-02, .30425E-04, 0.   /
c...   N2O  --   448
      DATA (Qcoef(21,1,j),j=1,5)/ .67708E+02, .14878E+02,
     +               -.10730E-02, .34254E-04, 0.   /
c...   N2O  --   447
      DATA (Qcoef(22,1,j),j=1,5)/ .50069E+03, .84526E+02,
     +                .83494E-02, .17154E-03, 0.   /
c...    CO  --    26
      DATA (Qcoef(23,1,j),j=1,5)/ .27758E+00, .36290E+00,
     +               -.74669E-05, .14896E-07, 0.   /
c...    CO  --    36
      DATA (Qcoef(24,1,j),j=1,5)/ .53142E+00, .75953E+00,
     +               -.17810E-04, .35160E-07, 0.   /
c...    CO  --    28
      DATA (Qcoef(25,1,j),j=1,5)/ .26593E+00, .38126E+00,
     +               -.92083E-05, .18086E-07, 0.   /
c...    CO  --    27
      DATA (Qcoef(26,1,j),j=1,5)/ .16376E+01, .22343E+01,
     +               -.49025E-04, .97389E-07, 0.   /
c...    CO  --    38
      DATA (Qcoef(27,1,j),j=1,5)/ .51216E+00, .79978E+00,
     +               -.21784E-04, .42749E-07, 0.   /
c...    CO  --    37
      DATA (Qcoef(28,1,j),j=1,5)/ .32731E+01, .46577E+01,
     +               -.69833E-04, .18853E-06, 0.   /
c...   CH4  --   211
      DATA (Qcoef(29,1,j),j=1,5)/-.26479E+02, .11557E+01,
     +                .26831E-02, .15117E-05, 0.   /
c...   CH4  --   311
      DATA (Qcoef(30,1,j),j=1,5)/-.52956E+02, .23113E+01,
     +                .53659E-02, .30232E-05, 0.   /
c...   CH4  --   212
      DATA (Qcoef(31,1,j),j=1,5)/-.21577E+03, .93318E+01,
     +                .21779E-01, .12183E-04, 0.   /
c...    O2  --    66
      DATA (Qcoef(32,1,j),j=1,5)/ .35923E+00, .73534E+00,
     +               -.64870E-04, .13073E-06, 0.   /
c...    O2  --    68
      DATA (Qcoef(33,1,j),j=1,5)/-.40039E+01, .15595E+01,
     +               -.15357E-03, .30969E-06, 0.   /
c...    O2  --    67
      DATA (Qcoef(34,1,j),j=1,5)/-.23325E+02, .90981E+01,
     +               -.84435E-03, .17062E-05, 0.   /
c...    NO  --    46
      DATA (Qcoef(35,1,j),j=1,5)/-.25296E+02, .26349E+01,
     +                .58517E-02,-.52020E-05, 0.   /
c...    NO  --    56
      DATA (Qcoef(36,1,j),j=1,5)/-.14990E+02, .18240E+01,
     +                .40261E-02,-.35648E-05, 0.   /
c...    NO  --    48
      DATA (Qcoef(37,1,j),j=1,5)/-.26853E+02, .27816E+01,
     +                .61493E-02,-.54410E-05, 0.   /
c...   SO2  --   626
      DATA (Qcoef(38,1,j),j=1,5)/-.24056E+03, .11101E+02,
     +                .22164E-01, .52334E-04, 0.   /
c...   SO2  --   646
      DATA (Qcoef(39,1,j),j=1,5)/-.24167E+03, .11151E+02,
     +                .22270E-01, .52550E-04, 0.   /
c...   NO2  --   646
      DATA (Qcoef(40,1,j),j=1,5)/-.53042E+03, .24216E+02,
     +                .66856E-01, .43823E-04, 0.   /
c...   NH3  --  4111
      DATA (Qcoef(41,1,j),j=1,5)/-.42037E+02, .25976E+01,
     +                .13073E-01,-.62230E-05, 0.   /
c...   NH3  --  5111
      DATA (Qcoef(42,1,j),j=1,5)/-.28609E+02, .17272E+01,
     +                .87529E-02,-.41714E-05, 0.   /

c**********
c...  HNO3  --   146
c      DATA (Qcoef(43,1,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /

      DATA (Qcoef(43,1,j),j=1,5)/ -6.672718E+4, 1.462506E+3,
     +               -5.981021E+0, 1.414328E-2, 0.  /

c 1.414328E-2*x^3 + -5.981021E+0*x^2 + 1.462506E+3*x + -6.672718E+4

c...    OH  --    61
      DATA (Qcoef(44,1,j),j=1,5)/ .87390E+01, .15977E+00,
     +                .38291E-03,-.35669E-06, 0.   /
c...    OH  --    81
      DATA (Qcoef(45,1,j),j=1,5)/ .86770E+01, .16175E+00,
     +                .38223E-03,-.35466E-06, 0.   /
c...    OH  --    62
      DATA (Qcoef(46,1,j),j=1,5)/ .10239E+02, .43783E+00,
     +                .10477E-02,-.94570E-06, 0.   /
c...    HF  --    19
      DATA (Qcoef(47,1,j),j=1,5)/ .15486E+01, .13350E+00,
     +                .59154E-05,-.46889E-08, 0.   /
c...   HCl  --    15
      DATA (Qcoef(48,1,j),j=1,5)/ .28627E+01, .53122E+00,
     +                .67464E-05,-.16730E-08, 0.   /
c...   HCl  --    17
      DATA (Qcoef(49,1,j),j=1,5)/ .28617E+01, .53203E+00,
     +                .66553E-05,-.15168E-08, 0.   /
c...   HBr  --    19
      DATA (Qcoef(50,1,j),j=1,5)/ .27963E+01, .66532E+00,
     +                .34255E-05, .52274E-08, 0.   /
c...   HBr  --    11
      DATA (Qcoef(51,1,j),j=1,5)/ .27953E+01, .66554E+00,
     +                .32931E-05, .54823E-08, 0.   /
c...    HI  --    17
      DATA (Qcoef(52,1,j),j=1,5)/ .40170E+01, .13003E+01,
     +               -.11409E-04, .40026E-07, 0.   /
c...   ClO  --    56
      DATA (Qcoef(53,1,j),j=1,5)/ .90968E+02, .70918E+01,
     +                .11639E-01, .30145E-05, 0.   /
c...   ClO  --    76
      DATA (Qcoef(54,1,j),j=1,5)/ .92598E+02, .72085E+01,
     +                .11848E-01, .31305E-05, 0.   /
c...   OCS  --   622
      DATA (Qcoef(55,1,j),j=1,5)/-.93697E+00, .36090E+01,
     +               -.34552E-02, .17462E-04, 0.   /
c...   OCS  --   624
      DATA (Qcoef(56,1,j),j=1,5)/-.11536E+01, .37028E+01,
     +               -.35582E-02, .17922E-04, 0.   /
c...   OCS  --   632
      DATA (Qcoef(57,1,j),j=1,5)/-.61015E+00, .72200E+01,
     +               -.70044E-02, .36708E-04, 0.   /
c...   OCS  --   822
      DATA (Qcoef(58,1,j),j=1,5)/-.21569E+00, .38332E+01,
     +               -.36783E-02, .19177E-04, 0.   /
c...  H2CO  --   126
      DATA (Qcoef(59,1,j),j=1,5)/-.11760E+03, .46885E+01,
     +                .15088E-01, .35367E-05, 0.   /
c...  H2CO  --   136
      DATA (Qcoef(60,1,j),j=1,5)/-.24126E+03, .96134E+01,
     +                .30938E-01, .72579E-05, 0.   /
c...  H2CO  --   128
      DATA (Qcoef(61,1,j),j=1,5)/-.11999E+03, .52912E+01,
     +                .14686E-01, .43505E-05, 0.   /
c...  HOCl  --   165
      DATA (Qcoef(62,1,j),j=1,5)/-.73640E+03, .34149E+02,
     +                .93554E-01, .67409E-04, 0.   /
c...  HOCl  --   167
      DATA (Qcoef(63,1,j),j=1,5)/-.74923E+03, .34747E+02,
     +                .95251E-01, .68523E-04, 0.   /
c...    N2  --    44
      DATA (Qcoef(64,1,j),j=1,5)/ .13684E+01, .15756E+01,
     +               -.18511E-04, .38960E-07, 0.   /
c...   HCN  --   124
      DATA (Qcoef(65,1,j),j=1,5)/-.13992E+01, .29619E+01,
     +               -.17464E-02, .65937E-05, 0.   /
c...   HCN  --   134
      DATA (Qcoef(66,1,j),j=1,5)/-.25869E+01, .60744E+01,
     +               -.35719E-02, .13654E-04, 0.   /
c...   HCN  --   125
      DATA (Qcoef(67,1,j),j=1,5)/-.11408E+01, .20353E+01,
     +               -.12159E-02, .46375E-05, 0.   /
c... CH3Cl  --   215
      DATA (Qcoef(68,1,j),j=1,5)/-.91416E+03, .34081E+02,
     +                .75461E-02, .17933E-03, 0.   /
c... CH3Cl  --   217
      DATA (Qcoef(69,1,j),j=1,5)/-.92868E+03, .34621E+02,
     +                .76674E-02, .18217E-03, 0.   /
c...  H2O2  --  1661
      DATA (Qcoef(70,1,j),j=1,5)/-.36499E+03, .13712E+02,
     +                .38658E-01, .23052E-04, 0.   /
c...  C2H2  --  1221
      DATA (Qcoef(71,1,j),j=1,5)/-.83088E+01, .14484E+01,
     +               -.25946E-02, .84612E-05, 0.   /
c...  C2H2  --  1231
      DATA (Qcoef(72,1,j),j=1,5)/-.66736E+02, .11592E+02,
     +               -.20779E-01, .67719E-04, 0.   /


c**********
c...  C2H6  --  1221
c      DATA (Qcoef(73,1,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /
      DATA (Qcoef(73,1,j),j=1,5)/-1.198174E+4, 2.799115E+2,
     +              -7.416173E-1, 1.846289E-3, 0.   /

c 1.846289E-3*x^3 + -7.416173E-1*x^2 + 2.799115E+2*x + -1.198174E+4


c...   PH3  --  1111
      DATA (Qcoef(74,1,j),j=1,5)/-.15068E+03, .64718E+01,
     +                .12588E-01, .14759E-04, 0.   /
c...  COF2  --   269
      DATA (Qcoef(75,1,j),j=1,5)/-.54180E+04, .18868E+03,
     +               -.33139E+00, .18650E-02, 0.   /

c**********
c...   SF6  --    29
c      DATA (Qcoef(76,1,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /
      DATA (Qcoef(76,1,j),j=1,5)/7.892502E+6, -1.839926E+5,
     +             1.433742E+3, -4.510500E+0,  5.163613E-3/

c 5.163613E-3*x^4 + -4.510500E+0*x^3 + 1.433742E+3*x^2 + -1.839926E+5*x + 7.892502E+6


c...   H2S  --   121
      DATA (Qcoef(77,1,j),j=1,5)/-.15521E+02, .83130E+00,
     +                .33656E-02,-.85691E-06, 0.   /
c...   H2S  --   141
      DATA (Qcoef(78,1,j),j=1,5)/-.15561E+02, .83337E+00,
     +                .33744E-02,-.85937E-06, 0.   /
c...   H2S  --   131
      DATA (Qcoef(79,1,j),j=1,5)/-.62170E+02, .33295E+01,
     +                .13480E-01,-.34323E-05, 0.   /
c... HCOOH  --   126
      DATA (Qcoef(80,1,j),j=1,5)/-.29550E+04, .10349E+03,
     +               -.13146E+00, .87787E-03, 0.   /
c...   HO2  --   166
      DATA (Qcoef(81,1,j),j=1,5)/-.15684E+03, .74450E+01,
     +                .26011E-01,-.92704E-06, 0.   /

c**********
c...     O  --     6
c      DATA (Qcoef(82,1,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /

      DATA (Qcoef(82,1,j),j=1,5)/  1.0       , .00000E+00,
     +                 .00000E+00, .00000E+00, 0.   /


c**********
c...ClONO2  --  5646
c      DATA (Qcoef(83,1,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /
      DATA (Qcoef(83,1,j),j=1,5)/2.516742E+6, -5.996989E+4,
     +             5.111204E+2, -1.665663E+0,  2.399248E-3/

c 2.399248E-3*x^4 + -1.665663E+0*x^3 + 5.111204E+2*x^2 + -5.996989E+4*x + 2.516742E+6


c**********
c...ClONO2  --  7646
c      DATA (Qcoef(84,1,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /
      DATA (Qcoef(84,1,j),j=1,5)/2.601684E+6, -6.187640E+4,
     +            5.260888E+2,  -1.711186E+0,  2.461028E-3/

c 2.461028E-3*x^4 + -1.711186E+0*x^3 + 5.260888E+2*x^2 + -6.187640E+4*x + 2.601684E+6

c...   NO+  --    46
      DATA (Qcoef(85,1,j),j=1,5)/ .91798E+00, .10416E+01,
     +               -.11614E-04, .24499E-07, 0.   /
c
c...Total internal partition sums for T>500 to <=1500 K range:
c...   H2O  --   161
      DATA (Qcoef( 1,2,j),j=1,5)/-.94327E+02, .81903E+00,
     +                .74005E-04, .42437E-06, 0.   /
c...   H2O  --   181
      DATA (Qcoef( 2,2,j),j=1,5)/-.95686E+02, .82839E+00,
     +                .68311E-04, .42985E-06, 0.   /
c...   H2O  --   171
      DATA (Qcoef( 3,2,j),j=1,5)/-.57133E+03, .49480E+01,
     +                .41517E-03, .25599E-05, 0.   /
c...   H2O  --   162
      DATA (Qcoef( 4,2,j),j=1,5)/-.53366E+03, .44246E+01,
     +               -.46935E-03, .29548E-05, 0.   /
c...   CO2  --   626
      DATA (Qcoef( 5,2,j),j=1,5)/-.50925E+03, .32766E+01,
     +               -.40601E-02, .40907E-05, 0.   /
c...   CO2  --   636
      DATA (Qcoef( 6,2,j),j=1,5)/-.11171E+04, .70346E+01,
     +               -.89063E-02, .88249E-05, 0.   /
c...   CO2  --   628
      DATA (Qcoef( 7,2,j),j=1,5)/-.11169E+04, .71299E+01,
     +               -.89194E-02, .89268E-05, 0.   /
c...   CO2  --   627
      DATA (Qcoef( 8,2,j),j=1,5)/-.66816E+04, .42402E+02,
     +               -.53269E-01, .52774E-04, 0.   /
c...   CO2  --   638
      DATA (Qcoef( 9,2,j),j=1,5)/-.25597E+04, .15855E+02,
     +               -.20440E-01, .19855E-04, 0.   /
c...   CO2  --   637
      DATA (Qcoef(10,2,j),j=1,5)/-.14671E+05, .91204E+02,
     +               -.11703E+00, .11406E-03, 0.   /
c...   CO2  --   828
      DATA (Qcoef(11,2,j),j=1,5)/-.63775E+03, .40047E+01,
     +               -.50950E-02, .50023E-05, 0.   /
c...   CO2  --   728
      DATA (Qcoef(12,2,j),j=1,5)/-.73235E+04, .46140E+02,
     +               -.58473E-01, .57573E-04, 0.   /
c...    O3  --   666
      DATA (Qcoef(13,2,j),j=1,5)/-.11725E+05, .66515E+02,
     +               -.96010E-01, .94001E-04, 0.   /
c...    O3  --   668
      DATA (Qcoef(14,2,j),j=1,5)/-.25409E+05, .14393E+03,
     +               -.20850E+00, .20357E-03, 0.   /
c...    O3  --   686
      DATA (Qcoef(15,2,j),j=1,5)/-.12624E+05, .71391E+02,
     +               -.10383E+00, .10106E-03, 0.   /
c...    O3  --   667
      DATA (Qcoef(16,2,j),j=1,5)/-.14000E+06, .79825E+03,
     +               -.11465E+01, .11372E-02, 0.   /
c...    O3  --   676
      DATA (Qcoef(17,2,j),j=1,5)/-.69175E+05, .39442E+03,
     +               -.56650E+00, .56189E-03, 0.   /
c...   N2O  --   446
      DATA (Qcoef(18,2,j),j=1,5)/-.12673E+05, .75128E+02,
     +               -.10092E+00, .95557E-04, 0.   /
c...   N2O  --   456
      DATA (Qcoef(19,2,j),j=1,5)/-.90045E+04, .52833E+02,
     +               -.71771E-01, .67297E-04, 0.   /
c...   N2O  --   546
      DATA (Qcoef(20,2,j),j=1,5)/-.89960E+04, .53096E+02,
     +               -.71784E-01, .67592E-04, 0.   /
c...   N2O  --   448
      DATA (Qcoef(21,2,j),j=1,5)/-.13978E+05, .82338E+02,
     +               -.11167E+00, .10507E-03, 0.   /
c...   N2O  --   447
      DATA (Qcoef(22,2,j),j=1,5)/-.79993E+05, .47265E+03,
     +               -.63804E+00, .60218E-03, 0.   /
c...    CO  --    26
      DATA (Qcoef(23,2,j),j=1,5)/ .90723E+01, .33263E+00,
     +                .11806E-04, .27035E-07, 0.   /
c...    CO  --    36
      DATA (Qcoef(24,2,j),j=1,5)/ .20651E+02, .68810E+00,
     +                .34217E-04, .55823E-07, 0.   /
c...    CO  --    28
      DATA (Qcoef(25,2,j),j=1,5)/ .98497E+01, .34713E+00,
     +                .15290E-04, .28766E-07, 0.   /
c...    CO  --    27
      DATA (Qcoef(26,2,j),j=1,5)/ .58498E+02, .20351E+01,
     +                .87684E-04, .16554E-06, 0.   /
c...    CO  --    38
      DATA (Qcoef(27,2,j),j=1,5)/ .23511E+02, .71565E+00,
     +                .46681E-04, .58223E-07, 0.   /
c...    CO  --    37
      DATA (Qcoef(28,2,j),j=1,5)/ .11506E+03, .42727E+01,
     +                .17494E-03, .34413E-06, 0.   /
c...   CH4  --   211
      DATA (Qcoef(29,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   CH4  --   311
      DATA (Qcoef(30,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   CH4  --   212
      DATA (Qcoef(31,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...    O2  --    66
      DATA (Qcoef(32,2,j),j=1,5)/ .36539E+02, .57015E+00,
     +                .16332E-03, .45568E-07, 0.   /
c...    O2  --    68
      DATA (Qcoef(33,2,j),j=1,5)/ .77306E+02, .11818E+01,
     +                .38661E-03, .89415E-07, 0.   /
c...    O2  --    67
      DATA (Qcoef(34,2,j),j=1,5)/ .44281E+03, .69531E+01,
     +                .21669E-02, .53053E-06, 0.   /
c...    NO  --    46
      DATA (Qcoef(35,2,j),j=1,5)/-.78837E+02, .39173E+01,
     +                .80657E-03, .22042E-06, 0.   /
c...    NO  --    56
      DATA (Qcoef(36,2,j),j=1,5)/-.67000E+02, .27874E+01,
     +                .45181E-03, .21161E-06, 0.   /
c...    NO  --    48
      DATA (Qcoef(37,2,j),j=1,5)/-.98460E+02, .42347E+01,
     +                .71550E-03, .32213E-06, 0.   /
c...   SO2  --   626
      DATA (Qcoef(38,2,j),j=1,5)/-.21162E+05, .11846E+03,
     +               -.16648E+00, .16825E-03, 0.   /
c...   SO2  --   646
      DATA (Qcoef(39,2,j),j=1,5)/-.21251E+05, .11896E+03,
     +               -.16717E+00, .16895E-03, 0.   /
c...   NO2  --   646
      DATA (Qcoef(40,2,j),j=1,5)/-.27185E+05, .16489E+03,
     +               -.19540E+00, .22024E-03, 0.   /
c...   NH3  --  4111
      DATA (Qcoef(41,2,j),j=1,5)/-.47139E+03, .54035E+01,
     +                .64491E-02,-.72674E-06, 0.   /
c...   NH3  --  5111
      DATA (Qcoef(42,2,j),j=1,5)/-.31638E+03, .36086E+01,
     +                .43087E-02,-.48207E-06, 0.   /


c**********
c...  HNO3  --   146
c      DATA (Qcoef(43,2,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /

      DATA (Qcoef(43,2,j),j=1,5)/-2.155375E+8, 8.804353E+5,
     +              -1.165682E+3, 5.170532E-1, 0.   /

c 5.170532E-1*x^3 + -1.165682E+3*x^2 + 8.804353E+5*x + -2.155375E+8

c...    OH  --    61
      DATA (Qcoef(44,2,j),j=1,5)/-.88840E+01, .30202E+00,
     +               -.15565E-04, .14330E-07, 0.   /
c...    OH  --    81
      DATA (Qcoef(45,2,j),j=1,5)/-.51535E+01, .29076E+00,
     +               -.72340E-05, .20702E-07, 0.   /
c...    OH  --    62
      DATA (Qcoef(46,2,j),j=1,5)/-.41683E+02, .83890E+00,
     +               -.36063E-04, .38083E-07, 0.   /
c...    HF  --    19
      DATA (Qcoef(47,2,j),j=1,5)/-.36045E-01, .14220E+00,
     +               -.10755E-04, .65523E-08, 0.   /
c...   HCl  --    15
      DATA (Qcoef(48,2,j),j=1,5)/ .25039E+01, .54430E+00,
     +               -.38656E-04, .39793E-07, 0.   /
c...   HCl  --    17
      DATA (Qcoef(49,2,j),j=1,5)/ .14998E+01, .54847E+00,
     +               -.42209E-04, .41029E-07, 0.   /
c...   HBr  --    19
      DATA (Qcoef(50,2,j),j=1,5)/ .67229E+01, .66356E+00,
     +               -.33749E-04, .54818E-07, 0.   /
c...   HBr  --    11
      DATA (Qcoef(51,2,j),j=1,5)/ .67752E+01, .66363E+00,
     +               -.33655E-04, .54823E-07, 0.   /
c...    HI  --    17
      DATA (Qcoef(52,2,j),j=1,5)/ .29353E+02, .12220E+01,
     +                .10209E-04, .10719E-06, 0.   /
c...   ClO  --    56
      DATA (Qcoef(53,2,j),j=1,5)/ .22662E+03, .61093E+01,
     +                .14454E-01, .16928E-06, 0.   /
c...   ClO  --    76
      DATA (Qcoef(54,2,j),j=1,5)/ .23304E+03, .61805E+01,
     +                .14797E-01, .16629E-06, 0.   /
c...   OCS  --   622
      DATA (Qcoef(55,2,j),j=1,5)/-.54125E+04, .29749E+02,
     +               -.44698E-01, .38878E-04, 0.   /
c...   OCS  --   624
      DATA (Qcoef(56,2,j),j=1,5)/-.55472E+04, .30489E+02,
     +               -.45809E-01, .39847E-04, 0.   /
c...   OCS  --   632
      DATA (Qcoef(57,2,j),j=1,5)/-.11863E+05, .64745E+02,
     +               -.98318E-01, .84563E-04, 0.   /
c...   OCS  --   822
      DATA (Qcoef(58,2,j),j=1,5)/-.61288E+04, .33520E+02,
     +               -.50734E-01, .43792E-04, 0.   /
c...  H2CO  --   126
      DATA (Qcoef(59,2,j),j=1,5)/-.17628E+05, .91794E+02,
     +               -.13055E+00, .89336E-04, 0.   /
c...  H2CO  --   136
      DATA (Qcoef(60,2,j),j=1,5)/-.36151E+05, .18825E+03,
     +               -.26772E+00, .18321E-03, 0.   /
c...  H2CO  --   128
      DATA (Qcoef(61,2,j),j=1,5)/-.17628E+05, .91794E+02,
     +               -.13055E+00, .89336E-04, 0.   /
c...  HOCl  --   165
      DATA (Qcoef(62,2,j),j=1,5)/-.24164E+05, .15618E+03,
     +               -.13206E+00, .21900E-03, 0.   /
c...  HOCl  --   167
      DATA (Qcoef(63,2,j),j=1,5)/-.24592E+05, .15895E+03,
     +               -.13440E+00, .22289E-03, 0.   /
c...    N2  --    44
      DATA (Qcoef(64,2,j),j=1,5)/ .27907E+02, .14972E+01,
     +               -.70424E-05, .11734E-06, 0.   /
c...   HCN  --   124
      DATA (Qcoef(65,2,j),j=1,5)/-.78078E+03, .61725E+01,
     +               -.53816E-02, .73379E-05, 0.   /
c...   HCN  --   134
      DATA (Qcoef(66,2,j),j=1,5)/-.16309E+04, .12801E+02,
     +               -.11242E-01, .15268E-04, 0.   /
c...   HCN  --   125
      DATA (Qcoef(67,2,j),j=1,5)/-.56301E+03, .43794E+01,
     +               -.38928E-02, .52467E-05, 0.   /
c... CH3Cl  --   215
      DATA (Qcoef(68,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c... CH3Cl  --   217
      DATA (Qcoef(69,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...  H2O2  --  1661
      DATA (Qcoef(70,2,j),j=1,5)/-.27583E+05, .15064E+03,
     +               -.19917E+00, .16977E-03, 0.   /
c...  C2H2  --  1221
      DATA (Qcoef(71,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...  C2H2  --  1231
      DATA (Qcoef(72,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /

c**********
c...  C2H6  --  1221
      DATA (Qcoef(73,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   PH3  --  1111
      DATA (Qcoef(74,2,j),j=1,5)/-.28390E+05, .14463E+03,
     +               -.21473E+00, .14346E-03, 0.   /
c...  COF2  --   269
      DATA (Qcoef(75,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   SF6  --    29
      DATA (Qcoef(76,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   H2S  --   121
      DATA (Qcoef(77,2,j),j=1,5)/-.37572E+03, .29157E+01,
     +               -.98642E-03, .24113E-05, 0.   /
c...   H2S  --   141
      DATA (Qcoef(78,2,j),j=1,5)/-.37668E+03, .29231E+01,
     +               -.98894E-03, .24174E-05, 0.   /
c...   H2S  --   131
      DATA (Qcoef(79,2,j),j=1,5)/-.15049E+04, .11678E+02,
     +               -.39510E-02, .96579E-05, 0.   /
c... HCOOH  --   126
      DATA (Qcoef(80,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   HO2  --   166
      DATA (Qcoef(81,2,j),j=1,5)/-.32576E+04, .25539E+02,
     +               -.12803E-01, .29358E-04, 0.   /

c**********
c...     O  --     6
c      DATA (Qcoef(82,2,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                 .00000E+00, .00000E+00, 0.   /

      DATA (Qcoef(82,2,j),j=1,5)/  1.0       , .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /

c...ClONO2  --  5646
      DATA (Qcoef(83,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...ClONO2  --  7646
      DATA (Qcoef(84,2,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   NO+  --    46
      DATA (Qcoef(85,2,j),j=1,5)/ .17755E+02, .99262E+00,
     +               -.70814E-05, .76699E-07, 0.   /
c
c...total internal partition sums for T>1500 <=3005 K range:
c...   H2O  --   161
      DATA (Qcoef( 1,3,j),j=1,5)/-.11727E+04, .29261E+01,
     +               -.13299E-02, .74356E-06, 0.   /
c...   H2O  --   181
      DATA (Qcoef( 2,3,j),j=1,5)/-.17914E+04, .39835E+01,
     +               -.19288E-02, .86144E-06, 0.   /
c...   H2O  --   171
      DATA (Qcoef( 3,3,j),j=1,5)/-.10665E+05, .23729E+02,
     +               -.11474E-01, .51294E-05, 0.   /
c...   H2O  --   162
      DATA (Qcoef( 4,3,j),j=1,5)/-.12585E+05, .26707E+02,
     +               -.14454E-01, .59457E-05, 0.   /
c...   CO2  --   626
      DATA (Qcoef( 5,3,j),j=1,5)/-.34938E+05, .66965E+02,
     +               -.44010E-01, .12662E-04, 0.   /
c...   CO2  --   636
      DATA (Qcoef( 6,3,j),j=1,5)/-.76420E+05, .14638E+03,
     +               -.96343E-01, .27589E-04, 0.   /
c...   CO2  --   628
      DATA (Qcoef( 7,3,j),j=1,5)/-.76677E+05, .14693E+03,
     +               -.96622E-01, .27746E-04, 0.   /
c...   CO2  --   627
      DATA (Qcoef( 8,3,j),j=1,5)/-.44040E+06, .84397E+03,
     +               -.55484E+00, .15946E-03, 0.   /
c...   CO2  --   638
      DATA (Qcoef( 9,3,j),j=1,5)/-.16856E+06, .32278E+03,
     +               -.21259E+00, .60747E-04, 0.   /
c...   CO2  --   637
      DATA (Qcoef(10,3,j),j=1,5)/-.96531E+06, .18487E+04,
     +               -.12172E+01, .34817E-03, 0.   /
c...   CO2  --   828
      DATA (Qcoef(11,3,j),j=1,5)/-.42074E+05, .80599E+02,
     +               -.53035E-01, .15202E-04, 0.   /
c...   CO2  --   728
      DATA (Qcoef(12,3,j),j=1,5)/-.48298E+06, .92535E+03,
     +               -.60873E+00, .17463E-03, 0.   /
c...    O3  --   666
      DATA (Qcoef(13,3,j),j=1,5)/-.61205E+06, .11896E+04,
     +               -.80924E+00, .24833E-03, 0.   /
c...    O3  --   668
      DATA (Qcoef(14,3,j),j=1,5)/-.13289E+07, .25826E+04,
     +               -.17574E+01, .53877E-03, 0.   /
c...    O3  --   686
      DATA (Qcoef(15,3,j),j=1,5)/-.66163E+06, .12857E+04,
     +               -.87521E+00, .26802E-03, 0.   /
c...    O3  --   667
      DATA (Qcoef(16,3,j),j=1,5)/-.70636E+07, .13772E+05,
     +               -.94024E+01, .29276E-02, 0.   /
c...    O3  --   676
      DATA (Qcoef(17,3,j),j=1,5)/-.34902E+07, .68051E+04,
     +               -.46459E+01, .14466E-02, 0.   /
c...   N2O  --   446
      DATA (Qcoef(18,3,j),j=1,5)/-.83406E+06, .15951E+04,
     +               -.10534E+01, .29849E-03, 0.   /
c...   N2O  --   456
      DATA (Qcoef(19,3,j),j=1,5)/-.59281E+06, .11334E+04,
     +               -.74907E+00, .21164E-03, 0.   /
c...   N2O  --   546
      DATA (Qcoef(20,3,j),j=1,5)/-.59301E+06, .11339E+04,
     +               -.74918E+00, .21193E-03, 0.   /
c...   N2O  --   448
      DATA (Qcoef(21,3,j),j=1,5)/-.92317E+06, .17651E+04,
     +               -.11664E+01, .32984E-03, 0.   /
c...   N2O  --   447
      DATA (Qcoef(22,3,j),j=1,5)/-.52739E+07, .10085E+05,
     +               -.66623E+01, .18858E-02, 0.   /
c...    CO  --    26
      DATA (Qcoef(23,3,j),j=1,5)/ .63418E+02, .20760E+00,
     +                .10895E-03, .19844E-08, 0.   /
c...    CO  --    36
      DATA (Qcoef(24,3,j),j=1,5)/ .13265E+03, .43434E+00,
     +                .22794E-03, .41523E-08, 0.   /
c...    CO  --    28
      DATA (Qcoef(25,3,j),j=1,5)/ .66581E+02, .21800E+00,
     +                .11441E-03, .20839E-08, 0.   /
c...    CO  --    27
      DATA (Qcoef(26,3,j),j=1,5)/ .39033E+03, .12780E+01,
     +                .67066E-03, .12218E-07, 0.   /
c...    CO  --    38
      DATA (Qcoef(27,3,j),j=1,5)/ .13959E+03, .45717E+00,
     +                .23991E-03, .43712E-08, 0.   /
c...    CO  --    37
      DATA (Qcoef(28,3,j),j=1,5)/ .81756E+03, .26767E+01,
     +                .14046E-02, .25378E-07, 0.   /
c...   CH4  --   211
      DATA (Qcoef(29,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   CH4  --   311
      DATA (Qcoef(30,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   CH4  --   212
      DATA (Qcoef(31,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...    O2  --    66
      DATA (Qcoef(32,3,j),j=1,5)/ .76324E+01, .58006E+00,
     +                .18941E-03, .27822E-07, 0.   /
c...    O2  --    68
      DATA (Qcoef(33,3,j),j=1,5)/ .16157E+02, .12282E+01,
     +                .40112E-03, .58919E-07, 0.   /
c...    O2  --    67
      DATA (Qcoef(34,3,j),j=1,5)/ .94397E+02, .71717E+01,
     +                .23423E-02, .34425E-06, 0.   /
c...    NO  --    46
      DATA (Qcoef(35,3,j),j=1,5)/ .52033E+03, .26381E+01,
     +                .17177E-02, .17933E-07, 0.   /
c...    NO  --    56
      DATA (Qcoef(36,3,j),j=1,5)/ .35655E+03, .18125E+01,
     +                .12126E-02, .12110E-07, 0.   /
c...    NO  --    48
      DATA (Qcoef(37,3,j),j=1,5)/ .54190E+03, .27581E+01,
     +                .18694E-02, .18266E-07, 0.   /
c...   SO2  --   626
      DATA (Qcoef(38,3,j),j=1,5)/-.10718E+07, .20831E+04,
     +               -.14138E+01, .43806E-03, 0.   /
c...   SO2  --   646
      DATA (Qcoef(39,3,j),j=1,5)/-.10762E+07, .20918E+04,
     +               -.14196E+01, .43988E-03, 0.   /
c...   NO2  --   646
      DATA (Qcoef(40,3,j),j=1,5)/-.12837E+07, .25067E+04,
     +               -.16761E+01, .53904E-03, 0.   /
c...   NH3  --  4111
      DATA (Qcoef(41,3,j),j=1,5)/-.17334E+04, .80988E+01,
     +                .44771E-02,-.24084E-06, 0.   /
c...   NH3  --  5111
      DATA (Qcoef(42,3,j),j=1,5)/-.11656E+04, .54254E+01,
     +                .29809E-02,-.15750E-06, 0.   /

c**********
c...  HNO3  --   146
c      DATA (Qcoef(43,3,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /

      DATA (Qcoef(43,3,j),j=1,5)/-1.425802E+11, 2.311441E+8,
     +             -1.248681E+5,  2.268254E+1 , 0.  /

c 2.268254E+1*x^3 + -1.248681E+5*x^2 + 2.311441E+8*x + -1.425802E+11

c...    OH  --    61
      DATA (Qcoef(44,3,j),j=1,5)/ .33750E+02, .22130E+00,
     +                .35953E-04, .32366E-08, 0.   /
c...    OH  --    81
      DATA (Qcoef(45,3,j),j=1,5)/ .42716E+02, .18843E+00,
     +                .67175E-04, .23903E-08, 0.   /
c...    OH  --    62
      DATA (Qcoef(46,3,j),j=1,5)/ .72913E+02, .62430E+00,
     +                .99073E-04, .94503E-08, 0.   /
c...    HF  --    19
      DATA (Qcoef(47,3,j),j=1,5)/ .18423E+02, .10799E+00,
     +                .10568E-04, .20752E-08, 0.   /
c...   HCl  --    15
      DATA (Qcoef(48,3,j),j=1,5)/ .92445E+02, .35539E+00,
     +                .96272E-04, .71602E-08, 0.   /
c...   HCl  --    17
      DATA (Qcoef(49,3,j),j=1,5)/ .92519E+02, .35592E+00,
     +                .96492E-04, .71775E-08, 0.   /
c...   HBr  --    19
      DATA (Qcoef(50,3,j),j=1,5)/ .11692E+03, .42161E+00,
     +                .14690E-03, .92595E-08, 0.   /
c...   HBr  --    11
      DATA (Qcoef(51,3,j),j=1,5)/ .11700E+03, .42161E+00,
     +                .14703E-03, .92525E-08, 0.   /
c...    HI  --    17
      DATA (Qcoef(52,3,j),j=1,5)/ .22138E+03, .78595E+00,
     +                .34579E-03, .20348E-07, 0.   /
c...   ClO  --    56
      DATA (Qcoef(53,3,j),j=1,5)/ .37348E+03, .56800E+01,
     +                .14805E-01, .23168E-06, 0.   /
c...   ClO  --    76
      DATA (Qcoef(54,3,j),j=1,5)/ .38100E+03, .57530E+01,
     +                .15142E-01, .23652E-06, 0.   /
c...   OCS  --   622
      DATA (Qcoef(55,3,j),j=1,5)/-.37301E+06, .71169E+03,
     +               -.47328E+00, .13049E-03, 0.   /
c...   OCS  --   624
      DATA (Qcoef(56,3,j),j=1,5)/-.38232E+06, .72945E+03,
     +               -.48509E+00, .13375E-03, 0.   /
c...   OCS  --   632
      DATA (Qcoef(57,3,j),j=1,5)/-.82204E+06, .15682E+04,
     +               -.10435E+01, .28668E-03, 0.   /
c...   OCS  --   822
      DATA (Qcoef(58,3,j),j=1,5)/-.42390E+06, .80869E+03,
     +               -.53803E+00, .14798E-03, 0.   /
c...  H2CO  --   126
      DATA (Qcoef(59,3,j),j=1,5)/-.24906E+07, .45519E+04,
     +               -.28336E+01, .64198E-03, 0.   /
c...  H2CO  --   136
      DATA (Qcoef(60,3,j),j=1,5)/-.51075E+07, .93349E+04,
     +               -.58110E+01, .13165E-02, 0.   /
c...  H2CO  --   128
      DATA (Qcoef(61,3,j),j=1,5)/-.24906E+07, .45519E+04,
     +               -.28336E+01, .64198E-03, 0.   /
c...  HOCl  --   165
      DATA (Qcoef(62,3,j),j=1,5)/-.11326E+07, .22197E+04,
     +               -.14357E+01, .49952E-03, 0.   /
c...  HOCl  --   167
      DATA (Qcoef(63,3,j),j=1,5)/-.11527E+07, .22590E+04,
     +               -.14612E+01, .50838E-03, 0.   /
c...    N2  --    44
      DATA (Qcoef(64,3,j),j=1,5)/ .27986E+03, .93070E+00,
     +                .42409E-03, .95573E-08, 0.   /
c...   HCN  --   124
      DATA (Qcoef(65,3,j),j=1,5)/-.51989E+05, .10057E+03,
     +               -.64310E-01, .19844E-04, 0.   /
c...   HCN  --   134
      DATA (Qcoef(66,3,j),j=1,5)/-.10838E+06, .20960E+03,
     +               -.13411E+00, .41345E-04, 0.   /
c...   HCN  --   125
      DATA (Qcoef(67,3,j),j=1,5)/-.37363E+05, .72225E+02,
     +               -.46251E-01, .14237E-04, 0.   /
c... CH3Cl  --   215
      DATA (Qcoef(68,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c... CH3Cl  --   217
      DATA (Qcoef(69,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...  H2O2  --  1661
      DATA (Qcoef(70,3,j),j=1,5)/-.26863E+07, .49815E+04,
     +               -.31584E+01, .78351E-03, 0.   /
c...  C2H2  --  1221
      DATA (Qcoef(71,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...  C2H2  --  1231
      DATA (Qcoef(72,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /

c**********
c...  C2H6  --  1221
      DATA (Qcoef(73,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /

c...   PH3  --  1111
      DATA (Qcoef(74,3,j),j=1,5)/-.44074E+07, .80563E+04,
     +               -.50179E+01, .11272E-02, 0.   /
c...  COF2  --   269
      DATA (Qcoef(75,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   SF6  --    29
      DATA (Qcoef(76,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   H2S  --   121
      DATA (Qcoef(77,3,j),j=1,5)/-.10043E+05, .20827E+02,
     +               -.12249E-01, .48236E-05, 0.   /
c...   H2S  --   141
      DATA (Qcoef(78,3,j),j=1,5)/-.10069E+05, .20881E+02,
     +               -.12280E-01, .48359E-05, 0.   /
c...   H2S  --   131
      DATA (Qcoef(79,3,j),j=1,5)/-.40225E+05, .83420E+02,
     +               -.49061E-01, .19320E-04, 0.   /
c... HCOOH  --   126
      DATA (Qcoef(80,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   HO2  --   166
      DATA (Qcoef(81,3,j),j=1,5)/-.13056E+06, .26188E+03,
     +               -.16161E+00, .61250E-04, 0.   /

c**********
c...     O  --     6
c      DATA (Qcoef(82,3,j),j=1,5)/-.10000E+01, .00000E+00,
c     +                .00000E+00, .00000E+00, 0.   /

      DATA (Qcoef(82,3,j),j=1,5)/  1.0       , .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /

c...ClONO2  --  5646
      DATA (Qcoef(83,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...ClONO2  --  7646
      DATA (Qcoef(84,3,j),j=1,5)/-.10000E+01, .00000E+00,
     +                .00000E+00, .00000E+00, 0.   /
c...   NO+  --    46
      DATA (Qcoef(85,3,j),j=1,5)/ .18634E+03, .61771E+00,
     +                .27607E-03, .45828E-08, 0.   /
c
c                    H2O 161,         181,         171,
      DATA q296/ .174626E+03, .176141E+03, .105306E+04,
c               162;     CO2 626,         636,         628,         627,
     +  .865122E+03, .286219E+03, .576928E+03, .607978E+03, .354389E+04,
c               638,         637,         828,         728;      O3 666,
     +  .123528E+04, .714432E+04, .323407E+03, .376700E+04, .348186E+04,
c               668,         686,         667,         676;     N2O 446,
     +  .746207E+04, .364563E+04, .430647E+05, .212791E+05, .499183E+04,
c               456,         546,         448,         447;       CO 26,
     +  .334938E+04, .344940E+04, .526595E+04, .307008E+05, .107428E+03,
c                36,          28,          27,          38,          37;
     +  .224704E+03, .112781E+03, .661209E+03, .236447E+03, .138071E+04,
c           CH4 211,         311,         212;       O2 66,          68,
     +  .589908E+03, .117974E+04, .477061E+04, .215726E+03, .452188E+03,
c                67;      NO  46,          56,          48;     SO2 626,
     +  .263998E+04, .113243E+04, .785200E+03, .119417E+04, .634449E+04,
c               646;     NO2 646;    NH3 4111,        5111;    HNO3 146;
     +  .637321E+04, .136318E+05, .171089E+04, .114134E+04, .213822E+06,
c             OH 61,         81,           62;       HF 19;      HCl 15,
     +  .803295E+02, .808460E+02, .207108E+03, .414625E+02, .160650E+03,
c                17;      HBr 19,          11;       HI 17;      ClO 56,
     +  .160887E+03, .200165E+03, .200227E+03, .388948E+03, .328810E+04,
c                76;     OCS 622,         624,         632,         822;
     +  .334560E+04, .121746E+04, .124793E+04, .247482E+04, .130948E+04,
c          H2CO 126,         136,         128;    HOCl 165,         167;
     +  .268388E+04, .550322E+04, .284573E+04, .193166E+05, .196584E+05,
c             N2 44;     HCN 124,         134,         125;   CH3Cl 215,
     +  .467136E+03, .893323E+03, .183657E+04, .615046E+03, .144858E+05,
c               217;   H2O2 1661;   C2H2 1221,        1231,   C2H6 1221;
     +  .147153E+05, .767871E+04, .412519E+03, .330014E+04, .546265E+05,
c          PH3 1111;    COF2 269;      SF6 29;     H2S 121,         141,
     +  .325067E+04, .697632E+05, .162242E+07, .503204E+03, .504486E+03,
c               131;   HCOOH 126;     HO2 166;        O 6;  ClONO2 5646,
     +  .201546E+04, .389257E+05, .430184E+04,-.100000E+01, .212829E+07,
c              7646;      NO+ 46;
     +  .218246E+07, .308855E+03/
      END

      BLOCK DATA BDMOL
C
C     LAST MODIFIED JANUARY 17, 1991
C
      PARAMETER (NTMOL=36,NSPECI=85)
      CHARACTER*6 MOLID
      COMMON /MOLNAM/ MOLID(0:NTMOL)
C
      DATA (MOLID(I),I=0,NTMOL)/   '  ALL ',
     *  '  H2O ','  CO2 ','   O3 ','  N2O ','   CO ','  CH4 ','   O2 ',
     *  '   NO ','  SO2 ','  NO2 ','  NH3 ',' HNO3 ','   OH ','   HF ',
     *  '  HCL ','  HBR ','   HI ','  CLO ','  OCS ',' H2CO ',' HOCL ',
     *  '   N2 ','  HCN ','CH3CL ',' H2O2 ',' C2H2 ',' C2H6 ','  PH3 ',
     *  ' COF2 ','  SF6 ','  H2S ','HCOOH ','  HO2 ','    O ','CLONO2',
     *  '  NO+ ' /
C
      END

      SUBROUTINE R1PRNT (V1P,DVP,NLIM,R1,JLO,NPTS,MFILE,IENTER) 3
C
      IMPLICIT REAL*8           (V)
C
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      DIMENSION R1(*)
C
C     THIS SUBROUTINE PRINTS THE FIRST NPTS VALUES STARTING AT JLO
C     AND THE LAST NPTS VALUES ENDING AT NLIM OF THE R1 ARRAY
C
      IF (NPTS.LE.0) RETURN
      IF (IENTER.LT.1) WRITE (IPR,900)
      WRITE (IPR,905)
      IENTER = IENTER+1
      JHI = JLO+NLIM-1
      NNPTS = NPTS
      IF (NPTS.GT.(NLIM/2)+1) NNPTS = (NLIM/2)+1
      JLOLIM = JLO+NNPTS-1
      JHILIM = JHI-NNPTS+1
      DO 10 KK = 1, NNPTS
         J = JLO+KK-1
         VJ = V1P+FLOAT(J-JLO)*DVP
         IK = JHILIM+KK-1
         VK = V1P+FLOAT(IK-JLO)*DVP
         WRITE (IPR,910) J,VJ,R1(J),IK,VK,R1(IK)
   10 CONTINUE
C
      RETURN
C
  900 FORMAT ('0 ','LOCATION  WAVENUMBER',2X,'OPT. DEPTH',27X,
     *        'LOCATION   WAVENUMBER',2X,'OPT. DEPTH')
  905 FORMAT (' ')
  910 FORMAT (I8,2X,F12.6,1P,E15.7,0P,20X,I8,2X,F12.6,1P,E15.7)
C
      END

      SUBROUTINE LINF4 (V1L4,V2L4) 1,25
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE LINF4 READS THE LINES AND SHRINKS THE LINES FOR LBLF4
C
      PARAMETER (NTMOL=36,NSPECI=85)
C
      COMMON /ISVECT/ ISOVEC(NTMOL),ISO82(NSPECI),ISONM(NTMOL),
     *                SMASSI(NSPECI)
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
C
      REAL*8             HID,HMOLIL,HID1,HLINHD
C
      COMMON /BUFID/ HID(10),HMOLIL(64),MOLCNT(64),MCNTLC(64),
     *               MCNTNL(64),SUMSTR(64),NMOI,FLINLO,FLINHI,
     *               ILIN,ILINLC,ILINNL,IREC,IRECTL,HID1(2),LSTWDL
C
      COMMON VNU(1250),SP(1250),ALFA0(1250),EPP(1250),MOL(1250),
     *       SPP(1250)
C
      COMMON /IOU/ IOUT(250)
      COMMON /MANE/ P0,TEMP0,NLAYRS,DVXM,H2OSLF,WTOT,ALBAR,ADBAR,AVBAR,
     *              AVFIX,LAYRFX,SECNT0,SAMPLE,DVSET,ALFAL0,AVMASS,
     *              DPTMIN,DPTFAC,ALTAV,AVTRAT,TDIFF1,TDIFF2,ALTD1,
     *              ALTD2,ANGLE,IANT,LTGNT,LH1,LH2,IPFLAG,PLAY,TLAY,
     *              EXTID(10)
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SEC   ,       XALTZ
C
      COMMON /FILHDR/ XID(10),SEC   ,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                W(60),PZL,PZU,TZL,TZU,WBROAD,DVO,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /R4SUB/ VLO,VHI,ILO,IST,IHI,LIMIN,LIMOUT,ILAST,DPTMN,
     *               DPTFC,ILIN4,ILIN4T
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /TPANEL/ VNULO,VNUHI,JLIN,NLNGT4
      COMMON /BUFR/ VNUB(250),SB(250),ALB(250),EPPB(250),MOLB(250),
     *              HWHMB(250),TMPALB(250),PSHIFB(250),IFLG(250)
      COMMON /NGT4/ VD,SD,AD,EPD,MOLD,SPPD,ILS2D
      COMMON /L4TIMG/ L4TIM,L4TMR,L4TMS,L4NLN,L4NLS,LOTHER
C
      REAL L4TIM,L4TMR,L4TMS,LOTHER
      DIMENSION MEFDP(64)
      DIMENSION SCOR(NSPECI),RHOSLF(NSPECI),ALFD1(NSPECI)
      DIMENSION ALFAL(1250),ALFAD(1250),A(4),B(4),TEMPLC(4)
      DIMENSION RCDHDR(2),IWD(2),IWD3(2),HLINHD(2),AMOLB(250)
C
      EQUIVALENCE (ALFA0(1),ALFAL(1)) , (EPP(1),ALFAD(1))
      EQUIVALENCE (IHIRAC,FSCDID(1)) , (ILBLF4,FSCDID(2))
      EQUIVALENCE (VNULO,RCDHDR(1)) , (IWD3(1),VD),
     *            (HLINHD(1),HID(1),IWD(1)) , (MOLB(1),AMOLB(1))

      DATA MEFDP / 64*0 /
C
C     TEMPERATURES FOR LINE COUPLING COEFFICIENTS
C
      DATA TEMPLC / 200.0,250.0,296.0,340.0 /
C
C     Initialize timing for the group "OTHER" in the TAPE6 output
C
      LOTHER = 0.0
      TSHRNK = 0.0
      TBUFFR = 0.0
      TMOLN4 = 0.0

C
      CALL CPUTIM (TIMEL0)
C
      ILS2D = -654321
      NLNGT4 = NWDL(IWD3,ILS2D)*1250
      LNGTH4 = NLNGT4
      PAVP0 = PAVE/P0
      PAVP2 = PAVP0*PAVP0
      DPTMN = DPTMIN/RADFN(V2,TAVE/RADCN2)
      DPTFC = DPTFAC
      LIMIN = 1000
      CALL CPUTIM(TPAT0)
      CALL MOLEC (1,SCOR,RHOSLF,ALFD1)
      CALL CPUTIM(TPAT1)
      TMOLN4 = TMOLN4 + TPAT1-TPAT0
C
      TIMR = 0.
      TIMS = 0.
      SUMS = 0.
      ILAST = 0
      ILINLO = 0
      ILINHI = 0
      ILO = 1
      IST = 1
      NLINS = 0
      NLIN = 0
C
      VLO = V1L4
      VHI = V2L4
C
      CALL CPUTIM(TPAT0)
c
      call lnfilhd_4(linfil,lnfil4,v1,v2)
c
      CALL CPUTIM(TPAT1)
      TBUFFR = TBUFFR + TPAT1-TPAT0
C
C       TEMPERATURE CORRECTION TO INTENSITY
C       TEMPERATURE AND PRESSURE CORRECTION TO HALF-WIDTH
C
      TRATIO = TAVE/TEMP0
      RHORAT = (PAVE/P0)*(TEMP0/TAVE)
C
      BETA = RADCN2/TAVE
      BETA0 = RADCN2/TEMP0
      BETACR = BETA-BETA0
      DELTMP = ABS(TAVE-TEMP0)
      CALL CPUTIM(TPAT0)
      CALL MOLEC (2,SCOR,RHOSLF,ALFD1)
      CALL CPUTIM(TPAT1)
      TMOLN4 = TMOLN4 + TPAT1-TPAT0
C
C     FIND CORRECT TEMPERATURE AND INTERPOLATE FOR Y AND G
C
      DO 10 ILC = 1, 4
         IF (TAVE.LE.TEMPLC(ILC)) GO TO 20
   10 CONTINUE
   20 IF (ILC.EQ.1) ILC = 2
      IF (ILC.EQ.5) ILC = 4
      RECTLC = 1.0/(TEMPLC(ILC)-TEMPLC(ILC-1))
      TMPDIF = TAVE-TEMPLC(ILC)
C
      IJ = 0
   30 CALL CPUTIM (TIM0)

      CALL RDLNFL (IEOF,ILINLO,ILINHI)
      CALL CPUTIM (TIM1)
      TIMR = TIMR+TIM1-TIM0
C
      IF (IEOF.GE.1) GO TO 60
C
      DO 50 J = ILINLO, ILINHI
         YI = 0.
         GI = 0.
         GAMMA1 = 0.
         GAMMA2 = 0.
         I = IOUT(J)
         IFLAG = IFLG(I)
         IF (I.LE.0) GO TO 50
C
         M = MOD(MOLB(I),100)
C
C     ISO=(MOD(MOLB(I),1000)-M)/100   IS PROGRAMMED AS:
C
         ISO = MOD(MOLB(I),1000)/100
         ILOC = ISOVEC(M)+ISO
         IF ((M.GT.NMOL).OR.(M.LT.1)) GO TO 50
         SUI = SB(I)*W(M)
         IF (SUI.EQ.0.) GO TO 50
         IF (VNUB(I).LT.VLO) GO TO 50
         IJ = IJ+1
C
C     Y'S AND G'S ARE STORED IN I+1 POSTION OF VNU,S,ALFA0,EPP...
C      A(1-4),  B(1-4) CORRESPOND TO TEMPERATURES TEMPLC(1-4) ABOVE
C
         IF (IFLAG.EQ.1.OR.IFLAG.EQ.3) THEN
            A(1) = VNUB(I+1)
            B(1) = SB(I+1)
            A(2) = ALB(I+1)
            B(2) = EPPB(I+1)
            A(3) = AMOLB(I+1)
            B(3) = HWHMB(I+1)
            A(4) = TMPALB(I+1)
            B(4) = PSHIFB(I+1)
C
C     CALCULATE SLOPE AND EVALUATE
C
            SLOPEY = (            SLOPEG = (            IF (IFLAG.EQ.1) THEN
               YI = A(ILC)+SLOPEY*TMPDIF
               GI = B(ILC)+SLOPEG*TMPDIF
            ELSE
               GAMMA1 = A(ILC)+SLOPEY*TMPDIF
               GAMMA2 = B(ILC)+SLOPEG*TMPDIF
            ENDIF
         ENDIF
C
C     IFLAG = 2 IS RESERVED FOR LINE COUPLING COEFFICIENTS ASSOCIATED
C               WITH AN EXACT TREATMENT (NUMERICAL DIAGONALIZATION)
C
C     IFLAG = 3 TREATS LINE COUPLING IN TERMS OF REDUCED WIDTHS
C
         VNU(IJ) = VNUB(I)+RHORAT*PSHIFB(I)
         ALFA0(IJ) = ALB(I)
         EPP(IJ) = EPPB(I)
         MOL(IJ) = M
C
         IF (VNU(IJ).EQ.0.) SUI = 2.*SUI
C
C     TREAT TRANSITIONS WITH UNKNOWN EPP AS SPECIAL CASE
C
         IF (EPP(IJ).GE.0.) GO TO 40
         IF (DELTMP.LE.10.) EPP(IJ) = 0.
         IF (DELTMP.GT.10.) MEFDP(M) = MEFDP(M)+1
         IF (DELTMP.GT.10.) SUI = 0.
   40    SUI = SUI*SCOR(ILOC)*EXP(-EPP(IJ)*BETACR)*
     *         (1.+EXP(-VNU(IJ)*BETA))
C
         SUMS = SUMS+SUI
C
C     TEMPERATURE CORRECTION OF THE HALFWIDTH
C     SELF TEMP DEPENDENCE TAKEN THE SAME AS FOREIGN
C
         TMPCOR = TRATIO**TMPALB(I)
         ALFA0I = ALFA0(IJ)*TMPCOR
         HWHMSI = HWHMB(I)*TMPCOR
         ALFAL(IJ) = ALFA0I*(RHORAT-RHOSLF(ILOC))+HWHMSI*RHOSLF(ILOC)
C
         IF (IFLAG.EQ.3)
     *        ALFAL(IJ) = ALFAL(IJ)*(1.0-GAMMA1*PAVP0-GAMMA2*PAVP2)
C
         ALFAD(IJ) = VNU(IJ)*ALFD1(ILOC)
         NLIN = NLIN+1
         SP(IJ) = SUI*(1.+GI*PAVP2)
         SPP(IJ) = SUI*YI*PAVP0
         IF (VNU(IJ).GT.VHI) THEN
            IEOF = 1
            GO TO 60
         ENDIF
   50 CONTINUE
      IF (IJ.LT.LIMIN.AND.IEOF.EQ.0) THEN
         CALL CPUTIM (TIM2)
         TIMS = TIMS+TIM2-TIM1
         GO TO 30
      ENDIF
   60 CALL CPUTIM (TIM2)
      IHI = IJ
      TIMS = TIMS+TIM2-TIM1
C
      CALL CPUTIM(TPAT0)
      CALL SHRINK
      CALL CPUTIM(TPAT1)
      TSHRNK = TSHRNK + TPAT1-TPAT0
      IJ = ILO-1
      IF (IHI.LT.LIMIN.AND.IEOF.EQ.0) GO TO 30
C
      VNULO = VNU(1)
      VNUHI = VNU(IHI)
      JLIN = IHI
C
      IF (JLIN.GT.0) THEN
         CALL CPUTIM(TPAT0)
         CALL BUFOUT (LNFIL4,RCDHDR(1),NPHDRL)
         CALL BUFOUT (LNFIL4,VNU(1),NLNGT4)
         CALL CPUTIM(TPAT1)
         TBUFFR = TBUFFR + TPAT1-TPAT0
      ENDIF
      NLINS = NLINS+IHI-IST+1
C
      IF (IEOF.EQ.1) GO TO 70
      IJ = 0
      ILO = 1
      GO TO 30
   70 CONTINUE
C
      DO 80 M = 1, NMOL
         IF (MEFDP(M).GT.0) WRITE (IPR,905) MEFDP(M),M
   80 CONTINUE
      CALL CPUTIM (TIMEL1)
      TIME = TIMEL1-TIMEL0
      IF (NOPR.EQ.0) THEN
         WRITE (IPR,910) TIME,TIMR,TIMS,NLIN,NLINS
         L4TIM=TIME
         L4TMR=TIMR
         L4TMS=TIMS
         L4NLN=NLIN
         L4NLS=NLINS
         LOTHER = TSHRNK+TBUFFR+TMOLN4
      ENDIF
      RETURN
C
  905 FORMAT ('0*************************',I5,' STRENGTHS FOR',
     *        '  TRANSITIONS WITH UNKNOWN EPP FOR MOL =',I5,
     *        ' SET TO ZERO')
  910 FORMAT ('0',20X,'TIME',11X,'READ',9X,'SHRINK',6X,'NO. LINES',3X,
     *        'AFTER SHRINK',/,2X,'LINF4 ',2X,3F15.3,2I15)
C
      END
c***********************************************************************

      subroutine lnfilhd_4(linfil,linfil4,v1,v2) 1,1
c
c     this subroutine buffers past the file header for LINF4
c
      IMPLICIT REAL*8           (V)
c
      CHARACTER*8      HLINID,BMOLID,HID1
      CHARACTER*1 CNEGEPP(8)
C
      integer *4 molcnt,mcntlc,
     *           mcntnl,linmol,
     *           lincnt,ilinlc,ilinnl,irec,irectl
c
      COMMON /LINHDR/ HLINID(10),BMOLID(64),MOLCNT(64),MCNTLC(64),
     *                MCNTNL(64),SUMSTR(64),LINMOL,FLINLO,FLINHI,
     *                LINCNT,ILINLC,ILINNL,IREC,IRECTL,HID1(2),LSTWDL
      common /bufid2/ n_negepp(64),n_resetepp(64),xspace(4096),lstwdl2

      COMMON /IFIL/ Idum1,IPR,Idum2,Ndum1,Ndum2F,Ndum3,Ndum4,Ndum5,
     *              Ndum6,Kdum1,Kdum2,Ldum1,Ndum7,Idum3,Idum4,
     *              Ndum8,Ldum2,Ldum3
      common /eppinfo/ negepp_flag

      real *4 sumstr,flinlo,flinhi

      integer *4 negepp_flag,n_negepp,n_resetepp
      real *4 xspace
C
      lnfil = linfil
      lnfil4= linfil4

c
      REWIND lnfil
c
      read (lnfil,end=777)    HLINID,BMOLID,MOLCNT,MCNTLC,
     *                MCNTNL,SUMSTR,LINMOL,FLINLO,FLINHI,
     *                LINCNT,ILINLC,ILINNL,IREC,IRECTL,HID1
c
      READ (HLINID(7),950) CNEGEPP
      IF (CNEGEPP(8).eq.'^') THEN
         read (lnfil) n_negepp,n_resetepp,xspace
      endif

      go to 5
c
 777  STOP 'Linf4: LINFIL DOES NOT EXIST'
c
 5    continue

C
      IF (V1.GT.FLINHI.OR.V2.LT.FLINLO) THEN
         CALL ENDFIL_4 (LNFIL4)
         WRITE (IPR,900) V1,V2,FLINLO,FLINHI
         RETURN
      ENDIF
c
      write (lnfil4)    HLINID,BMOLID,MOLCNT,MCNTLC,
     *                MCNTNL,SUMSTR,LINMOL,FLINLO,FLINHI,
     *                LINCNT,ILINLC,ILINNL,IREC,IRECTL,HID1

      IF (CNEGEPP(8).eq.'^') THEN
         write (lnfil4) n_negepp,n_resetepp,xspace
         negepp_flag = 1
      endif
C
      return
c
  900 FORMAT ('0  *****  LINF4 - VNU LIMITS DO NOT INTERSECT WITH ',
     *        'LINFIL - LINF4 NOT USED *****',/,'   VNU = ',F10.3,
     *        ' - ',F10.3,' CM-1     LINFIL = ',F10.3,' - ',F10.3,
     *        ' CM-1')
 950  FORMAT (8a1)
c
      end
c*******************************************************************

      SUBROUTINE RDLNFL (IEOF,ILO,IHI) 1,3
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE RDLNFL INPUTS THE LINE DATA FROM LINFIL
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SEC   ,       XALTZ
C
      COMMON /FILHDR/ XID(10),SEC   ,PAV ,TAV ,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMIS ,FSCDID(17),NMOL,LAYRS ,YID1,YID(10),LSTWDF
      COMMON /R4SUB/ VLO,VHI,ILD,IST,IHD,LIMIN,LIMOUT,ILAST,DPTMN,
     *               DPTFC,ILIN4,ILIN4T
      COMMON /BUFR/ VNUB(250),SB(250),ALB(250),EPPB(250),MOLB(250),
     *              HWHMB(250),TMPALB(250),PSHIFB(250),IFLG(250)
c
      dimension amolb(250)
      equivalence (molb(1),amolb(1))
c
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /IOU/ IOUT(250)
c
      common /rdlnpnl/ vmin,vmax,nrec,nwds
      integer *4 nrec,nwds,lnfl,leof,npnlhd
c
      common /rdlnbuf/ vlin(250),str(250),hw_f(250),e_low(250),
     *     mol_id(250),hw_s(250),hw_T(250),shft(250),jflg(250)

      real *4 str,hw_f,e_low,hw_s,hw_T,shft,rdpnl(2),dum(2),xmol(2)
      integer *4 mol_id,jflg

      equivalence (vmin,rdpnl(1)), (mol_id(1),xmol(1))
c
      IPASS = 1
      IF (ILO.GT.0) IPASS = 2
C
      ILNGTH = NLNGTH*250
C
      IEOF = 0
      ILO = 1
      IHI = 0
c
      lnfl = linfil
      npnlhd = 6
c
   10 CALL BUFINln (Lnfl,LEOF,rdpnl(1),npnlhd)
c
      IF (LEOF.EQ.0) GO TO 30
      IF (VMAX.LT.VLO) THEN
         CALL BUFINln (lnfl,LEOF,dum(1),1)
         GO TO 10
      ELSE
         CALL BUFINln (Lnfl,LEOF,vlin(1),NWDS)
      ENDIF
c
      IF ((IPASS.EQ.1).AND.(Vlin(1).GT.VLO)) WRITE (IPR,900)
C
      IJ = 0
C
c     precision conversion occurs here:
c     incoming on right: vlin is real*8;  others are real*4 and integer*4
c
      do 15 i=1,nrec
         IFLG(i)  = jflg(i)
         VNUB(i)   = vlin(i)
         SB(i)    = str(i)
         ALB(i)   = hw_f(i)
         EPPB(i)   = e_low(i)
         if (iflg(i) .ge.  0) then
            MOLB(i)  = mol_id(i)
         else
            amolb(i)  = xmol(i)
         endif
         HWHMB(i) = hw_s(i)
         TMPALB(i)= hw_T(i)
         PSHIFB(i)= shft(i)
 15   continue
c
      DO 20 J = 1, NREC
         IF (IFLG(J).GE.0) THEN
            IJ = IJ+1
            IOUT(IJ) = J
         ENDIF
   20 CONTINUE
      IHI = IJ
      RETURN
   30 IF (NOPR.EQ.0) WRITE (IPR,905)
      IEOF = 1
      RETURN
C
  900 FORMAT ('0 FIRST LINE USED IN RDLNFL--- CHECK THE LINEFIL  ')
  905 FORMAT ('0 EOF ON LINFIL IN RDLNFL -- CHECK THE LINFIL ')
C
      END

      SUBROUTINE SHRINK 1
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE SHRINK COMBINES LINES FALLING IN A WAVENUMBER INTERVAL
C     DVR4/2 INTO A SINGLE EFFECTIVE LINE TO REDUCE COMPUTATION
C
      COMMON VNU(1250),S(1250),ALFAL(1250),ALFAD(1250),MOL(1250),
     *       SPP(1250)
      COMMON /R4SUB/ VLO,VHI,ILO,IST,IHI,LIMIN,LIMOUT,ILAST,DPTMN,
     *               DPTFC,ILIN4,ILIN4T
      COMMON /LBLF/ V1R4,V2R4,DVR4,NPTR4,BOUND4,R4(2502),RR4(2502)
C
      J = ILO-1
      DV = DVR4/2.
      VLMT = VNU(ILO)+DV
C
C     INITIALIZE NON-CO2 SUMS
C
      SUMAL = 0.
      SUMAD = 0.
      SUMS = 0.
      SUMV = 0.
      SUMC = 0.
C
C     INITIALIZE CO2 SUMS
C
      SUMAL2 = 0.
      SUMAD2 = 0.
      SUMS2 = 0.
      SUMV2 = 0.
      SUMC2 = 0.
C
      DO 20 I = ILO, IHI
C
C     IF LINE COUPLING, DON'T SHRINK LINE
C
         IF (SPP(I).NE.0.0) THEN
            J = J+1
            VNU(J) = VNU(I)
            S(J) = S(I)
            ALFAL(J) = ALFAL(I)
            ALFAD(J) = ALFAD(I)
            SPP(J) = SPP(I)
            MOL(J) = MOL(I)
c
            GO TO 10
         ENDIF
C
C     NON-CO2 LINES OF MOLECULAR INDEX IT.NE.2   ARE LOADED
C     INTO SUMS IF THE FREQUENCY WITHIN DV GROUP
C
         IF (MOL(I).NE.2) THEN
            SUMV = SUMV+VNU(I)*S(I)
            SUMS = SUMS+S(I)
            SUMAL = SUMAL+S(I)*ALFAL(I)
            SUMAD = SUMAD+S(I)*ALFAD(I)
            SUMC = SUMC+SPP(I)
         ELSE
C
C     CO2 LINES LOADED     (MOL .EQ. 2)
C
            SUMV2 = SUMV2+VNU(I)*S(I)
            SUMS2 = SUMS2+S(I)
            SUMAL2 = SUMAL2+S(I)*ALFAL(I)
            SUMAD2 = SUMAD2+S(I)*ALFAD(I)
            SUMC2 = SUMC2+SPP(I)
         ENDIF
C
C     IF LAST LINE OR VNU GREATER THAN LIMIT THEN STORE SUMS
C
   10    IF (I.LT.IHI) THEN
            IF (VNU(I+1).LE.VLMT) GO TO 20
         ENDIF
C
         VLMT = VNU(I)+DV
C
C     ASSIGN NON-CO2 LINE AVERAGES TO 'GROUP' LINE J
C
         IF (SUMS.GT.0.) THEN
            J = J+1
            S(J) = SUMS
            ALFAL(J) = SUMAL/SUMS
            ALFAD(J) = SUMAD/SUMS
            VNU(J) = SUMV/SUMS
            SPP(J) = SUMC
            MOL(J) = 0
            SUMAL = 0.
            SUMAD = 0.
            SUMS = 0.
            SUMV = 0.
            SUMC = 0.
         ENDIF
C
C     ASSIGN CO2 LINE AVERAGES
C
         IF (SUMS2.GT.0.) THEN
            J = J+1
            S(J) = SUMS2
            ALFAL(J) = SUMAL2/SUMS2
            ALFAD(J) = SUMAD2/SUMS2
            VNU(J) = SUMV2/SUMS2
            MOL(J) = 2
            SPP(J) = SUMC2
            SUMAL2 = 0.
            SUMAD2 = 0.
            SUMS2 = 0.
            SUMV2 = 0.
            SUMC2 = 0.
         ENDIF
C
   20 CONTINUE
C
      ILO = J+1
      IHI = J
C
      RETURN
C
      END

      SUBROUTINE LBLF4 (JRAD,V1,V2) 2,10
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE LBLF4 DOES A LINE BY LINE CALCULATION
C     USING FUNCTION F4.
C
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
      COMMON /BUF/ VNU(1250),S(1250),ALFAL(1250),ALFAD(1250),MOL(1250),
     *             SPP(1250)
      COMMON /MANE/ P0,TEMP0,NLAYRS,DVXM,H2OSLF,WTOT,ALBAR,ADBAR,AVBAR,
     *              AVFIX,LAYRFX,SECNT0,SAMPLE,DVSET,ALFAL0,AVMASS,
     *              DPTMIN,DPTFAC,ALTAV,AVTRAT,TDIFF1,TDIFF2,ALTD1,
     *              ALTD2,ANGLE,IANT,LTGNT,LH1,LH2,IPFLAG,PLAY,TLAY,
     *              EXTID(10)
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SEC   ,       XALTZ
C
      COMMON /FILHDR/ XID(10),SEC   ,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                W(60),PZL,PZU,TZL,TZU,WBROAD,DVO,V1H,V2H,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,TF4,TF4RDF,TF4CNV,
     *               TF4PNL,TXS,TXSRDF,TXSCNV,TXSPNL
      COMMON /R4SUB/ VLO,VHI,ILO,IST,IHI,LIMIN,LIMOUT,ILAST,DPTMN,
     *               DPTFC,ILIN4,ILIN4T
      COMMON /LBLF/ V1R4,V2R4,DVR4,NPTR4,BOUND4,R4(2502),RR4(2502)
      COMMON /VOICOM/ AVRAT(102),DUMMY(5,102)
      COMMON /CONVF/ CHI(251),RDVCHI,RECPI,ZSQBND,A3,B3,JCNVF4
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIO,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
C
      EQUIVALENCE (IHIRAC,FSCDID(1)) , (ILBLF4,FSCDID(2))
C
      DATA JLBLF4 / 0 /
C
      CALL CPUTIM (TIM00)
C
      DPTMN = DPTMIN/RADFN(V2,TAVE/RADCN2)
      DPTFC = DPTFAC
      LIMIN = 1000
      LIMOUT = 2500
      JLBLF4 = 1
C
C     SET IEOF EQUAL TO -1 FOR FIRST READ
C
      IEOF = -1
C
      V1R4 = V1
      V2R4 = V2
      NPTR4 = (V2R4-V1R4)/DVR4+ONEPL
      NPTR4 = MIN(NPTR4,LIMOUT)
      V2R4 = V1R4+DVR4*FLOAT(NPTR4-1)
C
      LIMP2 = LIMOUT+2
      DO 10 I = 1, LIMP2
         R4(I) = 0.
   10 CONTINUE
      BETA = RADCN2/TAVE
      VLO = V1R4-BOUND4
      VHI = V2R4+BOUND4
   20 CALL CPUTIM (TIM0)
      CALL RDLIN4 (IEOF)
      CALL CPUTIM (TIM1)
C
      IF (IEOF.EQ.2) THEN
         TF4 = TF4+TIM1-TIM00
         RETURN
      ENDIF
C
      TF4RDF = TF4RDF+TIM1-TIM0
      TIM2 = TIM1
      IF (IEOF.EQ.1.AND.IHI.EQ.0) GO TO 30
C
      CALL CONVF4 (VNU,S,ALFAL,ALFAD,MOL,SPP)
C
      CALL CPUTIM (TIM3)
      TF4CNV = TF4CNV+TIM3-TIM2
C
C    IF IHI EQUALS -1 THEN END OF CONVOLUTION
C
      IF (IHI.EQ.-1) GO TO 30
      GO TO 20
C
   30 CALL CPUTIM (TIM4)
C
      IF (JRAD.EQ.1) THEN
C
C     RADIATION FIELD
C
         XKT = 1./BETA
         VITST = V1R4-DVR4
         RDLAST = -1.
         NPTSI1 = 0
         NPTSI2 = 0
C
   40    NPTSI1 = NPTSI2+1
C
         VI = V1R4+DVR4*FLOAT(NPTSI1-1)
         RADVI = RADFNI(VI,DVR4,XKT,VITST,RDEL,RDLAST)
C
         NPTSI2 = (VITST-V1R4)/DVR4+1.001
         NPTSI2 = MIN(NPTSI2,NPTR4)
C
         DO 50 I = NPTSI1, NPTSI2
            VI = VI+DVR4
            R4(I) = R4(I)*RADVI
            RADVI = RADVI+RDEL
   50    CONTINUE
C
         IF (NPTSI2.LT.NPTR4) GO TO 40
      ENDIF
C
      CALL CPUTIM (TIM5)
      TF4PNL = TF4PNL+TIM5-TIM4
      TF4 = TF4+TIM5-TIM00
C
      RETURN
C
      END

      SUBROUTINE RDLIN4 (IEOF) 1,5
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE RDLIN4 INPUTS THE LINE DATA FROM LNFIL4
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SEC   ,       XALTZ
C
      COMMON /FILHDR/ XID(10),SEC   ,PAV ,TAV ,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMIS ,FSCDID(17),NMOL,LAYRS ,YID1,YID(10),LSTWDF
      COMMON /R4SUB/ VLO,VHI,ILO,IST,IHI,LIMIN,LIMOUT,ILAST,DPTMN,
     *               DPTFC,ILIN4,ILIN4T
      COMMON /BUF/ VNU(1250),S(1250),ALFAL(1250),ALFAD(1250),MOL(1250),
     *             SPP(1250)
      COMMON /BUF2/ VMIN,VMAX,NREC,NWDS
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINDUM,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      common /eppinfo/ negepp_flag
      integer*4 negepp_flag

      DIMENSION DUM(2),LINPNL(2)
C
      EQUIVALENCE (VMIN,LINPNL(1))
C
      IF (IEOF.EQ.-1) THEN
C
C     BUFFER PAST FILE HEADER
C
         REWIND LNFIL4
         ILIN4T = 0
         CALL BUFIN (LNFIL4,LEOF,DUM(1),1)
         IF (LEOF.EQ.0) STOP 'RDLIN4; TAPE9 EMPTY'
         IF (LEOF.EQ.-99) THEN
            IEOF = 2
C
            RETURN
C
         ENDIF
         if (negepp_flag.eq.1) CALL BUFIN (LNFIL4,LEOF,DUM(1),1)
      ENDIF
      IEOF = 0
      ILO = 1
      IHI = 0
C
   10 CALL BUFIN (LNFIL4,LEOF,LINPNL(1),NPHDRL)
      IF (LEOF.EQ.0) GO TO 20
      ILIN4T = ILIN4T+NREC
      IF (VMAX.LT.VLO) THEN
         CALL BUFIN (LNFIL4,LEOF,DUM(1),1)
         GO TO 10
      ELSE
         CALL BUFIN (LNFIL4,LEOF,VNU(1),NWDS)
      ENDIF
      IHI = NREC
      IF (VNU(NREC).GT.VHI) GO TO 20
C
      RETURN
C
   20 IEOF = 1
C
 950  FORMAT (8a1)

      RETURN
C
      END

      SUBROUTINE CONVF4 (VNU,S,ALFAL,ALFAD,MOL,SPP) 1
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE CONVF4 CONVOLVES THE LINE DATA WITH FUNCTION F4
C
      CHARACTER*1 FREJ(1250),HREJ,HNOREJ
      COMMON /RCNTRL/ ILNFLG
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
      COMMON /R4SUB/ VLO,VHI,ILO,IST,IHI,LIMIN,LIMOUT,ILAST,DPTMN,
     *               DPTFC,ILIN4,ILIN4T
      COMMON /LBLF/ V1R4,V2R4,DVR4,NPTR4,BOUND4,R4(2502),RR4(2502)
      COMMON /VOICOM/ AVRAT(102),DUMMY(5,102)
      COMMON /CONVF/ CHI(251),RDVCHI,RECPI,ZSQBND,A3,B3,JCNVF4
C
      DIMENSION VNU(*),S(*),ALFAL(*),ALFAD(*),MOL(*),SPP(*)
C
      DATA ZBND / 64. /
      DATA ASUBL / 0.623 /,BSUBL / 0.410 /
      DATA HREJ /'0'/,HNOREJ /'1'/
C
      VNULST = V2R4+BOUND4
C
      IF (JCNVF4.NE.0) GO TO 20
      JCNVF4 = 1
C
C     SET UP CHI SUB-LORENTZIAN FORM FACTOR FOR CARBON DIOXIDE
C     POLYNOMIAL MATCHED TO AN EXPONENTIAL AT X0 = 8 CM-1
C
      X0 = 8.
      Y0 = EXP(-ASUBL*X0**BSUBL)
      F = ASUBL*BSUBL*X0**(BSUBL-1)
      Y1 = -F*Y0
      Y2 = Y1*((BSUBL-1)/X0-F)
      Z0 = (Y0-1)/X0**2
      Z1 = Y1/(2*X0)
      Z2 = Y2/2.
      C6 = (Z0-Z1+(Z2-Z1)/4.)/X0**4
      C4 = (Z1-Z0)/X0**2-2.*X0**2*C6
      C2 = Z0-X0**2*C4-X0**4*C6
      DVCHI = 0.1
      RDVCHI = 1./DVCHI
C
      DO 10 ISUBL = 1, 251
         FI = DVCHI*FLOAT(ISUBL-1)
         IF (FI.LT.X0) THEN
            CHI(ISUBL) = 1.+C2*FI**2+C4*FI**4+C6*FI**6
         ELSE
            FNI = ASUBL*(FI**BSUBL)
            CHI(ISUBL) = EXP(-FNI)
         ENDIF
   10 CONTINUE
C
C     CONSTANTS FOR FOURTH FUNCTION LINE SHAPE
C
      RECPI = 1./(2.*ASIN(1.))
      ZSQBND = ZBND*ZBND
      A3 = (1.+2.*ZSQBND)/(1.+ZSQBND)**2
      B3 = -1./(1.+ZSQBND)**2
C
   20 CONTINUE
C
      BNDSQ = BOUND4*BOUND4
C
C     START OF LOOP OVER LINES
C
      IF (ILNFLG.EQ.2) READ(16)(FREJ(I),I=ILO,IHI)
C
      DO 60 I = ILO, IHI
C
         IF (         ALFADI = ALFAD(I)
         ALFALI = ALFAL(I)
         ZETAI = ALFALI/(ALFALI+ALFADI)
         IZ = 100.*ZETAI + ONEPL
         ZETDIF = 100.*ZETAI - FLOAT(IZ-1)
         ALFAVI = ( AVRAT(IZ) + ZETDIF*(AVRAT(IZ+1)-AVRAT(IZ)) ) *
     x            (ALFALI+ALFADI)
         RALFVI = 1./ALFAVI
         SIL = S(I)*RECPI*ALFALI
         SIV = (ALFALI*RALFVI)*S(I)*RECPI*RALFVI
C
         IF (SPP(I).EQ.0.) THEN
            SPEAK = A3*(ABS(SIV))
         ELSE
            SILX = SPP(I)*RECPI
            SIVX = ((ALFALI*RALFVI)*SPP(I)*RECPI*RALFVI)*RALFVI
            SPEAK = A3*(ABS(SIV)+ABS(SIVX))
         ENDIF
C
         JJ = (VNU(I)-V1R4)/DVR4+1.
         JJ = MAX(JJ,1)
         JJ = MIN(JJ,NPTR4)
C
         IF (ILNFLG.LE.1) THEN
            FREJ(I) = HNOREJ
            IF (SPEAK.LE.(DPTMN+DPTFC*R4(JJ))) THEN
               FREJ(I) = HREJ
               GO TO 60
            ENDIF
         ELSE
            IF (FREJ(I).EQ.HREJ) GOTO 60
         ENDIF
C
         ILIN4 = ILIN4+1
C
         VNUI = VNU(I)
C
   30    CONTINUE
C
         XNUI = VNUI-V1R4
         JMIN = (XNUI-BOUND4)/DVR4+2.
C
         IF (VNUI.GE.VNULST) GO TO 70
         IF (JMIN.GT.NPTR4) GO TO 60
         JMIN = MAX(JMIN,1)
         JMAX = (XNUI+BOUND4)/DVR4+1.
         IF (JMAX.LT.JMIN) GO TO 50
         JMAX = MIN(JMAX,NPTR4)
         ALFLI2 = ALFALI*ALFALI
         ALFVI2 = ALFAVI*ALFAVI
         XJJ = FLOAT(JMIN-1)*DVR4
         F4BND = SIL/(ALFLI2+BNDSQ)
         IF (SPP(I).NE.0.) F4BNDX = SILX/(ALFLI2+BNDSQ)
C
C                FOURTH FUNCTION CONVOLUTION
C
         DO 40 JJ = JMIN, JMAX
            XM = (XJJ-XNUI)
            XMSQ = XM*XM
            ZVSQ = XMSQ/ALFVI2
C
            IF (ZVSQ.LE.ZSQBND) THEN
               F4FN = SIV*(A3+ZVSQ*B3)-F4BND
               IF (SPP(I).NE.0.)
     *             F4FN = F4FN+XM*(SIVX*(A3+ZVSQ*B3)-F4BNDX)
            ELSE
               F4FN = SIL/(ALFLI2+XMSQ)-F4BND
               IF (SPP(I).NE.0.)
     *             F4FN = F4FN+XM*(SILX/(ALFLI2+XMSQ)-F4BNDX)
            ENDIF
C
            IF (MOL(I).EQ.2.AND.SPP(I).EQ.0.) THEN
C
C     ASSIGN ARGUMENT ISUBL OF THE FORM FACTOR FOR CO2 LINES
C
               ISUBL = RDVCHI*ABS(XM)+1.5
               ISUBL = MIN(ISUBL,251)
C
               R4(JJ) = R4(JJ)+F4FN*CHI(ISUBL)
            ELSE
               R4(JJ) = R4(JJ)+F4FN
            ENDIF
C
C
            XJJ = XJJ+DVR4
   40    CONTINUE
C
   50    IF (VNUI.GT.0..AND.VNUI.LE.25.) THEN
C
C     THE CALCULATION FOR NEGATIVE VNU(I) IS FOR VAN VLECK WEISSKOPF
C
            VNUI = -VNU(I)
            SIVX = -SIVX
            SILX = -SILX
            GO TO 30
C
         ENDIF
C
   60 CONTINUE
C
      IF (ILNFLG.EQ.1) WRITE(16)(FREJ(I),I=ILO,IHI)
      RETURN
C
C     IF END OF CONVOLUTION, SET IHI=-1 AND RETURN
C
   70 CONTINUE
      IF (ILNFLG.EQ.1) WRITE(16)(FREJ(I),I=ILO,IHI)
      IHI = -1
C
      RETURN
C
      END

      SUBROUTINE XSREAD (XV1,XV2) 2,2
C
      IMPLICIT REAL*8           (V)
C
C**********************************************************************
C     THIS SUBROUTINE READS IN THE DESIRED "CROSS-SECTION"
C     MOLECULES WHICH ARE THEN MATCHED TO THE DATA CONTAINED
C     ON INPUT FILE FSCDXS.
C**********************************************************************
C
C     IFIL CARRIES FILE INFORMATION
C
      PARAMETER (MXFSC=200, MXLAY=MXFSC+3,MXZMD=3400,
     *           MXPDIM=MXLAY+MXZMD,IM2=MXPDIM-2,MXMOL=35,MXTRAC=22)
C
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
C
C     IXMAX=MAX NUMBER OF X-SECTION MOLECULES, IXMOLS=NUMBER OF THESE
C     MOLECULES SELECTED, IXINDX=INDEX VALUES OF SELECTED MOLECULES
C     (E.G. 1=CLONO2), XAMNT(I,L)=LAYER AMOUNTS FOR I'TH MOLECULE FOR
C     L'TH LAYER, ANALOGOUS TO AMOUNT IN /PATHD/ FOR THE STANDARD
C     MOLECULES.
C
      COMMON /PATHX/ IXMAX,IXMOLS,IXINDX(35),XAMNT(35,MXLAY)
C
C     COMMON BLOCKS AND PARAMETERS FOR THE PROFILES AND DENSITIES
C     FOR THE CROSS-SECTION MOLECULES.
C     XSNAME=NAMES, ALIAS=ALIASES OF THE CROSS-SECTION MOLECULES
C
      CHARACTER*10 XSFILE,XSNAME,ALIAS,XNAME,XFILS(6),BLANK
      COMMON /XSECTF/ XSFILE(6,5,35),XSNAME(35),ALIAS(4,35)
      COMMON /XSECTR/ V1FX(5,35),V2FX(5,35),DVFX(5,35),WXM(35),
     *                NTEMPF(5,35),NSPECR(35),IXFORM(5,35),
     *                XSMASS(35),XDOPLR(5,35),NUMXS,IXSBIN
C
      DIMENSION IXFLG(35)
C
      CHARACTER*120 XSREC
      CHARACTER*1 CFLG,CASTSK,CPRCNT,CFRM,CN,CF
      EQUIVALENCE (CFLG,XSREC)
C
      DATA CASTSK / '*'/,CPRCNT / '%'/,CN / 'N'/,CF / 'F'/
      DATA BLANK / '          '/
C
C     T296 IS TEMPERATURE FOR INITAL CALCULATIN OF DOPPLER WIDTHS
C
      DATA T296 / 296.0 /
C
      IXMAX = 35
      DO 10 I = 1, IXMAX
         XSNAME(I) = BLANK
   10 CONTINUE
C
C     READ IN THE NAMES OF THE MOLECULES
C
      IF (IXMOLS.GT.7) THEN
         READ (IRD,'(7A10)') (XSNAME(I),I=1,7)
         READ (IRD,'(8A10)') (XSNAME(I),I=8,IXMOLS)
      ELSE
         READ (IRD,'(7A10)') (XSNAME(I),I=1,IXMOLS)
      ENDIF
C
C     Left-justify all inputed names
C
      DO 15 I=1,IXMOLS
         CALL CLJUST (XSNAME(I),10)
 15   CONTINUE
C
CPRT  WRITE(IPR,'(/,''  THE FOLLOWING MOLECULES ARE REQUESTED:'',//,
CPRT 1    (5X,I5,2X,A))') (I,XSNAME(I),I=1,IXMOLS)
C
C     MATCH THE NAMES READ IN AGAINST THE NAMES STORED IN ALIAS
C     AND DETERMINE THE INDEX VALUE.  STOP IF NO MATCH IS FOUND.
C     NAME MUST BE ALL IN CAPS.
C
      DO 40 I = 1, IXMOLS
         DO 20 J = 1, IXMAX
            IF ((XSNAME(I).EQ.ALIAS(1,J)) .OR.
     *          (XSNAME(I).EQ.ALIAS(2,J)) .OR.
     *          (XSNAME(I).EQ.ALIAS(3,J)) .OR.
     *          (XSNAME(I).EQ.ALIAS(4,J))) THEN
               IXINDX(I) = J
               GO TO 30
            ENDIF
   20    CONTINUE
C
C         NO MATCH FOUND
C
         WRITE (IPR,900) XSNAME(I)
         STOP 'STOPPED IN XSREAD'
C
   30    CONTINUE
         IXFLG(I) = 0
   40 CONTINUE
C
C     READ IN "CROSS SECTION" MASTER FILE FSCDXS
C
      IXFIL = 8
      OPEN (IXFIL,FILE='FSCDXS',STATUS='OLD',FORM='FORMATTED')
      REWIND IXFIL
      READ (IXFIL,905)
C
   50 READ (IXFIL,910,END=80) XSREC
C
      IF (CFLG.EQ.CASTSK) GO TO 50
      IF (CFLG.EQ.CPRCNT) GO TO 80
C
      READ (XSREC,915) XNAME,V1X,V2X,DVX,NTEMP,IFRM,CFRM,
     *                 (XFILS(I),I=1,NTEMP)
C
C     LEFT-JUSTIFY INPUTED NAME
C
      CALL CLJUST (XNAME,10)
C
C     CHECK MASTER FILE FOR CROSS SECTION AND STORE DATA
C
      NUMXS = IXMOLS
      DO 70 I = 1, IXMOLS
         IF ((XNAME.EQ.ALIAS(1,IXINDX(I))) .OR.
     *       (XNAME.EQ.ALIAS(2,IXINDX(I))) .OR.
     *       (XNAME.EQ.ALIAS(3,IXINDX(I))) .OR.
     *       (XNAME.EQ.ALIAS(4,IXINDX(I)))) THEN
            IXFLG(I) = 1
            IF (V2X.GT.XV1.AND.V1X.LT.XV2) THEN
               NSPECR(I) = NSPECR(I)+1
               IF (NSPECR(I).GT.6) THEN
                  WRITE (IPR,920) I,XSNAME(I),NSPECR(I)
                  STOP ' XSREAD - NSPECR .GT. 6'
               ENDIF
               IXFORM(NSPECR(I),I) = 91
               IF (IFRM.EQ.86) IXFORM(NSPECR(I),I) = IFRM
               IF (CFRM.NE.CN)
     *             IXFORM(NSPECR(I),I) = IXFORM(NSPECR(I),I)+100
               IF (CFRM.EQ.CF)
     *             IXFORM(NSPECR(I),I) = -IXFORM(NSPECR(I),I)
               NTEMPF(NSPECR(I),I) = NTEMP
               V1FX(NSPECR(I),I) = V1X
               V2FX(NSPECR(I),I) = V2X
C
C     3.58115E-07 = SQRT( 2.*ALOG(2.)*AVOG*BOLTZ/(CLIGHT*CLIGHT) )
C
               XDOPLR(NSPECR(I),I)=3.58115E-07*(0.5*(V1X+V2X))*
     *                             SQRT(T296/XSMASS(IXINDX(I)))
C
               DO 60 J = 1, NTEMP
                  XSFILE(J,NSPECR(I),I) = XFILS(J)
   60          CONTINUE
            ENDIF
         ENDIF
   70 CONTINUE
C
      GO TO 50
C
   80 IXFLAG = 0
      DO 90 I = 1, IXMOLS
         IF (IXFLG(I).EQ.0) THEN
            WRITE (IPR,925) XSNAME(I)
            IXFLAG = 1
         ENDIF
   90 CONTINUE
      IF (IXFLAG.EQ.1) STOP ' IXFLAG - XSREAD '
C
      RETURN
C
  900 FORMAT (/,'  THE NAME: ',A10, ' IS NOT ONE OF THE ',
     *        'CROSS SECTION MOLECULES. CHECK THE SPELLING.')
  905 FORMAT (/)
  910 FORMAT (A120)
  915 FORMAT (A10,2F10.4,F10.8,I5,5X,I5,A1,4X,6A10)
  920 FORMAT (/,'******* ERROR IN XSREAD ** MOLECULE SECLECTED -',A10,
     *        '- HAS ',I2,' SPECTRAL REGIONS ON FILE FSCDXS, BUT THE',
     *        ' MAXIMUM ALLOWED IS 6 *******',/)
  925 FORMAT (/,'******* MOLECULE SELECTED -',A10,'- IS NOT FOUND ON',
     *        ' FILE FSCDXS *******',/)
C
      END
      BLOCK DATA BXSECT
C
      IMPLICIT REAL*8           (V)
C
C**   XSNAME=NAMES, ALIAS=ALIASES OF THE CROSS-SECTION MOLECULES
C**            (NOTE: ALL NAMES ARE LEFT-JUSTIFIED)
C
      CHARACTER*10 XSFILE,XSNAME,ALIAS
      COMMON /XSECTI/ XSMAX(6,5,35),XSTEMP(6,5,35),NPTSFX(5,35),
     *                NFILEX(5,35),NLIMX
      COMMON /XSECTF/ XSFILE(6,5,35),XSNAME(35),ALIAS(4,35)
      COMMON /XSECTR/ V1FX(5,35),V2FX(5,35),DVFX(5,35),WXM(35),
     *                NTEMPF(5,35),NSPECR(35),IXFORM(5,35),
     *                XSMASS(35),XDOPLR(5,35),NUMXS,IXSBIN
      COMMON /XSECTS/ JINPUT,NMODES,NPANEL,NDUM,V1XS,V2XS,DVXS,NPTSXS
C
      DATA NMODES / 1 /,NPANEL / 0 /,V1XS / 0.0 /,V2XS / 0.0 /,
     *     DVXS / 0.0 /,NPTSXS / 0 /
      DATA XSMAX / 1050*0.0 /
      DATA (ALIAS(1,I),I=1,35)/
     *    'CLONO2    ', 'HNO4      ', 'CHCL2F    ', 'CCL4      ',
     *    'CCL3F     ', 'CCL2F2    ', 'C2CL2F4   ', 'C2CL3F3   ',
     *    'N2O5      ', 'HNO3      ', 'CF4       ', 'CHCLF2    ',
     *    'CCLF3     ', 'C2CLF5    ', 21*' ZZZZZZZZ ' /
      DATA (ALIAS(2,I),I=1,35)/
     *    'CLNO3     ', ' ZZZZZZZZ ', 'CFC21     ', ' ZZZZZZZZ ',
     *    'CFCL3     ', 'CF2CL2    ', 'C2F4CL2   ', 'C2F3CL3   ',
     *    ' ZZZZZZZZ ', ' ZZZZZZZZ ', ' ZZZZZZZZ ', 'CHF2CL    ',
     *    ' ZZZZZZZZ ', ' ZZZZZZZZ ', 21*' ZZZZZZZZ ' /
      DATA (ALIAS(3,I),I=1,35)/
     *    ' ZZZZZZZZ ', ' ZZZZZZZZ ', 'CFC21     ', ' ZZZZZZZZ ',
     *    'CFC11     ', 'CFC12     ', 'CFC114    ', 'CFC113    ',
     *    ' ZZZZZZZZ ', ' ZZZZZZZZ ', 'CFC14     ', 'CFC22     ',
     *    'CFC13     ', 'CFC115    ', 21*' ZZZZZZZZ ' /
      DATA (ALIAS(4,I),I=1,35)/
     *    ' ZZZZZZZZ ', ' ZZZZZZZZ ', 'F21       ', ' ZZZZZZZZ ',
     *    'F11       ', 'F12       ', 'F114      ', 'F113      ',
     *    ' ZZZZZZZZ ', ' ZZZZZZZZ ', 'F14       ', 'F22       ',
     *    'F13       ', 'F115      ', 21*' ZZZZZZZZ ' /
C
C     XSMASS IS MASS OF EACH CROSS-SECTION
C
      DATA XSMASS/
     1      97.46     ,   79.01     ,  102.92     ,  153.82     ,
     2     137.37     ,  120.91     ,  170.92     ,  187.38     ,
     3     108.01     ,   63.01     ,   88.00     ,   86.47     ,
     4     104.46     ,  154.47     ,  21*0.00 /
C
      DATA V1FX / 175*0.0 /,V2FX / 175*0.0 /,DVFX / 175*0.0 /,
     *     WXM / 35*0.0 /
      DATA NTEMPF / 175*0 /,NSPECR / 35*0 /,IXFORM / 175*0 /,
     *     NUMXS / 0 /
C
      END

      SUBROUTINE CLJUST (CNAME,NCHAR) 7
C
C     THIS SUBROUTINE LEFT-JUSTIFIES THE CHARACTER CNAME
C
      CHARACTER*(*) CNAME
      CHARACTER*25 CTEMP
      CHARACTER*1  CTEMP1(25),BLANK
      EQUIVALENCE (CTEMP,CTEMP1(1))
C
      DATA BLANK / ' '/
C
         CTEMP = CNAME
         JJ=0
         DO 10 J = 1, NCHAR
            IF (CTEMP1(J).NE.BLANK) THEN
               JJ = J
               IF (JJ.EQ.1) GO TO 50
               GO TO 20
            ENDIF
   10    CONTINUE
         IF (JJ .EQ. 0) GO TO 50
C
   20    KCNT = 0
         DO 30 K = JJ, NCHAR
            KCNT = KCNT+1
            CTEMP1(KCNT) = CTEMP1(K)
   30    CONTINUE
C
         KK = NCHAR-JJ+2
         DO 40 L = KK,NCHAR
            CTEMP1(L) = BLANK
   40    CONTINUE
         CNAME = CTEMP
   50 CONTINUE
C
      RETURN
C
      END

      SUBROUTINE XSECTM (IFST,IR4) 2,23
C
      IMPLICIT REAL*8           (V)
C
C     THIS SUBROUTINE MOVES THE CROSS SECTIONS INTO
C     THE APPROPRIATE ARRAY R1, R2, R3, R4, OR ABSRB
C
C                       A.E.R. INC.    (AUGUST 1990)
C
      COMMON VNU(250),SP(250),ALFA0(250),EPP(250),MOL(250),HWHMS(250),
     *       TMPALF(250),PSHIFT(250),IFLG(250),SPPSP(250),RECALF(250),
     *       ZETAI(250),IZETA(250)
      COMMON RR1(6099),RR2(2075),RR3(429)
      COMMON /IOU/ IOUT(250)
      COMMON /ABSORB/ V1ABS,V2ABS,DVABS,NPTABS,ABSRB(2030)
      COMMON /MANE/ P0,TEMP0,NLAYRS,DVXM,H2OSLF,WTOT,ALBAR,ADBAR,AVBAR,
     *              AVFIX,LAYRFX,SECNT0,SAMPLE,DVSET,ALFAL0,AVMASS,
     *              DPTMIN,DPTFAC,ALTAV,AVTRAT,TDIFF1,TDIFF2,ALTD1,
     *              ALTD2,ANGLE,IANT,LTGNT,LH1,LH2,IPFLAG,PLAY,TLAY,
     *              EXTID(10)
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /XSUB/ VBOT,VTOP,VFT,LIMIN,ILO,IHI,IEOF,IPANEL,ISTOP,IDATA
      COMMON /LBLF/ V1R4,V2R4,DVR4,NPTR4,BOUND4,R4(2502),RR4(2502)
      COMMON /CMSHAP/ HWF1,DXF1,NX1,N1MAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      COMMON /SUB1/ MAX1,MAX2,MAX3,NLIM1,NLIM2,NLIM3,NLO,NHI,DVR2,DVR3,
     *              N1R1,N2R1,N1R2,N2R2,N1R3,N2R3
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,TF4,TF4RDF,TF4CNV,
     *               TF4PNL,TXS,TXSRDF,TXSCNV,TXSPNL
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /XSHEAD/ HEADT1(35)
      COMMON /XSTMPR/ PF,TF,PDX(6,5,35),DVXPR(5,35),IXBIN(5,35),
     *                IXSBN(5,35)
      COMMON /XSECTP/ V1X,V2X,DVX,NPTSX,RX(13000)
      COMMON /XSECTD/ V1DX,V2DX,DVDX,NPTSDX,RDX1(520),RDX2(520)
      COMMON /XSECTF/ XSFILE(6,5,35),XSNAME(35),ALIAS(4,35)
      COMMON /XSECTR/ V1FX(5,35),V2FX(5,35),DVFX(5,35),WXM(35),
     *                NTEMPF(5,35),NSPECR(35),IXFORM(5,35),
     *                XSMASS(35),XDOPLR(5,35),NUMXS,IXSBIN
      COMMON /XSECTI/ XSMAX(6,5,35),XSTEMP(6,5,35),NPTSFX(5,35),
     *                NFILEX(5,35),NLIMX
      COMMON /XSECTS/ JINPUT,NMODES,NPANEL,NDUM,V1XS,V2XS,DVXS,NPTSXS
      CHARACTER*10 XSFILE,XSNAME,ALIAS
      CHARACTER HEADT1*100
C
      DIMENSION R1(4050),R2(1050),R3(300)
      DIMENSION FILHDR(2)
      LOGICAL OPCL
C
      EQUIVALENCE (R1(1),RR1(2049)),(R2(1),RR2(1025)),(R3(1),RR3(129))
      EQUIVALENCE (IHIRAC,FSCDID(1)) , (ILBLF4,FSCDID(2)),
     *            (IXSCNT,FSCDID(3)) , (IAERSL,FSCDID(4)),
     *            (JRAD,FSCDID(9)) , (IATM,FSCDID(15)),
     *            (XID(1),FILHDR(1))
C
      DATA IFILE,JFILE / 91,92 /
C
C**********************************************************************
C     NUMXS IS THE NUMBER OF 'CROSS SECTION' MOLECULES TO BE USED
C
C     XSFILE(ITEMP,ISPEC,NXS) IS THE NAME OF THE FILE CONTAINING THE
C                             'CROSS SECTION' DATA.  THE THREE INDICES
C                             ARE DEFINED AS FOLLOWS:
C
C                             ITEMP - DENOTES THE TEMPERATURE FOR WHICH
C                                     THE 'CROSS SECTION' IS VALID
C                                     (IMPLEMENTED FOR HITRAN 91 TAPE)
C                             ISPEC - DENOTES THE SECTRAL REGION FOR
C                                     WHICH THE FILE PERTAINS
C                             NXS   - IS THE INCREMENT FOR THE 'CROSS
C                                     SECTION' INDEX
C
C     NTEMPF(ISPEC,NXS) IS THE NUMBER OF TEMPERATURE FILES TO BE USED
C                       FOR EACH SPECTRAL REGION OF EACH MOLECULE
C
C     NSPECR(NXS) IS THE NUMBER OF SPECTRAL REGIONS FOR THE MOLECULE NX
C**********************************************************************
C
      NLIMX = 510
      LIMOUT = 13000
      IRPEAT = 0
C
      PF = PAVE
      TF = TAVE
C
C     IF FIRST ENTRANCE, RESET QUANTITES
C
      IF (IFST.EQ.-99) THEN
         IFST = 0
         JINPUT = -1
         NMODES = 1
C
         V1X = V1XS
         V2X = V2XS
         DVX = DVXS
         NPTSX = NPTSXS
C
         DO 10 NI = 1, NUMXS
            DO  9 NS = 1, NSPECR(NI)
               IXBIN(NS,NI) = 1
               IXSBN(NS,NI) = 0
               NFILEX(NS,NI) = ABS(NFILEX(NS,NI))
 9          continue
 10      CONTINUE
      ENDIF
C
C     CHECK V1X FOR INPUT
C
   20 VFX2 = VFT+2.*DVX+FLOAT(NHI)*DV
      IF (IR4.EQ.1) VFX2 = V2R4+2.*DVX
      IF (V1X.GT.VFX2) GO TO 140
C
      IF (JINPUT.EQ.-1) THEN
         JINPUT = 1
      ELSE
         VFX2 = MIN(VFX2,V2+2.*DVX)
         IF (VFX2.GT.V2X) THEN
            JINPUT = 1
            IF (IRPEAT.EQ.1) THEN
               V1X = V2X-2.*DVX
            ELSE
               V1X = VFT-2.*DVX
               IF (IR4.EQ.1) V1X = V1R4-2.*DVX
            ENDIF
            V2X = V1X+FLOAT(LIMOUT-1)*DVX
            IF (V2X.GT.V2) V2X = V1X+FLOAT(INT((V2-V1X)/DVX)+3)*DVX
            NPTSX = (V2X-V1X)/DVX+1
         ENDIF
         IFL = 0
         V1XT = V1X+2.*DVX
         V2XT = V2X-2.*DVX
         IF (V1XT.GT.V2XT) GO TO 140
         DO 30 NI = 1, NUMXS
            DO 29 NS = 1, NSPECR(NI)
               IF (NFILEX(NS,NI).EQ.0) GO TO 30
               IF (V1FX(NS,NI).LE.V1XT.AND.V2FX(NS,NI).GE.V1XT) IFL = 1
               IF (V1FX(NS,NI).LE.V2XT.AND.V2FX(NS,NI).GE.V2XT) IFL = 1
               IF (V1FX(NS,NI).GE.V1XT.AND.V2FX(NS,NI).LE.V2XT) IFL = 1
 29         CONTINUE                                                      40
 30      CONTINUE
         IF (IFL.EQ.0) GO TO 140
      ENDIF
C
C     READ IN CROSS SECTION
C
      IF (JINPUT.EQ.1) THEN
         JINPUT = 0
         DO 40 I = 1, LIMOUT
            RX(I) = 0.0
 40      CONTINUE
         DO 50 I = 1, NLIMX+10
            RDX1(I) = 0.0
            RDX2(I) = 0.0
 50      CONTINUE
C
C     FOR NPANEL = 0, READ IN FILE HEADERS
C
         IF (NPANEL.EQ.0) THEN
            DVXMIN = V2-V1
            V1XMIN = V2
            IMAX = 0
            NT2 = 0
            NMODE = 0
            DO 60 NI = 1, NUMXS
               DO 59 NS = 1, NSPECR(NI)
                  DO 58 NT1 = 1, NTEMPF(NS,NI)
                     NFILEX(NS,NI) = 1
                     CALL CPUTIM (TIME0)
                     CALL XSECIN (NPANEL,NI,NS,NT1,NT2,NMODE,NSKIP,
     *                            IMAX,NEOF)
                     CALL CPUTIM (TIME)
                     TXSRDF = TXSRDF+TIME-TIME0
C
C     CHECK FOR WAVENUMBER BOUNDS AND SMALLEST DV
C
                     IF (V1DX.GT.V2.OR.V2DX.LT.V1.OR.NEOF.EQ.1) THEN
                        NFILEX(NS,NI) = 0
                     ELSE
                        DVXMIN = MIN(DVXMIN,DVDX)
                        V1XMIN = MIN(V1XMIN,V1DX)
                        V1FX(NS,NI) = V1DX
                        V2FX(NS,NI) = V2DX
                        DVFX(NS,NI) = DVDX
                        NPTSFX(NS,NI) = NPTSDX
                     ENDIF
C
Cmji  CHECK FOR TEMPERATURES; MUST BE IN ASCENDING ORDER
C
                     IF (NT1.GT.1.AND.XSTEMP(NT1,NS,NI).LT.
     *                                XSTEMP(NT1-1,NS,NI)) THEN
                        WRITE(IPR,900)
                        STOP 'XSTEMP - XSECTM'
                     ENDIF
 58               CONTINUE
 59            CONTINUE                                                   00
 60         CONTINUE
            DVX = DVXMIN
            V1X = MAX(VFT,V1XMIN)
            V1X = V1X-2.*DVX
            V2X = V1X+FLOAT(LIMOUT-1)*DVX
            IF (V2X.GT.V2) V2X = V1X+FLOAT(INT((V2-V1X)/DVX)+2)*DVX
            NPTSX = (V2X-V1X)/DVX+1
            V1XS = V1X
            V2XS = V2X
            DVXS = DVX
            NPTSXS = NPTSX
            IF (V1X.GT.VFX2) THEN
               JINPUT = 1
               NPANEL = -1
               GO TO 140
            ENDIF
         ENDIF
C
         NFILET = 0
         NMODES = 0
C
         DO 110 NI = 1, NUMXS
            DO 109 NS = 1, NSPECR(NI)
               NPANEL = -1
               IF (NFILEX(NS,NI).LE.0) GO TO 105
               IF (V1FX(NS,NI).GT.V2X) GO TO 105
               IF (V2FX(NS,NI).LT.V1X) THEN
                  NFILEX(NS,NI) = -NFILEX(NS,NI)
                  GO TO 105
               ENDIF
C
C     DETERMINE TEMPERATURE FILES AND TEST ON DPTMIN
C
               CALL XSNTMP (NI,NS,NT1,NT2,NMODE)
C
C     DPTMIN TEST - IF NMODE = 0, SKIP CROSS SECTION
C
               IF (NMODE.EQ.0) GO TO 105
               NMODES = NMODES+NMODE
C
C     FOR PRESSURE BROADENED CROSS-SECTION
C     CREATE TEMPERATURE AVERAGED BINARY FILE
C
               IF (IXSBIN.EQ.0.AND.IXBIN(NS,NI).EQ.1) THEN
                  CALL CPUTIM (TIME0)
                  CALL XSBINF (NI,NS,NT1,NT2,NMODE)
                  CALL CPUTIM (TIME)
                  TXSCNV = TXSCNV+TIME-TIME0
                  IXBIN(NS,NI) = 0
               ENDIF
               IF (IXSBN(NS,NI).EQ.1) THEN
                  DVFXX = DVXPR(NS,NI)
               ELSE
                  DVFXX = DVFX(NS,NI)
               ENDIF
               NFILET = NFILET+NFILEX(NS,NI)
C
               NNSKIP = (V1X-V1FX(NS,NI))/DVFXX
               NSKIP = (NNSKIP-3)/10
               NSKIP = MAX(NSKIP,0)
               NRSKIP = NSKIP*10
               NBSKIP = NSKIP
C
C     FOR BLOCKED DATA, V1FP MUST REFLECT SHORT RECORD
C
               IAFORM = ABS(IXFORM(NS,NI))
               IF (IXSBN(NS,NI).EQ.1) IAFORM = IAFORM+100
               IF (IAFORM.GT.100) THEN
                  NBSKIP = NSKIP/51
                  NRSKIP = (NBSKIP-1)*510+500
                  NRSKIP = MAX(NRSKIP,0)
               ENDIF
               V1FP = V1FX(NS,NI)+FLOAT(NRSKIP)*DVFXX
               V2FP = V2X+2.0*DVFXX
               V2FP = MIN(V2FP,V2FX(NS,NI))
               NMAX = (V2FP-V1FP)/DVFXX+1.
               NPAN = (NMAX+NLIMX-1)/NLIMX
               IF (IAFORM.GT.100.AND.NPANEL.LE.0.AND.NBSKIP.EQ.0) THEN
                  NPTST = NMAX-500-(NPAN-1)*NLIMX
                  IF (NPTST.GT.0) NPAN = NPAN+1
                  IF (NMAX.GT.500) NMAX = NMAX+10
               ENDIF
               N2RX = ((V1FP-4.*DVFXX-V1X)/DVX+0.999)-1.
               N2RX = MAX(N2RX,0)
C
C     IMAX = -4 TO PLACE THE FIRST PANEL V1 AT ARRAY LOCATION 1
C
               IMAX = -4
               DO 100 NP = 1, NPAN
                  V1FP = V1FP+FLOAT(IMAX)*DVFXX
                  IMAX = NMAX-(NP-1)*NLIMX
                  IF (IAFORM.GT.100.AND.NPANEL.LE.0.AND.
     *                NBSKIP.EQ.0.AND.IMAX.GT.500) IMAX = 500
                  IMAX = MIN(IMAX,NLIMX)
C
C     FOR V2FP IMAX + 3 GIVES US ARRAY LOCATION 514
C             (504 FOR FIRST PANEL OF BLOCKED DATA)
C
                  V2FP = V1FP+FLOAT(IMAX+3)*DVFXX
C
                  IF (NP.GT.1) THEN
                     DO 70 JI = 1, 4
                        RDX1(JI) = RDX1(JI+IMAXSV)
                        RDX2(JI) = RDX2(JI+IMAXSV)
   70                CONTINUE
                  ENDIF
                  IMAXSV = IMAX
C
                  CALL CPUTIM (TIME0)
                  CALL XSECIN (NPANEL,NI,NS,NT1,NT2,NMODE,NSKIP,IMAX,
     *               NEOF)
                  CALL CPUTIM (TIME)
                  TXSRDF = TXSRDF+TIME-TIME0
C
                  IF (NP.EQ.1) THEN
                     DO 80 JI = 1, 4
                        RDX1(JI) = RDX1(5)
                        RDX2(JI) = RDX2(5)
   80                CONTINUE
                     NPANEL = ABS(NPANEL)
                     NSKIP = 0
                  ENDIF
C
C     IF LAST PANEL OF FILE, FILL IN ADDITIONAL POINTS
C     TO ENSURE ENDPOINT CAPTURE
C
                  IF (NP.EQ.NPAN) THEN
                     JMAX = IMAX+4
                     DO 90 JI = 1, 4
                        KI = JMAX+JI
                        RDX1(KI) = RDX1(JMAX)
                        RDX2(KI) = RDX2(JMAX)
   90                CONTINUE
C
                     V2FP = V2FP+3.*DVFXX
                  ENDIF
C
                  N1RX = MAX(1,N2RX+1)
                  N2RX = (V2FP-DVFXX-V1X)/DVX+.999
                  N2RX = MIN(N2RX,LIMOUT)
C
                  WXM1 = WXM(NI)
C
C     FOR TWO TEMPERATURES LINEARLY INTERPOLATE FACTOR
C
                  CALL CPUTIM (TIME0)
                  IF (NMODE.EQ.2.AND.IXBIN(NS,NI).EQ.1) THEN
                     TFACT2 = (TAVE-XSTEMP(NT1,NS,NI))/
     *                        (XSTEMP(NT2,NS,NI)-XSTEMP(NT1,NS,NI))
                     TFACT1 = 1.-TFACT2
                     WXM1 = WXM(NI)*TFACT1
                     WXM2 = WXM(NI)*TFACT2
                     CALL XINT (V1FP,V2FP,DVFXX,RDX2,WXM2,V1X,DVX,RX,
     *                  N1RX,N2RX)
                  ENDIF
                  CALL XINT (V1FP,V2FP,DVFXX,RDX1,WXM1,V1X,DVX,RX,N1RX,
     *               N2RX)
                  CALL CPUTIM (TIME)
                  TXSPNL = TXSPNL+TIME-TIME0
C
 100           CONTINUE
C
C              Continue for GOTO statements at E04540, E04550, E04580, &
C              E04670.
C
 105           CONTINUE
C
 109        CONTINUE                                                      20
 110     CONTINUE
         IF (NFILET.EQ.0) GO TO 140
C
C     FACTOR OUT RADIATION FIELD IF REQUIRED
C
         IF (JRAD.EQ.0) THEN
            CALL CPUTIM (TIME0)
            XKT = TAVE/RADCN2
            VI = V1X-DVX
            VITST = VI
            RDLAST = -1.
            NPTSI1 = 0
            NPTSI2 = 0
C
  120       NPTSI1 = NPTSI2+1
            NPTSX = (V2X-V1X)/DVX+1
C
            VI = V1X+FLOAT(NPTSI1-1)*DVX
            RADVI = RADFNI(VI,DVX,XKT,VITST,RDEL,RDLAST)
C
            NPTSI2 = (VITST-V1X)/DVX+1.001
            NPTSI2 = MIN(NPTSI2,NPTSX)
C
            DO 130 I = NPTSI1, NPTSI2
               VI = VI+DVX
               RX(I) = RX(I)/RADVI
               RADVI = RADVI+RDEL
  130       CONTINUE
C
            IF (NPTSI2.LT.NPTSX) GO TO 120
            CALL CPUTIM (TIME)
            TXSPNL = TXSPNL+TIME-TIME0
C
         ENDIF
      ENDIF
      IF (NMODES.EQ.0) GO TO 140
C
C     DETERMINE TARGET ARRAY
C
C      ===> R1
C
      CALL CPUTIM (TIME0)
      IF (DVX.LT.DVR2) THEN
         CALL XINT (V1X,V2X,DVX,RX,1.0,VFT,DV,R1,N1R1,N2R1)
         IR4 = 0
C
C      ===> R2
C
      ELSEIF (DVX.LT.DVR3) THEN
         CALL XINT (V1X,V2X,DVX,RX,1.0,VFT,DVR2,R2,N1R2,N2R2)
         IR4 = 0
C
C      ===> R3
C
      ELSEIF (DVX.LT.DVR4.OR.ILBLF4.EQ.0) THEN
         CALL XINT (V1X,V2X,DVX,RX,1.0,VFT,DVR3,R3,N1R3,N2R3)
         IR4 = 0
C
C      ===> R4
C
      ELSE
         CALL XINT (V1X,V2X,DVX,RX,1.0,V1R4,DVR4,R4,1,NPTR4)
         IF (IR4.EQ.0) VFX2 = V2R4+2.*DVX
         IR4 = 1
      ENDIF
      CALL CPUTIM (TIME)
      TXSPNL = TXSPNL+TIME-TIME0
C
      IRPEAT = 1
      IF (VFX2.GT.V2X) GO TO 20
C
  140 INQUIRE (UNIT=IFILE,OPENED=OPCL)
      IF (OPCL) CLOSE (IFILE)
      INQUIRE (UNIT=JFILE,OPENED=OPCL)
      IF (OPCL) CLOSE (JFILE)
      IF (NMODES.EQ.0) IR4 = 1
C
 900  FORMAT(/,'******* ERROR IN XSECTM *******',/
     *         'CROSS-SECTION FILES MUST BE IN ASCENDING ORDER ',
     *         'BY TEMPERATURE IN FSCDXS.')
      RETURN
C
      END

      SUBROUTINE XSECIN (NPANEL,NI,NS,NT1,NT2,NMODE,NSKIP,NMAX,IEOF) 3,14
C
      IMPLICIT REAL*8           (V)
C
C     THIS SUBROUTINE READS IN THE DESIRED CROSS SECTIONS
C
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
C
      CHARACTER*8      XI1,       HMOLI1,      YID1
      Real*8               SECAN1,       XALT1
C
      COMMON /FXSHDR/ XI1(10),SECAN1,PAV1,TAV1,HMOLI1(60),XALT1(4),
     *                W1(60),P1L,P1U,T1L,T1U,WBROA1,DVB,V1B,V2B,TBOUN1,
     *                EMISI1,FSCDI1(17),NMO1,LAYER1,Y11,YID1(10),LSTWD1
      COMMON /PXSHDR/ V1PX,V2PX,DVPX,NLIMPX,RBX(2050)
      COMMON /XSECTP/ V1X,V2X,DVX,NPTSX,RX(13000)
      COMMON /XSECTD/ V1DX,V2DX,DVDX,NPTSDX,RDX1(520),RDX2(520)
      COMMON /XSECTF/ XSFILE(6,5,35),XSNAME(35),ALIAS(4,35)
      COMMON /XSECTR/ V1FX(5,35),V2FX(5,35),DVFX(5,35),WXM(35),
     *                NTEMPF(5,35),NSPECR(35),IXFORM(5,35),
     *                XSMASS(35),XDOPLR(5,35),NUMXS,IXSBIN
      COMMON /XSECTI/ XSMAX(6,5,35),XSTEMP(6,5,35),NPTSFX(5,35),
     *                NFILEX(5,35),NLIMX
      COMMON /XSHEAD/ HEADT1(35)
      COMMON /XSTMPR/ PF,TF,PDX(6,5,35),DVXPR(5,35),IXBIN(5,35),
     *                IXSBN(5,35)
      COMMON /FLFORM/ CFORM
C
      CHARACTER*10 XSFILE,XSNAME,ALIAS,SOURCE(3),CTORR
      CHARACTER AMOL*8,BMOL*6,HEADER*100,HEADT1*100
      CHARACTER XSFIL1*10,XSFIL2*10,XSTMP*4,XSNUM*3,CI*1
      CHARACTER CFORM*11,BFRM*10,UNBFRM*10,BLKFRM*10,BFORM*9
      LOGICAL OP,OPCL
      DIMENSION RDXX1(516),RDXX2(516),RDXA1(510),RDXA2(510),RDXH1(500),
     *          RDXH2(500),FILHDR(2),PNLHDR(2),DUM(2)
C
      EQUIVALENCE (RDX1(5),RDXX1(1),RDXA1(1),RDXH1(1)),
     *            (RDX2(5),RDXX2(1),RDXA2(1),RDXH2(1)),
     *            (XI1(1),FILHDR(1)) , (V1PX,PNLHDR(1))
C
      DATA XSTMP / 'TMPX'/,LIMXX / 516 /,BFORM / 'FORMATTED'/
      DATA IFILE,JFILE / 91,92 /
      DATA UNBFRM / '(10E10.3)'/,BLKFRM / '(510E10.3)'/
      DATA CTORR / '      TORR'/
C
C     DEFINE PRESSURE CONVERSIONS
C
C        PTORMB = 1013. MB / 760. TORR  (TORR TO MILLIBARS)
C        PATMMB = 1013. MB / 1.0  ATM   (ATMOPHERES TO MILLIBARS)
C
      PTORMB = 1013./760.
      PATMMB = 1013.
C
      IEOF = 0
      ISFORM = IXFORM(NS,NI)
      NXMODE = NMODE
      IF (IXSBN(NS,NI).EQ.1) THEN
         IF (ABS(ISFORM).LT.100) ISFORM = ABS(ISFORM)+100
         ISFORM = -ISFORM
         NXMODE = 1
      ENDIF
      IAFORM = ABS(ISFORM)
      IMFORM = MOD(IAFORM,100)
C
C     IF NPANEL <= 0, OPEN FILE AND READ HEADER
C
      IF (NPANEL.LE.0) THEN
         IF (IXSBN(NS,NI).EQ.0) THEN
            XSFIL1 = XSFILE(NT1,NS,NI)
         ELSE
            WRITE (XSNUM,'(I1,I2.2)') NS,NI
            XSFIL1 = XSTMP//XSNUM
         ENDIF
C
         INQUIRE (FILE=XSFIL1,OPENED=OP)
         INQUIRE (UNIT=IFILE,OPENED=OPCL)
         IF (.NOT.OP.AND.OPCL) CLOSE (IFILE)
         IF (.NOT.OP) THEN
            IF (ISFORM.GT.0) THEN
               OPEN (IFILE,FILE=XSFIL1,STATUS='OLD',FORM=BFORM)
            ELSE
               OPEN (IFILE,FILE=XSFIL1,STATUS='OLD',FORM=CFORM)
            ENDIF
         ENDIF
         REWIND IFILE
         IF (NXMODE.EQ.2) THEN
            XSFIL2 = XSFILE(NT2,NS,NI)
C
            INQUIRE (FILE=XSFIL2,OPENED=OP)
            INQUIRE (UNIT=JFILE,OPENED=OPCL)
            IF (.NOT.OP.AND.OPCL) CLOSE (JFILE)
            IF (.NOT.OP) THEN
               IF (ISFORM.GT.0) THEN
                  OPEN (JFILE,FILE=XSFIL2,STATUS='OLD',FORM=BFORM)
               ELSE
                  OPEN (JFILE,FILE=XSFIL2,STATUS='OLD',FORM=CFORM)
               ENDIF
            ENDIF
            REWIND JFILE
         ENDIF
C
C     HEADER: 86 FORMAT
C
C             AMOL,V1,V2,NPTS,BMOL,PRES,ICM,ITEMP,SOURCE
C
C     HEADER: 91 FORMAT
C
C             AMOL,V1,V2,NPTS,TEMP,PRES,SMAX,SOURCE
C
C
C     IAFORM < 100, UNBLOCKED DATA (100 CHARACTERS/RECORD)
C
         IF (IAFORM.LT.100) THEN
            READ (IFILE,900,END=30) HEADER
            HEADT1(NI) = HEADER
            IF (IMFORM.EQ.86) THEN
               READ (HEADER,905) AMOL,V1DX,V2DX,NPTSDX,BMOL,PRES,ICM,
     *                           ITEMP,SOURCE
               IF (NPANEL.EQ.0) THEN
                  XSTEMP(NT1,NS,NI) = FLOAT(ITEMP)+273.15
                  XSMAX(NT1,NS,NI) = 0.0
                  PDX(NT1,NS,NI) = PRES*PTORMB
               ENDIF
            ELSE
               READ (HEADER,910) AMOL,V1DX,V2DX,NPTSDX,TEMP,PRES,SMAX,
     *                           SOURCE
               IF (NPANEL.EQ.0) THEN
                  XSTEMP(NT1,NS,NI) = TEMP
                  XSMAX(NT1,NS,NI) = SMAX
                  IF (SOURCE(3).EQ.CTORR) THEN
                     PDX(NT1,NS,NI) = PRES*PTORMB
                  ELSE
                     PDX(NT1,NS,NI) = PRES
                  ENDIF
               ENDIF
            ENDIF
            IF (NXMODE.EQ.2) THEN
               READ (JFILE,900,END=30) HEADER
               IF (IMFORM.EQ.86) THEN
                  READ (HEADER,905) AMOL,V1DX,V2DX,NPTSDX,BMOL,PRES,
     *                              ICM,ITEMP,SOURCE
                  IF (NPANEL.EQ.0) THEN
                     XSTEMP(NT2,NS,NI) = FLOAT(ITEMP)+273.15
                     XSMAX(NT2,NS,NI) = 0.0
                     PDX(NT2,NS,NI) = PRES*PTORMB
                  ENDIF
               ELSE
                  READ (HEADER,910) AMOL,V1DX,V2DX,NPTSDX,TEMP,PRES,
     *                              SMAX,SOURCE
                  IF (NPANEL.EQ.0) THEN
                     XSTEMP(NT2,NS,NI) = TEMP
                     XSMAX(NT2,NS,NI) = SMAX
                     IF (SOURCE(3).EQ.CTORR) THEN
                        PDX(NT2,NS,NI) = PRES*PTORMB
                     ELSE
                        PDX(NT2,NS,NI) = PRES
                     ENDIF
                  ENDIF
               ENDIF
            ENDIF
         ELSE
C
C     IAFORM > 100, BLOCKED DATA (51*100 CHARACTERS/RECORD)
C
            IF (ISFORM.GT.0) THEN
               READ (IFILE,915,END=30) HEADER,(RDXX1(J),J=1,500)
            ELSE
               CALL BUFIN (IFILE,IEOF,FILHDR(1),NFHDRF)
               IF (IEOF.LE.0) GO TO 30
               WRITE (HEADER,'(10A8)') XI1
               CALL BUFIN (IFILE,IEOF,PNLHDR(1),NPHDRF)
               IF (IEOF.LE.0) GO TO 30
               CALL BUFIN (IFILE,IEOF,RDXH1(1),NLIMPX)
            ENDIF
            HEADT1(NI) = HEADER
            IF (IMFORM.EQ.86) THEN
               READ (HEADER,905) AMOL,V1DX,V2DX,NPTSDX,BMOL,PRES,ICM,
     *                           ITEMP,SOURCE
               IF (NPANEL.EQ.0) THEN
                  XSTEMP(NT1,NS,NI) = FLOAT(ITEMP)+273.15
                  XSMAX(NT1,NS,NI) = 0.0
                  PDX(NT1,NS,NI) = PRES*PTORMB
               ENDIF
            ELSE
               READ (HEADER,910) AMOL,V1DX,V2DX,NPTSDX,TEMP,PRES,SMAX,
     *                           SOURCE
               IF (NPANEL.EQ.0) THEN
                  XSTEMP(NT1,NS,NI) = TEMP
                  XSMAX(NT1,NS,NI) = SMAX
                  IF (SOURCE(3).EQ.CTORR) THEN
                     PDX(NT1,NS,NI) = PRES*PTORMB
                  ELSE
                     PDX(NT1,NS,NI) = PRES
                  ENDIF
               ENDIF
            ENDIF
            IF (NXMODE.EQ.2) THEN
               IF (ISFORM.GT.0) THEN
                  READ (JFILE,915,END=30) HEADER,(RDXX2(J),J=1,500)
               ELSE
                  CALL BUFIN (JFILE,JEOF,FILHDR(1),NFHDRF)
                  IF (JEOF.LE.0) GO TO 30
                  WRITE (HEADER,'(10A8)') XI1
                  CALL BUFIN (JFILE,JEOF,PNLHDR(1),NPHDRF)
                  IF (JEOF.LE.0) GO TO 30
                  CALL BUFIN (JFILE,JEOF,RDXH2(1),NLIMPX)
               ENDIF
               IF (IMFORM.EQ.86) THEN
                  READ (HEADER,905) AMOL,V1DX,V2DX,NPTSDX,BMOL,PRES,
     *                              ICM,ITEMP,SOURCE
                  IF (NPANEL.EQ.0) THEN
                     XSTEMP(NT2,NS,NI) = FLOAT(ITEMP)+273.15
                     XSMAX(NT2,NS,NI) = 0.0
                     PDX(NT2,NS,NI) = PRES*PTORMB
                  ENDIF
               ELSE
                  READ (HEADER,910) AMOL,V1DX,V2DX,NPTSDX,TEMP,PRES,
     *                              SMAX,SOURCE
                  IF (NPANEL.EQ.0) THEN
                     XSTEMP(NT2,NS,NI) = TEMP
                     XSMAX(NT2,NS,NI) = SMAX
                     IF (SOURCE(3).EQ.CTORR) THEN
                        PDX(NT2,NS,NI) = PRES*PTORMB
                     ELSE
                        PDX(NT2,NS,NI) = PRES
                     ENDIF
                  ENDIF
               ENDIF
            ENDIF
         ENDIF
         DVDX = (V2DX-V1DX)/FLOAT(NPTSDX-1)
C
C     FOR NPANEL = -1, SKIP REQUIRED NUMBER OF RECORDS
C
         IF (NPANEL.EQ.-1) THEN
            NSTRT = 1
            IF (IAFORM.GT.100) THEN
               NSKIP = NSKIP/51
               NSTRT = 2
               IF (NSKIP.EQ.0) RETURN
            ENDIF
C
            DO 10 I = NSTRT, NSKIP
               IF (ISFORM.GT.0) THEN
                  READ (IFILE,920,END=30) CI
                  IF (NXMODE.EQ.2) READ (JFILE,920,END=30) CI
               ELSE
                  CALL BUFIN (IFILE,IEOF,PNLHDR(1),NPHDRF)
                  IF (IEOF.LE.0) GO TO 30
                  CALL BUFIN (IFILE,IEOF,DUM(1),1)
                  IF (NXMODE.EQ.2) THEN
                     CALL BUFIN (JFILE,JEOF,PNLHDR(1),NPHDRF)
                     IF (JEOF.LE.0) GO TO 30
                     CALL BUFIN (JFILE,JEOF,DUM(1),1)
                  ENDIF
               ENDIF
   10       CONTINUE
         ENDIF
      ENDIF
C
C     FOR ABS(NPANEL) > 0, READ IN MORE DATA
C
      IF (ABS(NPANEL).GT.0) THEN
         BFRM = UNBFRM
         IF (IAFORM.GT.100) BFRM = BLKFRM
         IF (ISFORM.GT.0) THEN
            READ (IFILE,BFRM,END=30) (RDXX1(J),J=1,NMAX)
            IF (NXMODE.EQ.2)
     *         READ (JFILE,BFRM,END=30) (RDXX2(J),J=1,NMAX)
         ELSE
            CALL BUFIN (IFILE,IEOF,PNLHDR(1),NPHDRF)
            IF (IEOF.LE.0) GO TO 30
            CALL BUFIN (IFILE,IEOF,RDXA1(1),NLIMPX)
            IF (NXMODE.EQ.2) THEN
               CALL BUFIN (JFILE,JEOF,PNLHDR(1),NPHDRF)
               IF (JEOF.LE.0) GO TO 30
               CALL BUFIN (JFILE,JEOF,RDXA2(1),NLIMPX)
            ENDIF
         ENDIF
      ENDIF
C
      DO 20 I = NMAX+1, LIMXX
         RDXX1(I) = 0.0
         IF (NXMODE.EQ.2) RDXX2(I) = 0.0
   20 CONTINUE
C
      RETURN
C
   30 IEOF = 1
C
      DO 40 I = NMAX+1, LIMXX
         RDXX1(I) = 0.0
         IF (NXMODE.EQ.2) RDXX2(I) = 0.0
   40 CONTINUE
C
      RETURN
C
  900 FORMAT (A100)
  905 FORMAT (A8,2F10.4,I10,1X,A6,F4.2,5X,I4,3X,I5,3A10)
  910 FORMAT (A10,2F10.4,I10,3G10.3,3A10)
  915 FORMAT (A100,50(10E10.3))
  920 FORMAT (A1)
C
      END

      SUBROUTINE XSNTMP (NI,NS,NT1,NT2,NMODE) 1,2
C
      IMPLICIT REAL*8           (V)
C
C     THIS SUBROUTINE DETERMINES THE CORRECT MODE
C     AND BRACKETS THE LAYER TEMPERATURE
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1 ,V2 ,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /MANE/ P0,TEMP0,NLAYRS,DVXM,H2OSLF,WTOT,ALBAR,ADBAR,AVBAR,
     *              AVFIX,LAYRFX,SECNT0,SAMPLE,DVSET,ALFAL0,AVMASS,
     *              DPTMIN,DPTFAC,ALTAV,AVTRAT,TDIFF1,TDIFF2,ALTD1,
     *              ALTD2,ANGLE,IANT,LTGNT,LH1,LH2,IPFLAG,PLAY,TLAY,
     *              EXTID(10)
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /XSECTP/ V1X,V2X,DVX,NPTSX,RX(13000)
      COMMON /XSECTD/ V1DX,V2DX,DVDX,NPTSDX,RDX1(520),RDX2(520)
      COMMON /XSECTF/ XSFILE(6,5,35),XSNAME(35),ALIAS(4,35)
      COMMON /XSECTR/ V1FX(5,35),V2FX(5,35),DVFX(5,35),WXM(35),
     *                NTEMPF(5,35),NSPECR(35),IXFORM(5,35),
     *                XSMASS(35),XDOPLR(5,35),NUMXS,IXSBIN
      COMMON /XSECTI/ XSMAX(6,5,35),XSTEMP(6,5,35),NPTSFX(5,35),
     *                NFILEX(5,35),NLIMX
      CHARACTER*10 XSFILE,XSNAME,ALIAS
C
      EQUIVALENCE (JRAD,FSCDID(9))
C
      NT1 = 0
      NT2 = 0
C
      IF (NTEMPF(NS,NI).LE.1) THEN
         NMODE = 1
         NT1 = 1
         NT2 = 1
      ELSE
         NMODE = 2
         DO 10 I = 2, NTEMPF(NS,NI)
            IF (TAVE.LT.XSTEMP(I,NS,NI)) THEN
               NT1 = I-1
               NT2 = I
               GO TO 20
            ENDIF
   10    CONTINUE
      ENDIF
C
   20 IF (NT1.EQ.0) THEN
         NT2 = NTEMPF(NS,NI)
         NT1 = NT2-1
      ENDIF
C
C     CHECK VERSUS DPTMIN
C
      IF (XSMAX(NT1,NS,NI).NE.0.0) THEN
         WXM1 = WXM(NI)*XSMAX(NT1,NS,NI)
         IF (WXM1.LT.DPTMIN) IDPTMN = IDPTMN+1
         WXM2 = 0.0
         IF (NMODE.EQ.2) THEN
            WXM2 = WXM(NI)*XSMAX(NT2,NS,NI)
            IF (WXM2.LT.DPTMIN) IDPTMN = IDPTMN+1
         ENDIF
         IF (JRAD.EQ.0) THEN
            XKT1 = XSTEMP(NT1,NS,NI)/RADCN2
            IF (NMODE.EQ.2) XKT2 = XSTEMP(NT2,NS,NI)/RADCN2
            VI = V1FX(NS,NI)
C
            RADVI1 = RADFN(VI,XKT1)
            IF (NMODE.EQ.2) RADVI2 = RADFN(VI,XKT2)
            WXM1 = WXM(NI)*XSMAX(NT1,NS,NI)/RADVI1
            IF (NMODE.EQ.2) WXM2 = WXM(NI)*XSMAX(NT2,NS,NI)/RADVI2
         ENDIF
C
C     DETERMINE IDPTMN --- IF IDPTMN = NMODE  ==> BELOW THRESHOLD
C                                                 SKIP CROSS SECTION
C
         IDPTMN = 0
         IF (IDPTMN.EQ.NMODE) NMODE = 0
      ENDIF
C
      RETURN
C
      END

      SUBROUTINE XSBINF (NI,NS,NT1,NT2,NMODE) 1,10
C
      IMPLICIT REAL*8           (V)
C
C     THIS SUBROUTINE PERFORMS A TEMPERATURE DEPENDENT CONVOLUTION
C     ON THE CROSS-SECTIONS PRODUCING A BINARY INTERMEDIATE FILE
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /FILHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV0,V10,V20,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
C
      CHARACTER*8      XI1,       HMOLI1,      YID1
      Real*8               SECAN1,       XALT1
C
      COMMON /FXSHDR/ XI1(10),SECAN1,PAV1,TAV1,HMOLI1(60),XALT1(4),
     *                W1(60),P1L,P1U,T1L,T1U,WBROA1,DVB,V1B,V2B,TBOUN1,
     *                EMISI1,FSCDI1(17),NMO1,LAYER1,Y11,YID1(10),LSTWD1
      COMMON /PXSHDR/ V1PX,V2PX,DVPX,NLIMPX,RBX(2050)
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /SSUBS/ VFT,VBOT,VTOP,V1,V2,DVO,NLIMF,NSHIFT,MAXF,ILO,IHI,
     *               NLO,NHI,RATIO,SUMIN,IRATSH,SRATIO,IRATM1,NREN,
     *               DVSC,XDUM,V1SHFT
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,TF4,TF4RDF,TF4CNV,
     *               TF4PNL,TXS,TXSRDF,TXSCNV,TXSPNL
      COMMON /CONTRL/ IEOFSC,IPANEL,ISTOP,IDATA,JVAR,JABS
      COMMON /LAMCHN/ ONEPL,ONEMI,EXPMIN,ARGMIN
      COMMON /CMSHAP/ HWF,DXF,NF,NFMAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      COMMON /XSCINF/ HWHM,JEMIT,JFN,SAMPLE,SCANID,NPTS,XF(851)
C
      COMMON /CONSTS/ PI,PLANCK,BOLTZ,CLIGHT,AVOG,RADCN1,RADCN2
      COMMON /XSECTP/ V1X,V2X,DVX,NPTSX,RX(13000)
      COMMON /XSECTD/ V1DX,V2DX,DVDX,NPTSDX,RDX1(520),RDX2(520)
      COMMON /XSECTF/ XSFILE(6,5,35),XSNAME(35),ALIAS(4,35)
      COMMON /XSECTR/ V1FX(5,35),V2FX(5,35),DVFX(5,35),WXM(35),
     *                NTEMPF(5,35),NSPECR(35),IXFORM(5,35),
     *                XSMASS(35),XDOPLR(5,35),NUMXS,IXSBIN
      COMMON /XSECTI/ XSMAX(6,5,35),XSTEMP(6,5,35),NPTSFX(5,35),
     *                NFILEX(5,35),NLIMX
      COMMON /XSTMPR/ PF,TF,PDX(6,5,35),DVXPR(5,35),IXBIN(5,35),
     *                IXSBN(5,35)
      COMMON /XSHEAD/ HEADT1(35)
      COMMON /FLFORM/ CFORM
C
      CHARACTER*10 XSFILE,XSNAME,ALIAS
      CHARACTER HEADT1*100,CFORM*11,XSFIL*10,XSTMP*4,XSNUM*3
      LOGICAL OP,OPCL
      DIMENSION FILHDR(2),PNLHDR(2),FILHDS(2)
C
      EQUIVALENCE (IHIRAC,FSCDI1(1)) , (ILBLF4,FSCDI1(2)),
     *            (IXSCNT,FSCDI1(3)) , (IAERSL,FSCDI1(4)),
     *            (IEMIT,FSCDI1(5)) , (ISCHDR,FSCDI1(6)),
     *            (JRAD,FSCDI1(9)) , (XSCID,FSCDI1(12)),
     *            (XHWHM,FSCDI1(13)) , (IDABS,FSCDI1(14)),
     *            (IATM,FSCDI1(15)) , (LAYR1,FSCDI1(16)),
     *            (XI1(1),FILHDR(1)) , (V1PX,PNLHDR(1)),
     *            (XID(1),FILHDS(1))
C
      DATA HWJ / 16. /,DXJ / 0.02 /,NJ / 801 /,NJMX / 851 /,
     *     SMPLJ / 4. /,XSCAL / 0. /
C
      DATA XSTMP / 'TMPX'/
      DATA IFILEO,JFILEO / 93,91 /
C
C     STANDARD PRESSURE AND TEMPERATURE
C
      DATA P0 / 1013. /,T0 / 273.15 /
C
C     ASSUMED MEAN HALFWIDTH AT P0 IS 0.10
C     DOPPLER VALUES ARE INITIALIZED AT T296.
C
      DATA HWHM0 / 0.10 /, T296 / 296.0 /
C
C     INITIALIZE IXSBN AND TEMPERATURE RATIO
C
      IXSBN(NS,NI) = 0
C
      FAC1 = 1.0
      FAC2 = 0.0
      IF (NMODE.EQ.2) THEN
         FAC2 = (TAVE-XSTEMP(NT1,NS,NI))/
     *               (XSTEMP(NT2,NS,NI)-XSTEMP(NT1,NS,NI))
         FAC1 = 1.0-FAC2
      ENDIF
      PD = PDX(NT1,NS,NI)*FAC1+PDX(NT2,NS,NI)*FAC2
C
C     NOTE THAT AT THIS POINT, THE CROSS-SECTIONS HAVE BEEN
C     LINEARLY INTERPOLATED IN TEMPERATURE (HENCE TD=TF),
C     AND THE CONVOLUTION WILL BE DONE ONLY FOR PRESSURE
C
      HWHMF = HWHM0*(PF/P0)*(T0/TF)
      HWHMD = HWHM0*(PD/P0)*(T0/TF)
C
C     SET MINIMUM HALF-WIDTH TO DOPPLER
C
      HDOPLR=XDOPLR(NS,NI)*SQRT(TF/T296)
      HWHMD=MAX(HDOPLR,HWHMD)
      HWHMSC = HWHMF-HWHMD
      IF (HWHMSC/HWHMD.LT.0.1) GO TO 30
      HWHM = HWHMSC
C
C     BOUND AT THIS POINT IS THE WAVENUMBER VALUE
C     OF HALF THE SCANNING FUNCTION
C
      DVO = HWHMF/2.0
      IF (HWHMSC/2.0.LT.DVFX(NS,NI)) GO TO 30
      SAMPLE = HWHM/DVO
      XHWHM = HWHM
C
C     OPEN FILE AND SET FILHDR
C
      INQUIRE (FILE='TMPXBIN',OPENED=OP)
      INQUIRE (UNIT=IFILEO,OPENED=OPCL)
      IF (.NOT.OP) THEN
         IF (OPCL) CLOSE (IFILEO)
         OPEN (IFILEO,FILE='TMPXBIN',STATUS='UNKNOWN',FORM=CFORM)
         REWIND IFILEO
         CALL BUFOUT (IFILEO,FILHDS(1),NFHDRF)
         REWIND IFILEO
         CALL BUFIN (IFILEO,IEOF,FILHDR(1),NFHDRF)
         READ (HEADT1(NI),'(10A8)') XI1
      ENDIF
      REWIND IFILEO
C
      NLIMX = 510
      IOTPAN = 1
      LPMAX = 0
C
      NPAN = (NPTSFX(NS,NI)+9)/NLIMX+1
      V1PX = V1FX(NS,NI)
      NPANEL = -1
      NSKIP = 0
C
      DO 20 NP = 1, NPAN
         IF (NP.NE.1) NPANEL = 1
         NMAX = 510
         IF (NP.EQ.1) NMAX = 500
         V2PX = V1PX+FLOAT(LPMAX+NMAX-1)*DVFX(NS,NI)
         V2PX = MIN(V2PX,V2FX(NS,NI))
         NMAX = ((V2PX-V1PX)/DVFX(NS,NI)+ONEPL)-LPMAX
C
         IMAX = MIN(NMAX,NLIMX)
C
         CALL CPUTIM (TIME0)
         CALL XSECIN (NPANEL,NI,NS,NT1,NT2,NMODE,NSKIP,IMAX,NEOF)
         CALL CPUTIM (TIME)
         TXSRDF = TXSRDF+TIME-TIME0
         TXSCNV = TXSCNV-TIME+TIME0
C
         DO 10 JI = 1, NMAX
            JJ = JI+4
            RBX(JI+LPMAX) = FAC1*RDX1(JJ)
            IF (NMODE.EQ.2) RBX(JI+LPMAX) = RBX(JI+LPMAX)+FAC2*RDX2(JJ)
   10    CONTINUE
C
         LPMAX = LPMAX+NMAX
         IOTPAN = IOTPAN+1
C
         IF (NP.EQ.1) THEN
            V1B = V1FX(NS,NI)
            V2B = V2FX(NS,NI)
            DVB = DVFX(NS,NI)
            XSCID = -99
            ISCHDR = 0
            IEMIT = 0
            CALL BUFOUT (IFILEO,FILHDR(1),NFHDRF)
         ENDIF
C
         IF (IOTPAN.EQ.5.OR.NP.EQ.NPAN) THEN
            IOTPAN = 1
            DVPX = DVFX(NS,NI)
            NLIMPX = LPMAX
            CALL BUFOUT (IFILEO,PNLHDR(1),NPHDRF)
            CALL BUFOUT (IFILEO,RBX(1),NLIMPX)
            LPMAX = 0
            V1PX = V2PX+DVFX(NS,NI)
         ENDIF
C
   20 CONTINUE
C
      NSHIFT = 0
C
      V1 = V1FX(NS,NI)
      V2 = V2FX(NS,NI)
C
      JEMIT = 0
      JABS = 0
C
      HWFSV = HWF
      DXFSV = DXF
      NFSV = NF
      NFMXSV = NFMAX
C
      HWF = HWJ
      DXF = DXJ
      NF = NJ
      NFMAX = NJMX
CCP   XSCALE = XSCAL
      CALL SLRENZ (XF)
C
      WRITE (XSNUM,'(I1,I2.2)') NS,NI
      XSFIL = XSTMP//XSNUM
C
      INQUIRE (FILE=XSFIL,OPENED=OP)
      INQUIRE (UNIT=JFILEO,OPENED=OPCL)
      IF (.NOT.OP.AND.OPCL) CLOSE (JFILEO)
      IF (.NOT.OP) OPEN (JFILEO,FILE=XSFIL,STATUS='UNKNOWN',FORM=CFORM)
      REWIND JFILEO
C
      CALL XSCNVN (IFILEO,JFILEO,NS,NI)
C
      CLOSE (IFILEO)
      CLOSE (JFILEO)
C
      HWF = HWFSV
      DXF = DXFSV
      NF = NFSV
      NFMAX = NFMXSV
C
      IXSBN(NS,NI) = 1
C
   30 RETURN
C
      END

      SUBROUTINE XSCNVN (IFILE,JFILE,NS,NI) 1,10
C
      IMPLICIT REAL*8           (V)
C
C     DRIVER FOR CONVOLVING SPECTRUM WITH INSTRUMENTAL SCANNING FUNCTIO
C
      COMMON /XSCONV/ S(2050),R1(1025)
C
      CHARACTER*8      XID,       HMOLID,      YID
      Real*8               SECANT,       XALTZ
C
      COMMON /SCNHDR/ XID(10),SECANT,PAVE,TAVE,HMOLID(60),XALTZ(4),
     *                WK(60),PZL,PZU,TZL,TZU,WBROAD,DV ,V1C,V2C,TBOUND,
     *                EMISIV,FSCDID(17),NMOL,LAYER ,YI1,YID(10),LSTWDF
      COMMON /SSUBS/ VFT,VBOT,VTOP,V1,V2,DVO,NLIMF,NSHIFT,MAXF,ILO,IHI,
     *               NLO,NHI,RATIO,SUMIN,IRATSH,SRATIO,IRATM1,NREN,
     *               DVSC,XDUM,V1SHFT
      COMMON /CONTRL/ IEOFSC,IPANEL,ISTOP,IDATA,JVAR,JABS
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,tdum(8)
      COMMON /RSCAN/ V1I,V2I,DVI,NNI
      COMMON /CMSHAP/ HWF,DXF,NF,NFMAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /XSCINF/ HWHM,JEMIT,JFN,SAMPLE,SCANID,NPTS,XF(851)
C
      DIMENSION FILHDR(2)
      DIMENSION SUMR(4)
C
      EQUIVALENCE (FILHDR(1),XID(1)) , (FSCDID(5),IEMIT),
     *            (FSCDID(6),ISCHDR) , (FSCDID(12),XSCID),
     *            (FSCDID(13),XHWHM) , (FSCDID(14),IDABS),
     *            (FSCDID(16),LAYR1)
C
C     IUNIT INPUT FILE
C     JUNIT OUTPUT FILE
C
      IUNIT = IFILE
      JUNIT = JFILE
      NREN = 0
      IDABS = 0
      JVAR = 0
      IPRT = 0
C
      IF (JEMIT.LT.0) THEN
         JABS = 1
         JEMIT = 0
         IDABS = -1
      ENDIF
      IDABST = IDABS
      IFILST = 1
      NIFILS = 9999
C
      SUMOUT = 0.
      SMIN = 999999.
      SMAX = -99999.
      DVOSAV = 0.
      SUMR(1) = SUMOUT
      SUMR(2) = SMIN
      SUMR(3) = SMAX
      SUMR(4) = DVOSAV
C
      REWIND IUNIT
      CALL BUFIN (IUNIT,IEOF,FILHDR(1),NFHDRF)
      IF (IEOF.EQ.0) GO TO 50
C
      DVSAV = DV
      IDABS = IDABST
C
      ISCAN = ISCHDR
      JTREM = 3
C
C     JTREM=3   SCANFN CONVOLVED WITH OPTICAL DEPTH
C
      DVI = DV
C
C     BOUND AT THIS POINT IS THE WAVENUMBER VALUE
C     OF HALF THE SCANNING FUNCTION
C
      BOUND = HWF*HWHM
      DV = DVO
      V1C = V1
      V2C = V2
      XHWHM = HWHM
      IEMIT = 0
      CALL BUFOUT (JUNIT,FILHDR(1),NFHDRF)
      NBOUND = (2.*HWF)*SAMPLE+0.01
C
C     BOUND AT THIS POINT IS THE WAVENUMBER VALUE
C     OF THE FULL SCANNING FUNCTION
C
      BOUND = FLOAT(NBOUND)*DVO/2.
C
      NXPAN = 500
      NLO = NBOUND+1
      NLIMF = NLO+NXPAN-NSHIFT
      NHI = NLIMF+NSHIFT-1
      MAXF = NLIMF+2*NBOUND
C
      TIMRDF = 0.
      TIMCNV = 0.
      TIMPNL = 0.
      IEOFSC = 1
      SUMIN = 0.
      DO 10 I = 1, MAXF
         R1(I) = 0.
   10 CONTINUE
      INIT = 0
      IDATA = -1
      VFT = V1-2.*BOUND
      VBOT = V1-BOUND
      VTOP = V2+BOUND
C
   20 CALL CPUTIM (TIME0)
      IF (IEOFSC.LE.0) GO TO 40
      CALL RDSCAN (S,JTREM,IUNIT,ISCAN,IPRT)
C
      CALL CPUTIM (TIME)
      TIMRDF = TIMRDF+TIME-TIME0
C
      IF (IEOFSC.LE.0) GO TO 40
      CALL SHRKSC (INIT,HWHM)
C
C     SHRKSC MAY SHRINK (COMPRESS) THE DATA;
C     DVI IS MODIFIED ACCORDINGLY
C
   30 CONTINUE
      CALL CONVSC (S,HWHM,R1,XF)
C
      IF (IPANEL.EQ.0) GO TO 20
C
   40 CALL PNLCNV (R1,JUNIT,SUMR,NPTS,NS,NI)
      IF ((ISTOP.NE.1).AND.(IEOFSC.GT.0)) GO TO 30
      IF (ISTOP.NE.1) GO TO 40
      CALL CPUTIM (TIME)
C
      SUMIN = SUMIN*DVSAV
C
      IF (IEOFSC.EQ.1) CALL SKIPFL (1,IUNIT,IEOFSC)
C
      IEOFT = IEOFT+1
C
      SUMOUT = SUMR(1)
      SMIN = SUMR(2)
      SMAX = SUMR(3)
      DVOSAV = SUMR(4)
C
      SUMOUT = SUMOUT*DVOSAV
C
   50 RETURN
C
      END

      SUBROUTINE PNLCNV (R1,JFILE,SUMR,NPTS,NS,NI) 1,4
C
      IMPLICIT REAL*8           (V)
C
C     SUBROUTINE PNLCNV OUTPUTS THE RESULTS OF THE CONVOLUTION
C     TO FILE JFILE
C
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      COMMON /SSUBS/ VFT,VBOT,VTOP,V1,V2,DVO,NLIMF,NSHIFT,MAXF,ILO,IHI,
     *               NLO,NHI,RATIO,SUMIN,IRATSH,SRATIO,IRATM1,NREN,
     *               DVSC,XDUM,V1SHFT
      COMMON /CONTRL/ IEOFSC,IPANEL,ISTOP,IDATA,JVAR,JABS
      COMMON /XTIME/ TIME,TIMRDF,TIMCNV,TIMPNL,tdum(8)
      COMMON /SPANEL/ V1P,V2P,DV,NLIM
      COMMON /XSTMPR/ PF,TF,PDX(6,5,35),DVXPR(5,35),IXBIN(5,35),
     *                IXSBN(5,35)
      COMMON /XSHEAD/ HEADT1(35)
      CHARACTER HEADT1*100
      DIMENSION PNLHDR(2)
      DIMENSION R1(*),SUMR(*)
C
      EQUIVALENCE (PNLHDR(1),V1P)
C
      CALL CPUTIM (TIME0)
C
      SUMOUT = SUMR(1)
      SMIN = SUMR(2)
      SMAX = SUMR(3)
      DV = DVO
      ISTOP = 0
      NNHI = (V2-VFT)/DV+1.5
      IF (NHI.GE.NNHI) THEN
         ISTOP = 1
         NHI = NNHI
      ENDIF
      NLIM = NHI-NLO+1
      V1P = VFT+FLOAT(NLO-1)*DV
      V2P = VFT+FLOAT(NHI-1)*DV
C
C     V1P IS FIRST FREQ OF PANEL
C     V2P IS LAST  FREQ OF PANEL
C
      CALL BUFOUT (JFILE,PNLHDR(1),NPHDRF)
      CALL BUFOUT (JFILE,R1(NLO),NLIM)
C
      VFT = VFT+FLOAT(NLIMF-1)*DV
      DVXPR(NS,NI) = DV
      NLIMHI = NLIM+NLO-1
      DO 10 I = NLO, NLIMHI
         SMIN = MIN(SMIN,R1(I))
         SMAX = MAX(SMAX,R1(I))
         SUMOUT = SUMOUT+R1(I)
   10 CONTINUE
      IF (ISTOP.EQ.1) GO TO 40
      JF = 1
      DO 20 J = NLIMF, MAXF
         R1(JF) = R1(J)
         JF = JF+1
   20 CONTINUE
      DO 30 J = JF, MAXF
         R1(J) = 0.
   30 CONTINUE
      NLIMF = 511
      NLO = NSHIFT+1
      NHI = NLIMF+NSHIFT-1
   40 SUMR(1) = SUMOUT
      SUMR(2) = SMIN
      SUMR(3) = SMAX
      SUMR(4) = DVO
      CALL CPUTIM (TIME)
      TIMPNL = TIMPNL+TIME-TIME0
C
      RETURN
C
      END

      SUBROUTINE SLRENZ (XF) 1
CCP   SUBROUTINE SLRENZ (XF,XSCALE)
C
C     SUBROUTINE SLRENZ SETS UP THE LORENZ SCANNING FUNCTION
C
      COMMON /CMSHAP/ HWF,DXF,NF,NFMAX,HWF2,DXF2,NX2,N2MAX,
     *                HWF3,DXF3,NX3,N3MAX
      COMMON /IFIL/ IRD,IPR,IPU,NOPR,NFHDRF,NPHDRF,NFHDRL,NPHDRL,
     *              NLNGTH,KFILE,KPANEL,LINFIL,NFILE,IAFIL,IEXFIL,
     *              NLTEFL,LNFIL4,LNGTH4
      DIMENSION XF(*)
C
      PI = 2.*ASIN(1.)
      XNORM = 1.0/PI
      DO 10 I = 1, NFMAX
         XF(I) = 0.
   10 CONTINUE
      XF(1) = XNORM
      SUM = XF(1)
      DO 20 I = 2, NF
         X = FLOAT(I-1)*DXF
         XF(I) = XNORM*(1./(1.+X**2))
         SUM = SUM+2.*XF(I)
   20 CONTINUE
      SUM = SUM*DXF
C
C     RENORMALIZE
C
      XNORM = 1.0/SUM
      DO 30 I = 1, NF
         XF(I) = XNORM*XF(I)
   30 CONTINUE
C
C     WRITE(IPR,900) NF,DXF,SUM
C
      RETURN
C
      END