! $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