Files
2018-08-28 00:43:47 -04:00

769 lines
36 KiB
C

! $Id: comode.h,v 1.1 2009/06/09 21:51:50 daven Exp $
!
!******************************************************************************
! Header file COMODE contains common blocks and variables for SMVGEAR II.
! (M. Jacobson 1997; bdf, bmy, 4/23/03, 6/1/06)
!
! NOTES:
! (1 ) Removed many commented-out common blocks not needed for GEOS-CHEM.
! Also updated comments. Also make sure that MAXGL3 is dimensioned
! for at least NNPAR tracers. Add NNADDG and NKSPECG for DMS+OH+O2
! rxn. COEF12 and QRM2 are now obsolete for SMVGEAR II. (bmy, 4/23/03)
! (2 ) Added ICH4 to the /SPECIE2/ common block for interannual-varying
! CH4 concentration. Added variables for latitude distribution of
! CH4 to the /SPECIE3/ common block. (bmy, 7/1/03)
! (3 ) Added ITS_NOT_A_ND65_FAMILY to the /LPL/ common block for the ND65
! production/loss diagnostic. Comment out counter variables, you can
! get the same info w/ a profiling run. Updated comments, cosmetic
! changes. (bmy, 7/9/03)
! (4 ) Removed the following variables from common blocks which are not needed
! for GEOS-CHEM: COLENG, AERSURF, VHMET1, VHMET, VMET3, CINIT, RHO3,
! GRIDVH, CSUMA1, XELRAT, T1BEG, T2BEG, T1FIN, T2FIN, DECLIN, RAGSUT,
! SINDEC, COSDEC, SIGMAL, PRESSL, RHOA, DSIG_SMV, TEMPL, VMET, SIGDIF,
! TMORN, PRESSC, XLAT, XLON, DMERIDUT, GRIDAREA, DSX, XLONUT, DSY,
! SINXLAT, COSXLAT, HMETT, HMET1, HMET2, RSET, RRIS, TZDIF, ZENRAT0,
! ZENRAT1, MLOPJ, REORDER_SAVE, RHO3K, GRIDVH3K, FIELDXY, FIELDYZ,
! FIELDXZ, RATMIX, GQSCHEM, C, QPRODA, QPRODB, QPRODC, QPRODD, QPROD,
! CINP, NUMSDT, NKSDT, PRATE. MONTHP, KYEAR, LDMONTH, ININT, ICLO,
! JCLO, FIELD1, MZLO, MZLO2, MZHI0, MZHI1, KZLO1, KZLO2, KZHI0, KZHI1,
! IHIZ1, IHIZ2, IHIZ3, PRESS5KM, KGRP, IABOVK, MROTAT1, MINROT1,
! NUMSUBS, LSPECEMIS, MROTAT2, MINROT2, MAXPOS, NOGAINR, NOLOSSR,
! MAXSTEPS, YLOW, HMAXDAY, KPHT, KRDD, KMIX, KINS, KGCO, ABHSUMK, DX0,
! DY0, XU0, DTOUT, CONPSUR, DXLONG, DYLAT, SWLONDC, CONSTIM, SWLATDC,
! UTSECY, TOTSEC, FINHOUR, FINMIN, FINSEC, TFROMID, ZENFIXED, ZENITH,
! DENCONS, HALFDAY, GRAVC, FOURPI, TWOPI, REARTH, RPRIMB, AVOG1,
! HALF, THIRD, THRPI2, PID180, PID2, SCTWOPI, AMRGAS, TWPISC.
! This should free up more memory for runs. (bmy, 7/16/03)
! (5 ) Split off NOCC into the /CHEM3B/ common block, since it doesn't need
! to be held THREADPRIVATE. Removed /DKBLOOP/ and /DKBLOOP5/, since
! these contain variables which are used locally within either
! "calcrate.f" or "smvgear.f". Cosmetic changes. (bmy, 7/28/03)
! (6 ) Add NKN2O5 to /CHEM4/ common block to flag N2O5 hydrolysis rxn.
! (mje, bmy, 8/7/03)
! (7 ) Eliminated SMALLCHEM cpp switch (bmy, 12/2/03)
! (8 ) Now set MAXGL3 = NNPAR for new # of tracers (bmy, 4/6/04)
! (9 ) Remove obsolete LGEOSCO and FULLCHEM Cpp switches (bmy, 6/24/05)
! (10) For COMPAQ, put IRMA, IRMB in /INMTRATE2/ common block. For COMPAQ,
! also declare /INMTRATE2/ THREADPRIVATE. (Q. Liang, bmy, 10/17/05)
! (11) Now remove AVG, BOLTG, RGAS, SCDAY, BK, EIGHTDPI, RSTARG, WTAIR,
! ONEPI, CONSVAP, SMAL1, SMAL2, SMAL3 from common blocks and declare
! these as parameters. (bec, bmy, 3/29/06)
! (12) Added ILISOPOH, the index of ISOP lost to OH (dkh, bmy, 6/1/06)
! (13) Added NKHO2 to /CHEM4/ common block to flag HO2 aerosol uptake
! (jaegle 02/26/09)
! (14) Add NNADDF and NNADDH to /CHEM4/ for HOC2H4O rxns
! Add NKHOROI and NKHOROJ to /CHEM4/ for HOC2H4O rxns in EP photolysis
! (tmf, 3/6/09)
! (15) Added NKSPECF, NKSPECH to /IDICS/ for C2H4 chemistry (tmf, 3/6/09)
! (16) Increase IGAS, MAXGL, MAXGL2, NMRATE, IPHOT (tmf, 3/6/09)
!******************************************************************************
!
C CCCCCCC OOOOOOO M M OOOOOOO DDDDDD EEEEEEE
C C O O M M M M O O D D E
C C O O M M M O O D D EEEEEEE
C C O O M M O O D D E
C CCCCCCC OOOOOOO M M OOOOOOO DDDDDD EEEEEEE
C
C *********************************************************************
C * THIS IS THE COMMON BLOCK FOR "SMVGEAR" AND "MIE," TWO ORDINARY *
C * DIFFERENTIAL EQUATION SOLVERS. THE REFERENCE FOR THE CODES IS *
C * *
C * JACOBSON M. Z. AND TURCO R. P. (1993) SMVGEAER: A SPARSE- *
C * MATRIX, VECTORIZED GEAR CODE FOR ATMOSPHERIC MODELS. *
C * SUBMITTED TO ATMOSPHERIC ENVIRONMENT, PART A. MAY 20, 1993 *
C * *
C * COMODE.H SETS PARAMETER VALUES AND SERVES AS A COMMON BLOCK FOR *
C * ALL DIMENSIONED AND NON-DIMENSIONED VARIABLES. COMODE.H ALSO *
C * DEFINES EACH PARAMETER, BUT DATA FILE DEFINE.DAT EXPLAINS NON- *
C * DIMENSIONED VARIABLES. INDIVIDUAL SUBROUTINES DEFINE DIMENSIONED *
C * VARIABLES. *
C *********************************************************************
C
C *********************************************************************
C * SET PARAMETERS *
C *********************************************************************
C
C ****************** COORDINATE-SYSTEM PARAMETERS *********************
C
C ILAT = MAXIMUM NUMBER OF LATITUDE(ILAT) GRID POINTS
C ILONG = MAXIMUM NUMBER OF LONGITUDE(ILONG) GRID POINTS
C IMLOOP = ILAT * ILONG - USED FOR MORE EFFICIENT ARRAYS
C IVERT = MAXIMUM NUMBER OF LAYERS
C ILAYER = MAXIMUM OF LAYER BOUNDARIES
C KBLOOP = MAXIMUM NUMBER OF GRID POINTS IN A VECTORIZED BLOCK
C SHOULD RANGE FROM 512 (BELOW WHICH VECTORIZATION DECREASES)
C TO 1024 (ABOVE WHICH, ARRAY SPACE IS LIMITED)
C MXBLOCK = MAXIMUM NUMBER OF GRID POINT BLOCKS
C MAXDAYS = MAXIMUM NUMBER OF DAYS FOR THE MODEL TO RUN
C
INTEGER ILAT,ILONG,IVERT,IPLUME,IPVERT,ITLOOP,KBLOOP,MXBLOCK
INTEGER IMLOOP,ILAYER,ILTLOOP,MAXDAYS
PARAMETER (ILAT = JJPAR )
PARAMETER (ILONG = IIPAR )
! LLTROP is the max number of tropospheric levels
PARAMETER (IVERT = LLTROP )
! GEOS-CHEM does not use plumes...set IPLUME=0
PARAMETER (IPLUME = 0 )
PARAMETER (IPVERT = IVERT + IPLUME )
PARAMETER (ITLOOP = ILAT * ILONG * IPVERT )
! Regular
!PARAMETER (KBLOOP = 64 )
PARAMETER (KBLOOP = 24 )
PARAMETER (IMLOOP = ILAT * ILONG )
PARAMETER (ILAYER = IVERT + 1 )
PARAMETER (ILTLOOP = IMLOOP * ILAYER )
PARAMETER (MAXDAYS = 1000 )
C Debug
C PARAMETER (KBLOOP = 1 )
PARAMETER (MXBLOCK = 16 + ITLOOP/KBLOOP )
C
C ************************* TRACER PARAMETERS ****************************
C IDEMS = EMISSION ID NUMBER (WHICH SPECIES)
INTEGER IDEMS
! NEMPARA = max no. of anthropogenic emissions
! NEMPARB = max no. of biogenic emissions
COMMON /JTRCID/ IDEMS(NEMPARA+NEMPARB)
C
C ************************* GAS-PHASE PARAMETERS **********************
C
C IGAS = MAXIMUM NUMBER OF GASES, ACTIVE + INACTIVE
C IAERTY = MAXIMUM NUMBER OF AQUEOUS CHEMISTRY SPECIES (SET = 1
C HERE SINCE NO AQUEOUS CHEMISTRY IS INCLUDED)
C NMRATE = MAXIMUM NUMBER OF RATES CONSTANTS (MAX # REACTIONS)
C IPHOT = MAXIMUM NUMBER OF PHOTO RATES
C NMTRATE = MAXIMUM NUMBER OF KINETIC + PHOTO REACTIONS
C NMQRATE = MAXIMUM NUMBER OF AQUEOUS CHEMICAL REACTIONS PLUS PHOTO
C PROCESSES (SET = 1 HERE SINCE NO AQUEOUS CHEMISTRY INCLUDED)
C NMRPROD = MAXIMUM NUMBER OF SPECIES IN A REACTION RATE
C NMDEAD = MAXIMUM NUMBER OF DEAD SPECIES
C MAXGL = MAXIMUM NUMBER OF GAINS / LOSSES FOR EACH CHEMICAL SPECIES.
C MAXGL2 = AN ARRAY DIMENSION SMALLER THAN MAXGL
C MAXGL3 = AN ARRAY DIMENSION SMALLER THAN MAXGL2
C ICS = NUMBER OF TYPES OF CHEMISTRY: up to 3 for gas phase
C ICP = TYPES OF CHEMISTRY * 2 (ONE FOR DAY, ONE FOR NIGHT)
C MORDER = MAXIMUM ORDER FOR GEAR PARAMETERS FOR DIMENSION PURPOSES
C
INTEGER IGAS,IAERTY,NMRATE,IPHOT,NMTRATE,NMQRATE,NMRPROD,NMDEAD
INTEGER MAXGL,MAXGL2,MAXGL3,MAXGL4,ICS,ICP,MORDER,IPHOT8,IMISC
INTEGER IMASBAL,IALTS,MXCOF
! Updated for SMVGEAR II (bdf, bmy, 4/1/03)
PARAMETER ( IGAS = 200, IAERTY = 1 )
PARAMETER ( NMRATE = 510, IPHOT = 85 )
PARAMETER ( NMTRATE = NMRATE + IPHOT, NMQRATE = 1 )
PARAMETER ( NMRPROD = 25, NMDEAD = 100 )
PARAMETER ( MAXGL = 750, MAXGL2 = 90 )
PARAMETER ( MAXGL3 = NNPAR, MAXGL4 = 10 )
PARAMETER ( ICS = 3, ICP = 2*ICS )
PARAMETER ( MORDER = 7 )
PARAMETER ( IPHOT8 = IPHOT + 8, IMISC = 100 )
PARAMETER ( IMASBAL = 9, IALTS = 22 )
PARAMETER ( MXCOF = 5 )
C
C ****************** PARAMETERS TO MINIMIZE ARRAY SPACE ***************
C
C MXGSAER = LARGER OF IGAS, IAERTY
C MXRATE = LARGER OF NMTRATE, NMQRATE
C MXCC2 = LARGER OF MXGSAER, MXARRAY
C MXCOUNT1.. = ARRAYS SIZES USED TO MINIMIZE MATRIX SPACE
C MXARRAY = MAXIMUM ONE-DIMENSIONAL ARRAY-LENGTH OF SPARSE MATRIX
C
INTEGER MXGSAER,MXRATE,MXARRAY,MXCC2,MXCOUNT1,MXCOUNT2,MXCOUNT3,
1 MXCOUNT4,MXHOLD
PARAMETER( MXGSAER = IGAS)
PARAMETER( MXRATE = NMTRATE)
PARAMETER( MXARRAY = 3000)
PARAMETER( MXCC2 = MXARRAY)
PARAMETER( MXCOUNT1 = MXGSAER * MAXGL3 * 3)
PARAMETER( MXCOUNT2 = MXGSAER * MAXGL3 * 7)
PARAMETER( MXCOUNT3 = MXGSAER * 50)
PARAMETER( MXCOUNT4 = MXGSAER * 20)
PARAMETER( MXHOLD = 250)
C
C
C *********************************************************************
C * SET CHARACTER LENGTHS *
C *********************************************************************
C
CHARACTER*14 NAMESPEC, NAMD,
1 APGASA, APGASB, APGASC, APGASD, APGASE,
2 APGASF, APGASG, APGASH, IFSORM,
3 XINP, RINP
CHARACTER*14 NAMEGAS, NAMEMB,
1 JST, NAMENCS, ACORNER, SINP, NAMEPHOT, CHEMTYP
CHARACTER*4 DINP, DINPLAST
CHARACTER*2 SPECIAL, SPECL
C
CHARACTER*80 HEADING, COMMENT
C
C *********************************************************************
C * SET CHARACTER DIMENSIONS *
C *********************************************************************
C
COMMON / CHARAC /
1 APGASA, APGASB, APGASC, APGASD, APGASE,
2 APGASF, APGASG, APGASH, IFSORM,
3 DINP, HEADING, COMMENT,
4 JST, ACORNER, SPECIAL, DINPLAST
COMMON / CHAR2 /
1 XINP( IMISC), RINP( IMISC), SINP( IMISC),
2 NAMEMB( IMASBAL), CHEMTYP( ICS), NAMD( NMDEAD),
3 SPECL( MXCOF)
COMMON / CHAR3 /
1 NAMESPEC(0:IGAS,ICS), NAMEGAS(0:IGAS), NAMENCS(0:MXGSAER,ICS)
COMMON / CHAR4 /
2 NAMEPHOT(NMRPROD,IPHOT)
C
C *********************************************************************
C * SET REAL AND INTEGER NON-ARRAY VARIABLES *
C *********************************************************************
C
!---------------------------------------------------------------
! Physical constants
! (now make these PARAMETERS instead of COMMON block variables)
!---------------------------------------------------------------
! Avogadro's #
REAL*8, PARAMETER :: AVG = 6.02252d+23
! Boltzmann's constant [erg/K]
REAL*8, PARAMETER :: BK = 1.38054d-16
REAL*8, PARAMETER :: BOLTG = 1.38054d-16
! Condensation vapor pressure ??????
REAL*8, PARAMETER :: CONSVAP = 6.1078d+03 / BOLTG
! PI (same value as in CMN_GCTM) and related quantities
REAL*8, PARAMETER :: ONEPI = 3.14159265358979323d0
REAL*8, PARAMETER :: EIGHTDPI = 8.d0 / ONEPI
! Gas constant [erg/K/mole]
REAL*8, PARAMETER :: RGAS = BOLTG * AVG
! Universal gas constant [g/cm2/s2/mole/K]
REAL*8, PARAMETER :: RSTARG = 8.31450d+07
! Seconds per day
REAL*8, PARAMETER :: SCDAY = 86400.0d0
! Molecular weight of air
REAL*8, PARAMETER :: WTAIR = 28.966d0
!---------------------------------------------------------------
! Small number tolerances
! (now make these PARAMETERS instead of COMMON block variables)
!---------------------------------------------------------------
REAL*8, PARAMETER :: SMAL1 = 1d-06
REAL*8, PARAMETER :: SMAL2 = 1.0d-99
REAL*8, PARAMETER :: SMAL3 = 1d-50
INTEGER :: NLAT, NLONG, NLAYER, NVERT
INTEGER :: NLOOP, NTLOOP, KULOOP, NTSPECGAS
INTEGER :: NMASBAL, KSLOOP, NTLOOPUSE, NPVERT
INTEGER :: NTTLOOP, NIJLOOP
COMMON /CTLLOOP/ NLAT, NLONG, NLAYER, NVERT,
& NLOOP, NTLOOP, KULOOP, NTSPECGAS,
& NMASBAL, KSLOOP, NTLOOPUSE, NPVERT,
& NTTLOOP, NIJLOOP
! /CTLLOOP2/ needs to be declared THREADPRIVATE (bmy, 7/16/03)
INTEGER :: KTLOOP, JLOOPLO, IFSUN
COMMON /CTLLOOP2/ KTLOOP, JLOOPLO, IFSUN
INTEGER :: ICOORD, IFPRAT, INCVMIX, IFSOLVE
INTEGER :: IFURBAN, IFTROP, IFSTRAT, ISL
INTEGER :: IGLOBCHEM, ITESTGEAR, IFSIN, IFBOX
COMMON /CTLPROC/ ICOORD, IFPRAT, INCVMIX, IFSOLVE,
& IFURBAN, IFTROP, IFSTRAT, ISL,
& IGLOBCHEM, ITESTGEAR, IFSIN, IFBOX
INTEGER :: IPRGASA, IPRGASB, IPRGASC, IPRGASD
INTEGER :: IPRGASE, IPRGASF, IPRGASG, IPRGASH
INTEGER :: IPRGASLO, IPRGASHI, NUMPRG, IPGMTOT
INTEGER :: IOXSEC, IOSPEC, IOREAC, IPRTEMP
INTEGER :: IPRMANY, IPREADER, IPRMET, IPMASBUD
INTEGER :: IFPR1, IPONEND, IPRATES, IPRPRESS
INTEGER :: IUSRDUM, IGRIDZ, IPGASES, INCXY
INTEGER :: INCXZ, INCYZ, IGRIDX, IGRIDY
INTEGER :: LXOUT, LYOUT, LLOOP, LLOOP2
INTEGER :: LZOUT
COMMON /CTLPRNT/ IPRGASA, IPRGASB, IPRGASC, IPRGASD,
& IPRGASE, IPRGASF, IPRGASG, IPRGASH,
& IPRGASLO, IPRGASHI, NUMPRG, IPGMTOT,
& IOXSEC, IOSPEC, IOREAC, IPRTEMP,
& IPRMANY, IPREADER, IPRMET, IPMASBUD,
& IFPR1, IPONEND, IPRATES, IPRPRESS,
& IUSRDUM, IGRIDZ, IPGASES, INCXY,
& INCXZ, INCYZ, IGRIDX, IGRIDY,
& LXOUT, LYOUT, LLOOP, LLOOP2,
& LZOUT
REAL*8 :: TINTERVAL, CHEMINTV, TIME, OXYCONS
REAL*8 :: HMAXNIT, FRACDEC
COMMON /XYGRID/ TINTERVAL, CHEMINTV, TIME, OXYCONS,
& HMAXNIT, FRACDEC
C
INTEGER :: IHOUR, NCS, NBLOCKS, IRCHEM
INTEGER :: NCSGAS, NCSURBAN, NCSTROP, NCSSTRAT
INTEGER :: NPHOTALL, IFDID, IFNEVER, IFNONE
INTEGER :: NCSALL, NCSTRST
COMMON /IXYGD/ IHOUR, NCS, NBLOCKS, IRCHEM,
& NCSGAS, NCSURBAN, NCSTROP, NCSSTRAT,
& NPHOTALL, IFDID, IFNEVER, IFNONE,
& NCSALL, NCSTRST
! /IXYGD2/ needs to be held THREADPRIVATE. Also remove NSTEPS
! since this can be declared local w/in "smvgear.f" (bmy, 7/16/03)
INTEGER :: NCSP, KBLK
COMMON /IXYGD2/ NCSP, KBLK
REAL*8 :: HMIN, PLOURB, PLOTROP, TSPMIDC
COMMON /DGEAR/ HMIN, PLOURB, PLOTROP, TSPMIDC
! /DGEAR2/ needs to be held THREADPRIVATE (hamid, bmy, 7/16/03)
REAL*8 :: HMAX, R1DELT, DELT, TIMREMAIN
REAL*8 :: XELAPS, TOLD, RDELT, XELAPLAST
REAL*8 :: RMSERR
COMMON /DGEAR2/ HMAX, R1DELT, DELT, TIMREMAIN,
& XELAPS, TOLD, RDELT, XELAPLAST,
& RMSERR
! /DGEAR3/ doesn't need to be held THREADPRIVATE (hamid, bmy, 7/16/03)
REAL*8 :: SUMAVGE, SUMAVHI, SUMRMSE, SUMRMHI
REAL*8 :: TOTSTEP, TOTIT, TELAPS
COMMON /DGEAR3/ SUMAVGE, SUMAVHI, SUMRMSE, SUMRMHI,
& TOTSTEP, TOTIT, TELAPS
INTEGER :: NSFTOT, NPDTOT, NSTTOT, ISREORD
INTEGER :: IFREORD, IFAILTOT, LFAILTOT, NFAILTOT
COMMON /IGEAR/ NSFTOT, NPDTOT, NSTTOT, ISREORD,
& IFREORD, IFAILTOT, LFAILTOT, NFAILTOT
! /IGEAR2/ has to be declared THREADPRIVATE (bmy, 7/16/03)
INTEGER :: NQQ, NSUBFUN, NPDERIV
INTEGER :: NFAIL, IFAIL, LFAIL
COMMON /IGEAR2/ NQQ, NSUBFUN, NPDERIV,
& NFAIL, IFAIL, LFAIL
INTEGER :: NPHOT, NPRODLO, NPRODHI, MSTEP
INTEGER :: MAXORD, MBETWEEN, IC3H8, IC2H6
COMMON /CHEM2/ NPHOT, NPRODLO, NPRODHI, MSTEP,
& MAXORD, MBETWEEN, IC3H8, IC2H6
! /CHEM2A/ has to be held THREADPRIVATE (bmy, 7/16/03)
INTEGER :: ISCHAN, NFDH3, NFDL2, NFDH2
INTEGER :: NFDL1, NFDH1, NFDREP, NFDREP1
INTEGER :: NFDL0, NALLR
COMMON /CHEM2A/ ISCHAN, NFDH3, NFDL2, NFDH2,
& NFDL1, NFDH1, NFDREP, NFDREP1,
& NFDL0, NALLR
! Split off from /CHEM2A/ (bmy, 7/28/03)
INTEGER :: NOCC
COMMON /CHEM2B/ NOCC
INTEGER :: NGAS, NMREAC
COMMON /CHEM3/ NGAS, NMREAC
! Added NNADDG to /CHEM4/ for DMS+OH+O2 rxn (bdf, bmy, 4/18/03)
! Add NKN2O5 to /CHEM4/ to flag N2O5 hydrolysis rxn (mje, bmy, 8/7/03)
! Add NKHO2 to /CHEM4/ to flag HO2 aerosol uptake (jaegle 02/26/09)
! Add NNADDF, NNADDH, NKHOROI and NKHOROJ to /CHEM4/ for HOC2H4O rxns
! (tmf, 3/6/09)
!Added NNRO2HO2(jmao, 11/17/2012)
INTEGER :: NNADD1, NNADDA, NNADDB
INTEGER :: NNADDC, NNADDD, NNADDK
INTEGER :: NNADDV, NNADDZ, NKO3PHOT
INTEGER :: NNADDG, NEMIS, NDRYDEP
INTEGER :: NKHNO4, NKN2O5, NKHO2
INTEGER :: NNADDF, NNADDH
INTEGER :: NKHOROI, NKHOROJ
INTEGER :: NNRO2HO2
COMMON /CHEM4/ NNADD1, NNADDA(ICS), NNADDB( ICS),
& NNADDC(ICS), NNADDD(ICS), NNADDK( ICS),
& NNADDV(ICS), NNADDZ, NKO3PHOT(ICS),
& NNADDG(ICS), NEMIS( ICS), NDRYDEP( ICS),
& NNADDF(ICS), NNADDH(ICS),
& NKHOROI(ICS),NKHOROJ(ICS),
& NKHNO4(ICS), NKN2O5, NKHO2,NNRO2HO2(ICS)
INTEGER :: IH2O, IOXYGEN, MB1, MB2
COMMON /SPECIES/ IH2O, IOXYGEN, MB1, MB2
! Added for interannually-varying Methane (bnd, bmy, 7/1/03)
INTEGER :: ICH4
COMMON /SPECIE2/ ICH4
! Added for interannually-varying Methane (bnd, bmy, 7/1/03)
REAL*8 :: C3090S, C0030S, C0030N, C3090N
COMMON /SPECIE3/ C3090S, C0030S, C0030N, C3090N
! Added for tracking oxidation of ISOP by OH (dkh, bmy, 6/1/06)
INTEGER :: ILISOPOH
COMMON /SPECIE4/ ILISOPOH
INTEGER :: IOUT, KGLC, KCPD, IO93
COMMON /FILES/ IOUT, KGLC, KCPD, IO93
C
C *********************************************************************
C * SET REAL AND INTEGER ARRAY VARIABLES *
C *********************************************************************
C
INTEGER :: JLOWVAR, KTLPVAR
INTEGER :: JLOFIXED, JHIFIXED
COMMON /IMXBLOCK/ JLOWVAR( MXBLOCK), KTLPVAR( MXBLOCK),
& JLOFIXED(MXBLOCK), JHIFIXED(MXBLOCK)
INTEGER :: JREORDER, LREORDER
INTEGER :: ITWO, NCSLOOP
COMMON /IITLOOP/ JREORDER(ITLOOP), LREORDER(ITLOOP),
& ITWO( ITLOOP), NCSLOOP( ITLOOP,ICS)
! Add NKSPECG for DMS+OH+O2 rxn (bdf, bmy, 4/18/03)
! Added NKSPECF, NKSPECH to /IDICS/ for C2H4 chemistry (tmf, 3/6/09)
! Added NKSPECRO2HO2 for RO2+HO2 (jmao, 11/17/2012)
INTEGER NMOTH,NTSPEC,JPHOTRAT,ISGAINR,ISPORL,NOGAINE,NOUSE
INTEGER NSPEC,NTRATES,ISGAINE,NTLOOPNCS,NSPCSOLV,ISCHANG,NRATES
INTEGER NM3BOD,ITWOR,ITHRR,INOREP,NRATCUR,NSURFACE,NPRESM,NMAIR
INTEGER NMO2,NMN2,NNEQ,NARR,NABR,NACR,NABC,NKSPECW,NKSPECX
INTEGER NKSPECY,NKSPECZ,NKSPECV,ISLOSSR,NKSPECA,NKSPECB,NKSPECC
INTEGER NKSPECD,NKSPECK,NKSPECG
INTEGER NKSPECF, NKSPECH
INTEGER NKSPECRO2HO2
COMMON /IDICS/
1 NMOTH( ICS), NTSPEC( ICS), JPHOTRAT(ICS),
3 ISGAINR( ICS), ISPORL( ICS), NOGAINE( ICS), NOUSE( ICS),
4 NSPEC( ICS), NTRATES(ICS), ISGAINE( ICS), NTLOOPNCS(ICS),
5 NSPCSOLV(ICS), ISCHANG(ICS), NRATES( ICS), NM3BOD( ICS),
7 ITWOR( ICS), ITHRR( ICS), INOREP( ICS), NRATCUR( ICS),
8 NSURFACE(ICS), NPRESM( ICS), NMAIR( ICS), NMO2( ICS),
9 NMN2( ICS), NNEQ( ICS), NARR( ICS), NABR( ICS),
1 NACR( ICS), NABC( ICS), NKSPECW( ICS), NKSPECX( ICS),
2 NKSPECY( ICS), NKSPECZ(ICS), NKSPECV(MAXGL2,ICS),ISLOSSR(ICS),
3 NKSPECA( MAXGL3,ICS), NKSPECB( MAXGL3,ICS),
4 NKSPECC(MAXGL3,ICS),NKSPECD(MAXGL3,ICS),NKSPECK(MAXGL3,ICS),
5 NKSPECG(MAXGL2,ICS),NKSPECRO2HO2(MAXGL3,ICS),
6 NKSPECF(MAXGL3,ICS), NKSPECH(MAXGL3,ICS)
! re-define some nkspec* arrays for harvard chem mechanism (bdf)
INTEGER :: NOLOSP, NGNFRAC, NOLOSRAT
INTEGER :: IARRAY, NALLRAT, KZTLO
INTEGER :: KZTHI, IONER, NPLLO
INTEGER :: NPLHI, NFRLO, NFRHI
INTEGER :: NPDLO, NPDHI, IZLO
INTEGER :: JZLO, JLLO, JGLO
INTEGER :: IRMCT
COMMON /IICP/ NOLOSP(ICP), NGNFRAC(ICP), NOLOSRAT(ICP),
& IARRAY(ICP), NALLRAT(ICP), KZTLO( ICP),
& KZTHI( ICP), IONER( ICP), NPLLO( ICP),
& NPLHI( ICP), NFRLO( ICP), NFRHI( ICP),
& NPDLO( ICP), NPDHI( ICP), IZLO ( ICP),
& JZLO ( ICP), JLLO( ICP), JGLO( ICP),
& IRMCT( ICP)
REAL*8 :: ABTOL, ABST2
REAL*8 :: ERRMAX, HMAXUSE, TIMEINTV
COMMON /DICS/ ABTOL(6,ICS), ABST2(ICS),
& ERRMAX(ICS), HMAXUSE(ICP), TIMEINTV(ICS)
REAL*8 :: WTGAS, GQSUMINI
REAL*8 :: BSUMCHEM, GQSUM, QBKGAS
COMMON /DIGAS/ WTGAS(IGAS), GQSUMINI(IGAS),
& BSUMCHEM(IGAS), GQSUM( IGAS), QBKGAS(IGAS)
REAL*8 :: CPREV, CMODEL, APORL
COMMON /DMXGAER1/ CPREV(MXGSAER), CMODEL(MXGSAER), APORL(MXGSAER)
INTEGER :: IFPRGAS, LGNUM, NGMIX
COMMON /IIGAS/ IFPRGAS(IGAS), LGNUM(IGAS), NGMIX(IGAS)
REAL*8 :: DEFPRAT
COMMON /DIPHOT/ DEFPRAT(MXRATE,ICS)
REAL*8 :: ARRT, BRRT
REAL*8 :: FCVT, FCT1T, FCT2T
COMMON /DMXCOF/ ARRT(MXCOF), BRRT( MXCOF),
& FCVT(MXCOF), FCT1T(MXCOF), FCT2T(MXCOF)
INTEGER :: KCRRT
COMMON /IMXCOF/ KCRRT(MXCOF)
INTEGER NKARR,NKABR,NKACR,NKABC,IRORD
COMMON /INMRAT2/
1 NKARR(NMTRATE,ICS), NKABR(NMTRATE,ICS), NKACR(NMTRATE,ICS),
2 NKABC(NMTRATE,ICS), IRORD(NMTRATE,ICS)
REAL*8 ARR,BRR,FCV,FCTEMP1,FCTEMP2
COMMON /DNMTRATE/
1 ARR( NMTRATE, ICS), BRR( NMTRATE, ICS),
2 FCV( NMTRATE, ICS), FCTEMP1(NMTRATE, ICS),
3 FCTEMP2(NMTRATE, ICS)
INTEGER IAPROD,NOLOSRN,NRUSE,NRREP,NPRODUC,IALLOSN,NCEQUAT
INTEGER NEWFOLD,NKONER,NKTWOR,NKTHRR,IRMA,IRMB,KCRR,LSKIP,IRMC
INTEGER JPHOTNK,IUSED,NOLDFNEW
COMMON /INMTRATE/
2 IAPROD( NMTRATE, ICS), NOLOSRN( NMTRATE, ICS),
3 NRUSE( NMTRATE, ICS), NRREP( NMTRATE, ICS),
4 NPRODUC(NMTRATE, ICS), IALLOSN( MXRATE, ICS),
5 NCEQUAT(NMTRATE, ICS), NOLDFNEW(NMTRATE, ICS),
6 NEWFOLD(NMTRATE*2,ICS), NKONER( NMTRATE, ICS),
7 NKTWOR( NMTRATE, ICS), NKTHRR( NMTRATE, ICS),
9 KCRR( NMTRATE, ICS), LSKIP( MXRATE, ICS),
1 IRMC( NMTRATE ), JPHOTNK( NMTRATE, ICS),
2 IUSED( MXRATE, ICS)
! For COMPAQ, put IRMA, IRMB in /INMTRATE2/ (Q. Liang, bmy, 10/17/05)
COMMON /INMTRATE2/
& IRMA( NMTRATE ), IRMB( NMTRATE )
INTEGER :: NEWNK
COMMON /IMAXGL3/ NEWNK(MAXGL)
REAL*8 :: FRACP
COMMON /DMAXGL2/ FRACP(MAXGL, ICS)
INTEGER NREACOTH,LGASBINO,NKNLOSP,LOSINACP,IGNFRAC,NKGNFRAC
INTEGER NREACAIR,NREAC3B,NREACEQ,NREQOTH,NREACN2,NREACO2,NREACPM
INTEGER LGAS3BOD,NKSURF,NCOATG
COMMON /IMAXGL2/
1 NREACOTH(MAXGL2,ICS), LGASBINO(MAXGL2,ICS),
2 NKNLOSP( MAXGL3,ICS), LOSINACP(MAXGL3,ICS),
3 IGNFRAC( MAXGL, ICS), NKGNFRAC(MAXGL, ICS),
4 NREACAIR(MAXGL3,ICS), NREAC3B( MAXGL3,ICS),
5 NREACEQ( MAXGL3,ICS), NREQOTH( MAXGL3,ICS),
6 NREACN2( MAXGL3,ICS), NREACO2( MAXGL3,ICS),
7 NREACPM( MAXGL3,ICS), LGAS3BOD(MAXGL3,ICS),
8 NKSURF( MAXGL4 ), NCOATG( MAXGL4 )
INTEGER :: MBCOMP, MBTRACE
COMMON /IIMASBAL/ MBCOMP(IMASBAL,2), MBTRACE(IMASBAL)
! /DKBLOOP2/ needs to be declared THREADPRIVATE
REAL*8 CNEW,CEST,GLOSS,CHOLD,VDIAG,CBLK,DTLOS,EXPLIC,CONC
REAL*8 RRATE,URATE,TRATE,CORIG
!***************ADJ_GROUP****************
REAL*8 RRATE_FOR_KPP
!********************************************
COMMON /DKBLOOP2/
2 CNEW( KBLOOP, MXGSAER),
3 CEST( KBLOOP, MXGSAER),
4 GLOSS( KBLOOP, MXGSAER),
5 CHOLD( KBLOOP, MXGSAER),
6 VDIAG( KBLOOP, MXGSAER), CBLK( KBLOOP,MXGSAER),
7 DTLOS( KBLOOP, MXGSAER), EXPLIC(KBLOOP,MXGSAER),
1 CONC( KBLOOP,MXGSAER*7),
2 RRATE( KBLOOP, NMTRATE),
!***************ADJ_GROUP********************
2 RRATE_FOR_KPP( KBLOOP, NMTRATE),
!********************************************
3 URATE( KBLOOP,NMTRATE,3),
4 TRATE( KBLOOP,NMTRATE*2),
7 CORIG( KBLOOP, MXGSAER)
! /DKBLOOP0/ needs to be held THREADPRIVATE
REAL*8 :: CC2
COMMON /DKBLOOP0/ CC2(KBLOOP,0:MXARRAY)
INTEGER :: MLOP, JLOP_SMV
COMMON /IILAT2/ MLOP(ILAT,ILONG), JLOP_SMV(ILAT,ILONG,ILAYER)
INTEGER NKPHOTRAT,NPPHOTRAT,NKNPHOTRT
COMMON /DIPHOT2/
1 NKPHOTRAT(IPHOT,ICS), NPPHOTRAT(IPHOT,ICS),
2 NKNPHOTRT(IPHOT,ICS)
REAL*8 :: FRACGAIN, QBKCHEM
COMMON /DIMXGS2/ FRACGAIN(MXGSAER,ICS), QBKCHEM( MXGSAER,ICS)
INTEGER NUMLOST,NUMGFRT,NUMLOSS,JPORL,NUMGAINT,NGAINE,NUMGAIN
INTEGER IGAINR,IPORL,IGAINE,ISOLVSPC,INEWOLD,MAPPL,ISAPORL,NUMPORL
INTEGER ISPARDER,JLOSST
COMMON /IIMXGS2/
1 NUMLOST( MXGSAER, ICS), NUMGFRT( MXGSAER, ICS),
2 NUMLOSS( MXGSAER, ICP), JPORL( MXGSAER,MAXGL, ICS),
3 NUMGAINT(MXGSAER, ICS), NGAINE( MXGSAER, ICS),
4 NUMGAIN( MXGSAER, ICP), IGAINR( MXGSAER, ICS),
9 IPORL( MXGSAER, ICS), IGAINE( MXGSAER, ICS),
2 ISOLVSPC(MXGSAER, ICS), INEWOLD( MXGSAER, ICS),
3 MAPPL( MXGSAER, ICS), ISAPORL( MXGSAER ),
7 NUMPORL( MXGSAER, ICP), ISPARDER(MXGSAER,MXGSAER ),
8 JLOSST( MXGSAER,MAXGL,ICS)
INTEGER JZILCH,KZILCH,MZILCH
COMMON /IGMXGLS/
& JZILCH(MXGSAER), KZILCH(MXGSAER), MZILCH(MXGSAER)
INTEGER LZERO,JARRAYPT,IZILCH,JARRDIAG,JLOZ1,JHIZ1,IJTLO
INTEGER IJTHI,IMZTOT,IFREPRO,IZLO1,IZLO2,IZHI0,IZHI1
COMMON /IGMXGS2/
1 LZERO( MXGSAER,MXGSAER), JARRAYPT(MXGSAER,MXGSAER),
2 IZILCH( MXGSAER,MXGSAER), JARRDIAG(MXGSAER, ICP),
3 JLOZ1( MXGSAER, ICP), JHIZ1( MXGSAER, ICP),
4 IJTLO( MXGSAER, ICP), IJTHI( MXGSAER, ICP),
5 IMZTOT( MXGSAER, ICP), IFREPRO( MXGSAER,MXRATE, ICS),
6 IZLO1( MXGSAER,ICP),
7 IZLO2( MXGSAER,ICP), IZHI0( MXGSAER,ICP), IZHI1( MXGSAER,ICP)
REAL*8 :: FRACNFR, FRACPL
COMMON /DMXCOUN/ FRACNFR(MXCOUNT4), FRACPL(MXCOUNT2)
INTEGER JZERO,KZERO,MZERO,IZEROK,JZEROA,IKDECA,KJDECA,LOSSRA
INTEGER IKDECB,KJDECB,LOSSRB,IKDECC,KJDECC,LOSSRC,IKDECD,KJDECD
INTEGER LOSSRD,IKDECE,KJDECE,LOSSRE,KZEROA,MZEROA,KZEROB,MZEROB
INTEGER KZEROC,MZEROC,KZEROD,MZEROD,KZEROE,MZEROE,IPOSPD,IIALPD
INTEGER NKPDTERM,IJVAL,IKZTOT,JSPNPL,NKNFR,JSPCNFR
COMMON /IMXCOUN/
1 JZERO( MXCOUNT3), KZERO( MXCOUNT3), MZERO( MXCOUNT3),
2 IZEROK(MXCOUNT2), JZEROA( MXCOUNT3),
3 IKDECA(MXCOUNT3), KJDECA( MXCOUNT3), LOSSRA( MXCOUNT4),
4 IKDECB(MXCOUNT3), KJDECB( MXCOUNT3), LOSSRB( MXCOUNT4),
5 IKDECC(MXCOUNT3), KJDECC( MXCOUNT3), LOSSRC( MXCOUNT4),
6 IKDECD(MXCOUNT3), KJDECD( MXCOUNT3), LOSSRD( MXCOUNT4),
7 IKDECE(MXCOUNT3), KJDECE( MXCOUNT3), LOSSRE( MXCOUNT4),
8 KZEROA(MXCOUNT4), MZEROA( MXCOUNT4),
9 KZEROB(MXCOUNT4), MZEROB( MXCOUNT4),
1 KZEROC(MXCOUNT4), MZEROC( MXCOUNT4),
2 KZEROD(MXCOUNT4), MZEROD( MXCOUNT4),
3 KZEROE(MXCOUNT4), MZEROE( MXCOUNT4),
4 IPOSPD(MXCOUNT2), IIALPD( MXCOUNT2), NKPDTERM(MXCOUNT2),
5 IJVAL( MXCOUNT3), IKZTOT( MXCOUNT4), JSPNPL( MXCOUNT4),
7 NKNFR( MXCOUNT4), JSPCNFR(MXCOUNT4)
INTEGER IDH5,IDH4,IDH3,IDH2,IDH1,IDL5,IDL4,IDL3,IDL2,IDL1,KBH5
INTEGER KBH4,KBH3,KBH2,KBH1,KBL5,KBL4,KBL3,KBL2,KBL1,MBH5,MBH4
INTEGER MBH3,MBH2,MBH1,MBL5,MBL4,MBL3,MBL2,MBL1,NPH5,NPH4,NPH3
INTEGER NPH2,NPH1,NPL5,NPL4,NPL3,NPL2,NPL1
COMMON /IMXCOU2/
1 IDH5( MXCOUNT3), IDH4( MXCOUNT3), IDH3( MXCOUNT3),
2 IDH2( MXCOUNT3), IDH1( MXCOUNT3), IDL5( MXCOUNT3),
3 IDL4( MXCOUNT3), IDL3( MXCOUNT3), IDL2( MXCOUNT3),
4 IDL1( MXCOUNT3),
5 KBH5( MXCOUNT4), KBH4( MXCOUNT4), KBH3( MXCOUNT4),
6 KBH2( MXCOUNT4), KBH1( MXCOUNT4), KBL5( MXCOUNT4),
7 KBL4( MXCOUNT4), KBL3( MXCOUNT4), KBL2( MXCOUNT4),
8 KBL1( MXCOUNT4),
9 MBH5( MXCOUNT4), MBH4( MXCOUNT4), MBH3( MXCOUNT4),
1 MBH2( MXCOUNT4), MBH1( MXCOUNT4), MBL5( MXCOUNT4),
2 MBL4( MXCOUNT4), MBL3( MXCOUNT4), MBL2( MXCOUNT4),
3 MBL1( MXCOUNT4),
4 NPH5( MXCOUNT4), NPH4( MXCOUNT4), NPH3( MXCOUNT4),
5 NPH2( MXCOUNT4), NPH1( MXCOUNT4), NPL5( MXCOUNT4),
6 NPL4( MXCOUNT4), NPL3( MXCOUNT4), NPL2( MXCOUNT4),
7 NPL1( MXCOUNT4)
REAL*8 :: GEARCONC
COMMON /DIMXG2/ GEARCONC(MXGSAER,0:MXHOLD,ICS)
REAL*8 :: WTMB
COMMON /DIMASBAL2/ WTMB(IMASBAL,MXGSAER,2)
INTEGER :: JMBCOMP
COMMON /IIMASBAL2/ JMBCOMP(IMASBAL,MXGSAER,2)
REAL*8 :: FKOEF
REAL*8 :: FK2
COMMON /DNMRPROD2/ FKOEF(NMRPROD,NMTRATE,ICS),
& FK2( NMRPROD,NMTRATE,ICS)
INTEGER :: IRM
INTEGER :: IRM2
COMMON /INMRPROD2/ IRM( NMRPROD,NMTRATE,ICS),
& IRM2(NMRPROD,NMTRATE,ICS)
REAL*8 :: ASET, PINP, CVAR, O3DOBS
COMMON /DMISC/ ASET(10,8), PINP(20), CVAR(15), O3DOBS(12)
REAL*8 :: ENQQ2, ENQQ3, CONPST
REAL*8 :: ENQQ1, CONP15
COMMON /IORDR/ ENQQ2(MORDER), ENQQ3( MORDER), CONPST(MORDER),
& ENQQ1(MORDER), CONP15(MORDER)
REAL*8 :: PERTS2, PERTST
COMMON /DMORD/ PERTS2(MORDER,3), PERTST(MORDER,3)
INTEGER :: JLLOW, KLHI
COMMON /IMXBLOCK/ JLLOW(MXBLOCK), KLHI(MXBLOCK)
REAL*8 :: XGDFCF, ASTKCF, RUARSL, RH100
COMMON /XARSOL/ XGDFCF, ASTKCF, RUARSL, RH100
INTEGER :: IARSFA, MWARSL, MNTHARS
COMMON /IARSOL/ IARSFA, MWARSL, MNTHARS
INTEGER :: NKEMIS, NTEMIS
INTEGER :: NKDRY, NTDEP
COMMON /IMAXGL4/ NKEMIS(MAXGL3,ICS), NTEMIS(MAXGL3,ICS),
& NKDRY (MAXGL3,ICS), NTDEP( MAXGL3)
C BDF COULD BE SOME MISSING STUFF FROM HERE.
C INTEGER KZERO,IZEROA,IZEROB,IZEROC,IZEROD,IZER2A,IZER2B,
C 1 IZER2C,IZER2D,JZEROA,JZEROB,IRMSEC,IRMTHD,NKARRY,
C 2 LOSSRA,JPRODA,LOSSRB,LOSSRC,LOSSRD,JPRODB,JPRODC,
C 3 JPRODD
C COMMON /IMXCOUN/
C 1 KZERO( MXARRAY,ICP), IZEROA( MXARRAY ),
C 7 IZEROB( MXARRAY), IZEROC( MXARRAY ), IZEROD( MXARRAY),
C 8 IZER2A( MXARRAY), IZER2B( MXARRAY ),
C 9 IZER2C( MXARRAY), IZER2D( MXARRAY ),
C 1 JZEROA( MXARRAY), JZEROB( MXARRAY ),
C 3 IRMSEC(MXCOUNT3), IRMTHD(MXCOUNT3 ), NKARRY(MXCOUNT3),
C 2 LOSSRA(MXCOUNT4), JPRODA(MXCOUNT4 ),
C 4 LOSSRB(MXCOUNT4), LOSSRC(MXCOUNT4 ), LOSSRD(MXCOUNT4),
C 5 JPRODB(MXCOUNT4), JPRODC(MXCOUNT4 ),
C 6 JPRODD(MXCOUNT4), JPRODT( MXGSAER,MAXGL,ICS),
C 5 NKSINGL( MXGSAER,ICS, 2), NKNUMSL( MXGSAER,MAXGL,ICS),
C 6 NKDOUBL( MXGSAER,ICS ), NKNUMDL( MXGSAER,MAXGL,ICS),
C 7 NKTRIPL( MXGSAER,ICS ), NKNUMTL( MXGSAER,MAXGL,ICS),
C 8 LOSSLEFT(MXGSAER,ICS ), LOSSREM( MXGSAER,MAXGL,ICS),
C 9 ILOSSR( MXGSAER,ICS ), NLOSSR( MXGSAER, ICS),
C 1 NGAINR( MXGSAER,ICS ), ICHANSPC(MXGSAER, ICS),
C 4 NUML1( MXGSAER,ICP ), NUML2( MXGSAER, ICP),
C 5 NUMP1( MXGSAER,ICP ), NUMP2( MXGSAER, ICP),
C 6 JHIZ2( MXGSAER, ICP)
!=================================================================
! Common blocks for ND65 diagnostic (ljm, bmy, 7/8/03)
!=================================================================
INTEGER :: IFAM, NFAMILIES
COMMON /IPL/ IFAM(MAXFAM), NFAMILIES
CHARACTER*4 :: PORL
COMMON /CPL/ PORL(MAXFAM)
LOGICAL :: LFAMILY, ITS_NOT_A_ND65_FAMILY
COMMON /LPL/ LFAMILY, ITS_NOT_A_ND65_FAMILY(IGAS)
!=================================================================
! Declare some common blocks THREADPRIVATE for the OpenMP
! parallelization (bdf, bmy, 4/1/03)
!=================================================================
!$OMP THREADPRIVATE( /CHEM2A/ )
!$OMP THREADPRIVATE( /CTLLOOP2/ )
!$OMP THREADPRIVATE( /DGEAR2/ )
!$OMP THREADPRIVATE( /DKBLOOP0/ )
!$OMP THREADPRIVATE( /DKBLOOP2/ )
!$OMP THREADPRIVATE( /IGEAR2/ )
!$OMP THREADPRIVATE( /IXYGD2/ )
#if defined( COMPAQ )
! For COMPAQ, declare /INMTRATE2/ threadprivate (Q. Liang, bmy, 10/17/05)
!$OMP THREADPRIVATE( /INMTRATE2/ )
#endif
C
C *********************************************************************
C ****************** END OF COMMON BLOCK COMODE.H *********************
C *********************************************************************
C