diff --git a/.dev/README.md b/.dev/README.md new file mode 100644 index 00000000..b9c6ab80 --- /dev/null +++ b/.dev/README.md @@ -0,0 +1,64 @@ +# Developer Zone + +**NOTE: CODE IN THIS SUBDIRECTORY IS NOT INTENDED FOR GENERAL USERS** + +## Developer utilities + +The `.dev/utils` subdirectory contains three shell scripts that streamline the +development process, as described in the following. + +The first one is the `setup.sh` script, which sets up your environment for +building and running GISS-GC. This includes setting environment variables +and activating a Spack environment. It's likely that this script will need +some modification to be usable on your system. (Open the script and check the +parts marked by `NOTE`.) To use the `setup.sh` script, navigate to the directory +where you cloned GISS-GC (which is set as `${GISS_HOME}` in the script) and run +``` +cp .dev/utils/setup.sh . +source setup.sh +``` + +The second utility is the `build.sh` script, which builds the model with given +configuration options. From the same location, run +``` +cp .dev/utils/build.sh . +./build.sh --help +``` +This should print some help text to the screen that describes what options may +be passed to the script and what they mean. The options can be combined. For +example, running +``` +./build.sh --giss-only -f +``` +will build GISS Model E *without* GEOS-Chem support and it will remove any +existing builds before doing so. Note that if you run the build script once with +the `--giss-only` option and once without then it will create two separate +builds. Similarly for `--debug`, which symlinks the rundeck but renames it as +`${RUNID}_DEBUG.R`. + +The third utility is the `run.sh` script, which runs a model configuration that +has been built. + +Again, you may run the following to get help text on how to use this script: +``` +cp .dev/utils/run.sh . +./run.sh --help +``` +Note that in order to run the model with `--giss-only` or not, you will need to +have built the model in the same way. Similarly for `--debug`. + +## Configuration scripts + +The `.dev/config` subdirectory contains five configuration files for GEOS-Chem +and the HEMCO emissions module that provide good starting points for GISS-GC +development. (Again, these are not intended for general users as they may not +produce scientifically interesting output.) The configuration scripts are +automatically picked up by the developer utility scripts mentioned in the +previous section. + +The configuration scripts are: +* `geoschem_config.yml` - top level configuration file for GEOS-Chem. +* `HEMCO_Config.rc` - top level configuration file for HEMCO. +* `HISTORY.rc` - output configuration for GEOS-Chem. +* `HEMCO_Diagn.rc` - output configuration for HEMCO. +* `species_database.yml` - configuration file for species used by GEOS-Chem. diff --git a/.dev/config/HEMCO_Config.rc b/.dev/config/HEMCO_Config.rc new file mode 100644 index 00000000..7a07eb77 --- /dev/null +++ b/.dev/config/HEMCO_Config.rc @@ -0,0 +1,4553 @@ +#------------------------------------------------------------------------------ +# Harmonized Emissions Component (HEMCO) ! +#------------------------------------------------------------------------------ +#BOP +# +# !MODULE: HEMCO_Config.rc +# +# !DESCRIPTION: Contains configuration information for HEMCO. Define the +# emissions inventories and corresponding file paths here. Entire +# configuration files can be inserted into this configuration file with +# an '>>>include' statement, e.g. '>>>include HEMCO\_Config\_test.rc' +# The settings of include-files will be ignored. +#\\ +#\\ +# !REMARKS: +# See The HEMCO User's Guide for file details: +# http://wiki.geos-chem.org/The_HEMCO_User%27s_Guide +# +# !REVISION HISTORY: +# See https://github.com/geoschem/geos-chem for complete history +#EOP +#------------------------------------------------------------------------------ +#BOC +############################################################################### +### BEGIN SECTION SETTINGS +############################################################################### + +ROOT: /home/joe/data/GISS-GC/prod_input_files/ExtData/HEMCO +GCAPSCENARIO: not_used +GCAPVERTRES: 47 +Logfile: * +DiagnFile: HEMCO_Diagn.rc +DiagnPrefix: ./OutputDir/HEMCO_diagnostics +DiagnFreq: Monthly +Wildcard: * +Separator: / +Unit tolerance: 1 +Negative values: 0 +Only unitless scale factors: false +Verbose: 0 +Warning: 3 +VerboseOnCores: root # Accepted values: root all + +### END SECTION SETTINGS ### + +############################################################################### +### BEGIN SECTION EXTENSION SWITCHES +############################################################################### +# ExtNr ExtName on/off Species Years avail. +0 Base : on * +# ----- MAIN SWITCHES --------------------------------------------------------- + --> EMISSIONS : true + --> METEOROLOGY : false # 1980-2021 + --> CHEMISTRY_INPUT : true +# ----- RESTART FIELDS -------------------------------------------------------- + --> GC_RESTART : true + --> HEMCO_RESTART : true +# ----- NESTED GRID FIELDS ---------------------------------------------------- + --> GC_BCs : false +# ----- REGIONAL INVENTORIES -------------------------------------------------- + --> APEI : false # 1989-2014 + --> NEI2016_MONMEAN : false # 2002-2020 + --> DICE_Africa : false # 2013 +# ----- GLOBAL INVENTORIES ---------------------------------------------------- + --> CEDSv2 : false # 1750-2019 + --> CEDS_GBDMAPS : false # 1970-2017 + --> CEDS_GBDMAPS_byFuelType: false # 1970-2017 + --> EDGARv43 : false # 1970-2010 + --> HTAPv3 : false # 2000-2018 + --> GEIA_NH3 : false # 1990 + --> SEABIRD_NH3 : false # 1990 + --> POET_EOH : false # 1985 + --> TZOMPASOSA_C2H6 : false # 2010 + --> XIAO_C3H8 : false # 1985 + --> LIANG_BROMOCARB : false # 2000 + --> ORDONEZ_IODOCARB : false # 2000 + --> DECAYING_PLANTS : false # 1985 + --> AFCID : false # 2015 +# ----- AIRCRAFT EMISSIONS ---------------------------------------------------- +# There are 3 switches: +# +# 1. AEIC2019_DAILY selects daily AEIC 2019 emissions. For most simulations, +# this is not recommended due to the amount of computational overhead +# that will be incurred in regridding. But this may be useful for +# research purposes. Recommended setting: "AEIC2019_DAILY: false". +# +# 2. AEIC2019_MONMEAN selects monthly-mean AEIC 2019 emisisons, which will +# incur much less computational overhaead. This option should suffice +# for most simulations. Recommended setting "AEIC2019_MONMEAN: true". +# +# 3. AEIC_SCALE_1990_2019: If "false", the AEIC 2019 data from the year +# 2019 alone will be used. This will yield a "best estimate" of +# aviation emisssion. This could be important because simply scaling +# aviation emissions up and down is rather nonphysical. But if +# AEIC_SCALE_1990_2019 is set to true, then aviation emissions for +# 1990 to 2019 are estimated by: +# +# a. Scaling ALL aviation emissions based on the growth in fuelburn +# from 1990 to 2019* estimated by Lee et al. (2021); and +# +# b. Scaling aviation NOx emissions by an additional factor to reflect +# the changes in the NOx emissions index over the same period as +# reported by Lee et al. (2021). +# +# Recommended setting: "AEIC_SCALE_1990_2019: true" +# +# See additional notes in the AEIC scale factor section below. +#------------------------------------------------------------------------------ + --> AEIC2019_DAILY : false # 2019 (daily data) + --> AEIC2019_MONMEAN : false # 2019 (monthly-mean data) + --> AEIC_SCALE_1990_2019 : false # Scale to year in 1990-2019 +# ----- SHIP EMISSIONS -------------------------------------------------------- + --> SHIP : false + --> CEDSv2_SHIP : false # 1750-2017 + --> CEDS_GBDMAPS_SHIP : false # 1970-2017 + --> CEDS_GBDMAPS_SHIP_byFuelType: false # 1970-2017 + --> HTAPv3_SHIP : false # 2000-2018 + --> ICOADS_SHIP : false # 2002 + --> ARCTAS_SHIP : false # 2008 + --> CORBETT_SHIP : false # 1985 +# ----- RCP FUTURE EMISSIONS -------------------------------------------------- + --> RCP_3PD : false # 2005-2100 + --> RCP_45 : false # 2005-2100 + --> RCP_60 : false # 2005-2100 + --> RCP_85 : false # 2005-2100 +# ----- CMIP6 ANTHRO EMISSIONS / BOUNDARY CONDITIONS -------------------------- +# Set GCAPSCENARIO (e.g., HIST, SSP585) above in SECTION SETTINGS + --> CMIP6_SFC_BC : false # 1750-2100 + --> CMIP6_SFC_LAND_ANTHRO : false # 1850-2100 + --> CMIP6_AIRCRAFT : false # 1850-2100 + --> CMIP6_SHIP : false # 1850-2100 +# ----- BIOMASS BURNING EMISSIONS --------------------------------------------- + --> QFED2 : false # 2000-2020 + --> GFAS : false # 2003-2021 + --> BB4MIPS : false # 1850-2100 + --> GFED4_CLIMATOLOGY : false # If true, turn off GFED ext below +# ----- OFFLINE EMISSIONS ----------------------------------------------------- +# To use online emissions instead set the offline emissions to 'false' and the +# corresponding HEMCO extension to 'on': +# OFFLINE_DUST - DustDead or DustGinoux +# OFFLINE_BIOGENICVOC - MEGAN +# OFFLINE_SEASALT - SeaSalt +# OFFLINE_SOILNOX - SoilNOx +# +# NOTE: When switching between offline and online emissions, make sure to also +# update ExtNr and Cat in HEMCO_Diagn.rc to properly save out emissions for +# any affected species. +#------------------------------------------------------------------------------ + --> OFFLINE_DUST : false # 1980-2019 + --> OFFLINE_BIOGENICVOC : false # 1980-2020 + --> OFFLINE_SEASALT : false # 1980-2019 + --> CalcBrSeasalt : false + --> OFFLINE_SOILNOX : false # 1980-2020 +# ----- NON-EMISSIONS DATA ---------------------------------------------------- + --> UVALBEDO : true # 1985 + --> CCM_STRAT_Bry : false # 2007 + --> GMI_OH : false # 2005 + --> GMI_PROD_LOSS : false # 2005 + --> OMOC_RATIO : false # 2010 + --> GMD_SFC_CH4 : true # 1979-2020 + --> CMIP6_SFC_CH4 : true # 1750-1978 + --> OLSON_LANDMAP : true # 1985 + --> YUAN_MODIS_LAI : true # 2000-2020 + --> RRTMG : false # 2002 + --> SfcVMR : false # 1750-2014 + --> OCEAN_O3_DRYDEP : false # 1985 +# ----------------------------------------------------------------------------- +100 Custom : off - +101 SeaFlux : off DMS/ACET/ALD2/MENO3/ETNO3/MOH +102 ParaNOx : off NO/NO2/O3/HNO3 + --> LUT data format : nc + --> LUT source dir : $ROOT/PARANOX/v2015-02 +103 LightNOx : off NO + --> LightningClimatology : false + --> CDF table : $ROOT/LIGHTNOX/v2014-07/light_dist.ott2010.dat +104 SoilNOx : off NO + --> Use fertilizer NOx : true +105 DustDead : off DST1/DST2/DST3/DST4 + --> Mass tuning factor : 7.8533e-4 +106 DustGinoux : off DST1/DST2/DST3/DST4 +107 SeaSalt : off SALA/SALC/SALACL/SALCCL/SALAAL/SALCAL/BrSALA/BrSALC/MOPO/MOPI + --> SALA lower radius : 0.01 + --> SALA upper radius : 0.5 + --> SALC lower radius : 0.5 + --> SALC upper radius : 8.0 + --> Reduce SS cold water : true + --> Blowing Snow SS : true + --> NH FYI snow salinity : 0.1 + --> NH MYI snow salinity : 0.05 + --> SH FYI snow salinity : 0.03 + --> SH MYI snow salinity : 0.015 + --> NH snow age : 3.0 + --> SH snow age : 1.5 + --> N per snowflake : 5.0 + --> Model sea salt Br- : true + --> Br- mass ratio : 2.11e-3 +108 MEGAN : off ISOP/ACET/PRPE/C2H4/ALD2/MOH/EOH/MTPA/MTPO/LIMO/SESQ/SOAP/SOAS + --> Isoprene scaling : 1.0 + --> CO2 inhibition : true + --> CO2 conc (ppmv) : 390.0 + --> Isoprene to SOAP : 0.015 + --> Isoprene to SOAS : 0.015 + --> Monoterp to SOAP : 0.050 + --> Monoterp to SOAS : 0.050 + --> Othrterp to SOAP : 0.050 + --> Othrterp to SOAS : 0.050 +111 GFED : off NO/CO/ALK4/ACET/MEK/ALD2/PRPE/C2H2/C2H4/C3H8/CH2O/C2H6/SO2/NH3/BCPO/BCPI/OCPO/OCPI/POG1/POG2/MTPA/BENZ/TOLU/XYLE/NAP/EOH/MOH/SOAP/FURA/PHEN/MVK/ISOP/ACTA/MGLY/GLYX/RCHO + --> GFED4 : true + --> GFED_daily : false + --> GFED_3hourly : false + --> Scaling_CO : 1.05 + --> Scaling_NAP : 2.75e-4 + --> hydrophilic BC : 0.2 + --> hydrophilic OC : 0.5 + --> fraction POG1 : 0.49 + --> CO to SOAP : 0.013 + --> GFED_subgrid_coag : false +#see the note near scale factor 281 for the source of this emis factor +114 FINN : off NO/CO/ALK4/ACET/MEK/ALD2/PRPE/C2H2/C2H4/C3H8/CH2O/C2H6/SO2/NH3/BCPI/BCPO/OCPI/OCPO/GLYC/HAC/SOAP + --> FINN_daily : false + --> Scaling_CO : 1.0 + --> Scaling_SOAP : 0.013 + --> hydrophilic BC : 0.2 + --> hydrophilic OC : 0.5 + --> FINN_subgrid_coag : false +115 DustAlk : off DSTAL1/DSTAL2/DSTAL3/DSTAL4 +117 Volcano : off SO2 + --> Volcano_Source : AeroCom + --> Volcano_Table : $ROOT/VOLCANO/v2021-09/$YYYY/$MM/so2_volcanic_emissions_Carns.$YYYY$MM$DD.rc + --> Volcano_Climatology : $ROOT/VOLCANO/v2021-09/so2_volcanic_emissions_CARN_v202005.degassing_only.rc +120 Inorg_Iodine : off HOI/I2 + --> Emit HOI : true + --> Emit I2 : true +130 TOMAS_Jeagle : off SS01/SS02/SS03/SS04/SS05/SS06/SS07/SS08/SS09/SS10/SS11/SS12/SS13/SS14/SS15/SS16/SS17/SS18/SS19/SS20/SS21/SS22/SS23/SS24/SS25/SS26/SS27/SS28/SS29/SS30/SS31/SS32/SS33/SS34/SS35/SS36/SS37/SS38/SS39/SS40 + --> Reduce SS cold water : true + --> Blowing Snow SS : true + --> NH FYI snow salinity : 0.1 + --> NH MYI snow salinity : 0.05 + --> SH FYI snow salinity : 0.03 + --> SH MYI snow salinity : 0.015 + --> NH snow age : 3.0 + --> SH snow age : 1.5 + --> N per snowflake : 1.0 + --> Model sea salt Br- : false + --> Br- mass ratio : 2.11e-3 +131 TOMAS_DustDead : off DUST01/DUST02/DUST03/DUST04/DUST05/DUST06/DUST07/DUST08/DUST09/DUST10/DUST11/DUST12/DUST13/DUST14/DUST15/DUST16/DUST17/DUST18/DUST19/DUST20/DUST21/DUST22/DUST23/DUST24/DUST25/DUST26/DUST27/DUST28/DUST29/DUST30/DUST31/DUST32/DUST33/DUST34/DUST35/DUST36/DUST37/DUST38/DUST39/DUST40 + --> Mass tuning factor : 7.8533e-4 +### END SECTION EXTENSION SWITCHES ### + +############################################################################### +### BEGIN SECTION BASE EMISSIONS +############################################################################### + +# ExtNr Name sourceFile sourceVar sourceTime C/R/E SrcDim SrcUnit Species ScalIDs Cat Hier + +(((EMISSIONS + +#============================================================================== +# --- APEI (Canada) --- +#============================================================================== +(((APEI +0 APEI_NO $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc NOx 1989-2014/1/1/0 RF xy kg/m2/s NO 25/1002/115 1 30 +0 APEI_CO $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc CO 1989-2014/1/1/0 RF xy kg/m2/s CO 26/52/1002 1 30 +0 APEI_SOAP - - - - - - SOAP 26/52/1002/280 1 30 +0 APEI_SO2 $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc SOx 1989-2014/1/1/0 RF xy kg/m2/s SO2 60/1002 1 30 +0 APEI_SO4 - - - - - - SO4 60/65/1002 1 30 +0 APEI_pFe - - - - - - pFe 60/68/1002 1 30 +0 APEI_NH3 $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc NH3 1989-2014/1/1/0 RF xy kg/m2/s NH3 1002 1 30 +0 APEI_BCPI $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc EC 1989-2014/1/1/0 RF xy kg/m2/s BCPI 70/1002 1 30 +0 APEI_BCPO $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc EC 1989-2014/1/1/0 RF xy kg/m2/s BCPO 71/1002 1 30 +0 APEI_OCPI $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc OC 1989-2014/1/1/0 RF xy kg/m2/s OCPI 72/1002 1 30 +0 APEI_OCPO $ROOT/APEI/v2016-11/APEI.0.1x0.1.nc OC 1989-2014/1/1/0 RF xy kg/m2/s OCPO 73/1002 1 30 +0 APEI_POG1 - - - - - - POG1 74/76/1002 1 30 +0 APEI_POG2 - - - - - - POG2 74/77/1002 1 30 +)))APEI + +#============================================================================== +# --- EPA NEI2016 v1 (USA) --- +# +# NOTES: +# * Barron Henderson wrote, "The EPA emission modeling platform always +# includes our best estimate of that year's emissions for Canada and Mexico +# (othpt, othar, ptfire_oth). Using that estimate is likely good. However, +# that can lead to a discontinuity in Mexico and Canada." +# - By default only emissions over the CONUS are used (via Mask #1007) +# - To include emissions over Canada and Mexico, users may revert to the old +# US mask file $ROOT/MASKS/v2018-09/USA_LANDMASK_NEI2011_0.1x0.1.20160921.nc +# * The base year of these emissions is 2016 and emissions are scaled to +# 2002-2020 using data from the EPA Trends Report for Tier 1 CAPS (obtained +# 21 Sep 2021). +# - See NEI2016/v2021-06/national_tier1_caps+HEMCOscaling.xlsx for details. +# - Cl2 and HCl emissions are only available for 2016 because those species +# aren't included in the Tier 1 CAPS file/ +#============================================================================== +(((NEI2016_MONMEAN +0 EPA16_BCPI__afdustPEC $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__afdustPEC $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__afdustPNA $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__afdustPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__afdustPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__afdustPOC $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__afdustPOC $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__afdustPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__afdustPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_SO4__afdustPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_afdust_adj_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_ACET__agACET $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_ALD2__agALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__agALDX $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__agBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_C2H4__agETH $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__agETHA $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__agETOH $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__agFORM $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_PRPE__agIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__agKET $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__agMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__agNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_PRPE__agOLE $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__agPAR $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_C3H8__agPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_TOLU__agTOL $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__agXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_ag_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__airportsACET $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__airportsACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__airportsALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__airportsALDX $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__airportsBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__airportsCO $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__airportsSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__airportsETH $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__airportsETHA $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__airportsETOH $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__airportsFORM $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__airportsHONO $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__airportsIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__airportsKET $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__airportsMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NO__airportsNO $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__airportsNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__airportsOLE $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__airportsPAR $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__airportsPEC $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__airportsPEC $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__airportsPNA $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__airportsPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__airportsPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__airportsPOC $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__airportsPOC $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__airportsPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__airportsPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__airportsPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__airportsPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__airportsSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__airportspFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__airportsSULF $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__airportsTOL $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__airportsXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_airports_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__nonptACET $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__nonptACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__nonptALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__nonptALDX $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__nonptBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_Cl2__nonptCL2 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf CL2 2016/1-12/1/0 R xy kg/m2/s Cl2 1007 1 50 +0 EPA16_CO__nonptCO $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__nonptSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__nonptETH $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__nonptETHA $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__nonptETOH $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__nonptFORM $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HCl__nonptHCL $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf HCL 2016/1-12/1/0 R xy kg/m2/s HCl 1007 1 50 +0 EPA16_HNO2__nonptHONO $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__nonptIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__nonptKET $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__nonptMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__nonptNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__nonptNO $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__nonptNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__nonptOLE $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__nonptPAR $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__nonptPEC $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__nonptPEC $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__nonptPNA $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__nonptPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__nonptPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__nonptPOC $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__nonptPOC $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__nonptPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__nonptPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__nonptPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__nonptPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__nonptSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__nonptpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__nonptSULF $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__nonptTOL $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__nonptXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_nonpt_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__nonroadACET $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__nonroadACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__nonroadALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__nonroadALDX $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__nonroadBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__nonroadCO $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__nonroadSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__nonroadETH $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__nonroadETHA $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__nonroadETOH $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__nonroadFORM $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__nonroadHONO $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__nonroadIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__nonroadKET $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__nonroadMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__nonroadNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__nonroadNO $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__nonroadNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__nonroadOLE $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__nonroadPAR $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__nonroadPEC $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__nonroadPEC $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__nonroadPNA $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__nonroadPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__nonroadPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__nonroadPOC $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__nonroadPOC $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__nonroadPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__nonroadPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__nonroadPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__nonroadPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__nonroadSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__nonroadspFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__nonroadSULF $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__nonroadTOL $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__nonroadXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_nonroad_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__npogACET $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__npogACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__npogALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__npogALDX $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__npogBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_Cl2__npogCL2 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf CL2 2016/1-12/1/0 R xy kg/m2/s Cl2 1007 1 50 +0 EPA16_CO__npogCO $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__npogSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__npogETH $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__npogETHA $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__npogETOH $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__npogFORM $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__npogHONO $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__npogIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__npogKET $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__npogMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__npogNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__npogNO $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__npogNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__npogOLE $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__npogPAR $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__npogPEC $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__npogPEC $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__npogPNA $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__npogPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__npogPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__npogPOC $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__npogPOC $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__npogPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__npogPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__npogPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__npogPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__npogSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__npogpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__npogSULF $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__npogTOL $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__npogXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_np_oilgas_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__onroadACET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__onroadACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__onroadALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__onroadALDX $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__onroadBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__onroadCO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__onroadSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__onroadETH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__onroadETHA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__onroadETOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__onroadFORM $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__onroadHONO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroadIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__onroadKET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__onroadMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__onroadNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__onroadNO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__onroadNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroadOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__onroadPAR $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__onroadPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__onroadPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__onroadPNA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__onroadPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__onroadPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__onroadPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__onroadPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__onroadPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__onroadPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__onroadPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__onroadPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__onroadSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__onroadpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_TOLU__onroadTOL $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__onroadXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__onroad_caACET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__onroad_caACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__onroad_caALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__onroad_caALDX $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__onroad_caBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__onroad_caCO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP_onroad__caSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__onroad_caETH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__onroad_caETHA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__onroad_caETOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__onroad_caFORM $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__onroad_caHONO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroad_caIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__onroad_caKET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__onroad_caMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__onroad_caNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__onroad_caNO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__onroad_caNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroad_caOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__onroad_caPAR $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__onroad_caPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__onroad_caPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__onroad_caPNA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__onroad_caPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__onroad_caPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__onroad_caPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__onroad_caPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__onroad_caPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__onroad_caPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__onroad_caPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__onroad_caPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__onroad_caSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__onroad_capFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_TOLU__onroad_caTOL $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__onroad_caXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_ca_adj_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__railACET $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__railACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__railALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__railALDX $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__railBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__railCO $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__railSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__railETH $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__railETHA $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__railETOH $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__railFORM $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__railHONO $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__railIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__railKET $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__railMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__railNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__railNO $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__railNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__railOLE $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__railPAR $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__railPEC $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__railPEC $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__railPNA $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__railPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__railPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__railPOC $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__railPOC $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__railPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__railPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__railPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__railPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__railSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__railpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__railSULF $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__railTOL $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__railXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_rail_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__rwcACET $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__rwcACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__rwcALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__rwcALDX $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__rwcBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_Cl2__rwcCL2 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf CL2 2016/1-12/1/0 R xy kg/m2/s Cl2 1007 1 50 +0 EPA16_CO__rwcCO $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__rwcSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__rwcETH $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__rwcETHA $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__rwcETOH $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__rwcFORM $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__rwcHONO $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__rwcIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__rwcKET $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__rwcMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__rwcNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__rwcNO $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__rwcNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__rwcOLE $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__rwcPAR $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__rwcPEC $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__rwcPEC $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__rwcPNA $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__rwcPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__rwcPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__rwcPOC $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__rwcPOC $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__rwcPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__rwcPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__rwcPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__rwcPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__rwcSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__rwcpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__rwcSULF $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__rwcTOL $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__rwcXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_rwc_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__c1c2ACET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xyz kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_ALD2__c1c2ALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xyz kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__c1c2ALDX $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xyz kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__c1c2BENZ $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xyz kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__c1c2CO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xyz kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__clc2SOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__c1c2ETH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__c1c2ETHA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__c1c2ETOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xyz kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__c1c2FORM $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xyz kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__c1c2HONO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__c1c2IOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__c1c2KET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xyz kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__c1c2MEOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xyz kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__c1c2NH3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xyz kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__c1c2NO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xyz kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__c1c2NO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xyz kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__c1c2OLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__c1c2PAR $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xyz kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__c1c2PEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__c1c2PEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__c1c2PNA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__c1c2PNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xyz kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__c1c2PNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xyz kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__c1c2POC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__c1c2POC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__clc2POC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__clc2POC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__c1c2PRPA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xyz kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__c1c2PSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__c1c2SO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xyz kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__clcpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__c1c2SULF $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__c1c2TOL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xyz kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__c1c2XYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c1c2_12_0pt1degree_3D_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xyz kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__c3ACET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xyz kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_ALD2__c3ALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xyz kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__c3ALDX $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xyz kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__c3BENZ $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xyz kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__c3CO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xyz kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__c3SOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__c3ETH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__c3ETHA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__c3ETOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xyz kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__c3FORM $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xyz kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__c3HONO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__c3IOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__c3KET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xyz kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__c3MEOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xyz kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__c3NH3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xyz kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__c3NO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xyz kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__c3NO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xyz kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__c3OLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__c3PAR $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xyz kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__c3PEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__c3PEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__c3PNA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__c3PNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xyz kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__c3PNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xyz kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__c3POC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__c3POC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__c3POC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__c3POC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__c3PRPA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xyz kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__c3PSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__c3SO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xyz kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__c2pFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__c3SULF $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__c3TOL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xyz kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__c3XYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_cmv_c3_12_0pt1degree_3D_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xyz kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__pteguACET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xyz kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__pteguACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xyz kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__pteguALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xyz kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__pteguALDX $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xyz kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__pteguBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xyz kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_Cl2__pteguCL2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf CL2 2016/1-12/1/0 R xyz kg/m2/s Cl2 1007 1 50 +0 EPA16_CO__pteguCO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xyz kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__pteguSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__pteguETH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__pteguETHA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__pteguETOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xyz kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__pteguFORM $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xyz kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HCl__pteguHCL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf HCL 2016/1-12/1/0 R xyz kg/m2/s HCl 1007 1 50 +0 EPA16_HNO2__pteguHONO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__pteguIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__pteguKET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xyz kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__pteguMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xyz kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__pteguNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xyz kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__pteguNO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xyz kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__pteguNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xyz kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__pteguOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__pteguPAR $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xyz kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__pteguPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__pteguPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__pteguPNA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__pteguPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xyz kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__pteguPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xyz kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__pteguPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__pteguPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__pteguPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__pteguPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__pteguPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xyz kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__pteguPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__pteguSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xyz kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__ptegupFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__pteguSULF $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__pteguTOL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xyz kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__pteguXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptegu_0pt1degree_3D_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xyz kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__ptogACET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xyz kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__ptogACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xyz kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__ptogALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xyz kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__ptogALDX $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xyz kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__ptogBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xyz kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_Cl2__ptogCL2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf CL2 2016/1-12/1/0 R xyz kg/m2/s Cl2 1007 1 50 +0 EPA16_CO__ptogCO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xyz kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__ptogSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__ptogETH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__ptogETHA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__ptogETOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xyz kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__ptogFORM $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xyz kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HCl__ptogHCL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf HCL 2016/1-12/1/0 R xyz kg/m2/s HCl 1007 1 50 +0 EPA16_HNO2__ptogHONO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__ptogIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__ptogKET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xyz kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__ptogMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xyz kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__ptogNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xyz kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__ptogNO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xyz kgNO2/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__ptogNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xyz kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__ptogOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__ptogPAR $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xyz kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__ptogPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__ptogPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__ptogPNA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__ptogPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xyz kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__ptogPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xyz kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__ptogPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__ptogPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__ptogPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__ptogPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__ptogPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xyz kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__ptogPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__ptogSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xyz kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__ptogpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__ptogSULF $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__ptogTOL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xyz kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__ptogXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_pt_oilgas_allinln_0pt1degree_3D_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xyz kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__ptnonipmACET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xyz kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__ptnonipmACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xyz kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__ptnonipmALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xyz kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__ptnonipmALDX $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xyz kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__ptnonipmBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xyz kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_Cl2__ptnonipmCL2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf CL2 2002-2020/1-12/1/0 R xyz kg/m2/s Cl2 1007 1 50 +0 EPA16_CO__ptnonipmCO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xyz kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__ptnonipmSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__ptnonipmETH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__ptnonipmETHA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xyz kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__ptnonipmETOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xyz kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__ptnonipmFORM $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xyz kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HCl__ptnonipmHCL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf HCL 2002-2020/1-12/1/0 R xyz kg/m2/s HCl 1007 1 50 +0 EPA16_HNO2__ptnonipmHONO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__ptnonipmIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__ptnonipmKET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xyz kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__ptnonipmMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xyz kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__ptnonipmNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xyz kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__ptnonipmNO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xyz kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__ptnonipmNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xyz kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__ptnonipmOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xyz kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__ptnonipmPAR $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xyz kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__ptnonipmPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__ptnonipmPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xyz kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__ptnonipmPNA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xyz kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__ptnonipmPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xyz kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__ptnonipmPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xyz kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__ptnonipmPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__ptnonipmPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xyz kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__ptnonipmPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__ptnonipmPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__ptnonipmPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xyz kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__ptnonipmPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__ptnonipmSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xyz kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__ptnonipmpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__ptnonipmSULF $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xyz kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__ptnonipmTOL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xyz kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__ptnonipmXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_ptnonipm_allinln_0pt1degree_3D_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xyz kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__onroad_canACET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_ALD2__onroad_canALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__onroad_canALDX $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__onroad_canBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__onroad_canCO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__onroad_canSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__onroad_canETH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__onroad_canETHA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__onroad_canETOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__onroad_canFORM $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__onroad_canHONO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroad_canIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__onroad_canKET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__onroad_canMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__onroad_canNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__onroad_canNO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__onroad_canNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroad_canOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__onroad_canPAR $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__onroad_canPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__onroad_canPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__onroad_canPNA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__onroad_canPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__onroad_canPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__onroad_canPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__onroad_canPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__onroad_canPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__onroad_canPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__onroad_canPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__onroad_canPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__onroad_canSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__onroad_canpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__onroad_canSULF $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__onroad_canTOL $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__onroad_canXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_can_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_ACET__onroad_mexACET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_MACR__onroad_mexACROLEIN $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf ACROLEIN 2002-2020/1-12/1/0 RF xy kg/m2/s MACR 26/213/254/1007 1 50 +0 EPA16_ALD2__onroad_mexALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__onroad_mexALDX $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__onroad_mexBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__onroad_mexCO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__onroad_mexSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__onroad_mexETH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__onroad_mexETHA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__onroad_mexETOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__onroad_mexFORM $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__onroad_mexHONO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroad_mexIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__onroad_mexKET $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__onroad_mexMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__onroad_mexNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__onroad_mexNO $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__onroad_mexNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__onroad_mexOLE $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__onroad_mexPAR $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__onroad_mexPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__onroad_mexPEC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__onroad_mexPNA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__onroad_mexPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__onroad_mexPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__onroad_mexPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__onroad_mexPOC $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__onroad_mexPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__onroad_mexPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__onroad_mexPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__onroad_mexPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__onroad_mexSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__onroad_mexpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__onroad_mexSULF $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__onroad_mexTOL $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__onroad_mexXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_onroad_mex_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_BCPI__othafdustPEC $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__othafdustPEC $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__othafdustPNA $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__othafdustPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__othafdustPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__othafdustPOC $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__othafdustPOC $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__othafdustPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__othafdustPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_SO4__othafdustPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_othafdust_adj_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_ACET__otharACET $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_ALD2__otharALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__otharALDX $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__otharBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__otharCO $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__otharSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__otharETH $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__otharETHA $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__otharETOH $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__otharFORM $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__otharHONO $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__otharIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__otharKET $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__otharMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__otharNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__otharNO $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__otharNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__otharOLE $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__otharPAR $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__otharPEC $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__otharPEC $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__otharPNA $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__otharPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__otharPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__otharPOC $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__otharPOC $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__otharPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__otharPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__otharPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__otharPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__otharSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__otharpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__otharSULF $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__otharTOL $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__otharXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_othar_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +0 EPA16_BCPI__othptdustPEC $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__othptdustPEC $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__othptdustPNA $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__othptdustPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__othptdustPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__othptdustPOC $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__othptdustPOC $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__othptdustPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__othptdustPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_SO4__othptdustPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_othptdust_adj_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_ACET__othptACET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf ACET 2002-2020/1-12/1/0 RF xy kg/m2/s ACET 26/213/254/1007 1 50 +0 EPA16_ALD2__othptALD2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf ALD2 2002-2020/1-12/1/0 RF xy kg/m2/s ALD2 26/213/254/1007 1 50 +0 EPA16_RCHO__othptALDX $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf ALDX 2002-2020/1-12/1/0 RF xy kg/m2/s RCHO 26/213/254/1007 1 50 +0 EPA16_BENZ__othptBENZ $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf BENZ 2002-2020/1-12/1/0 RF xy kg/m2/s BENZ 26/213/254/1007 1 50 +0 EPA16_CO__othptCO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf CO 2002-2020/1-12/1/0 RF xy kg/m2/s CO 26/211/252/1007 1 50 +0 EPA16_SOAP__othptSOAP - - - - - - SOAP 26/211/252/1007/280 1 50 +0 EPA16_C2H4__othptETH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf ETH 2002-2020/1-12/1/0 RF xy kg/m2/s C2H4 26/213/254/1007 1 50 +0 EPA16_C2H6__othptETHA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf ETHA 2002-2020/1-12/1/0 RF xy kg/m2/s C2H6 26/217/254/1007 1 50 +0 EPA16_EOH__othptETOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf ETOH 2002-2020/1-12/1/0 RF xy kg/m2/s EOH 26/213/254/1007 1 50 +0 EPA16_CH2O__othptFORM $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf FORM 2002-2020/1-12/1/0 RF xy kg/m2/s CH2O 26/213/254/1007 1 50 +0 EPA16_HNO2__othptHONO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf HONO 2002-2020/1-12/1/0 RF xy kg/m2/s HNO2 25/210/251/1007 1 50 +0 EPA16_PRPE__othptIOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf IOLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_MEK__othptKET $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf KET 2002-2020/1-12/1/0 RF xy kg/m2/s MEK 26/214/254/1007 1 50 +0 EPA16_MOH__othptMEOH $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf MEOH 2002-2020/1-12/1/0 RF xy kg/m2/s MOH 26/213/254/1007 1 50 +0 EPA16_NH3__othptNH3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf NH3 2002-2020/1-12/1/0 RF xy kg/m2/s NH3 26/213/253/1007 1 50 +0 EPA16_NO__othptNO $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf NO 2002-2020/1-12/1/0 RF xy kg/m2/s NO 115/25/210/251/1007 1 50 +0 EPA16_NO2__othptNO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf NO2 2002-2020/1-12/1/0 RF xy kg/m2/s NO2 25/210/251/1007 1 50 +0 EPA16_PRPE__othptOLE $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf OLE 2002-2020/1-12/1/0 RF xy kg/m2/s PRPE 26/215/254/1007 1 50 +0 EPA16_ALK4__othptPAR $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PAR 2002-2020/1-12/1/0 RF xy kg/m2/s ALK4 26/212/254/1007 1 50 +0 EPA16_BCPI__othptPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPI 26/221/256/1007/70 1 50 +0 EPA16_BCPO__othptPEC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PEC 2002-2020/1-12/1/0 RF xy kg/m2/s BCPO 26/221/256/1007/71 1 50 +0 EPA16_HNO4__othptPNA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PNA 2002-2020/1-12/1/0 RF xy kg/m2/s HNO4 26/213/251/1007 1 50 +0 EPA16_NH4__othptPNH4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PNH4 2002-2020/1-12/1/0 RF xy kg/m2/s NH4 26/218/255/1007 1 50 +0 EPA16_NIT__othptPNO3 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PNO3 2002-2020/1-12/1/0 RF xy kg/m2/s NIT 26/218/255/1007 1 50 +0 EPA16_OCPI__othptPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPI 26/222/256/1007/72 1 50 +0 EPA16_OCPO__othptPOC $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf POC 2002-2020/1-12/1/0 RF xy kg/m2/s OCPO 26/222/256/1007/73 1 50 +0 EPA16_POG1__othptPOC - - - - - - POG1 26/222/256/1007/74/76 1 50 +0 EPA16_POG2__othptPOC - - - - - - POG2 26/222/256/1007/74/77 1 50 +0 EPA16_C3H8__othptPRPA $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PRPA 2002-2020/1-12/1/0 RF xy kg/m2/s C3H8 26/216/254/1007 1 50 +0 EPA16_SO4__othptPSO4 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf PSO4 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_SO2__othptSO2 $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf SO2 2002-2020/1-12/1/0 RF xy kg/m2/s SO2 26/218/255/1007 1 50 +0 EPA16_pFe__othptpFe - - - - - - pFe 26/218/255/1007/69 1 50 +0 EPA16_SO4__othptSULF $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf SULF 2002-2020/1-12/1/0 RF xy kg/m2/s SO4 26/219/255/1007 1 50 +0 EPA16_TOLU__othptTOL $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf TOL 2002-2020/1-12/1/0 RF xy kg/m2/s TOLU 26/213/254/1007 1 50 +0 EPA16_XYLE__othptXYLMN $ROOT/NEI2016/v2021-06/2016fh_16j_emln_othpt_0pt1degree_month_$MM.ncf XYLMN 2002-2020/1-12/1/0 RF xy kg/m2/s XYLE 26/213/254/1007 1 50 +)))NEI2016_MONMEAN + +#============================================================================== +# --- DICE-Africa emission inventory (Marais and Wiedinmyer, ES&T, 2016) --- +# +# DICE-Africa includes regional (Africa) emissions of biofuel and diffuse +# anthropogenic emissions from cars and motorcycles, biofuels, charcoal making +# and use, backup generators, agricultural waste burning for cooking, gas +# flares, and ad-hoc/informal oil refining. +# +# Other pollution sources (formal industry, power generation using fossil +# fuels) are from the EDGAR v4.3 inventory for CO, SO2, NH3, NOx BC, and OC. +# +# NMVOCs from sources not accounted for in DICE-Africa aren't included here, +# as these emissions are likely to be low compared to the DICE pollution +# sources and RETRO v1 as implemented in GEOS-Chem doesn't distinguish +# emissions by sector/activity. +# +# Emissions for 2013 are defined below, but DICE-Africa also includes +# emissions for 2006. Developers recommend using population change to +# estimate emissions, if users want to use annual trends in pollutant +# emissions to estimate in other years. +#============================================================================== +(((DICE_Africa +# ------------------------ +# Cars +# ------------------------ +0 DICE_CARS_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60 +0 DICE_CARS_SOAP - - - - - - SOAP 26/1008/280 1 60 +0 DICE_CARS_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 1 60 +0 DICE_CARS_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 1 60 +0 DICE_CARS_ISOP $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc ISOP 2013/1/1/0 C xy g/m2/yr ISOP 26/1008 1 60 +0 DICE_CARS_ACET $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc ACET 2013/1/1/0 C xy g/m2/yr ACET 26/1008 1 60 +0 DICE_CARS_MEK $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc MEK 2013/1/1/0 C xy g/m2/yr MEK 26/1008 1 60 +0 DICE_CARS_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 1 60 +0 DICE_CARS_RCHO $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc RCHO 2013/1/1/0 C xy g/m2/yr RCHO 26/1008 1 60 +0 DICE_CARS_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008 1 60 +0 DICE_CARS_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 1 60 +0 DICE_CARS_SO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc SO2 2013/1/1/0 C xy g/m2/yr SO2 31/78/1008 1 60 +0 DICE_CARS_SO4 - - - - - - SO4 31/63/1008 1 60 +0 DICE_CARS_pFe - - - - - - pFe 31/78/66/1008 1 60 +0 DICE_CARS_C2H4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc C2H4 2013/1/1/0 C xy g/m2/yr C2H4 26/1008 1 60 +0 DICE_CARS_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 1 60 +0 DICE_CARS_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 1 60 +0 DICE_CARS_XYLE $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc XYLE 2013/1/1/0 C xy g/m2/yr XYLE 26/1008 1 60 +0 DICE_CARS_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 1 60 +0 DICE_CARS_BCPO - - - - - - BCPO 71/1008 1 60 +0 DICE_CARS_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-cars-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008/330 1 60 +0 DICE_CARS_OCPO - - - - - - OCPO 73/1008/330 1 60 +0 DICE_CARS_POG1 - - - - - - POG1 74/76/1008/330 1 60 +0 DICE_CARS_POG2 - - - - - - POG2 74/77/1008/330 1 60 + +# ------------------------ +# Motorcycles +# ------------------------ +0 DICE_MOTORCYCLES_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60 +0 DICE_MOTORCYCLES_SOAP - - - - - - SOAP 26/1008/280 1 60 +0 DICE_MOTORCYCLES_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 1 60 +0 DICE_MOTORCYCLES_SO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc SO2 2013/1/1/0 C xy g/m2/yr SO2 31/78/1008 1 60 +0 DICE_MOTORCYCLES_SO4 - - - - - - SO4 31/63/1008 1 60 +0 DICE_MOTORCYCLES_pFe - - - - - - pFe 31/78/66/1008 1 60 +0 DICE_MOTORCYCLES_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 1 60 +0 DICE_MOTORCYCLES_MEK $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc MEK 2013/1/1/0 C xy g/m2/yr MEK 26/1008 1 60 +0 DICE_MOTORCYCLES_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 1 60 +0 DICE_MOTORCYCLES_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008 1 60 +0 DICE_MOTORCYCLES_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 1 60 +0 DICE_MOTORCYCLES_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 1 60 +0 DICE_MOTORCYCLES_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 1 60 +0 DICE_MOTORCYCLES_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 1 60 +0 DICE_MOTORCYCLES_BCPO - - - - - - BCPO 71/1008 1 60 +0 DICE_MOTORCYCLES_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-motorcycles-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 1 60 +0 DICE_MOTORCYCLES_OCPO - - - - - - OCPO 73/1008 1 60 +0 DICE_MOTORCYCLES_POG1 - - - - - - POG1 74/76/1008 1 60 +0 DICE_MOTORCYCLES_POG2 - - - - - - POG2 74/77/1008 1 60 + +# ------------------------ +# Backup generators +# ------------------------ +0 DICE_BACKUPGEN_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60 +0 DICE_BACKUPGEN_SOAP - - - - - - SOAP 26/1008/280 1 60 +0 DICE_BACKUPGEN_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 1 60 +0 DICE_BACKUPGEN_NO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc NO2 2013/1/1/0 C xy g/m2/yr NO2 25/30/1008 1 60 +0 DICE_BACKUPGEN_SO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc SO2 2013/1/1/0 C xy g/m2/yr SO2 31/78/1008 1 60 +0 DICE_BACKUPGEN_SO4 - - - - - - SO4 31/63/1008 1 60 +0 DICE_BACKUPGEN_pFe - - - - - - pFe 31/78/66/1008 1 60 +0 DICE_BACKUPGEN_ACET $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc ACET 2013/1/1/0 C xy g/m2/yr ACET 26/1008 1 60 +0 DICE_BACKUPGEN_MEK $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc MEK 2013/1/1/0 C xy g/m2/yr MEK 26/1008 1 60 +0 DICE_BACKUPGEN_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 1 60 +0 DICE_BACKUPGEN_RCHO $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc RCHO 2013/1/1/0 C xy g/m2/yr RCHO 26/1008 1 60 +0 DICE_BACKUPGEN_MVK $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc MVK 2013/1/1/0 C xy g/m2/yr MVK 26/1008 1 60 +0 DICE_BACKUPGEN_MACR $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc MACR 2013/1/1/0 C xy g/m2/yr MACR 26/1008 1 60 +0 DICE_BACKUPGEN_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 1 60 +#0 DICE_BACKUPGEN_MGLY $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc MGLY 2013/1/1/0 C xy g/m2/yr MGLY 26/1008 1 60 +#0 DICE_BACKUPGEN_GLYX $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc GLYX 2013/1/1/0 C xy g/m2/yr GLYX 26/1008 1 60 +0 DICE_BACKUPGEN_C2H4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc C2H4 2013/1/1/0 C xy g/m2/yr C2H4 26/1008 1 60 +0 DICE_BACKUPGEN_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 1 60 +0 DICE_BACKUPGEN_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 1 60 +0 DICE_BACKUPGEN_XYLE $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc XYLE 2013/1/1/0 C xy g/m2/yr XYLE 26/1008 1 60 +0 DICE_BACKUPGEN_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 1 60 +0 DICE_BACKUPGEN_BCPO - - - - - - BCPO 71/1008 1 60 +0 DICE_BACKUPGEN_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-generator-use-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 1 60 +0 DICE_BACKUPGEN_OCPO - - - - - - OCPO 73/1008 1 60 +0 DICE_BACKUPGEN_POG1 - - - - - - POG1 74/76/1008 1 60 +0 DICE_BACKUPGEN_POG2 - - - - - - POG2 74/77/1008 1 60 + +# ------------------------ +# Charcoal production +# ------------------------ +0 DICE_CHARCOALPROD_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008/320 1 60 +0 DICE_CHARCOALPROD_SOAP - - - - - - SOAP 26/1008/280/320 1 60 +0 DICE_CHARCOALPROD_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008/320 1 60 +0 DICE_CHARCOALPROD_NH3 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc NH3 2013/1/1/0 C xy g/m2/yr NH3 1008/320 1 60 +0 DICE_CHARCOALPROD_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008/320 1 60 +0 DICE_CHARCOALPROD_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008/320 1 60 +0 DICE_CHARCOALPROD_C2H6 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc C2H6 2013/1/1/0 C xy g/m2/yr C2H6 26/1008/320 1 60 +0 DICE_CHARCOALPROD_HAC $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc HAC 2013/1/1/0 C xy g/m2/yr HAC 26/1008/320 1 60 +0 DICE_CHARCOALPROD_C2H2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc C2H2 2013/1/1/0 C xy g/m2/yr C2H2 26/1008/320 1 60 +0 DICE_CHARCOALPROD_C2H4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc C2H4 2013/1/1/0 C xy g/m2/yr C2H4 26/1008/320 1 60 +0 DICE_CHARCOALPROD_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008/320 1 60 +0 DICE_CHARCOALPROD_HCOOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc HCOOH 2013/1/1/0 C xy g/m2/yr HCOOH 26/1008/320 1 60 +0 DICE_CHARCOALPROD_MOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc MOH 2013/1/1/0 C xy g/m2/yr MOH 26/1008/320 1 60 +0 DICE_CHARCOALPROD_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008/320 1 60 +0 DICE_CHARCOALPROD_BCPO - - - - - - BCPO 71/1008/320 1 60 +0 DICE_CHARCOALPROD_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-production-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008/320 1 60 +0 DICE_CHARCOALPROD_OCPO - - - - - - OCPO 73/1008/320 1 60 +0 DICE_CHARCOALPROD_POG1 - - - - - - POG1 74/76/1008/320 1 60 +0 DICE_CHARCOALPROD_POG2 - - - - - - POG2 74/77/1008/320 1 60 + +# ------------------------ +# Flaring of natural gas +# ------------------------ +0 DICE_GASFLARE_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60 +0 DICE_GASFLARE_SOAP - - - - - - SOAP 26/1008/280 1 60 +0 DICE_GASFLARE_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 1 60 +0 DICE_GASFLARE_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 1 60 +0 DICE_GASFLARE_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 1 60 +0 DICE_GASFLARE_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008 1 60 +0 DICE_GASFLARE_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 1 60 +0 DICE_GASFLARE_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 1 60 +0 DICE_GASFLARE_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 1 60 +0 DICE_GASFLARE_XYLE $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc XYLE 2013/1/1/0 C xy g/m2/yr XYLE 26/1008 1 60 +0 DICE_GASFLARE_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 1 60 +0 DICE_GASFLARE_BCPO - - - - - - BCPO 71/1008 1 60 +0 DICE_GASFLARE_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-gas-flares-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 1 60 +0 DICE_GASFLARE_OCPO - - - - - - OCPO 73/1008 1 60 +0 DICE_GASFLARE_POG1 - - - - - - POG1 74/76/1008 1 60 +0 DICE_GASFLARE_POG2 - - - - - - POG2 74/77/1008 1 60 + +# ------------------------------ +# Ag waste burning for energy +# ------------------------------ +0 DICE_AGBURNING_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 2 60 +0 DICE_AGBURNING_SOAP - - - - - - SOAP 26/1008/280 2 60 +0 DICE_AGBURNING_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 2 60 +0 DICE_AGBURNING_NO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc NO2 2013/1/1/0 C xy g/m2/yr NO2 25/30/1008 2 60 +0 DICE_AGBURNING_SO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc SO2 2013/1/1/0 C xy g/m2/yr SO2 31/78/1008 2 60 +0 DICE_AGBURNING_SO4 - - - - - - SO4 31/63/1008 2 60 +0 DICE_AGBURNING_pFe - - - - - - pFe 31/78/66/1008 2 60 +0 DICE_AGBURNING_NH3 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc NH3 2013/1/1/0 C xy g/m2/yr NH3 1008 2 60 +0 DICE_AGBURNING_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 2 60 +0 DICE_AGBURNING_ISOP $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc ISOP 2013/1/1/0 C xy g/m2/yr ISOP 26/1008 2 60 +0 DICE_AGBURNING_ACET $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc ACET 2013/1/1/0 C xy g/m2/yr ACET 26/1008 2 60 +0 DICE_AGBURNING_MEK $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc MEK 2013/1/1/0 C xy g/m2/yr MEK 26/1008 2 60 +0 DICE_AGBURNING_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 2 60 +0 DICE_AGBURNING_MVK $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc MVK 2013/1/1/0 C xy g/m2/yr MVK 26/1008 2 60 +0 DICE_AGBURNING_MACR $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc MACR 2013/1/1/0 C xy g/m2/yr MACR 26/1008 2 60 +0 DICE_AGBURNING_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008 2 60 +0 DICE_AGBURNING_C3H8 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc C3H8 2013/1/1/0 C xy g/m2/yr C3H8 26/1008 2 60 +0 DICE_AGBURNING_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 2 60 +0 DICE_AGBURNING_C2H6 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc C2H6 2013/1/1/0 C xy g/m2/yr C2H6 26/1008 2 60 +0 DICE_AGBURNING_HAC $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc HAC 2013/1/1/0 C xy g/m2/yr HAC 26/1008 2 60 +0 DICE_AGBURNING_GLYC $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc GLYC 2013/1/1/0 C xy g/m2/yr GLYC 26/1008 2 60 +0 DICE_AGBURNING_MOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc MOH 2013/1/1/0 C xy g/m2/yr MOH 26/1008 2 60 +#0 DICE_AGBURNING_MGLY $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc MGLY 2013/1/1/0 C xy g/m2/yr MGLY 26/1008 2 60 +#0 DICE_AGBURNING_APIN $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc APIN 2013/1/1/0 C xy g/m2/yr APIN 26/1008 2 60 +0 DICE_AGBURNING_C2H2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc C2H2 2013/1/1/0 C xy g/m2/yr C2H2 26/1008 2 60 +0 DICE_AGBURNING_C2H4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc C2H4 2013/1/1/0 C xy g/m2/yr C2H4 26/1008 2 60 +0 DICE_AGBURNING_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 2 60 +0 DICE_AGBURNING_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 2 60 +0 DICE_AGBURNING_XYLE $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc XYLE 2013/1/1/0 C xy g/m2/yr XYLE 26/1008 2 60 +0 DICE_AGBURNING_HCOOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc HCOOH 2013/1/1/0 C xy g/m2/yr HCOOH 26/1008 2 60 +0 DICE_AGBURNING_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 2 60 +0 DICE_AGBURNING_BCPO - - - - - g/m2/yr BCPO 71/1008 2 60 +0 DICE_AGBURNING_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-crop-residue-use-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 2 60 +0 DICE_AGBURNING_OCPO - - - - - - OCPO 73/1008 2 60 +0 DICE_AGBURNING_POG1 - - - - - - POG1 74/76/1008 2 60 +0 DICE_AGBURNING_POG2 - - - - - - POG2 74/77/1008 2 60 + +# ------------------------------ +# Charcoal use +# ------------------------------ +0 DICE_CHARCOALUSE_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 2 60 +0 DICE_CHARCOALUSE_SOAP - - - - - - SOAP 26/1008/280 2 60 +0 DICE_CHARCOALUSE_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 2 60 +0 DICE_CHARCOALUSE_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 2 60 +0 DICE_CHARCOALUSE_NH3 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc NH3 2013/1/1/0 C xy g/m2/yr NH3 1008 2 60 +0 DICE_CHARCOALUSE_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008 2 60 +0 DICE_CHARCOALUSE_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 2 60 +0 DICE_CHARCOALUSE_C2H6 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc C2H6 2013/1/1/0 C xy g/m2/yr C2H6 26/1008 2 60 +0 DICE_CHARCOALUSE_C2H2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc C2H2 2013/1/1/0 C xy g/m2/yr C2H2 26/1008 2 60 +0 DICE_CHARCOALUSE_C2H4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc C2H4 2013/1/1/0 C xy g/m2/yr C2H4 26/1008 2 60 +0 DICE_CHARCOALUSE_HCOOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc HCOOH 2013/1/1/0 C xy g/m2/yr HCOOH 26/1008 2 60 +0 DICE_CHARCOALUSE_MOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc MOH 2013/1/1/0 C xy g/m2/yr MOH 26/1008 2 60 +0 DICE_CHARCOALUSE_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 2 60 +0 DICE_CHARCOALUSE_BCPO - - - - - - BCPO 71/1008 2 60 +0 DICE_CHARCOALUSE_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-charcoal-use-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 2 60 +0 DICE_CHARCOALUSE_OCPO - - - - - - OCPO 73/1008 2 60 +0 DICE_CHARCOALUSE_POG1 - - - - - - POG1 74/76/1008 2 60 +0 DICE_CHARCOALUSE_POG2 - - - - - - POG2 74/77/1008 2 60 + +# ------------------------------ +# Kerosene use +# ------------------------------ +0 DICE_KEROSENE_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-kerosene-use-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60 +0 DICE_KEROSENE_SOAP - - - - - - SOAP 26/1008/280 1 60 +0 DICE_KEROSENE_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-kerosene-use-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 1 60 +0 DICE_KEROSENE_BCPO - - - - - - BCPO 71/1008 1 60 +0 DICE_KEROSENE_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-kerosene-use-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 1 60 +0 DICE_KEROSENE_OCPO - - - - - - OCPO 73/1008 1 60 +0 DICE_KEROSENE_POG1 - - - - - - POG1 74/76/1008 1 60 +0 DICE_KEROSENE_POG2 - - - - - - POG2 74/77/1008 1 60 + +# ------------------------------ +# Artisanal oil refining +# ------------------------------ +0 DICE_OILREFINING_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 1 60 +0 DICE_OILREFINING_SOAP - - - - - - SOAP 26/1008/280 1 60 +0 DICE_OILREFINING_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 1 60 +0 DICE_OILREFINING_SO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc SO2 2013/1/1/0 C xy g/m2/yr SO2 31/78/1008 1 60 +0 DICE_OILREFINING_SO4 - - - - - - SO4 31/63/1008 1 60 +0 DICE_OILREFINING_pFe - - - - - - pFe 31/78/66/1008 1 60 +0 DICE_OILREFINING_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 1 60 +0 DICE_OILREFINING_ACET $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc ACET 2013/1/1/0 C xy g/m2/yr ACET 26/1008 1 60 +0 DICE_OILREFINING_MEK $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc MEK 2013/1/1/0 C xy g/m2/yr MEK 26/1008 1 60 +0 DICE_OILREFINING_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 1 60 +0 DICE_OILREFINING_RCHO $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc RCHO 2013/1/1/0 C xy g/m2/yr RCHO 26/1008 1 60 +0 DICE_OILREFINING_C3H8 $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc C3H8 2013/1/1/0 C xy g/m2/yr C3H8 26/1008 1 60 +0 DICE_OILREFINING_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 1 60 +0 DICE_OILREFINING_C2H6 $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc C2H6 2013/1/1/0 C xy g/m2/yr C2H6 26/1008 1 60 +0 DICE_OILREFINING_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 1 60 +0 DICE_OILREFINING_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 1 60 +0 DICE_OILREFINING_XYLE $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc XYLE 2013/1/1/0 C xy g/m2/yr XYLE 26/1008 1 60 +0 DICE_OILREFINING_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 1 60 +0 DICE_OILREFINING_BCPO - - - - - - BCPO 71/1008 1 60 +0 DICE_OILREFINING_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-adhoc-oil-refining-2006-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 1 60 +0 DICE_OILREFINING_OCPO - - - - - - OCPO 73/1008 1 60 +0 DICE_OILREFINING_POG1 - - - - - - POG1 74/76/1008 1 60 +0 DICE_OILREFINING_POG2 - - - - - - POG2 74/77/1008 1 60 + +# -------------------------- +# Household fuelwood use +# -------------------------- +0 DICE_HOUSEFUELWOOD_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_SOAP - - - - - - SOAP 26/1008/280 2 60 +0 DICE_HOUSEFUELWOOD_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 2 60 +0 DICE_HOUSEFUELWOOD_NO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc NO2 2013/1/1/0 C xy g/m2/yr NO2 25/30/1008 2 60 +0 DICE_HOUSEFUELWOOD_SO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc SO2 2013/1/1/0 C xy g/m2/yr SO2 31/78/1008 2 60 +0 DICE_HOUSEFUELWOOD_SO4 - - - - - - SO4 31/63/1008 2 60 +0 DICE_HOUSEFUELWOOD_pFe - - - - - - pFe 31/78/66/1008 2 60 +0 DICE_HOUSEFUELWOOD_NH3 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc NH3 2013/1/1/0 C xy g/m2/yr NH3 1008 2 60 +0 DICE_HOUSEFUELWOOD_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_ISOP $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc ISOP 2013/1/1/0 C xy g/m2/yr ISOP 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_MEK $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc MEK 2013/1/1/0 C xy g/m2/yr MEK 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_MVK $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc MVK 2013/1/1/0 C xy g/m2/yr MVK 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_C2H6 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc C2H6 2013/1/1/0 C xy g/m2/yr C2H6 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_HAC $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc HAC 2013/1/1/0 C xy g/m2/yr HAC 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_GLYC $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc GLYC 2013/1/1/0 C xy g/m2/yr GLYC 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_MOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc MOH 2013/1/1/0 C xy g/m2/yr MOH 26/1008 2 60 +#0 DICE_HOUSEFUELWOOD_MGLY $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc MGLY 2013/1/1/0 C xy g/m2/yr MGLY 26/1008 2 60 +#0 DICE_HOUSEFUELWOOD_APIN $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc APIN 2013/1/1/0 C xy g/m2/yr APIN 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_C2H2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc C2H2 2013/1/1/0 C xy g/m2/yr C2H2 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_C2H4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc C2H4 2013/1/1/0 C xy g/m2/yr C2H4 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_XYLE $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc XYLE 2013/1/1/0 C xy g/m2/yr XYLE 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_HCOOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc HCOOH 2013/1/1/0 C xy g/m2/yr HCOOH 26/1008 2 60 +0 DICE_HOUSEFUELWOOD_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 2 60 +0 DICE_HOUSEFUELWOOD_BCPO - - - - - - BCPO 71/1008 2 60 +0 DICE_HOUSEFUELWOOD_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-household-fuelwood-use-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 2 60 +0 DICE_HOUSEFUELWOOD_OCPO - - - - - - OCPO 73/1008 2 60 +0 DICE_HOUSEFUELWOOD_POG1 - - - - - - POG1 74/76/1008 2 60 +0 DICE_HOUSEFUELWOOD_POG2 - - - - - - POG2 74/77/1008 2 60 + +# --------------------------------- +# Commercial (other) fuelwood use +# --------------------------------- +0 DICE_OTHERFUELWOOD_CO $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc CO 2013/1/1/0 C xy g/m2/yr CO 26/1008 2 60 +0 DICE_OTHERFUELWOOD_SOAP - - - - - - SOAP 26/1008/280 2 60 +0 DICE_OTHERFUELWOOD_NO $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc NO 2013/1/1/0 C xy g/m2/yr NO 25/30/1008 2 60 +0 DICE_OTHERFUELWOOD_NO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc NO2 2013/1/1/0 C xy g/m2/yr NO2 25/30/1008 2 60 +0 DICE_OTHERFUELWOOD_SO2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc SO2 2013/1/1/0 C xy g/m2/yr SO2 31/78/1008 2 60 +0 DICE_OTHERFUELWOOD_SO4 - - - - - - SO4 31/63/1008 2 60 +0 DICE_OTHERFUELWOOD_pFe - - - - - - pFe 31/78/66/1008 2 60 +0 DICE_OTHERFUELWOOD_NH3 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc NH3 2013/1/1/0 C xy g/m2/yr NH3 1008 2 60 +0 DICE_OTHERFUELWOOD_ALK4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc ALK4 2013/1/1/0 C xy g/m2/yr ALK4 26/1008 2 60 +0 DICE_OTHERFUELWOOD_ISOP $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc ISOP 2013/1/1/0 C xy g/m2/yr ISOP 26/1008 2 60 +0 DICE_OTHERFUELWOOD_MEK $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc MEK 2013/1/1/0 C xy g/m2/yr MEK 26/1008 2 60 +0 DICE_OTHERFUELWOOD_ALD2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc ALD2 2013/1/1/0 C xy g/m2/yr ALD2 26/1008 2 60 +0 DICE_OTHERFUELWOOD_MVK $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc MVK 2013/1/1/0 C xy g/m2/yr MVK 26/1008 2 60 +0 DICE_OTHERFUELWOOD_PRPE $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc PRPE 2013/1/1/0 C xy g/m2/yr PRPE 26/1008 2 60 +0 DICE_OTHERFUELWOOD_CH2O $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc CH2O 2013/1/1/0 C xy g/m2/yr CH2O 26/1008 2 60 +0 DICE_OTHERFUELWOOD_C2H6 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc C2H6 2013/1/1/0 C xy g/m2/yr C2H6 26/1008 2 60 +0 DICE_OTHERFUELWOOD_HAC $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc HAC 2013/1/1/0 C xy g/m2/yr HAC 26/1008 2 60 +0 DICE_OTHERFUELWOOD_GLYC $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc GLYC 2013/1/1/0 C xy g/m2/yr GLYC 26/1008 2 60 +0 DICE_OTHERFUELWOOD_MOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc MOH 2013/1/1/0 C xy g/m2/yr MOH 26/1008 2 60 +#0 DICE_OTHERFUELWOOD_MGLY $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc MGLY 2013/1/1/0 C xy g/m2/yr MGLY 26/1008 2 60 +#0 DICE_OTHERFUELWOOD_APIN $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc APIN 2013/1/1/0 C xy g/m2/yr APIN 26/1008 2 60 +0 DICE_OTHERFUELWOOD_C2H2 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc C2H2 2013/1/1/0 C xy g/m2/yr C2H2 26/1008 2 60 +0 DICE_OTHERFUELWOOD_C2H4 $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc C2H4 2013/1/1/0 C xy g/m2/yr C2H4 26/1008 2 60 +0 DICE_OTHERFUELWOOD_BENZ $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc BENZ 2013/1/1/0 C xy g/m2/yr BENZ 26/1008 2 60 +0 DICE_OTHERFUELWOOD_TOLU $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc TOLU 2013/1/1/0 C xy g/m2/yr TOLU 26/1008 2 60 +0 DICE_OTHERFUELWOOD_XYLE $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc XYLE 2013/1/1/0 C xy g/m2/yr XYLE 26/1008 2 60 +0 DICE_OTHERFUELWOOD_HCOOH $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc HCOOH 2013/1/1/0 C xy g/m2/yr HCOOH 26/1008 2 60 +0 DICE_OTHERFUELWOOD_BCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc BC 2013/1/1/0 C xy g/m2/yr BCPI 70/1008 2 60 +0 DICE_OTHERFUELWOOD_BCPO - - - - - - BCPO 71/1008 2 60 +0 DICE_OTHERFUELWOOD_OCPI $ROOT/DICE_Africa/v2016-10/DICE-Africa-other-fuelwood-use-2013-v01-4Oct2016.nc OC 2013/1/1/0 C xy g/m2/yr OCPI 72/1008 2 60 +0 DICE_OTHERFUELWOOD_OCPO - - - - - - OCPO 73/1008 2 60 +0 DICE_OTHERFUELWOOD_POG1 - - - - - - POG1 74/76/1008 2 60 +0 DICE_OTHERFUELWOOD_POG2 - - - - - - POG2 74/77/1008 2 60 + +# --------------------------------------------------- +# Efficient Combustion Emissions from EDGAR +# This makes up for sources that DICE-Africa lacks +# --------------------------------------------------- +0 AF_EDGAR_BCPI_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.POW.0.1x0.1.nc emi_bc 1970-2010/1/1/0 RF xy kg/m2/s BCPI 1201/1008/70 1 60 +0 AF_EDGAR_BCPO_POW - - - - - - BCPO 1201/1008/71 1 60 +0 AF_EDGAR_BCPI_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.ENG.0.1x0.1.nc emi_bc 1970-2010/1/1/0 RF xy kg/m2/s BCPI 1202/1008/70 1 60 +0 AF_EDGAR_BCPO_ENG - - - - - - BCPO 1202/1008/71 1 60 +0 AF_EDGAR_BCPI_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.IND.0.1x0.1.nc emi_bc 1970-2010/1/1/0 RF xy kg/m2/s BCPI 1203/1008/70 1 60 +0 AF_EDGAR_BCPO_IND - - - - - - BCPO 1203/1008/71 1 60 +0 AF_EDGAR_BCPI_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.TNG.0.1x0.1.nc emi_bc 1970-2010/1/1/0 RF xy kg/m2/s BCPI 1205/1008/70 1 60 +0 AF_EDGAR_BCPO_TNG - - - - - - BCPO 1205/1008/71 1 60 +0 AF_EDGAR_BCPI_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.SWD.0.1x0.1.nc emi_bc 1970-2010/1/1/0 RF xy kg/m2/s BCPI 1211/1008/70 1 60 +0 AF_EDGAR_BCPO_SWD - - - - - - BCPO 1211/1008/71 1 60 + +0 AF_EDGAR_CO_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.POW.0.1x0.1.nc emi_co 1970-2010/1/1/0 RF xy kg/m2/s CO 1201/26/52/1008 1 60 +0 AF_EDGAR_SOAP_POW - - - - - - SOAP 1201/26/52/1008/280 1 60 +0 AF_EDGAR_CO_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.ENG.0.1x0.1.nc emi_co 1970-2010/1/1/0 RF xy kg/m2/s CO 1202/26/52/1008 1 60 +0 AF_EDGAR_SOAP_ENG - - - - - - SOAP 1202/26/52/1008/280 1 60 +0 AF_EDGAR_CO_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.IND.0.1x0.1.nc emi_co 1970-2010/1/1/0 RF xy kg/m2/s CO 1203/26/52/1008 1 60 +0 AF_EDGAR_SOAP_IND - - - - - - SOAP 1203/26/52/1008/280 1 60 +0 AF_EDGAR_CO_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.TNG.0.1x0.1.nc emi_co 1970-2010/1/1/0 RF xy kg/m2/s CO 1205/26/52/1008 1 60 +0 AF_EDGAR_SOAP_TNG - - - - - - SOAP 1205/26/52/1008/280 1 60 +0 AF_EDGAR_CO_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.PPA.0.1x0.1.nc emi_co 1970-2010/1/1/0 RF xy kg/m2/s CO 1207/26/52/1008 1 60 +0 AF_EDGAR_SOAP_PPA - - - - - - SOAP 1207/26/52/1008/280 1 60 +0 AF_EDGAR_CO_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.SWD.0.1x0.1.nc emi_co 1970-2010/1/1/0 RF xy kg/m2/s CO 1211/26/52/1008 1 60 +0 AF_EDGAR_SOAP_SWD - - - - - - SOAP 1211/26/52/1008/280 1 60 + +0 AF_EDGAR_NO_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.POW.0.1x0.1.nc emi_nox 1970-2010/1/1/0 RF xy kg/m2/s NO 1201/25/115/1008 1 60 +0 AF_EDGAR_NO_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.ENG.0.1x0.1.nc emi_nox 1970-2010/1/1/0 RF xy kg/m2/s NO 1202/25/115/1008 1 60 +0 AF_EDGAR_NO_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.IND.0.1x0.1.nc emi_nox 1970-2010/1/1/0 RF xy kg/m2/s NO 1203/25/115/1008 1 60 +0 AF_EDGAR_NO_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.TNG.0.1x0.1.nc emi_nox 1970-2010/1/1/0 RF xy kg/m2/s NO 1205/25/115/1008 1 60 +0 AF_EDGAR_NO_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.PPA.0.1x0.1.nc emi_nox 1970-2010/1/1/0 RF xy kg/m2/s NO 1207/25/115/1008 1 60 +0 AF_EDGAR_NO_AGR $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.AGR.0.1x0.1.nc emi_nox 1970-2010/1/1/0 RF xy kg/m2/s NO 1208/25/115/1008 1 60 +0 AF_EDGAR_NO_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.SWD.0.1x0.1.nc emi_nox 1970-2010/1/1/0 RF xy kg/m2/s NO 1211/25/115/1008 1 60 + +0 AF_EDGAR_NH3_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.POW.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1201/1008 1 60 +0 AF_EDGAR_NH3_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.ENG.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1202/1008 1 60 +0 AF_EDGAR_NH3_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.IND.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1203/1008 1 60 +0 AF_EDGAR_NH3_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.TNG.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1205/1008 1 60 +0 AF_EDGAR_NH3_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.PPA.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1207/1008 1 60 +0 AF_EDGAR_NH3_AGR $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.AGR.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1208/1008 1 60 +0 AF_EDGAR_NH3_SOL $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.SOL.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1210/1008 1 60 +0 AF_EDGAR_NH3_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.SWD.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 RF xy kg/m2/s NH3 1211/1008 1 60 + +0 AF_EDGAR_OCPI_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.POW.0.1x0.1.nc emi_oc 1970-2010/1/1/0 RF xy kg/m2/s OCPI 1201/1008/72 1 60 +0 AF_EDGAR_OCPO_POW - - - - - - OCPO 1201/1008/73 1 60 +0 AF_EDGAR_POG1_POW - - - - - - POG1 1201/1008/74/76 1 60 +0 AF_EDGAR_POG2_POW - - - - - - POG2 1201/1008/74/77 1 60 +0 AF_EDGAR_OCPI_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.ENG.0.1x0.1.nc emi_oc 1970-2010/1/1/0 RF xy kg/m2/s OCPI 1202/1008/72 1 60 +0 AF_EDGAR_OCPO_ENG - - - - - - OCPO 1202/1008/73 1 60 +0 AF_EDGAR_POG1_ENG - - - - - - POG1 1202/1008/74/76 1 60 +0 AF_EDGAR_POG2_ENG - - - - - - POG2 1202/1008/74/77 1 60 +0 AF_EDGAR_OCPI_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.IND.0.1x0.1.nc emi_oc 1970-2010/1/1/0 RF xy kg/m2/s OCPI 1203/1008/72 1 60 +0 AF_EDGAR_OCPO_IND - - - - - - OCPO 1203/1008/73 1 60 +0 AF_EDGAR_POG1_IND - - - - - - POG1 1203/1008/74/76 1 60 +0 AF_EDGAR_POG2_IND - - - - - - POG2 1203/1008/74/77 1 60 +0 AF_EDGAR_OCPI_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.TNG.0.1x0.1.nc emi_oc 1970-2010/1/1/0 RF xy kg/m2/s OCPI 1205/1008/72 1 60 +0 AF_EDGAR_OCPO_TNG - - - - - - OCPO 1205/1008/73 1 60 +0 AF_EDGAR_POG1_TNG - - - - - - POG1 1205/1008/74/76 1 60 +0 AF_EDGAR_POG2_TNG - - - - - - POG2 1205/1008/74/77 1 60 +0 AF_EDGAR_OCPI_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.SWD.0.1x0.1.nc emi_oc 1970-2010/1/1/0 RF xy kg/m2/s OCPI 1211/1008/72 1 60 +0 AF_EDGAR_OCPO_SWD - - - - - - OCPO 1211/1008/73 1 60 +0 AF_EDGAR_POG1_SWD - - - - - - POG1 1211/1008/74/76 1 60 +0 AF_EDGAR_POG2_SWD - - - - - - POG2 1211/1008/74/77 1 60 + +0 AF_EDGAR_SO2_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.POW.0.1x0.1.nc emi_so2 1970-2010/1/1/0 RF xy kg/m2/s SO2 1201/1008 1 60 +0 AF_EDGAR_SO4_POW - - - - - - SO4 1201/1008/63 1 60 +0 AF_EDGAR_pFe_POW - - - - - - pFe 1201/1008/66 1 60 +0 AF_EDGAR_SO2_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.ENG.0.1x0.1.nc emi_so2 1970-2010/1/1/0 RF xy kg/m2/s SO2 1202/1008 1 60 +0 AF_EDGAR_SO4_ENG - - - - - - SO4 1202/1008/63 1 60 +0 AF_EDGAR_pFe_ENG - - - - - - pFe 1202/1008/66 1 60 +0 AF_EDGAR_SO2_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.IND.0.1x0.1.nc emi_so2 1970-2010/1/1/0 RF xy kg/m2/s SO2 1203/1008 1 60 +0 AF_EDGAR_SO4_IND - - - - - - SO4 1203/1008/63 1 60 +0 AF_EDGAR_pFe_IND - - - - - - pFe 1203/1008/66 1 60 +0 AF_EDGAR_SO2_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.TNG.0.1x0.1.nc emi_so2 1970-2010/1/1/0 RF xy kg/m2/s SO2 1205/1008 1 60 +0 AF_EDGAR_SO4_TNG - - - - - - SO4 1205/1008/63 1 60 +0 AF_EDGAR_pFe_TNG - - - - - - pFe 1205/1008/66 1 60 +0 AF_EDGAR_SO2_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.PPA.0.1x0.1.nc emi_so2 1970-2010/1/1/0 RF xy kg/m2/s SO2 1207/1008 1 60 +0 AF_EDGAR_SO4_PPA - - - - - - SO4 1207/1008/63 1 60 +0 AF_EDGAR_pFe_PPA - - - - - - pFe 1207/1008/66 1 60 +0 AF_EDGAR_SO2_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.SWD.0.1x0.1.nc emi_so2 1970-2010/1/1/0 RF xy kg/m2/s SO2 1211/1008 1 60 +0 AF_EDGAR_SO4_SWD - - - - - - SO4 1211/1008/63 1 60 +0 AF_EDGAR_pFe_SWD - - - - - - pFe 1211/1008/66 1 60 +)))DICE_Africa + +#============================================================================== +# --- CEDS v2 --- +# +# %%% This is the default global inventory. You may select either CEDS, +# EDGAR, HTAPv3 or CMIP6_SFC_LAND_ANTHRO for the global base emissions %%% +#============================================================================== +(((CEDSv2 +0 CEDS_NO_AGR $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_agr 1750-2019/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CEDS_NO_ENE $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s NO 25/315 1 5 +0 CEDS_NO_IND $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s NO 25/316 1 5 +0 CEDS_NO_TRA $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_tra 1750-2019/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CEDS_NO_RCO $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_rco 1750-2019/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CEDS_NO_SLV $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_slv 1750-2019/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CEDS_NO_WST $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_wst 1750-2019/1-12/1/0 C xy kg/m2/s NO 25 1 5 + +0 CEDS_CO_AGR $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_agr 1750-2019/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CEDS_SOAP_AGR - - - - - - SOAP 26/280 1 5 +0 CEDS_CO_ENE $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s CO 26/315 1 5 +0 CEDS_SOAP_ENE - - - - - - SOAP 26/280/315 1 5 +0 CEDS_CO_IND $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s CO 26/316 1 5 +0 CEDS_SOAP_IND - - - - - - SOAP 26/280/316 1 5 +0 CEDS_CO_TRA $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_tra 1750-2019/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CEDS_SOAP_TRA - - - - - - SOAP 26/280 1 5 +0 CEDS_CO_RCO $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_rco 1750-2019/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CEDS_SOAP_RCO - - - - - - SOAP 26/280 1 5 +0 CEDS_CO_SLV $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_slv 1750-2019/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CEDS_SOAP_SLV - - - - - - SOAP 26/280 1 5 +0 CEDS_CO_WST $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_wst 1750-2019/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CEDS_SOAP_WST - - - - - - SOAP 26/280 1 5 + +0 CEDS_SO2_AGR $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_agr 1750-2019/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CEDS_SO4_AGR - - - - - - SO4 63 1 5 +0 CEDS_pFe_AGR - - - - - - pFe 66 1 5 +0 CEDS_SO2_ENE $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s SO2 315 1 5 +0 CEDS_SO4_ENE - - - - - - SO4 63/315 1 5 +0 CEDS_pFe_ENE - - - - - - pFe 66/315 1 5 +0 CEDS_SO2_IND $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s SO2 316 1 5 +0 CEDS_SO4_IND - - - - - - SO4 63/316 1 5 +0 CEDS_pFe_IND - - - - - - pFe 66/316 1 5 +0 CEDS_SO2_TRA $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_tra 1750-2019/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CEDS_SO4_TRA - - - - - - SO4 63 1 5 +0 CEDS_pFe_TRA - - - - - - pFe 66 1 5 +0 CEDS_SO2_RCO $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_rco 1750-2019/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CEDS_SO4_RCO - - - - - - SO4 63 1 5 +0 CEDS_pFe_RCO - - - - - - pFe 66 1 5 +0 CEDS_SO2_SLV $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_slv 1750-2019/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CEDS_SO4_SLV - - - - - - SO4 63 1 5 +0 CEDS_pFe_SLV - - - - - - pFe 66 1 5 +0 CEDS_SO2_WST $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_wst 1750-2019/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CEDS_SO4_WST - - - - - - SO4 63 1 5 +0 CEDS_pFe_WST - - - - - - pFe 66 1 5 + +0 CEDS_NH3_AGR $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_agr 1750-2019/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CEDS_NH3_ENE $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s NH3 315 1 5 +0 CEDS_NH3_IND $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s NH3 316 1 5 +0 CEDS_NH3_TRA $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_tra 1750-2019/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CEDS_NH3_RCO $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_rco 1750-2019/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CEDS_NH3_SLV $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_slv 1750-2019/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CEDS_NH3_WST $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_wst 1750-2019/1-12/1/0 C xy kg/m2/s NH3 - 1 5 + +0 CEDS_BCPI_AGR $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_agr 1750-2019/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CEDS_BCPO_AGR - - - - - - BCPO 71 1 5 +0 CEDS_BCPI_ENE $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s BCPI 70/315 1 5 +0 CEDS_BCPO_ENE - - - - - - BCPO 71/315 1 5 +0 CEDS_BCPI_IND $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s BCPI 70/316 1 5 +0 CEDS_BCPO_IND - - - - - - BCPO 71/316 1 5 +0 CEDS_BCPI_TRA $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_tra 1750-2019/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CEDS_BCPO_TRA - - - - - - BCPO 71 1 5 +0 CEDS_BCPI_RCO $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_rco 1750-2019/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CEDS_BCPO_RCO - - - - - - BCPO 71 1 5 +0 CEDS_BCPI_SLV $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_slv 1750-2019/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CEDS_BCPO_SLV - - - - - - BCPO 71 1 5 +0 CEDS_BCPI_WST $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_wst 1750-2019/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CEDS_BCPO_WST - - - - - - BCPO 71 1 5 + +0 CEDS_OCPI_AGR $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_agr 1750-2019/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CEDS_OCPO_AGR - - - - - - OCPO 73 1 5 +0 CEDS_POG1_AGR - - - - - - POG1 74/76 1 5 +0 CEDS_POG2_AGR - - - - - - POG2 74/77 1 5 +0 CEDS_OCPI_ENE $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s OCPI 72/315 1 5 +0 CEDS_OCPO_ENE - - - - - - OCPO 73/315 1 5 +0 CEDS_POG1_ENE - - - - - - POG1 74/76/315 1 5 +0 CEDS_POG2_ENE - - - - - - POG2 74/77/315 1 5 +0 CEDS_OCPI_IND $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s OCPI 72/316 1 5 +0 CEDS_OCPO_IND - - - - - - OCPO 73/316 1 5 +0 CEDS_POG1_IND - - - - - - POG1 74/76/316 1 5 +0 CEDS_POG2_IND - - - - - - POG2 74/77/316 1 5 +0 CEDS_OCPI_TRA $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_tra 1750-2019/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CEDS_OCPO_TRA - - - - - - OCPO 73 1 5 +0 CEDS_POG1_TRA - - - - - - POG1 74/76 1 5 +0 CEDS_POG2_TRA - - - - - - POG2 74/77 1 5 +0 CEDS_OCPI_RCO $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_rco 1750-2019/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CEDS_OCPO_RCO - - - - - - OCPO 73 1 5 +0 CEDS_POG1_RCO - - - - - - POG1 74/76 1 5 +0 CEDS_POG2_RCO - - - - - - POG2 74/77 1 5 +0 CEDS_OCPI_SLV $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_slv 1750-2019/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CEDS_OCPO_SLV - - - - - - OCPO 73 1 5 +0 CEDS_POG1_SLV - - - - - - POG1 74/76 1 5 +0 CEDS_POG2_SLV - - - - - - POG2 74/77 1 5 +0 CEDS_OCPI_WST $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_wst 1750-2019/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CEDS_OCPO_WST - - - - - - OCPO 73 1 5 +0 CEDS_POG1_WST - - - - - - POG1 74/76 1 5 +0 CEDS_POG2_WST - - - - - - POG2 74/77 1 5 + +# Comment out CO2 for fullchem simulations: CO2 not advected +#0 CEDS_CO2_AGR $ROOT/CEDS/v2021-06/$YYYY/CO2-em-anthro_CMIP_CEDS_$YYYY.nc CO2_agr 1750-2019/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CEDS_CO2_ENE $ROOT/CEDS/v2021-06/$YYYY/CO2-em-anthro_CMIP_CEDS_$YYYY.nc CO2_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s CO2 315 1 5 +#0 CEDS_CO2_IND $ROOT/CEDS/v2021-06/$YYYY/CO2-em-anthro_CMIP_CEDS_$YYYY.nc CO2_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s CO2 316 1 5 +#0 CEDS_CO2_TRA $ROOT/CEDS/v2021-06/$YYYY/CO2-em-anthro_CMIP_CEDS_$YYYY.nc CO2_tra 1750-2019/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CEDS_CO2_RCO $ROOT/CEDS/v2021-06/$YYYY/CO2-em-anthro_CMIP_CEDS_$YYYY.nc CO2_rco 1750-2019/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CEDS_CO2_SLV $ROOT/CEDS/v2021-06/$YYYY/CO2-em-anthro_CMIP_CEDS_$YYYY.nc CO2_slv 1750-2019/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CEDS_CO2_WST $ROOT/CEDS/v2021-06/$YYYY/CO2-em-anthro_CMIP_CEDS_$YYYY.nc CO2_wst 1750-2019/1-12/1/0 C xy kg/m2/s CO2 - 1 5 + +# Comment out CH4 for fullchem simulations: do not use CH4 emissions +# CEDS CH4 emissions are only available for 1970-2014 +#0 CEDS_CH4_AGR $ROOT/CEDS/v2021-06/$YYYY/CH4-em-anthro_CMIP_CEDS_$YYYY.nc CH4_agr 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CEDS_CH4_ENE $ROOT/CEDS/v2021-06/$YYYY/CH4-em-anthro_CMIP_CEDS_$YYYY.nc CH4_ene 1970-2014/1-12/1/0 C xyL* kg/m2/s CH4 315 1 5 +#0 CEDS_CH4_IND $ROOT/CEDS/v2021-06/$YYYY/CH4-em-anthro_CMIP_CEDS_$YYYY.nc CH4_ind 1970-2014/1-12/1/0 C xyL* kg/m2/s CH4 316 1 5 +#0 CEDS_CH4_TRA $ROOT/CEDS/v2021-06/$YYYY/CH4-em-anthro_CMIP_CEDS_$YYYY.nc CH4_tra 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CEDS_CH4_RCO $ROOT/CEDS/v2021-06/$YYYY/CH4-em-anthro_CMIP_CEDS_$YYYY.nc CH4_rco 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CEDS_CH4_SLV $ROOT/CEDS/v2021-06/$YYYY/CH4-em-anthro_CMIP_CEDS_$YYYY.nc CH4_slv 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CEDS_CH4_WST $ROOT/CEDS/v2021-06/$YYYY/CH4-em-anthro_CMIP_CEDS_$YYYY.nc CH4_wst 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 + +# NOTE: EOH files in CEDS/v2021-06 are actually VOC1 (total alchohols) and are split into MOH, EOH, ROH here +0 CEDS_MOH_AGR $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_agr 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_AGR - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_AGR - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_ENE $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s MOH 26/90/315 1 5 +0 CEDS_EOH_ENE - - - - - - EOH 26/91/315 1 5 +0 CEDS_ROH_ENE - - - - - - ROH 26/92/315 1 5 +0 CEDS_MOH_IND $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s MOH 26/90/316 1 5 +0 CEDS_EOH_IND - - - - - - EOH 26/91/316 1 5 +0 CEDS_ROH_IND - - - - - - ROH 26/92/316 1 5 +0 CEDS_MOH_TRA $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_tra 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_TRA - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_TRA - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_RCO $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_rco 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_RCO - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_RCO - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_SLV $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_slv 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_SLV - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_SLV - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_WST $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_wst 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_WST - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_WST - - - - - - ROH 26/92 1 5 + +0 CEDS_C2H6_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s C2H6 26/315 1 5 +0 CEDS_C2H6_IND $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s C2H6 26/316 1 5 +0 CEDS_C2H6_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_WST $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 + +0 CEDS_C3H8_AGR $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_agr 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_ENE $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s C3H8 26/315 1 5 +0 CEDS_C3H8_IND $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s C3H8 26/316 1 5 +0 CEDS_C3H8_TRA $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_tra 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_RCO $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_rco 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_SLV $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_slv 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_WST $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_wst 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 + +0 CEDS_C4H10_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s ALK4 26/315 1 5 +0 CEDS_C4H10_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s ALK4 26/316 1 5 +0 CEDS_C4H10_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CEDS_C5H12_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s ALK4 26/315 1 5 +0 CEDS_C5H12_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s ALK4 26/316 1 5 +0 CEDS_C5H12_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CEDS_C6H14_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s ALK4 26/315 1 5 +0 CEDS_C6H14_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s ALK4 26/316 1 5 +0 CEDS_C6H14_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CEDS_C2H4_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s C2H4 26/315 1 5 +0 CEDS_C2H4_IND $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s C2H4 26/316 1 5 +0 CEDS_C2H4_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_WST $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 + +0 CEDS_PRPE_AGR $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_agr 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_ENE $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s PRPE 26/315 1 5 +0 CEDS_PRPE_IND $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s PRPE 26/316 1 5 +0 CEDS_PRPE_TRA $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_tra 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_RCO $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_rco 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_SLV $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_slv 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_WST $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_wst 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 + +0 CEDS_C2H2_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s C2H2 26/315 1 5 +0 CEDS_C2H2_IND $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s C2H2 26/316 1 5 +0 CEDS_C2H2_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_WST $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 + +0 CEDS_BENZ_AGR $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_agr 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_ENE $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s BENZ 26/315 1 5 +0 CEDS_BENZ_IND $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s BENZ 26/316 1 5 +0 CEDS_BENZ_TRA $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_tra 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_RCO $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_rco 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_SLV $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_slv 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_WST $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_wst 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 + +0 CEDS_TOLU_AGR $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_agr 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_ENE $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s TOLU 26/315 1 5 +0 CEDS_TOLU_IND $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s TOLU 26/316 1 5 +0 CEDS_TOLU_TRA $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_tra 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_RCO $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_rco 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_SLV $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_slv 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_WST $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_wst 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 + +0 CEDS_XYLE_AGR $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_agr 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_ENE $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s XYLE 26/315 1 5 +0 CEDS_XYLE_IND $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s XYLE 26/316 1 5 +0 CEDS_XYLE_TRA $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_tra 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_RCO $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_rco 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_SLV $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_slv 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_WST $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_wst 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 + +0 CEDS_CH2O_AGR $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_agr 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_ENE $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s CH2O 26/315 1 5 +0 CEDS_CH2O_IND $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s CH2O 26/316 1 5 +0 CEDS_CH2O_TRA $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_tra 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_RCO $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_rco 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_SLV $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_slv 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_WST $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_wst 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 + +0 CEDS_ALD2_AGR $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_ENE $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s ALD2 26/315 1 5 +0 CEDS_ALD2_IND $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s ALD2 26/316 1 5 +0 CEDS_ALD2_TRA $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_RCO $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_SLV $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_WST $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 + +0 CEDS_MEK_AGR $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_agr 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_ENE $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s MEK 26/315 1 5 +0 CEDS_MEK_IND $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s MEK 26/316 1 5 +0 CEDS_MEK_TRA $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_tra 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_RCO $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_rco 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_SLV $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_slv 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_WST $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_wst 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 + +0 CEDS_HCOOH_AGR $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_agr 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_ENE $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_ene 1750-2019/1-12/1/0 C xyL* kg/m2/s HCOOH 26/315 1 5 +0 CEDS_HCOOH_IND $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_ind 1750-2019/1-12/1/0 C xyL* kg/m2/s HCOOH 26/316 1 5 +0 CEDS_HCOOH_TRA $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_tra 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_RCO $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_rco 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_SLV $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_slv 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_WST $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_wst 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +)))CEDSv2 + +#============================================================================== +# --- CEDS GBD-MAPS --- +# +# NOTES: +# -- Reference: McDuffie et al. (2020, Earth System Science Data) +# -- Anthropogenic source sectors: agriculture, energy, industry, road transport, +# non-road/off-road transport, residential, commercial, other energy use, +# solvents, waste, international shipping +# -- Fuel categories: the combustion of total coal, solid biofuel, liquid oil +# and gas, and all remaining sources +# **To use, enable CEDS_byFuelType and CEDS_SHIP_byFuelType** +#============================================================================== +(((CEDS_GBDMAPS +>>>include $ROOT/CEDS/v2020-08/HEMCO_Config.CEDS_GBDMAPS.rc +)))CEDS_GBDMAPS + +(((CEDS_GBDMAPS_byFuelType +(((.not.CEDS_GBDMAPS +(((.not.CEDSv2 +>>>include $ROOT/CEDS/v2020-08/HEMCO_Config.CEDS_GBDMAPS_byFuelType.rc +))).not.CEDSv2 +))).not.CEDS_GBDMAPS +)))CEDS_GBDMAPS_byFuelType + +#============================================================================== +# --- CMIP6_SFC_LAND_ANTHRO --- +# CEDS (historical) or Shared Socioeconomic Pathways (future), consistent with +# the CMIP6 simulation experimental design. +# +# Make sure that the desired $GCAPSCENARIO is set above in SECTION SETTINGS +# +#============================================================================== +(((CMIP6_SFC_LAND_ANTHRO +0 CMIP6_NO_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_agr 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CMIP6_NO_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_ene 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CMIP6_NO_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_ind 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CMIP6_NO_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_tra 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CMIP6_NO_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_rco 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CMIP6_NO_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_slv 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 1 5 +0 CMIP6_NO_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_wst 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 1 5 + +0 CMIP6_CO_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_agr 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CMIP6_SOAP_AGR - - - - - - SOAP 26/280 1 5 +0 CMIP6_CO_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_ene 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CMIP6_SOAP_ENE - - - - - - SOAP 26/280 1 5 +0 CMIP6_CO_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_ind 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CMIP6_SOAP_IND - - - - - - SOAP 26/280 1 5 +0 CMIP6_CO_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_tra 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CMIP6_SOAP_TRA - - - - - - SOAP 26/280 1 5 +0 CMIP6_CO_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_rco 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CMIP6_SOAP_RCO - - - - - - SOAP 26/280 1 5 +0 CMIP6_CO_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_slv 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CMIP6_SOAP_SLV - - - - - - SOAP 26/280 1 5 +0 CMIP6_CO_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_wst 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 1 5 +0 CMIP6_SOAP_WST - - - - - - SOAP 26/280 1 5 + +0 CMIP6_SO2_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_agr 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CMIP6_SO4_AGR - - - - - - SO4 63 1 5 +0 CMIP6_pFe_AGR - - - - - - pFe 66 1 5 +0 CMIP6_SO2_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_ene 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CMIP6_SO4_ENE - - - - - - SO4 63 1 5 +0 CMIP6_pFe_ENE - - - - - - pFe 66 1 5 +0 CMIP6_SO2_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_ind 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CMIP6_SO4_IND - - - - - - SO4 63 1 5 +0 CMIP6_pFe_IND - - - - - - pFe 66 1 5 +0 CMIP6_SO2_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_tra 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CMIP6_SO4_TRA - - - - - - SO4 63 1 5 +0 CMIP6_pFe_TRA - - - - - - pFe 66 1 5 +0 CMIP6_SO2_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_rco 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CMIP6_SO4_RCO - - - - - - SO4 63 1 5 +0 CMIP6_pFe_RCO - - - - - - pFe 66 1 5 +0 CMIP6_SO2_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_slv 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CMIP6_SO4_SLV - - - - - - SO4 63 1 5 +0 CMIP6_pFe_SLV - - - - - - pFe 66 1 5 +0 CMIP6_SO2_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_wst 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 1 5 +0 CMIP6_SO4_WST - - - - - - SO4 63 1 5 +0 CMIP6_pFe_WST - - - - - - pFe 66 1 5 + +0 CMIP6_NH3_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_agr 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CMIP6_NH3_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_ene 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CMIP6_NH3_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_ind 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CMIP6_NH3_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_tra 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CMIP6_NH3_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_rco 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CMIP6_NH3_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_slv 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 1 5 +0 CMIP6_NH3_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_wst 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 1 5 + +0 CMIP6_BCPI_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_agr 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CMIP6_BCPO_AGR - - - - - - BCPO 71 1 5 +0 CMIP6_BCPI_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_ene 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CMIP6_BCPO_ENE - - - - - - BCPO 71 1 5 +0 CMIP6_BCPI_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_ind 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CMIP6_BCPO_IND - - - - - - BCPO 71 1 5 +0 CMIP6_BCPI_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_tra 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CMIP6_BCPO_TRA - - - - - - BCPO 71 1 5 +0 CMIP6_BCPI_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_rco 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CMIP6_BCPO_RCO - - - - - - BCPO 71 1 5 +0 CMIP6_BCPI_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_slv 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CMIP6_BCPO_SLV - - - - - - BCPO 71 1 5 +0 CMIP6_BCPI_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_wst 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 1 5 +0 CMIP6_BCPO_WST - - - - - - BCPO 71 1 5 + +0 CMIP6_OCPI_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_agr 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CMIP6_OCPO_AGR - - - - - - OCPO 73 1 5 +0 CMIP6_POG1_AGR - - - - - - POG1 74/76 1 5 +0 CMIP6_POG2_AGR - - - - - - POG2 74/77 1 5 +0 CMIP6_OCPI_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_ene 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CMIP6_OCPO_ENE - - - - - - OCPO 73 1 5 +0 CMIP6_POG1_ENE - - - - - - POG1 74/76 1 5 +0 CMIP6_POG2_ENE - - - - - - POG2 74/77 1 5 +0 CMIP6_OCPI_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_ind 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CMIP6_OCPO_IND - - - - - - OCPO 73 1 5 +0 CMIP6_POG1_IND - - - - - - POG1 74/76 1 5 +0 CMIP6_POG2_IND - - - - - - POG2 74/77 1 5 +0 CMIP6_OCPI_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_tra 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CMIP6_OCPO_TRA - - - - - - OCPO 73 1 5 +0 CMIP6_POG1_TRA - - - - - - POG1 74/76 1 5 +0 CMIP6_POG2_TRA - - - - - - POG2 74/77 1 5 +0 CMIP6_OCPI_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_rco 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CMIP6_OCPO_RCO - - - - - - OCPO 73 1 5 +0 CMIP6_POG1_RCO - - - - - - POG1 74/76 1 5 +0 CMIP6_POG2_RCO - - - - - - POG2 74/77 1 5 +0 CMIP6_OCPI_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_slv 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CMIP6_OCPO_SLV - - - - - - OCPO 73 1 5 +0 CMIP6_POG1_SLV - - - - - - POG1 74/76 1 5 +0 CMIP6_POG2_SLV - - - - - - POG2 74/77 1 5 +0 CMIP6_OCPI_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_wst 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 1 5 +0 CMIP6_OCPO_WST - - - - - - OCPO 73 1 5 +0 CMIP6_POG1_WST - - - - - - POG1 74/76 1 5 +0 CMIP6_POG2_WST - - - - - - POG2 74/77 1 5 + +# Comment out CO2 for fullchem simulations: CO2 not advected +#0 CMIP6_CO2_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO2_agr 1750-2100/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CMIP6_CO2_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO2_ene 1750-2100/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CMIP6_CO2_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO2_ind 1750-2100/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CMIP6_CO2_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO2_tra 1750-2100/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CMIP6_CO2_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO2_rco 1750-2100/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CMIP6_CO2_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO2_slv 1750-2100/1-12/1/0 C xy kg/m2/s CO2 - 1 5 +#0 CMIP6_CO2_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO2_wst 1750-2100/1-12/1/0 C xy kg/m2/s CO2 - 1 5 + +# Comment out CH4 for fullchem simulations: do not use CH4 emissions +# CMIP6 CH4 emissions are only available for 1970-2014 +#0 CMIP6_CH4_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH4_agr 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CMIP6_CH4_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH4_ene 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CMIP6_CH4_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH4_ind 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CMIP6_CH4_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH4_tra 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CMIP6_CH4_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH4_rco 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CMIP6_CH4_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH4_slv 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 +#0 CMIP6_CH4_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH4_wst 1970-2014/1-12/1/0 C xy kg/m2/s CH4 - 1 5 + +# NOTE: EOH files in CMIP6/v2021-01 are actually VOC1 (total alchohols) and are split into MOH, EOH, ROH here +0 CMIP6_MOH_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_agr 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CMIP6_EOH_AGR - - - - - - EOH 26/91 1 5 +0 CMIP6_ROH_AGR - - - - - - ROH 26/92 1 5 +0 CMIP6_MOH_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_ene 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CMIP6_EOH_ENE - - - - - - EOH 26/91 1 5 +0 CMIP6_ROH_ENE - - - - - - ROH 26/92 1 5 +0 CMIP6_MOH_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_ind 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CMIP6_EOH_IND - - - - - - EOH 26/91 1 5 +0 CMIP6_ROH_IND - - - - - - ROH 26/92 1 5 +0 CMIP6_MOH_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_tra 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CMIP6_EOH_TRA - - - - - - EOH 26/91 1 5 +0 CMIP6_ROH_TRA - - - - - - ROH 26/92 1 5 +0 CMIP6_MOH_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_rco 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CMIP6_EOH_RCO - - - - - - EOH 26/91 1 5 +0 CMIP6_ROH_RCO - - - - - - ROH 26/92 1 5 +0 CMIP6_MOH_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_slv 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CMIP6_EOH_SLV - - - - - - EOH 26/91 1 5 +0 CMIP6_ROH_SLV - - - - - - ROH 26/92 1 5 +0 CMIP6_MOH_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_wst 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CMIP6_EOH_WST - - - - - - EOH 26/91 1 5 +0 CMIP6_ROH_WST - - - - - - ROH 26/92 1 5 + +0 CMIP6_C2H6_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_agr 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CMIP6_C2H6_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_ene 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CMIP6_C2H6_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_ind 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CMIP6_C2H6_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_tra 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CMIP6_C2H6_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_rco 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CMIP6_C2H6_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_slv 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CMIP6_C2H6_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_wst 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 + +0 CMIP6_C3H8_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_agr 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CMIP6_C3H8_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_ene 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CMIP6_C3H8_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_ind 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CMIP6_C3H8_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_tra 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CMIP6_C3H8_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_rco 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CMIP6_C3H8_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_slv 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CMIP6_C3H8_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_wst 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 + +0 CMIP6_C4H10_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_agr 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C4H10_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_ene 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C4H10_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_ind 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C4H10_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_tra 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C4H10_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_rco 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C4H10_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_slv 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C4H10_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_wst 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CMIP6_C5H12_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_agr 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C5H12_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_ene 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C5H12_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_ind 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C5H12_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_tra 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C5H12_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_rco 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C5H12_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_slv 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C5H12_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_wst 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CMIP6_C6H14_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_agr 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C6H14_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_ene 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C6H14_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_ind 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C6H14_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_tra 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C6H14_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_rco 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C6H14_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_slv 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CMIP6_C6H14_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_wst 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CMIP6_C2H4_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_agr 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CMIP6_C2H4_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_ene 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CMIP6_C2H4_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_ind 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CMIP6_C2H4_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_tra 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CMIP6_C2H4_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_rco 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CMIP6_C2H4_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_slv 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CMIP6_C2H4_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_wst 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 + +0 CMIP6_PRPE_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_agr 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CMIP6_PRPE_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_ene 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CMIP6_PRPE_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_ind 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CMIP6_PRPE_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_tra 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CMIP6_PRPE_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_rco 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CMIP6_PRPE_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_slv 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CMIP6_PRPE_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_wst 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 + +0 CMIP6_C2H2_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_agr 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CMIP6_C2H2_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_ene 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CMIP6_C2H2_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_ind 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CMIP6_C2H2_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_tra 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CMIP6_C2H2_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_rco 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CMIP6_C2H2_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_slv 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CMIP6_C2H2_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_wst 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 + +0 CMIP6_BENZ_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_agr 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CMIP6_BENZ_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_ene 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CMIP6_BENZ_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_ind 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CMIP6_BENZ_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_tra 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CMIP6_BENZ_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_rco 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CMIP6_BENZ_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_slv 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CMIP6_BENZ_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_wst 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 + +0 CMIP6_TOLU_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_agr 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CMIP6_TOLU_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_ene 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CMIP6_TOLU_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_ind 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CMIP6_TOLU_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_tra 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CMIP6_TOLU_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_rco 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CMIP6_TOLU_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_slv 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CMIP6_TOLU_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_wst 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 + +0 CMIP6_XYLE_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_agr 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CMIP6_XYLE_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_ene 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CMIP6_XYLE_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_ind 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CMIP6_XYLE_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_tra 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CMIP6_XYLE_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_rco 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CMIP6_XYLE_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_slv 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CMIP6_XYLE_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_wst 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 + +0 CMIP6_CH2O_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_agr 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CMIP6_CH2O_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_ene 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CMIP6_CH2O_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_ind 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CMIP6_CH2O_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_tra 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CMIP6_CH2O_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_rco 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CMIP6_CH2O_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_slv 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CMIP6_CH2O_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_wst 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 + +0 CMIP6_ALD2_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_agr 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CMIP6_ALD2_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_ene 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CMIP6_ALD2_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_ind 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CMIP6_ALD2_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_tra 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CMIP6_ALD2_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_rco 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CMIP6_ALD2_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_slv 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CMIP6_ALD2_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_wst 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 + +0 CMIP6_MEK_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_agr 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CMIP6_MEK_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_ene 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CMIP6_MEK_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_ind 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CMIP6_MEK_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_tra 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CMIP6_MEK_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_rco 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CMIP6_MEK_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_slv 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CMIP6_MEK_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_wst 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 1 5 + +0 CMIP6_HCOOH_AGR $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_agr 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CMIP6_HCOOH_ENE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_ene 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CMIP6_HCOOH_IND $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_ind 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CMIP6_HCOOH_TRA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_tra 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CMIP6_HCOOH_RCO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_rco 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CMIP6_HCOOH_SLV $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_slv 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CMIP6_HCOOH_WST $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_wst 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +)))CMIP6_SFC_LAND_ANTHRO + +#============================================================================== +# CEDS (historical) or Shared Socioeconomic Pathways (future) aircraft +# emissions, consistent with the CMIP6 simulation experimental design +# +# Make sure that the desired $GCAPSCENARIO is set above in SECTION SETTINGS +# +#============================================================================== +(((CMIP6_AIRCRAFT +0 CMIP6_AIR_NO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY_AIR.$GCAP2VERTRESL.nc4 NO_air 1750-2100/1-12/1/0 C xyz kg/m2/s NO - 20 1 +0 CMIP6_AIR_CO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY_AIR.$GCAP2VERTRESL.nc4 CO_air 1750-2100/1-12/1/0 C xyz kg/m2/s CO - 20 1 +0 CMIP6_AIR_SOAP - - - - - - SOAP 280 20 1 +0 CMIP6_AIR_SO2 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY_AIR.$GCAP2VERTRESL.nc4 SO2_air 1750-2100/1-12/1/0 C xyz kg/m2/s SO2 - 20 1 +0 CMIP6_AIR_SO4 - - - - - - SO4 63 20 1 +0 CMIP6_AIR_pFe - - - - - - pFe 66 20 1 +0 CMIP6_AIR_ACET - - - - - - ACET 601 20 1 +0 CMIP6_AIR_ALD2 - - - - - - ALD2 602 20 1 +0 CMIP6_AIR_ALK4 - - - - - - ALK4 603 20 1 +0 CMIP6_AIR_C2H6 - - - - - - C2H6 604 20 1 +0 CMIP6_AIR_C3H8 - - - - - - C3H8 605 20 1 +0 CMIP6_AIR_CH2O - - - - - - CH2O 606 20 1 +0 CMIP6_AIR_PRPE - - - - - - PRPE 607 20 1 +0 CMIP6_AIR_MACR - - - - - - MACR 608 20 1 +0 CMIP6_AIR_RCHO - - - - - - RCHO 609 20 1 +0 CMIP6_AIR_NH3 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY_AIR.$GCAP2VERTRESL.nc4 NH3_air 1750-2100/1-12/1/0 C xyz kg/m2/s NH3 - 20 1 +# Assume all BC/OC is BCPI/OCPI +0 CMIP6_AIR_BCPI $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY_AIR.$GCAP2VERTRESL.nc4 BC_air 1750-2100/1-12/1/0 C xyz kg/m2/s BCPI - 20 1 +0 CMIP6_AIR_OCPI $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY_AIR.$GCAP2VERTRESL.nc4 OC_air 1750-2100/1-12/1/0 C xyz kg/m2/s OCPI - 20 1 +0 CMIP6_AIR_POG1 - - - - - - POG1 74/76 20 1 +0 CMIP6_AIR_POG2 - - - - - - POG2 74/77 20 1 + +)))CMIP6_AIRCRAFT + +#============================================================================== +# --- EDGAR v4.3 --- +# +# %%% This is an optional inventory. You may select either CEDS, EDGAR, +# or HTAPv3 for the global base emissions %%% +# +# The following emissions are not included in EDGAR and will be added: +# * Wiedinmyer et al. (2014) global trash emissions +# * CEDS VOC emissions +# +# Aviation and shipping emissions from EDGAR are not included here. +# We also do not include the following sources: +# - Soil emissions of NOx (SOL). These emissions are calculated via the +# SoilNOx extension. +# - Open biomass burning (AWB). These emissions are obtained from +# GFED, QFED, FINN, or GFAS. +#============================================================================== +(((EDGARv43 +0 EDGAR_BCPI_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.POW.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1201/70 1 2 +0 EDGAR_BCPO_POW - - - - - - BCPO 1201/71 1 2 +0 EDGAR_BCPI_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.ENG.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1202/70 1 2 +0 EDGAR_BCPO_ENG - - - - - - BCPO 1202/71 1 2 +0 EDGAR_BCPI_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.IND.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1203/70 1 2 +0 EDGAR_BCPO_IND - - - - - - BCPO 1203/71 1 2 +0 EDGAR_BCPI_TRO $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.TRO.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1204/70 1 2 +0 EDGAR_BCPO_TRO - - - - - - BCPO 1204/71 1 2 +0 EDGAR_BCPI_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.TNG.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1205/70 1 2 +0 EDGAR_BCPO_TNG - - - - - - BCPO 1205/71 1 2 +0 EDGAR_BCPI_RCO $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.RCO.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1206/70 1 2 +0 EDGAR_BCPO_RCO - - - - - - BCPO 1206/71 1 2 +0 EDGAR_BCPI_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.PPA.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1207/70 1 2 +0 EDGAR_BCPO_PPA - - - - - - BCPO 1207/71 1 2 +#0 EDGAR_BCPI_AWB $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.AWB.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1209/70 1 2 +#0 EDGAR_BCPO_AWB - - - - - - BCPO 1209/71 1 2 +0 EDGAR_BCPI_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.SWD.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1211/70 1 2 +0 EDGAR_BCPO_SWD - - - - - - BCPO 1211/71 1 2 +0 EDGAR_BCPI_FFF $ROOT/EDGARv43/v2016-11/EDGAR_v43.BC.FFF.0.1x0.1.nc emi_bc 1970-2010/1/1/0 C xy kg/m2/s BCPI 1212/70 1 2 +0 EDGAR_BCPO_FFF - - - - - - BCPO 1212/71 1 2 +0 EDGAR_CO_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.POW.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1201/26/52 1 2 +0 EDGAR_SOAP_POW - - - - - - SOAP 1201/26/52/280 1 2 +0 EDGAR_CO_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.ENG.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1202/26/52 1 2 +0 EDGAR_SOAP_ENG - - - - - - SOAP 1202/26/52/280 1 2 +0 EDGAR_CO_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.IND.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1203/26/52 1 2 +0 EDGAR_SOAP_IND - - - - - - SOAP 1203/26/52/280 1 2 +0 EDGAR_CO_TRO $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.TRO.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1204/26/52 1 2 +0 EDGAR_SOAP_TRO - - - - - - SOAP 1204/26/52/280 1 2 +0 EDGAR_CO_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.TNG.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1205/26/52 1 2 +0 EDGAR_SOAP_TNG - - - - - - SOAP 1205/26/52/280 1 2 +0 EDGAR_CO_RCO $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.RCO.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1206/26/52 1 2 +0 EDGAR_SOAP_RCO - - - - - - SOAP 1206/26/52/280 1 2 +0 EDGAR_CO_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.PPA.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1207/26/52 1 2 +0 EDGAR_SOAP_PPA - - - - - - SOAP 1207/26/52/280 1 2 +#0 EDGAR_CO_AWB $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.AWB.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1209/26/52 1 2 +#0 EDGAR_SOAP_AWB - - - - - - SOAP 1209/26/52/280 1 2 +0 EDGAR_CO_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.SWD.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1211/26/52 1 2 +0 EDGAR_SOAP_SWD - - - - - - SOAP 1211/26/52/280 1 2 +0 EDGAR_CO_FFF $ROOT/EDGARv43/v2016-11/EDGAR_v43.CO.FFF.0.1x0.1.nc emi_co 1970-2010/1/1/0 C xy kg/m2/s CO 1212/26/52 1 2 +0 EDGAR_SOAP_FFF - - - - - - SOAP 1212/26/52/280 1 2 +0 EDGAR_NH3_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.POW.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1201 1 2 +0 EDGAR_NH3_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.ENG.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1202 1 2 +0 EDGAR_NH3_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.IND.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1203 1 2 +0 EDGAR_NH3_TRO $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.TRO.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1204 1 2 +0 EDGAR_NH3_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.TNG.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1205 1 2 +0 EDGAR_NH3_RCO $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.RCO.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1206 1 2 +0 EDGAR_NH3_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.PPA.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1207 1 2 +0 EDGAR_NH3_AGR $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.AGR.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1208 1 2 +#0 EDGAR_NH3_AWB $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.AWB.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1209 1 2 +0 EDGAR_NH3_SOL $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.SOL.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1210 1 2 +0 EDGAR_NH3_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.NH3.SWD.0.1x0.1.nc emi_nh3 1970-2010/1/1/0 C xy kg/m2/s NH3 1211 1 2 +0 EDGAR_NO_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.POW.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1201/25/115 1 2 +0 EDGAR_NO_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.ENG.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1202/25/115 1 2 +0 EDGAR_NO_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.IND.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1203/25/115 1 2 +0 EDGAR_NO_TRO $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.TRO.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1204/25/115 1 2 +0 EDGAR_NO_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.TNG.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1205/25/115 1 2 +0 EDGAR_NO_RCO $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.RCO.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1206/25/115 1 2 +0 EDGAR_NO_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.PPA.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1207/25/115 1 2 +0 EDGAR_NO_AGR $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.AGR.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1208/25/115 1 2 +#0 EDGAR_NO_AWB $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.AWB.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1209/25/115 1 2 +#0 EDGAR_NO_SOL $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.SOL.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1210/25/115 1 2 +0 EDGAR_NO_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.SWD.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1211/25/115 1 2 +0 EDGAR_NO_FFF $ROOT/EDGARv43/v2016-11/EDGAR_v43.NOx.FFF.0.1x0.1.nc emi_nox 1970-2010/1/1/0 C xy kg/m2/s NO 1212/25/115 1 2 +0 EDGAR_OCPI_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.POW.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1201/72 1 2 +0 EDGAR_OCPO_POW - - - - - - OCPO 1201/73 1 2 +0 EDGAR_POG1_POW - - - - - - POG1 1201/74/76 1 2 +0 EDGAR_POG2_POW - - - - - - POG2 1201/74/77 1 2 +0 EDGAR_OCPI_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.ENG.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1202/72 1 2 +0 EDGAR_OCPO_ENG - - - - - - OCPO 1202/73 1 2 +0 EDGAR_POG1_ENG - - - - - - POG1 1202/74/76 1 2 +0 EDGAR_POG2_ENG - - - - - - POG2 1202/74/77 1 2 +0 EDGAR_OCPI_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.IND.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1203/72 1 2 +0 EDGAR_OCPO_IND - - - - - - OCPO 1203/73 1 2 +0 EDGAR_POG1_IND - - - - - - POG1 1203/74/76 1 2 +0 EDGAR_POG2_IND - - - - - - POG2 1203/74/77 1 2 +0 EDGAR_OCPI_TRO $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.TRO.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1204/72 1 2 +0 EDGAR_OCPO_TRO - - - - - - OCPO 1204/73 1 2 +0 EDGAR_POG1_TRO - - - - - - POG1 1204/74/76 1 2 +0 EDGAR_POG2_TRO - - - - - - POG2 1204/74/77 1 2 +0 EDGAR_OCPI_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.TNG.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1205/72 1 2 +0 EDGAR_OCPO_TNG - - - - - - OCPO 1205/73 1 2 +0 EDGAR_POG1_TNG - - - - - - POG1 1205/74/76 1 2 +0 EDGAR_POG2_TNG - - - - - - POG2 1205/74/77 1 2 +0 EDGAR_OCPI_RCO $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.RCO.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1206/72 1 2 +0 EDGAR_OCPO_RCO - - - - - - OCPO 1206/73 1 2 +0 EDGAR_POG1_RCO - - - - - - POG1 1206/74/76 1 2 +0 EDGAR_POG2_RCO - - - - - - POG2 1206/74/77 1 2 +#0 EDGAR_OCPI_AWB $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.AWB.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1209/72 1 2 +#0 EDGAR_OCPO_AWB - - - - - - OCPO 1209/73 1 2 +#0 EDGAR_POG1_AWB - - - - - - POG1 1209/74/76 1 2 +#0 EDGAR_POG2_AWB - - - - - - POG2 1209/74/77 1 2 +0 EDGAR_OCPI_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.SWD.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1211/72 1 2 +0 EDGAR_OCPO_SWD - - - - - - OCPO 1211/73 1 2 +0 EDGAR_POG1_SWD - - - - - - POG1 1211/74/76 1 2 +0 EDGAR_POG2_SWD - - - - - - POG2 1211/74/77 1 2 +0 EDGAR_OCPI_FFF $ROOT/EDGARv43/v2016-11/EDGAR_v43.OC.FFF.0.1x0.1.nc emi_oc 1970-2010/1/1/0 C xy kg/m2/s OCPI 1212/72 1 2 +0 EDGAR_OCPO_FFF - - - - - - OCPO 1212/73 1 2 +0 EDGAR_POG1_FFF - - - - - - POG1 1212/74/76 1 2 +0 EDGAR_POG2_FFF - - - - - - POG2 1212/74/77 1 2 +0 EDGAR_SO2_POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.POW.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1201 1 2 +0 EDGAR_SO4_POW - - - - - - SO4 1201/63 1 2 +0 EDGAR_pFe_POW - - - - - - pFe 1201/66 1 2 +0 EDGAR_SO2_ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.ENG.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1202 1 2 +0 EDGAR_SO4_ENG - - - - - - SO4 1202/63 1 2 +0 EDGAR_pFe_ENG - - - - - - pFe 1202/66 1 2 +0 EDGAR_SO2_IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.IND.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1203 1 2 +0 EDGAR_SO4_IND - - - - - - SO4 1203/63 1 2 +0 EDGAR_pFe_IND - - - - - - pFe 1203/66 1 2 +0 EDGAR_SO2_TRO $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.TRO.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1204 1 2 +0 EDGAR_SO4_TRO - - - - - - SO4 1204/63 1 2 +0 EDGAR_pFe_TRO - - - - - - pFe 1204/66 1 2 +0 EDGAR_SO2_TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.TNG.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1205 1 2 +0 EDGAR_SO4_TNG - - - - - - SO4 1205/63 1 2 +0 EDGAR_pFe_TNG - - - - - - pFe 1205/66 1 2 +0 EDGAR_SO2_RCO $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.RCO.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1206 1 2 +0 EDGAR_SO4_RCO - - - - - - SO4 1206/63 1 2 +0 EDGAR_pFe_RCO - - - - - - pFe 1206/66 1 2 +0 EDGAR_SO2_PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.PPA.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1207 1 2 +0 EDGAR_SO4_PPA - - - - - - SO4 1207/63 1 2 +0 EDGAR_pFe_PPA - - - - - - pFe 1207/66 1 2 +#0 EDGAR_SO2_AWB $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.AWB.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1209 1 2 +#0 EDGAR_SO4_AWB - - - - - - SO4 1209/63 1 2 +#0 EDGAR_pFe_AWB - - - - - - pFe 1209/66 1 2 +0 EDGAR_SO2_SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.SWD.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1211 1 2 +0 EDGAR_SO4_SWD - - - - - - SO4 1211/63 1 2 +0 EDGAR_pFe_SWD - - - - - - pFe 1211/66 1 2 +0 EDGAR_SO2_FFF $ROOT/EDGARv43/v2016-11/EDGAR_v43.SO2.FFF.0.1x0.1.nc emi_so2 1970-2010/1/1/0 C xy kg/m2/s SO2 1212 1 2 +0 EDGAR_SO4_FFF - - - - - - SO4 1212/63 1 2 +0 EDGAR_pFe_FFF - - - - - - pFe 1212/66 1 2 + +#============================================================================== +# --- NAP ANTHROPOGENIC EMISSIONS: approximate from EDGAR BENZ --- +# +# NOTE: Although this data comes from EDGAR version 2, we are storing it +# in the EDGARv42 data path for convenience. +#============================================================================== +0 EDGAR_NAP $ROOT/EDGARv42/v2015-02/VOCv2/EDGAR2_1985_FF_IND.1x1geos.nc BENZ 1985/1/1/0 C xy kgC/m2/s NAP 80/81/82/43 1 2 + +#============================================================================== +# --- Wiedinmyer et al. (2014) global trash emissions to be added to EDGAR --- +#============================================================================== +0 TRASH_CO $ROOT/TrashEmis/v2015-03/TrashBurn_v2_generic.01x01.nc CO 2008/1/1/0 C xy kg/m2/s CO - 1 2 +0 TRASH_SOAP - - - - - - SOAP 280 1 2 +0 TRASH_NO $ROOT/TrashEmis/v2015-03/TrashBurn_v2_generic.01x01.nc NO 2008/1/1/0 C xy kg/m2/s NO - 1 2 +0 TRASH_SO2 $ROOT/TrashEmis/v2015-03/TrashBurn_v2_generic.01x01.nc SO2 2008/1/1/0 C xy kg/m2/s SO2 78 1 2 +0 TRASH_SO4 - - - - - - SO4 63 1 2 +0 TRASH_pFe - - - - - - pFe 78/66 1 2 +0 TRASH_BCPI $ROOT/TrashEmis/v2015-03/TrashBurn_v2_generic.01x01.nc BC 2008/1/1/0 C xy kg/m2/s BCPI 70 1 2 +0 TRASH_BCPO - - - - - - BCPO 71 1 2 +0 TRASH_OCPI $ROOT/TrashEmis/v2015-03/TrashBurn_v2_generic.01x01.nc OC 2008/1/1/0 C xy kg/m2/s OCPI 72 1 2 +0 TRASH_OCPO - - - - - - OCPO 73 1 2 +0 TRASH_POG1 - - - - - - POG1 74/76 1 2 +0 TRASH_POG2 - - - - - - POG2 74/77 1 2 +0 TRASH_NH3 $ROOT/TrashEmis/v2015-03/TrashBurn_v2_generic.01x01.nc NH3 2008/1/1/0 C xy kg/m2/s NH3 - 1 2 + +#============================================================================== +# --- CEDS VOC emissions to be added to EDGAR --- +#============================================================================== +0 CEDS_MOH_AGR $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_agr 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_AGR - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_AGR - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_ENE $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_ene 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_ENE - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_ENE - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_IND $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_ind 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_IND - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_IND - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_TRA $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_tra 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_TRA - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_TRA - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_RCO $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_rco 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_RCO - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_RCO - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_SLV $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_slv 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_SLV - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_SLV - - - - - - ROH 26/92 1 5 +0 CEDS_MOH_WST $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_wst 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 5 +0 CEDS_EOH_WST - - - - - - EOH 26/91 1 5 +0 CEDS_ROH_WST - - - - - - ROH 26/92 1 5 + +0 CEDS_C2H6_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_ene 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_IND $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_ind 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 +0 CEDS_C2H6_WST $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 5 + +0 CEDS_C3H8_AGR $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_agr 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_ENE $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_ene 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_IND $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_ind 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_TRA $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_tra 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_RCO $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_rco 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_SLV $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_slv 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 +0 CEDS_C3H8_WST $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_wst 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 5 + +0 CEDS_C4H10_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C4H10_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CEDS_C5H12_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C5H12_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CEDS_C6H14_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 +0 CEDS_C6H14_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 5 + +0 CEDS_C2H4_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_ene 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_IND $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_ind 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 +0 CEDS_C2H4_WST $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 5 + +0 CEDS_PRPE_AGR $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_agr 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_ENE $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_ene 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_IND $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_ind 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_TRA $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_tra 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_RCO $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_rco 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_SLV $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_slv 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 +0 CEDS_PRPE_WST $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_wst 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 5 + +0 CEDS_C2H2_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_ene 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_IND $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_ind 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 +0 CEDS_C2H2_WST $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 5 + +0 CEDS_BENZ_AGR $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_agr 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_ENE $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_ene 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_IND $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_ind 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_TRA $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_tra 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_RCO $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_rco 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_SLV $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_slv 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 +0 CEDS_BENZ_WST $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_wst 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 5 + +0 CEDS_TOLU_AGR $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_agr 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_ENE $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_ene 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_IND $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_ind 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_TRA $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_tra 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_RCO $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_rco 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_SLV $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_slv 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 +0 CEDS_TOLU_WST $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_wst 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 5 + +0 CEDS_XYLE_AGR $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_agr 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_ENE $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_ene 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_IND $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_ind 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_TRA $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_tra 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_RCO $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_rco 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_SLV $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_slv 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 +0 CEDS_XYLE_WST $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_wst 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 5 + +0 CEDS_CH2O_AGR $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_agr 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_ENE $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_ene 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_IND $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_ind 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_TRA $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_tra 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_RCO $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_rco 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_SLV $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_slv 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 +0 CEDS_CH2O_WST $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_wst 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 5 + +0 CEDS_ALD2_AGR $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_ENE $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_IND $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_TRA $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_RCO $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_SLV $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 +0 CEDS_ALD2_WST $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 5 + +0 CEDS_MEK_AGR $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_agr 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_ENE $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_ene 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_IND $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_ind 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_TRA $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_tra 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_RCO $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_rco 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_SLV $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_slv 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 +0 CEDS_MEK_WST $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_wst 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 5 + +0 CEDS_HCOOH_AGR $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_agr 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_ENE $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_ene 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_IND $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_ind 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_TRA $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_tra 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_RCO $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_rco 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_SLV $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_slv 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +0 CEDS_HCOOH_WST $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_wst 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 5 +)))EDGARv43 + +#============================================================================== +# --- HTAP v3 --- +# +# %%% This is an optional inventory. You may select either CEDS, EDGAR, +# or HTAPv3 for the global base emissions %%% +# +# ==> HTAPv3 ship emissions are listed in the ship emissions section below +#============================================================================== +(((HTAPv3 +0 HTAPv3_NO_AGR $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_AGR 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 1 4 +0 HTAPv3_NO_ENE $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_ENE 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 1 4 +0 HTAPv3_NO_IND $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_IND 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 1 4 +0 HTAPv3_NO_TRA $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_TRA 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 1 4 +0 HTAPv3_NO_RCO $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_RCO 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 1 4 +0 HTAPv3_NO_SLV $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_SLV 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 1 4 +0 HTAPv3_NO_WST $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_WST 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 1 4 +0 HTAPv3_CO_AGR $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_AGR 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 1 4 +0 HTAPv3_SOAP_AGR - - - - - - SOAP 26/280 1 4 +0 HTAPv3_CO_ENE $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_ENE 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 1 4 +0 HTAPv3_SOAP_ENE - - - - - - SOAP 26/280 1 4 +0 HTAPv3_CO_IND $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_IND 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 1 4 +0 HTAPv3_SOAP_IND - - - - - - SOAP 26/280 1 4 +0 HTAPv3_CO_TRA $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_TRA 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 1 4 +0 HTAPv3_SOAP_TRA - - - - - - SOAP 26/280 1 4 +0 HTAPv3_CO_RCO $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_RCO 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 1 4 +0 HTAPv3_SOAP_RCO - - - - - - SOAP 26/280 1 4 +0 HTAPv3_CO_SLV $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_SLV 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 1 4 +0 HTAPv3_SOAP_SLV - - - - - - SOAP 26/280 1 4 +0 HTAPv3_CO_WST $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_WST 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 1 4 +0 HTAPv3_SOAP_WST - - - - - - SOAP 26/280 1 4 +0 HTAPv3_SO2_AGR $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_AGR 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 1 4 +0 HTAPv3_SO4_AGR - - - - - - SO4 63 1 4 +0 HTAPv3_pFe_AGR - - - - - - pFe 66 1 4 +0 HTAPv3_SO2_ENE $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_ENE 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 1 4 +0 HTAPv3_SO4_ENE - - - - - - SO4 63 1 4 +0 HTAPv3_pFe_ENE - - - - - - pFe 66 1 4 +0 HTAPv3_SO2_IND $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_IND 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 1 4 +0 HTAPv3_SO4_IND - - - - - - SO4 63 1 4 +0 HTAPv3_pFe_IND - - - - - - pFe 66 1 4 +0 HTAPv3_SO2_TRA $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_TRA 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 1 4 +0 HTAPv3_SO4_TRA - - - - - - SO4 63 1 4 +0 HTAPv3_pFe_TRA - - - - - - pFe 66 1 4 +0 HTAPv3_SO2_RCO $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_RCO 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 1 4 +0 HTAPv3_SO4_RCO - - - - - - SO4 63 1 4 +0 HTAPv3_pFe_RCO - - - - - - pFe 66 1 4 +0 HTAPv3_SO2_SLV $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_SLV 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 1 4 +0 HTAPv3_SO4_SLV - - - - - - SO4 63 1 4 +0 HTAPv3_pFe_SLV - - - - - - pFe 66 1 4 +0 HTAPv3_SO2_WST $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_WST 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 1 4 +0 HTAPv3_SO4_WST - - - - - - SO4 63 1 4 +0 HTAPv3_pFe_WST - - - - - - pFe 66 1 4 +0 HTAPv3_NH3_AGR $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_AGR 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 1 4 +0 HTAPv3_NH3_ENE $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_ENE 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 1 4 +0 HTAPv3_NH3_IND $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_IND 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 1 4 +0 HTAPv3_NH3_TRA $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_TRA 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 1 4 +0 HTAPv3_NH3_RCO $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_RCO 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 1 4 +0 HTAPv3_NH3_SLV $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_SLV 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 1 4 +0 HTAPv3_NH3_WST $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_WST 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 1 4 +0 HTAPv3_BCPI_AGR $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_AGR 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 1 4 +0 HTAPv3_BCPO_AGR - - - - - - BCPO 71 1 4 +0 HTAPv3_BCPI_ENE $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_ENE 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 1 4 +0 HTAPv3_BCPO_ENE - - - - - - BCPO 71 1 4 +0 HTAPv3_BCPI_IND $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_IND 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 1 4 +0 HTAPv3_BCPO_IND - - - - - - BCPO 71 1 4 +0 HTAPv3_BCPI_TRA $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_TRA 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 1 4 +0 HTAPv3_BCPO_TRA - - - - - - BCPO 71 1 4 +0 HTAPv3_BCPI_RCO $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_RCO 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 1 4 +0 HTAPv3_BCPO_RCO - - - - - - BCPO 71 1 4 +0 HTAPv3_BCPI_SLV $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_SLV 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 1 4 +0 HTAPv3_BCPO_SLV - - - - - - BCPO 71 1 4 +0 HTAPv3_BCPI_WST $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_WST 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 1 4 +0 HTAPv3_BCPO_WST - - - - - - BCPO 71 1 4 +0 HTAPv3_OCPI_AGR $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_AGR 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 1 4 +0 HTAPv3_OCPO_AGR - - - - - - OCPO 73 1 4 +0 HTAPv3_POG1_AGR - - - - - - POG1 73/74/76 1 4 +0 HTAPv3_POG2_AGR - - - - - - POG2 73/74/77 1 4 +0 HTAPv3_OCPI_ENE $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_ENE 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 1 4 +0 HTAPv3_OCPO_ENE - - - - - - OCPO 73 1 4 +0 HTAPv3_POG1_ENE - - - - - - POG1 73/74/76 1 4 +0 HTAPv3_POG2_ENE - - - - - - POG2 73/74/77 1 4 +0 HTAPv3_OCPI_IND $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_IND 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 1 4 +0 HTAPv3_OCPO_IND - - - - - - OCPO 73 1 4 +0 HTAPv3_POG1_IND - - - - - - POG1 73/74/76 1 4 +0 HTAPv3_POG2_IND - - - - - - POG2 73/74/77 1 4 +0 HTAPv3_OCPI_TRA $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_TRA 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 1 4 +0 HTAPv3_OCPO_TRA - - - - - - OCPO 73 1 4 +0 HTAPv3_POG1_TRA - - - - - - POG1 73/74/76 1 4 +0 HTAPv3_POG2_TRA - - - - - - POG2 73/74/77 1 4 +0 HTAPv3_OCPI_RCO $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_RCO 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 1 4 +0 HTAPv3_OCPO_RCO - - - - - - OCPO 73 1 4 +0 HTAPv3_POG1_RCO - - - - - - POG1 73/74/76 1 4 +0 HTAPv3_POG2_RCO - - - - - - POG2 73/74/77 1 4 +0 HTAPv3_OCPI_SLV $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_SLV 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 1 4 +0 HTAPv3_OCPO_SLV - - - - - - OCPO 73 1 4 +0 HTAPv3_POG1_SLV - - - - - - POG1 73/74/76 1 4 +0 HTAPv3_POG2_SLV - - - - - - POG2 73/74/77 1 4 +0 HTAPv3_OCPI_WST $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_WST 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 1 4 +0 HTAPv3_OCPO_WST - - - - - - OCPO 73 1 4 +0 HTAPv3_POG1_WST - - - - - - POG1 73/74/76 1 4 +0 HTAPv3_POG2_WST - - - - - - POG2 73/74/77 1 4 +# +# Use CEDSv2 for species that are not in the HTAPv3 inventory +# NOTE: EOH files in CEDS/v2021-06 are actually VOC1 (total alchohols) and are split into MOH, EOH, ROH here +0 CEDS_MOH_AGR $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_agr 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 4 +0 CEDS_EOH_AGR - - - - - - EOH 26/91 1 4 +0 CEDS_ROH_AGR - - - - - - ROH 26/92 1 4 +0 CEDS_MOH_ENE $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_ene 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 4 +0 CEDS_EOH_ENE - - - - - - EOH 26/91 1 4 +0 CEDS_ROH_ENE - - - - - - ROH 26/92 1 4 +0 CEDS_MOH_IND $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_ind 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 4 +0 CEDS_EOH_IND - - - - - - EOH 26/91 1 4 +0 CEDS_ROH_IND - - - - - - ROH 26/92 1 4 +0 CEDS_MOH_TRA $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_tra 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 4 +0 CEDS_EOH_TRA - - - - - - EOH 26/91 1 4 +0 CEDS_ROH_TRA - - - - - - ROH 26/92 1 4 +0 CEDS_MOH_RCO $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_rco 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 4 +0 CEDS_EOH_RCO - - - - - - EOH 26/91 1 4 +0 CEDS_ROH_RCO - - - - - - ROH 26/92 1 4 +0 CEDS_MOH_SLV $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_slv 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 4 +0 CEDS_EOH_SLV - - - - - - EOH 26/91 1 4 +0 CEDS_ROH_SLV - - - - - - ROH 26/92 1 4 +0 CEDS_MOH_WST $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_wst 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 1 4 +0 CEDS_EOH_WST - - - - - - EOH 26/91 1 4 +0 CEDS_ROH_WST - - - - - - ROH 26/92 1 4 +0 CEDS_C2H6_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 4 +0 CEDS_C2H6_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_ene 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 4 +0 CEDS_C2H6_IND $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_ind 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 4 +0 CEDS_C2H6_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 4 +0 CEDS_C2H6_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 4 +0 CEDS_C2H6_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 4 +0 CEDS_C2H6_WST $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 1 4 +0 CEDS_C3H8_AGR $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_agr 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 4 +0 CEDS_C3H8_ENE $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_ene 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 4 +0 CEDS_C3H8_IND $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_ind 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 4 +0 CEDS_C3H8_TRA $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_tra 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 4 +0 CEDS_C3H8_RCO $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_rco 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 4 +0 CEDS_C3H8_SLV $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_slv 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 4 +0 CEDS_C3H8_WST $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_wst 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 1 4 +0 CEDS_C4H10_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C4H10_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C4H10_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C4H10_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C4H10_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C4H10_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C4H10_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C5H12_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C5H12_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C5H12_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C5H12_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C5H12_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C5H12_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C5H12_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C6H14_AGR $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C6H14_ENE $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C6H14_IND $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C6H14_TRA $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C6H14_RCO $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C6H14_SLV $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C6H14_WST $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 1 4 +0 CEDS_C2H4_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 4 +0 CEDS_C2H4_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_ene 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 4 +0 CEDS_C2H4_IND $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_ind 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 4 +0 CEDS_C2H4_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 4 +0 CEDS_C2H4_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 4 +0 CEDS_C2H4_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 4 +0 CEDS_C2H4_WST $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 1 4 +0 CEDS_PRPE_AGR $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_agr 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 4 +0 CEDS_PRPE_ENE $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_ene 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 4 +0 CEDS_PRPE_IND $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_ind 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 4 +0 CEDS_PRPE_TRA $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_tra 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 4 +0 CEDS_PRPE_RCO $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_rco 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 4 +0 CEDS_PRPE_SLV $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_slv 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 4 +0 CEDS_PRPE_WST $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_wst 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 1 4 +0 CEDS_C2H2_AGR $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_agr 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 4 +0 CEDS_C2H2_ENE $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_ene 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 4 +0 CEDS_C2H2_IND $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_ind 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 4 +0 CEDS_C2H2_TRA $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_tra 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 4 +0 CEDS_C2H2_RCO $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_rco 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 4 +0 CEDS_C2H2_SLV $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_slv 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 4 +0 CEDS_C2H2_WST $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_wst 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 1 4 +0 CEDS_BENZ_AGR $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_agr 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 4 +0 CEDS_BENZ_ENE $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_ene 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 4 +0 CEDS_BENZ_IND $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_ind 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 4 +0 CEDS_BENZ_TRA $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_tra 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 4 +0 CEDS_BENZ_RCO $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_rco 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 4 +0 CEDS_BENZ_SLV $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_slv 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 4 +0 CEDS_BENZ_WST $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_wst 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 1 4 +0 CEDS_TOLU_AGR $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_agr 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 4 +0 CEDS_TOLU_ENE $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_ene 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 4 +0 CEDS_TOLU_IND $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_ind 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 4 +0 CEDS_TOLU_TRA $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_tra 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 4 +0 CEDS_TOLU_RCO $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_rco 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 4 +0 CEDS_TOLU_SLV $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_slv 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 4 +0 CEDS_TOLU_WST $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_wst 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 1 4 +0 CEDS_XYLE_AGR $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_agr 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 4 +0 CEDS_XYLE_ENE $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_ene 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 4 +0 CEDS_XYLE_IND $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_ind 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 4 +0 CEDS_XYLE_TRA $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_tra 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 4 +0 CEDS_XYLE_RCO $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_rco 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 4 +0 CEDS_XYLE_SLV $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_slv 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 4 +0 CEDS_XYLE_WST $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_wst 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 1 4 +0 CEDS_CH2O_AGR $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_agr 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 4 +0 CEDS_CH2O_ENE $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_ene 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 4 +0 CEDS_CH2O_IND $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_ind 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 4 +0 CEDS_CH2O_TRA $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_tra 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 4 +0 CEDS_CH2O_RCO $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_rco 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 4 +0 CEDS_CH2O_SLV $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_slv 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 4 +0 CEDS_CH2O_WST $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_wst 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 1 4 +0 CEDS_ALD2_AGR $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_agr 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 4 +0 CEDS_ALD2_ENE $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_ene 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 4 +0 CEDS_ALD2_IND $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_ind 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 4 +0 CEDS_ALD2_TRA $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_tra 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 4 +0 CEDS_ALD2_RCO $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_rco 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 4 +0 CEDS_ALD2_SLV $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_slv 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 4 +0 CEDS_ALD2_WST $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_wst 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 1 4 +0 CEDS_MEK_AGR $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_agr 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 4 +0 CEDS_MEK_ENE $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_ene 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 4 +0 CEDS_MEK_IND $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_ind 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 4 +0 CEDS_MEK_TRA $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_tra 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 4 +0 CEDS_MEK_RCO $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_rco 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 4 +0 CEDS_MEK_SLV $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_slv 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 4 +0 CEDS_MEK_WST $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_wst 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 1 4 +0 CEDS_HCOOH_AGR $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_agr 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 4 +0 CEDS_HCOOH_ENE $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_ene 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 4 +0 CEDS_HCOOH_IND $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_ind 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 4 +0 CEDS_HCOOH_TRA $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_tra 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 4 +0 CEDS_HCOOH_RCO $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_rco 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 4 +0 CEDS_HCOOH_SLV $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_slv 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 4 +0 CEDS_HCOOH_WST $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_wst 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 1 4 +)))HTAPv3 + +#============================================================================== +# --- GEIA NH3 from natural sources --- +#============================================================================== +(((GEIA_NH3 +0 GEIA_NH3_NATU $ROOT/NH3/v2019-08/NH3_geos.2x25.nc NH3_NATU 1990/1-12/1/0 C xy kg/m2/s NH3 - 3 1 +)))GEIA_NH3 + +#============================================================================== +# --- NH3 from arctic seabirds --- +# Source: Riddick et al., 2012, NERC Environmental Information Data Centre +#============================================================================== +(((SEABIRD_NH3 +0 SEABIRD_NH3 $ROOT/NH3/v2018-04/NH3_Arctic_seabirds.nc NH3_SEABIRDS 1990/1-12/1/0 C xy kg/m2/s NH3 - 30 1 +)))SEABIRD_NH3 + +#============================================================================== +# --- POET EOH --- +#============================================================================== +(((POET_EOH +0 POET_EOH $ROOT/POET/v2017-03/POET_EOH.geos.2x25.nc EOH 1985/1/1/0 C xy kgC/m2/s EOH 26/47 1 1 +)))POET_EOH + +#============================================================================== +# --- 2010 Global fossil fuel and biofuel emissions of C2H6 (Tzompa-Sosa et al. (2017) --- +# +# NOTES: +# - These C2H6 emissions are used in place of CEDS +#============================================================================== +(((TZOMPASOSA_C2H6 +0 C2H6_2010_oilgas $ROOT/C2H6_2010/v2019-06/C2H6_global_anth_biof.2010$MM.2x25.nc ANTHR_C2H6 2010/1-12/1/0 C xy kgC/m2/s C2H6 45 1 100 +0 C2H6_2010_biofuel $ROOT/C2H6_2010/v2019-06/C2H6_global_anth_biof.2010$MM.2x25.nc BIOFUEL_C2H6 2010/1-12/1/0 C xy kgC/m2/s C2H6 45 1 100 +)))TZOMPASOSA_C2H6 + +#============================================================================== +# --- Xiao et al., JGR, 2008 --- +# +# NOTES: +# - Xiao et al. C3H8 emissions are used in place of CEDS +# - Priority is set to 10 to overwrite CEDS, but not newer regional inventories (e.g. EPA/NEI) +#============================================================================== +(((XIAO_C3H8 +0 XIAO_C3H8 $ROOT/XIAO/v2014-09/C3H8_C2H6_ngas.geos.1x1.nc C3H8 1985/1/1/0 C xy kgC/m2/s C3H8 6/7/26/22/46 1 10 +0 BIOFUEL_C3H8 $ROOT/BIOFUEL/v2019-08/biofuel.geos.2x25.nc BIOFUEL_C3H8 1985/1/1/0 C xy kgC/m2/s C3H8 46 1 10 +)))XIAO_C3H8 + +#============================================================================== +# --- Very-short-lived (VSL) bromocarbon emissions (cf. Qing Liang) --- +#============================================================================== +(((LIANG_BROMOCARB +0 LIANG_CHBR3 $ROOT/BROMINE/v2015-02/Bromocarb_Liang2010.nc CHBr3_emission 2000/1/1/0 C xy kg/m2/s CHBr3 39 1 1 +0 LIANG_CH2BR2 $ROOT/BROMINE/v2015-02/Bromocarb_Liang2010.nc CH2Br2_emission 2000/1/1/0 C xy kg/m2/s CH2Br2 - 1 1 +)))LIANG_BROMOCARB + +#============================================================================== +# --- Very-short-lived (VSL) iodocarbon emissions (cf. Carlos Ordonez) --- +#============================================================================== +(((ORDONEZ_IODOCARB +0 ORDONEZ_CH3I $ROOT/IODINE/v2020-02/CH3I_monthly_emissions_Ordonez_2012_COARDS.nc CH3I 2000/1-12/1/0 C xy kg/m2/s CH3I - 1 1 +0 ORDONEZ_CH2I2 $ROOT/IODINE/v2020-02/CH2I2_monthly_emissions_Ordonez_2012_COARDS.nc CH2I2 2000/1-12/1/0 C xy kg/m2/s CH2I2 - 1 1 +0 ORDONEZ_CH2ICL $ROOT/IODINE/v2020-02/CH2ICl_monthly_emissions_Ordonez_2012_COARDS.nc CH2ICl 2000/1-12/1/0 C xy kg/m2/s CH2ICl - 1 1 +0 ORDONEZ_CH2IBR $ROOT/IODINE/v2020-02/CH2IBr_monthly_emissions_Ordonez_2012_COARDS.nc CH2IBr 2000/1-12/1/0 C xy kg/m2/s CH2IBr - 1 1 +)))ORDONEZ_IODOCARB + +#============================================================================== +# --- Ship emissions --- +# +# ==> CEDS ship emissions are now the default. +# ==> If CEDS_SHIP is turned off above then ARCTAS should be used over ICOADS, +# CORBETT, and HTAPv3 for SO2 and ICOADS should be used for CO and NO. +# ==> Ship NO emissions are used by PARANOx and the extension number must be +# adjusted accordingly. If PARANOx is turned off, set the ExtNr back to +# zero. +#============================================================================== +(((SHIP + +(((ARCTAS_SHIP +0 ARCTAS_SHIP_SO2 $ROOT/ARCTAS_SHIP/v2014-07/ARCTAS_ship.generic.1x1.nc SO2 2008/1/1/0 C xy kg/m2/s SO2 11/19 10 1 +)))ARCTAS_SHIP + +(((ICOADS_SHIP +0 ICOADS_SHIP_SO2 $ROOT/ICOADS_SHIP/v2014-07/ICOADS.generic.1x1.nc SO2 2002/1-12/1/0 C xy kg/m2/s SO2 11/15/60 10 2 +0 ICOADS_SHIP_CO $ROOT/ICOADS_SHIP/v2014-07/ICOADS.generic.1x1.nc CO 2002/1-12/1/0 C xy kg/m2/s CO 6/10 10 2 +0 ICOADS_SHIP_SOAP - - - - - - SOAP 6/10/280 10 2 +)))ICOADS_SHIP + +(((CORBETT_SHIP +0 CORBETT_SHIP_SO2 $ROOT/CORBETT_SHIP/v2014-07/CORBETT_ship.geos.1x1.nc SO2_SHIP 1985/1-12/1/0 C xy kg/m2/s SO2 - 10 3 +)))CORBETT_SHIP + +(((HTAPv3_SHIP +0 HTAPv3_CO_SHP $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_CO_0.1x0.1_$YYYY.nc CO_SHP 2000-2018/1-12/1/0 C xy kg/m2/s CO 26 10 4 +0 HTAPv3_SOAP_SHP - - - - - - SOAP 26/280 10 4 +0 HTAPv3_SO2_SHP $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_SO2_0.1x0.1_$YYYY.nc SO2_SHP 2000-2018/1-12/1/0 C xy kg/m2/s SO2 - 10 4 +0 HTAPv3_SO4_SHP - - - - - - SO4 63 10 4 +0 HTAPv3_pFe_SHP - - - - - - pFe 66 10 4 +0 HTAPv3_NH3_SHP $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NH3_0.1x0.1_$YYYY.nc NH3_SHP 2000-2018/1-12/1/0 C xy kg/m2/s NH3 - 10 4 +0 HTAPv3_BCPI_SHP $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_BC_0.1x0.1_$YYYY.nc BC_SHP 2000-2018/1-12/1/0 C xy kg/m2/s BCPI 70 10 4 +0 HTAPv3_BCPO_SHP - - - - - - BCPO 71 10 4 +0 HTAPv3_OCPI_SHP $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_OC_0.1x0.1_$YYYY.nc OC_SHP 2000-2018/1-12/1/0 C xy kg/m2/s OCPI 72 10 4 +0 HTAPv3_OCPO_SHP - - - - - - OCPO 73 10 4 +# Use CEDSv2 ship emissions for species not in HTAPv3 +0 CEDS_MOH_SHP $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_shp 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 10 4 +0 CEDS_EOH_SHP - - - - - - EOH 26/91 10 4 +0 CEDS_ROH_SHP - - - - - - ROH 26/92 10 4 +0 CEDS_C2H6_SHP $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_shp 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 10 4 +0 CEDS_C3H8_SHP $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_shp 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 10 4 +0 CEDS_C4H10_SHP $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 10 4 +0 CEDS_C5H12_SHP $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 10 4 +0 CEDS_C6H14_SHP $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 10 4 +0 CEDS_C2H4_SHP $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_shp 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 10 4 +0 CEDS_PRPE_SHP $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_shp 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 10 4 +0 CEDS_C2H2_SHP $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_shp 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 10 4 +0 CEDS_BENZ_SHP $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_shp 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 10 4 +0 CEDS_TOLU_SHP $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_shp 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 10 4 +0 CEDS_XYLE_SHP $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_shp 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 10 4 +0 CEDS_CH2O_SHP $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_shp 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 10 4 +0 CEDS_ALD2_SHP $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 10 4 +0 CEDS_MEK_SHP $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_shp 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 10 4 +0 CEDS_HCOOH_SHP $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_shp 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 10 4 +)))HTAPv3_SHIP + +(((CEDSv2_SHIP +0 CEDS_CO_SHP $ROOT/CEDS/v2021-06/$YYYY/CO-em-anthro_CMIP_CEDS_$YYYY.nc CO_shp 1750-2019/1-12/1/0 C xy kg/m2/s CO 26 10 5 +0 CEDS_SOAP_SHP - - - - - - SOAP 26/280 10 5 +0 CEDS_SO2_SHP $ROOT/CEDS/v2021-06/$YYYY/SO2-em-anthro_CMIP_CEDS_$YYYY.nc SO2_shp 1750-2019/1-12/1/0 C xy kg/m2/s SO2 - 10 5 +0 CEDS_SO4_SHP - - - - - - SO4 63 10 5 +0 CEDS_pFe_SHP - - - - - - pFe 66 10 5 +0 CEDS_NH3_SHP $ROOT/CEDS/v2021-06/$YYYY/NH3-em-anthro_CMIP_CEDS_$YYYY.nc NH3_shp 1750-2019/1-12/1/0 C xy kg/m2/s NH3 - 10 5 +0 CEDS_BCPI_SHP $ROOT/CEDS/v2021-06/$YYYY/BC-em-anthro_CMIP_CEDS_$YYYY.nc BC_shp 1750-2019/1-12/1/0 C xy kg/m2/s BCPI 70 10 5 +0 CEDS_BCPO_SHP - - - - - - BCPO 71 10 5 +0 CEDS_OCPI_SHP $ROOT/CEDS/v2021-06/$YYYY/OC-em-anthro_CMIP_CEDS_$YYYY.nc OC_shp 1750-2019/1-12/1/0 C xy kg/m2/s OCPI 72 10 5 +0 CEDS_OCPO_SHP - - - - - - OCPO 73 10 5 +0 CEDS_POG1_SHP - - - - - - POG1 74/76 10 5 +0 CEDS_POG2_SHP - - - - - - POG2 74/77 10 5 +0 CEDS_MOH_SHP $ROOT/CEDS/v2021-06/$YYYY/EOH-em-anthro_CMIP_CEDS_$YYYY.nc EOH_shp 1750-2019/1-12/1/0 C xy kg/m2/s MOH 26/90 10 5 +0 CEDS_EOH_SHP - - - - - - EOH 26/91 10 5 +0 CEDS_ROH_SHP - - - - - - ROH 26/92 10 5 +0 CEDS_C2H6_SHP $ROOT/CEDS/v2021-06/$YYYY/C2H6-em-anthro_CMIP_CEDS_$YYYY.nc C2H6_shp 1750-2019/1-12/1/0 C xy kg/m2/s C2H6 26 10 5 +0 CEDS_C3H8_SHP $ROOT/CEDS/v2021-06/$YYYY/C3H8-em-anthro_CMIP_CEDS_$YYYY.nc C3H8_shp 1750-2019/1-12/1/0 C xy kg/m2/s C3H8 26 10 5 +0 CEDS_C4H10_SHP $ROOT/CEDS/v2021-06/$YYYY/ALK4_butanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_butanes_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 10 5 +0 CEDS_C5H12_SHP $ROOT/CEDS/v2021-06/$YYYY/ALK4_pentanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_pentanes_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 10 5 +0 CEDS_C6H14_SHP $ROOT/CEDS/v2021-06/$YYYY/ALK4_hexanes-em-anthro_CMIP_CEDS_$YYYY.nc ALK4_hexanes_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALK4 26 10 5 +0 CEDS_C2H4_SHP $ROOT/CEDS/v2021-06/$YYYY/C2H4-em-anthro_CMIP_CEDS_$YYYY.nc C2H4_shp 1750-2019/1-12/1/0 C xy kg/m2/s C2H4 26 10 5 +0 CEDS_PRPE_SHP $ROOT/CEDS/v2021-06/$YYYY/PRPE-em-anthro_CMIP_CEDS_$YYYY.nc PRPE_shp 1750-2019/1-12/1/0 C xy kg/m2/s PRPE 26 10 5 +0 CEDS_C2H2_SHP $ROOT/CEDS/v2021-06/$YYYY/C2H2-em-anthro_CMIP_CEDS_$YYYY.nc C2H2_shp 1750-2019/1-12/1/0 C xy kg/m2/s C2H2 26 10 5 +0 CEDS_BENZ_SHP $ROOT/CEDS/v2021-06/$YYYY/BENZ-em-anthro_CMIP_CEDS_$YYYY.nc BENZ_shp 1750-2019/1-12/1/0 C xy kg/m2/s BENZ 26 10 5 +0 CEDS_TOLU_SHP $ROOT/CEDS/v2021-06/$YYYY/TOLU-em-anthro_CMIP_CEDS_$YYYY.nc TOLU_shp 1750-2019/1-12/1/0 C xy kg/m2/s TOLU 26 10 5 +0 CEDS_XYLE_SHP $ROOT/CEDS/v2021-06/$YYYY/XYLE-em-anthro_CMIP_CEDS_$YYYY.nc XYLE_shp 1750-2019/1-12/1/0 C xy kg/m2/s XYLE 26 10 5 +0 CEDS_CH2O_SHP $ROOT/CEDS/v2021-06/$YYYY/CH2O-em-anthro_CMIP_CEDS_$YYYY.nc CH2O_shp 1750-2019/1-12/1/0 C xy kg/m2/s CH2O 26 10 5 +0 CEDS_ALD2_SHP $ROOT/CEDS/v2021-06/$YYYY/ALD2-em-anthro_CMIP_CEDS_$YYYY.nc ALD2_shp 1750-2019/1-12/1/0 C xy kg/m2/s ALD2 26 10 5 +0 CEDS_MEK_SHP $ROOT/CEDS/v2021-06/$YYYY/MEK-em-anthro_CMIP_CEDS_$YYYY.nc MEK_shp 1750-2019/1-12/1/0 C xy kg/m2/s MEK 26 10 5 +0 CEDS_HCOOH_SHP $ROOT/CEDS/v2021-06/$YYYY/HCOOH-em-anthro_CMIP_CEDS_$YYYY.nc HCOOH_shp 1750-2019/1-12/1/0 C xy kg/m2/s HCOOH 26 10 5 +)))CEDSv2_SHIP + +(((CEDS_GBDMAPS_SHIP +>>>include $ROOT/CEDS/v2020-08/HEMCO_Config.CEDS_GBDMAPS_SHIP.rc +)))CEDS_GBDMAPS_SHIP + +(((CEDS_SHIP_byFuelType +(((.not.CEDS_GBDMAPS_SHIP +(((.not.CEDSv2_SHIP +>>>include $ROOT/CEDS/v2020-08/HEMCO_Config.CEDS_GBD-MAPS_SHIP_byFuelType.rc +))).not.CEDSv2_SHIP +))).not.CEDS_GBDMAPS_SHIP +)))CEDS_SHIP_byFuelType + +#============================================================================== +# --- CMIP6_SHIP --- +# CEDS (historical) or Shared Socioeconomic Pathways (future), consistent with +# the CMIP6 simulation experimental design. +# +# Make sure that the desired $GCAPSCENARIO is set above in SECTION SETTINGS +# +#============================================================================== +(((CMIP6_SHIP +0 CMIP6_CO_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_shp 1750-2100/1-12/1/0 C xy kg/m2/s CO 26 10 5 +0 CMIP6_SOAP_SHP - - - - - - SOAP 26/280 10 5 +0 CMIP6_SO2_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_shp 1750-2100/1-12/1/0 C xy kg/m2/s SO2 - 10 5 +0 CMIP6_SO4_SHP - - - - - - SO4 63 10 5 +0 CMIP6_pFe_SHP - - - - - - pFe 66 10 5 +0 CMIP6_NH3_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_shp 1750-2100/1-12/1/0 C xy kg/m2/s NH3 - 10 5 +0 CMIP6_BCPI_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_shp 1750-2100/1-12/1/0 C xy kg/m2/s BCPI 70 10 5 +0 CMIP6_BCPO_SHP - - - - - - BCPO 71 10 5 +0 CMIP6_OCPI_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_shp 1750-2100/1-12/1/0 C xy kg/m2/s OCPI 72 10 5 +0 CMIP6_OCPO_SHP - - - - - - OCPO 73 10 5 +0 CMIP6_POG1_SHP - - - - - - POG1 74/76 10 5 +0 CMIP6_POG2_SHP - - - - - - POG2 74/77 10 5 +# NOTE: EOH files in CMIP6/v2021-01 are actually VOC1 (total alchohols) and are split into MOH, EOH, ROH here +0 CMIP6_MOH_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_shp 1750-2100/1-12/1/0 C xy kg/m2/s MOH 26/90 10 5 +0 CMIP6_EOH_SHP - - - - - - EOH 26/91 10 5 +0 CMIP6_ROH_SHP - - - - - - ROH 26/92 10 5 +0 CMIP6_C2H6_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_shp 1750-2100/1-12/1/0 C xy kg/m2/s C2H6 26 10 5 +0 CMIP6_C3H8_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_shp 1750-2100/1-12/1/0 C xy kg/m2/s C3H8 26 10 5 +0 CMIP6_C4H10_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_butanes_shp 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 10 5 +0 CMIP6_C5H12_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_pentanes_shp 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 10 5 +0 CMIP6_C6H14_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_hexanes_shp 1750-2100/1-12/1/0 C xy kg/m2/s ALK4 26 10 5 +0 CMIP6_C2H4_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_shp 1750-2100/1-12/1/0 C xy kg/m2/s C2H4 26 10 5 +0 CMIP6_PRPE_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_shp 1750-2100/1-12/1/0 C xy kg/m2/s PRPE 26 10 5 +0 CMIP6_C2H2_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H2_shp 1750-2100/1-12/1/0 C xy kg/m2/s C2H2 26 10 5 +0 CMIP6_BENZ_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_shp 1750-2100/1-12/1/0 C xy kg/m2/s BENZ 26 10 5 +0 CMIP6_TOLU_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_shp 1750-2100/1-12/1/0 C xy kg/m2/s TOLU 26 10 5 +0 CMIP6_XYLE_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_shp 1750-2100/1-12/1/0 C xy kg/m2/s XYLE 26 10 5 +0 CMIP6_CH2O_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_shp 1750-2100/1-12/1/0 C xy kg/m2/s CH2O 26 10 5 +0 CMIP6_ALD2_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_shp 1750-2100/1-12/1/0 C xy kg/m2/s ALD2 26 10 5 +0 CMIP6_MEK_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_shp 1750-2100/1-12/1/0 C xy kg/m2/s MEK 26 10 5 +0 CMIP6_HCOOH_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_shp 1750-2100/1-12/1/0 C xy kg/m2/s HCOOH 26 10 5 +)))CMIP6_SHIP + +#------------------------------------------------------------------------------ +# ### IF THE PARANOX EXTENSION IS TURNED ON ### +# +# Cosine(SZA) will be read from the restart file. Use the PARANOX extension +# number (# 102) to specify these quantities and the NEI emissions. +# This will make sure everything will be passed to the HEMCO PARANOX extension +# rather than sending them into the base emissions. +#------------------------------------------------------------------------------ +(((ParaNOx + +(((ICOADS_SHIP +102 ICOADS_SHIP_NO $ROOT/ICOADS_SHIP/v2014-07/ICOADS.generic.1x1.nc NO 2002/1-12/1/0 C xy kg/m2/s NO 1/5 10 1 +)))ICOADS_SHIP + +(((HTAPv3_SHIP +102 HTAPv3_NO_SHP $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_SHP 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 10 4 +)))HTAPv3_SHIP + +(((CEDSv2_SHIP +102 CEDS_NO_SHP $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_shp 1750-2019/1-12/1/0 C xy kg/m2/s NO 25 10 5 +)))CEDSv2_SHIP + +(((CEDS_GBDMAPS_SHIP +102 CEDS_NO_SHP $ROOT/CEDS/v2020-08/$YYYY/NO-em-total-anthro_CEDS_$YYYY.nc NO_shp 1970-2017/1-12/1/0 C xy kg/m2/s NO 25 10 5 +)))CEDS_GBDMAPS_SHIP + +)))ParaNOx + +#------------------------------------------------------------------------------ +# ### IF THE PARANOX EXTENSION IS TURNED OFF ### +# +# Use extension # 0 to specify these emissions. This will put them +# into the base emissions rather than sending them through PARANOX. +#------------------------------------------------------------------------------ +(((.not.ParaNOx + +(((ICOADS_SHIP +0 ICOADS_SHIP_NO $ROOT/ICOADS_SHIP/v2014-07/ICOADS.generic.1x1.nc NO 2002/1-12/1/0 C xy kg/m2/s NO 1/5 10 1 +)))ICOADS_SHIP + +(((HTAPv3_SHIP +0 HTAPv3_NO_SHIP $ROOT/HTAPv3/v2022-12/$YYYY/HTAPv3_NO_0.1x0.1_$YYYY.nc NO_SHP 2000-2018/1-12/1/0 C xy kg/m2/s NO 25 10 4 +)))HTAPv3_SHIP + +(((CEDSv2_SHIP +0 CEDS_NO_SHP $ROOT/CEDS/v2021-06/$YYYY/NO-em-anthro_CMIP_CEDS_$YYYY.nc NO_shp 1750-2019/1-12/1/0 C xy kg/m2/s NO 25 10 5 +)))CEDSv2_SHIP + +(((CEDS_GBDMAPS_SHIP +0 CEDS_NO_SHP $ROOT/CEDS/v2020-08/$YYYY/NO-em-total-anthro_CEDS_$YYYY.nc NO_shp 1970-2017/1-12/1/0 C xy kg/m2/s NO 25 10 5 +)))CEDS_GBDMAPS_SHIP + +(((CMIP6_SHIP +102 CMIP6_NO_SHP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_shp 1750-2100/1-12/1/0 C xy kg/m2/s NO 25 10 5 +)))CMIP6_SHIP + +))).not.ParaNOx + +)))SHIP + +#============================================================================== +# --- AEIC 2019 aircraft emissions (daily & monthly mean) --- +# +# Data files are for 2019, but scale factors from 1990-2019 can be applied +# in order to get year-specific emissions. See the notes in the AEIC2019 +# scale factor section below for more information. +#============================================================================== +(((AEIC2019_DAILY +0 AEIC19_DAILY_NO $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc NO 2019/1-12/1-31/0 C xyz kg/m2/s NO 241/240 20 1 +0 AEIC19_DAILY_NO2 $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc NO2 2019/1-12/1-31/0 C xyz kg/m2/s NO2 241/240 20 1 +0 AEIC19_DAILY_HONO $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc HONO 2019/1-12/1-31/0 C xyz kg/m2/s HNO2 241/240 20 1 +0 AEIC19_DAILY_CO $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc CO 2019/1-12/1-31/0 C xyz kg/m2/s CO 241 20 1 +0 AEIC19_DAILY_SOAP - - - - - - SOAP 241/280 20 1 +0 AEIC19_DAILY_SO2 $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc FUELBURN 2019/1-12/1-31/0 C xyz kg/m2/s SO2 241/111 20 1 +0 AEIC19_DAILY_pFe - - - - - - pFe 241/111/66 20 1 +0 AEIC19_DAILY_SO4 - - - - - - SO4 241/112 20 1 +0 AEIC19_DAILY_H2O - - - - - - H2O 241/120 20 1 +0 AEIC19_DAILY_BCPI $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc BC 2019/1-12/1-31/0 C xyz kg/m2/s BCPI 241 20 1 +0 AEIC19_DAILY_OCPI $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc OC 2019/1-12/1-31/0 C xyz kg/m2/s OCPI 241 20 1 +0 AEIC19_DAILY_POG1 - - - - - - POG1 241/74/76 20 1 +0 AEIC19_DAILY_POG2 - - - - - - POG2 241/74/77 20 1 +0 AEIC19_DAILY_ACET $ROOT/AEIC2019/v2022-03/2019/$MM/AEIC_2019$MM$DD.0.5x0.625.36L.nc HC 2019/1-12/1-31/0 C xyz kg/m2/s ACET 241/114/101 20 1 +0 AEIC19_DAILY_ALD2 - - - - - - ALD2 241/114/102 20 1 +0 AEIC19_DAILY_ALK4 - - - - - - ALK4 241/114/103 20 1 +0 AEIC19_DAILY_C2H6 - - - - - - C2H6 241/114/104 20 1 +0 AEIC19_DAILY_C3H8 - - - - - - C3H8 241/114/105 20 1 +0 AEIC19_DAILY_CH2O - - - - - - CH2O 241/114/106 20 1 +0 AEIC19_DAILY_PRPE - - - - - - PRPE 241/114/107 20 1 +0 AEIC19_DAILY_MACR - - - - - - MACR 241/114/108 20 1 +0 AEIC19_DAILY_RCHO - - - - - - RCHO 241/114/109 20 1 +)))AEIC2019_DAILY +(((AEIC2019_MONMEAN +0 AEIC19_MONMEAN_NO - - - - xyz kg/m2/s NO 241/240 20 1 +0 AEIC19_MONMEAN_NO2 - - - - xyz kg/m2/s NO2 241/240 20 1 +0 AEIC19_MONMEAN_HONO - - - - xyz kg/m2/s HNO2 241/240 20 1 +0 AEIC19_MONMEAN_CO - - - - xyz kg/m2/s CO 241 20 1 +0 AEIC19_MONMEAN_SOAP - - - - - - SOAP 241/280 20 1 +0 AEIC19_MONMEAN_SO2 - - - - xyz kg/m2/s SO2 241/111 20 1 +0 AEIC19_MONMEAN_pFe - - - - - - pFe 241/111/66 20 1 +0 AEIC19_MONMEAN_SO4 - - - - - - SO4 241/112 20 1 +0 AEIC19_MONMEAN_H2O - - - - - - H2O 241/120 20 1 +0 AEIC19_MONMEAN_BCPI - - - - xyz kg/m2/s BCPI 241 20 1 +0 AEIC19_MONMEAN_OCPI - - - - xyz kg/m2/s OCPI 241 20 1 +0 AEIC19_MONMEAN_POG1 - - - - - - POG1 241/74/76 20 1 +0 AEIC19_MONMEAN_POG2 - - - - - - POG2 241/74/77 20 1 +0 AEIC19_MONMEAN_ACET - - - - xyz kg/m2/s ACET 241/114/101 20 1 +0 AEIC19_MONMEAN_ALD2 - - - - - - ALD2 241/114/102 20 1 +0 AEIC19_MONMEAN_ALK4 - - - - - - ALK4 241/114/103 20 1 +0 AEIC19_MONMEAN_C2H6 - - - - - - C2H6 241/114/104 20 1 +0 AEIC19_MONMEAN_C3H8 - - - - - - C3H8 241/114/105 20 1 +0 AEIC19_MONMEAN_CH2O - - - - - - CH2O 241/114/106 20 1 +0 AEIC19_MONMEAN_PRPE - - - - - - PRPE 241/114/107 20 1 +0 AEIC19_MONMEAN_MACR - - - - - - MACR 241/114/108 20 1 +0 AEIC19_MONMEAN_RCHO - - - - - - RCHO 241/114/109 20 1 +)))AEIC2019_MONMEAN + +#============================================================================== +# --- Emissions from decaying plants --- +#============================================================================== +(((DECAYING_PLANTS +0 ALD2_PLANTDECAY $ROOT/ALD2/v2017-03/resp.geos.2x25.nc HET_RESP 1985/1-12/1/0 C xy kgC/m2/s ALD2 85/41 3 1 +0 EOH_PLANTDECAY - - - - - - EOH 86/47 3 1 +)))DECAYING_PLANTS + +#============================================================================== +# --- RCP future emissions scenarios --- +#============================================================================== +(((RCP_3PD +0 RCP3PD_CH4 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_CH4_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH4 - 1 1 +0 RCP3PD_NOx $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_NOx_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NO - 1 1 +0 RCP3PD_CO $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_CO_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CO - 1 1 +0 RCP3PD_SOAP - - - - - - SOAP 280 1 1 +0 RCP3PD_BCPO $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_BC_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s BCPO - 1 1 +0 RCP3PD_OCPO $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_OC_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s OCPO - 1 1 +0 RCP3PD_POG1 - - - - - - POG1 74/76 1 1 +0 RCP3PD_POG2 - - - - - - POG2 74/77 1 1 +0 RCP3PD_SO2 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_SO2_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s SO2 - 1 1 +0 RCP3PD_pFe - - - - - - pFe 66 1 1 +0 RCP3PD_NH3 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_NH3_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NH3 - 1 1 +0 RCP3PD_C2H2 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_acetylene_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H2 59 1 1 +0 RCP3PD_CH2O $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_formaldehyde_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH2O - 1 1 +0 RCP3PD_BENZ $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_benzene_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s BENZ 43 1 1 +0 RCP3PD_TOLU $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_toluene_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s TOLU 55 1 1 +0 RCP3PD_XYLE $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_xylene_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s XYLE 56 1 1 +0 RCP3PD_ALD2 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_other_aldehydes_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALD2 41 1 1 +0 RCP3PD_ALK4__A $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_butanes_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP3PD_ALK4__B $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_pentanes_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP3PD_ALK4__C $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_hexanes_and_higher_alkanes_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP3PD_ACET $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_total_ketones_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ACET 51/40 1 1 +0 RCP3PD_MEK - - - - - - MEK 50/48 1 1 +0 RCP3PD_C2H6 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_ethane_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H6 45 1 1 +0 RCP3PD_C2H4 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_ethene_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H4 44 1 1 +0 RCP3PD_C3H8 $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_propane_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C3H8 46 1 1 +0 RCP3PD_PRPE $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_propene_2005-2100_23474_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s PRPE 49 1 1 +0 RCP3PD_HCOOH $ROOT/RCP/v2020-07/RCP_3PD/RCPs_anthro_total_acids_2005-2100_23474.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s HCOOH 57/58 1 1 +)))RCP_3PD + +(((RCP_45 +0 RCP45_CH4 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_CH4_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH4 - 1 1 +0 RCP45_NOx $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_NOx_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NO - 1 1 +0 RCP45_CO $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_CO_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CO - 1 1 +0 RCP45_SOAP - - - - - - SOAP 280 1 1 +0 RCP45_BCPO $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_BC_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s BCPO - 1 1 +0 RCP45_OCPO $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_OC_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s OCPO - 1 1 +0 RCP45_POG1 - - - - - - POG1 74/76 1 1 +0 RCP45_POG2 - - - - - - POG2 74/77 1 1 +0 RCP45_SO2 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_SO2_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s SO2 - 1 1 +0 RCP45_pFe - - - - - - pFe 66 1 1 +0 RCP45_NH3 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_NH3_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NH3 - 1 1 +0 RCP45_C2H2 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_acetylene_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H2 59 1 1 +0 RCP45_CH2O $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_formaldehyde_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH2O - 1 1 +0 RCP45_BENZ $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_benzene_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s BENZ 43 1 1 +0 RCP45_TOLU $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_toluene_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s TOLU 55 1 1 +0 RCP45_XYLE $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_xylene_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s XYLE 56 1 1 +0 RCP45_ALD2 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_other_aldehydes_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALD2 41 1 1 +0 RCP45_ALK4__A $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_butanes_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP45_ALK4__B $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_pentanes_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP45_ALK4__C $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_hexanes_and_higher_alkanes_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP45_ACET $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_total_ketones_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ACET 51/40 1 1 +0 RCP45_MEK - - - - - - MEK 50/48 1 1 +0 RCP45_C2H6 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_ethane_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H6 45 1 1 +0 RCP45_C2H4 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_ethene_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H4 44 1 1 +0 RCP45_C3H8 $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_propane_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C3H8 46 1 1 +0 RCP45_PRPE $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_propene_2005-2100_27424_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s PRPE 49 1 1 +0 RCP45_HCOOH $ROOT/RCP/v2020-07/RCP_45/RCPs_anthro_total_acids_2005-2100_27424.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s HCOOH 57/58 1 1 +)))RCP_45 + +(((RCP_60 +0 RCP60_CH4 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_CH4_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH4 - 1 1 +0 RCP60_NOx $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_NOx_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NO - 1 1 +0 RCP60_CO $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_CO_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CO - 1 1 +0 RCP60_SOAP - - - - - - SOAP 280 1 1 +0 RCP60_BCPO $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_BC_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s BCPO - 1 1 +0 RCP60_OCPO $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_OC_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s OCPO - 1 1 +0 RCP60_POG1 - - - - - - POG1 74/76 1 1 +0 RCP60_POG2 - - - - - - POG2 74/77 1 1 +0 RCP60_SO2 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_SO2_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s SO2 - 1 1 +0 RCP60_pFe - - - - - - pFe 66 1 1 +0 RCP60_NH3 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_NH3_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NH3 - 1 1 +0 RCP60_C2H2 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_acetylene_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H2 59 1 1 +0 RCP60_CH2O $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_formaldehyde_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH2O - 1 1 +0 RCP60_BENZ $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_benzene_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s BENZ 43 1 1 +0 RCP60_TOLU $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_toluene_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s TOLU 55 1 1 +0 RCP60_XYLE $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_xylene_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s XYLE 56 1 1 +0 RCP60_ALD2 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_other_aldehydes_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALD2 41 1 1 +0 RCP60_ALK4__A $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_butanes_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP60_ALK4__B $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_pentanes_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP60_ALK4__C $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_hexanes_and_higher_alkanes_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP60_ACET $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_total_ketones_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ACET 51/40 1 1 +0 RCP60_MEK - - - - - - MEK 50/48 1 1 +0 RCP60_C2H6 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_ethane_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H6 45 1 1 +0 RCP60_C2H4 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_ethene_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H4 44 1 1 +0 RCP60_C3H8 $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_propane_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C3H8 46 1 1 +0 RCP60_PRPE $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_propene_2005-2100_43190_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s PRPE 49 1 1 +0 RCP60_HCOOH $ROOT/RCP/v2020-07/RCP_60/RCPs_anthro_total_acids_2005-2100_43190.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s HCOOH 57/58 1 1 +)))RCP_60 + +(((RCP_85 +0 RCP85_CH4 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_CH4_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH4 - 1 1 +0 RCP85_NOx $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_NOx_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NO - 1 1 +0 RCP85_CO $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_CO_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CO - 1 1 +0 RCP85_SOAP - - - - - - SOAP 280 1 1 +0 RCP85_BCPO $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_BC_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s BCPO - 1 1 +0 RCP85_OCPO $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_OC_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s OCPO - 1 1 +0 RCP85_POG1 - - - - - - POG1 74/76 1 1 +0 RCP85_POG2 - - - - - - POG2 74/77 1 1 +0 RCP85_SO2 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_SO2_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s SO2 - 1 1 +0 RCP80_pFe - - - - - - pFe 66 1 1 +0 RCP85_NH3 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_NH3_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s NH3 - 1 1 +0 RCP85_C2H2 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_acetylene_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H2 59 1 1 +0 RCP85_CH2O $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_formaldehyde_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s CH2O - 1 1 +0 RCP85_BENZ $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_benzene_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s BENZ 43 1 1 +0 RCP85_TOLU $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_toluene_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s TOLU 55 1 1 +0 RCP85_XYLE $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_xylene_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s XYLE 56 1 1 +0 RCP85_ALD2 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_other_aldehydes_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALD2 41 1 1 +0 RCP85_ALK4__A $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_butanes_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP85_ALK4__B $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_pentanes_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP85_ALK4__C $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_hexanes_and_higher_alkanes_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ALK4 42 1 1 +0 RCP85_ACET $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_total_ketones_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s ACET 51/40 1 1 +0 RCP85_MEK - - - - - - MEK 50/48 1 1 +0 RCP85_C2H6 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_ethane_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H6 45 1 1 +0 RCP85_C2H4 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_ethene_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C2H4 44 1 1 +0 RCP85_C3H8 $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_propane_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s C3H8 46 1 1 +0 RCP85_PRPE $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_propene_2005-2100_43533_kgC.nc ACCMIP 2005-2100/1/1/0 ID xy kgC/m2/s PRPE 49 1 1 +0 RCP85_HCOOH $ROOT/RCP/v2020-07/RCP_85/RCPs_anthro_total_acids_2005-2100_43533.nc ACCMIP 2005-2100/1/1/0 ID xy kg/m2/s HCOOH 57/58 1 1 +)))RCP_85 + +#============================================================================== +# --- QFED2 biomass burning (v2.5r1) --- +#============================================================================== +(((QFED2 +0 QFED_ACET_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_acet.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s ACET 75/311 5 2 +0 QFED_ACET_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_acet.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s ACET 75/312 5 2 +0 QFED_ALD2_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_ald2.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s ALD2 75/311 5 2 +0 QFED_ALD2_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_ald2.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s ALD2 75/312 5 2 +0 QFED_ALK4_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_alk4.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s ALK4 75/311 5 2 +0 QFED_ALK4_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_alk4.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s ALK4 75/312 5 2 +0 QFED_BCPI_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_bc.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s BCPI 70/75/311 5 2 +0 QFED_BCPO_PBL - - - - - - BCPO 71/75/311 5 2 +0 QFED_BCPI_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_bc.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s BCPI 70/75/312 5 2 +0 QFED_BCPO_FT - - - - - - BCPO 71/75/312 5 2 +0 QFED_OCPI_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_oc.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s OCPI 72/75/311 5 2 +0 QFED_OCPO_PBL - - - - - - OCPO 73/75/311 5 2 +0 QFED_POG1_PBL - - - - - - POG1 74/76/75/311 5 2 +0 QFED_POG2_PBL - - - - - - POG2 74/77/75/311 5 2 +0 QFED_OCPI_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_oc.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s OCPI 72/75/312 5 2 +0 QFED_OCPO_FT - - - - - - OCPO 73/75/312 5 2 +0 QFED_POG1_FT - - - - - - POG1 74/76/75/312 5 2 +0 QFED_POG2_FT - - - - - - POG2 74/77/75/312 5 2 +0 QFED_C2H6_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_c2h6.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s C2H6 75/311 5 2 +0 QFED_C2H6_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_c2h6.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s C2H6 75/312 5 2 +0 QFED_C3H8_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_c3h8.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s C3H8 75/311 5 2 +0 QFED_C3H8_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_c3h8.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s C3H8 75/312 5 2 +0 QFED_CH2O_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_ch2o.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s CH2O 75/311 5 2 +0 QFED_CH2O_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_ch2o.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s CH2O 75/312 5 2 +0 QFED_CH4_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_ch4.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s CH4 75/311 5 2 +0 QFED_CH4_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_ch4.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s CH4 75/312 5 2 +0 QFED_CO_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_co.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s CO 54/75/311 5 2 +0 QFED_SOAP_PBL - - - - - - SOAP 54/75/281/311 5 2 +0 QFED_CO_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_co.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s CO 54/75/312 5 2 +0 QFED_SOAP_FT - - - - - - SOAP 54/75/281/312 5 2 +0 QFED_CO2_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_co2.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s CO2 75/311 5 2 +0 QFED_CO2_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_co2.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s CO2 75/312 5 2 +0 QFED_MEK_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_mek.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s MEK 75/311 5 2 +0 QFED_MEK_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_mek.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s MEK 75/312 5 2 +0 QFED_NH3_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_nh3.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s NH3 75/311 5 2 +0 QFED_NH3_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_nh3.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s NH3 75/312 5 2 +0 QFED_NO_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_no.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s NO 75/311 5 2 +0 QFED_NO_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_no.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s NO 75/312 5 2 +0 QFED_SO2_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_so2.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s SO2 75/311 5 2 +0 QFED_pFe_PBL - - - - - - pFe 75/311/66 5 2 +0 QFED_SO2_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_so2.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s SO2 75/312 5 2 +0 QFED_pFe_FT - - - - - - pF3 75/312/66 5 2 +0 QFED_C3H6_PBL $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_c3h6.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=1:PBL kg/m2/s PRPE 75/311 5 2 +0 QFED_C3H6_FT $ROOT/QFED/v2018-07/$YYYY/$MM/qfed2.emis_c3h6.006.$YYYY$MM$DD.nc4 biomass 2000-2022/1-12/1-31/0/+12hour EFY xyL=PBL:5500m kg/m2/s PRPE 75/312 5 2 +)))QFED2 + +#============================================================================== +# --- GFAS biomass burning --- +#============================================================================== +(((GFAS +0 GFAS_CO $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc cofire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s CO 75 5 3 +0 GFAS_SOAP $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc cofire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s SOAP 75/281 5 3 +0 GFAS_CH3OH $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc ch3ohfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s MOH 75 5 3 +0 GFAS_NO $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc noxfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s NO 75 5 3 +0 GFAS_BCPI $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc bcfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s BCPI 70/75 5 3 +0 GFAS_BCPO $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc bcfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s BCPO 71/75 5 3 +0 GFAS_OCPI $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc ocfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s OCPI 72/75 5 3 +0 GFAS_OCPO $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc ocfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s OCPO 73/75 5 3 +0 GFAS_POG1 - - - - - - POG1 74/76/75 5 3 +0 GFAS_POG2 - - - - - - POG2 74/77/75 5 3 +0 GFAS_CO2 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc co2fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s CO2 75 5 3 +0 GFAS_CH4 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc ch4fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s CH4 75 5 3 +0 GFAS_SO2 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc so2fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s SO2 75 5 3 +0 GFAS_pFe $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc so2fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s pFe 75/66 5 3 +0 GFAS_NH3 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc nh3fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s NH3 75 5 3 +0 GFAS_ACET $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c3h6ofire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s ACET 75 5 3 +0 GFAS_ALD2 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c2h4ofire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s ALD2 75 5 3 +0 GFAS_ALK4 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc hialkanesfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s ALK4 75 5 3 +0 GFAS_PRPE1 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc hialkenesfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s PRPE 75 5 3 +0 GFAS_PRPE2 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c3h6fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s PRPE 75 5 3 +0 GFAS_C2H6 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c2h6fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s C2H6 75 5 3 +0 GFAS_C3H8 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c3h8fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s C3H8 75 5 3 +0 GFAS_CH2O $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc ch2ofire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s CH2O 75 5 3 +0 GFAS_C2H4 $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c2h4fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s C2H4 75 5 3 +0 GFAS_ISOP $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c5h8fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s ISOP 75 5 3 +0 GFAS_DMS $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c2h6sfire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s DMS 75 5 3 +0 GFAS_TOLU $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c7h8fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s TOLU 75 5 3 +0 GFAS_BENZ $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c6h6fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s BENZ 75 5 3 +0 GFAS_XYLE $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc c8h10fire 2003-2021/1-12/1-31/0 C xyL=1:scal300 kg/m2/s XYLE 75 5 3 +)))GFAS + +#============================================================================== +# --- BB4MIPs biomass burning --- +#============================================================================== +(((BB4MIPS +# 75 is time-of-day scaling +0 CMIP6_BB_CO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s CO 75 5 3 +0 CMIP6_BB_SOAP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CO_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s SOAP 75/281 5 3 +0 CMIP6_BB_NO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NO_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s NO 75 5 3 +0 CMIP6_BB_BCPI $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s BCPI 70/75 5 3 +0 CMIP6_BB_BCPO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BC_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s BCPO 71/75 5 3 +0 CMIP6_BB_OCPI $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s OCPI 72/75 5 3 +0 CMIP6_BB_OCPO $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 OC_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s OCPO 73/75 5 3 +0 CMIP6_BB_POG1 - - - - - - POG1 74/76/75 5 3 +0 CMIP6_BB_POG2 - - - - - - POG2 74/77/75 5 3 +0 CMIP6_BB_SO2 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 SO2_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s SO2 75 5 3 +0 CMIP6_BB_pFe - - - - - - pFe 75/66 5 3 +0 CMIP6_BB_NH3 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 NH3_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s NH3 75 5 3 +0 CMIP6_BB_ALD2 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALD2_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s ALD2 75 5 3 +0 CMIP6_BB_ALK4 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ALK4_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s ALK4 75 5 3 +0 CMIP6_BB_PRPE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 PRPE_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s PRPE 75 5 3 +0 CMIP6_BB_C2H6 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H6_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s C2H6 75 5 3 +0 CMIP6_BB_C3H8 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C3H8_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s C3H8 75 5 3 +0 CMIP6_BB_CH2O $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 CH2O_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s CH2O 75 5 3 +0 CMIP6_BB_C2H4 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 C2H4_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s C2H4 75 5 3 +0 CMIP6_BB_ISOP $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ISOP_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s ISOP 75 5 3 +0 CMIP6_BB_DMS $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 DMS_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s DMS 75 5 3 +0 CMIP6_BB_TOLU $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 TOLU_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s TOLU 75 5 3 +0 CMIP6_BB_BENZ $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 BENZ_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s BENZ 75 5 3 +0 CMIP6_BB_XYLE $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 XYLE_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s XYLE 75 5 3 +0 CMIP6_BB_H2 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 H2_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s H2 75 5 3 +0 CMIP6_BB_MTPA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MONOT_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s MTPA 75 5 3 +#0 CMIP6_BB_MTPO - - - - - - MTPO 75 5 3 +#0 CMIP6_BB_LIMO - - - - - - LIMO 75 5 3 +0 CMIP6_BB_EOH $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 EOH_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s EOH 75 5 3 +0 CMIP6_BB_MOH $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MOH_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s MOH 75 5 3 +0 CMIP6_BB_ACET - - - - - - ACET 79/75 5 3 +0 CMIP6_BB_MGLY $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MGLY_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s MGLY 75 5 3 +0 CMIP6_BB_ACTA $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 ACTA_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s ACTA 75 5 3 +0 CMIP6_BB_HCN $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCN_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s HCN 75 5 3 +0 CMIP6_BB_HCOOH $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 HCOOH_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s HCOOH 75 5 3 +0 CMIP6_BB_MEK $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_$YYYY.nc4 MEK_bbn 1750-2100/1-12/1/0 C xyL=1:PBL kg/m2/s MEK 75 5 3 +)))BB4MIPS + +#============================================================================== +# --- GFED4 biomass burning emissions climatology +# NOTE: +# - These emissions were generated for 2010-2019 using the GFED extension +# in a 0.5x0.625 HEMCO 3.6.1 standalone simulation. +#============================================================================== +(((GFED4_CLIMATOLOGY +0 GFED4_CLIM_ACET $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_ACET 2019/1-12/1/0 C xy kg/m2/s ACET - 5 1 +0 GFED4_CLIM_ALD2 $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_ALD2 2019/1-12/1/0 C xy kg/m2/s ALD2 - 5 1 +0 GFED4_CLIM_ALK4 $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_ALK4 2019/1-12/1/0 C xy kg/m2/s ALK4 - 5 1 +0 GFED4_CLIM_BCPI $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_BCPI 2019/1-12/1/0 C xy kg/m2/s BCPI - 5 1 +0 GFED4_CLIM_BCPO $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_BCPO 2019/1-12/1/0 C xy kg/m2/s BCPO - 5 1 +0 GFED4_CLIM_BENZ $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_BENZ 2019/1-12/1/0 C xy kg/m2/s BENZ - 5 1 +0 GFED4_CLIM_C2H6 $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_C2H6 2019/1-12/1/0 C xy kg/m2/s C2H6 - 5 1 +0 GFED4_CLIM_C3H8 $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_C3H8 2019/1-12/1/0 C xy kg/m2/s C3H8 - 5 1 +0 GFED4_CLIM_CH2O $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_ACET 2019/1-12/1/0 C xy kg/m2/s CH2O - 5 1 +0 GFED4_CLIM_CO $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_CO 2019/1-12/1/0 C xy kg/m2/s CO - 5 1 +0 GFED4_CLIM_EOH $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_EOH 2019/1-12/1/0 C xy kg/m2/s EOH - 5 1 +0 GFED4_CLIM_MEK $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_MEK 2019/1-12/1/0 C xy kg/m2/s MEK - 5 1 +0 GFED4_CLIM_NO $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_NO 2019/1-12/1/0 C xy kg/m2/s NO - 5 1 +0 GFED4_CLIM_OCPI $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_OCPI 2019/1-12/1/0 C xy kg/m2/s OCPI - 5 1 +0 GFED4_CLIM_OCPO $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_OCPO 2019/1-12/1/0 C xy kg/m2/s OCPO - 5 1 +0 GFED4_CLIM_PRPE $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_PRPE 2019/1-12/1/0 C xy kg/m2/s PRPE - 5 1 +0 GFED4_CLIM_SO2 $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_SO2 2019/1-12/1/0 C xy kg/m2/s SO2 - 5 1 +0 GFED4_CLIM_SOAP $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_SOAP 2019/1-12/1/0 C xy kg/m2/s SOAP - 5 1 +0 GFED4_CLIM_TOLU $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_TOLU 2019/1-12/1/0 C xy kg/m2/s TOLU - 5 1 +0 GFED4_CLIM_XYLE $ROOT/GFED4/v2023-03/GFED4_climatology_2010-2019_05x0625.nc GFED4_XYLE 2019/1-12/1/0 C xy kg/m2/s XYLE - 5 1 +)))GFED4_CLIMATOLOGY + +#============================================================================== +# --- Anthropogenic Fugitive, Combustion and Industrial Dust --- +# (Philip et al., 2017, ERL) +#============================================================================== +(((AFCID +0 PM25FINE_1 $ROOT/AFCID/v2018-04/PM25FINE_ECLIPSE_2015.geos.2x25.nc PM25FINE 2015/1-12/1/0 C xy kg/m2/s DST1 - 1 1 +0 PM25FINE_2 $ROOT/AFCID/v2018-04/PM25FINE_MEIC_2012.generic.025x025.nc PM25FINE 2012/1-12/1/0 C xy kg/m2/s DST1 1009 1 2 +0 PM25FINE_3 $ROOT/AFCID/v2018-04/PM25FINE_IITB_2013.generic.025x025.nc PM25FINE 2013/1-12/1/0 C xy kg/m2/s DST1 1010 1 3 +)))AFCID + +#============================================================================== +# --- Offline dust emissions --- +#============================================================================== +(((OFFLINE_DUST +(((.not.DustDead.or.DustGinoux +0 EMIS_DST1 $ROOT/OFFLINE_DUST/v2021-08/0.5x0.625/$YYYY/$MM/dust_emissions_05.$YYYY$MM$DD.nc EMIS_DST1 1980-2022/1-12/1-31/* EFY xy kg/m2/s DST1 - 3 2 +0 EMIS_DST2 $ROOT/OFFLINE_DUST/v2021-08/0.5x0.625/$YYYY/$MM/dust_emissions_05.$YYYY$MM$DD.nc EMIS_DST2 1980-2022/1-12/1-31/* EFY xy kg/m2/s DST2 - 3 2 +0 EMIS_DST3 $ROOT/OFFLINE_DUST/v2021-08/0.5x0.625/$YYYY/$MM/dust_emissions_05.$YYYY$MM$DD.nc EMIS_DST3 1980-2022/1-12/1-31/* EFY xy kg/m2/s DST3 - 3 2 +0 EMIS_DST4 $ROOT/OFFLINE_DUST/v2021-08/0.5x0.625/$YYYY/$MM/dust_emissions_05.$YYYY$MM$DD.nc EMIS_DST4 1980-2022/1-12/1-31/* EFY xy kg/m2/s DST4 - 3 2 +))).not.DustDead.or.DustGinoux +)))OFFLINE_DUST + +#============================================================================== +# --- Offline biogenic VOC emissions --- +#============================================================================== +(((OFFLINE_BIOGENICVOC +0 BIOGENIC_ACET $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc ACET_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s ACET - 4 2 +0 BIOGENIC_ALD2 $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc ALD2_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s ALD2 - 4 2 +0 BIOGENIC_C2H4 $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc C2H4_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s C2H4 - 4 2 +0 BIOGENIC_EOH $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc EOH_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s EOH - 4 2 +0 BIOGENIC_ISOP $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc ISOP_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s ISOP - 4 2 +0 BIOGENIC_ISOP_SOAP - - - - - - SOAP 610 4 2 +0 BIOGENIC_ISOP_SOAS - - - - - - SOAS 610 4 2 +0 BIOGENIC_LIMO $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc LIMO_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s LIMO - 4 2 +0 BIOGENIC_LIMO_SOAP - - - - - - SOAP 611 4 2 +0 BIOGENIC_LIMO_SOAS - - - - - - SOAS 611 4 2 +0 BIOGENIC_MOH $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc MOH_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s MOH - 4 2 +0 BIOGENIC_MTPA $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc MTPA_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s MTPA - 4 2 +0 BIOGENIC_MTPA_SOAP - - - - - - SOAP 611 4 2 +0 BIOGENIC_MTPA_SOAS - - - - - - SOAS 611 4 2 +0 BIOGENIC_MTPO $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc MTPO_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s MTPO - 4 2 +0 BIOGENIC_MTPO_SOAP - - - - - - SOAP 611 4 2 +0 BIOGENIC_MTPO_SOAS - - - - - - SOAS 611 4 2 +0 BIOGENIC_PRPE $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc PRPE_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s PRPE - 4 2 +0 BIOGENIC_SESQ $ROOT/OFFLINE_BIOVOC/v2021-12/0.5x0.625/$YYYY/$MM/biovoc_05.$YYYY$MM$DD.nc SESQ_MEGAN 1980-2022/1-12/1-31/* EFY xy kg/m2/s SESQ - 4 2 +0 BIOGENIC_SESQ_SOAP - - - - - - SOAP 612 4 2 +0 BIOGENIC_SESQ_SOAS - - - - - - SOAS 612 4 2 +)))OFFLINE_BIOGENICVOC + +#============================================================================== +# --- Offline sea salt emissions --- +#============================================================================== +(((OFFLINE_SEASALT +(((.not.SeaSalt +0 SEASALT_SALA $ROOT/OFFLINE_SEASALT/v2019-01/0.5x0.625/$YYYY/$MM/seasalt_05.$YYYY$MM$DD.nc SALA_TOTAL 1980-2022/1-12/1-31/* EFY xy kg/m2/s SALA - 3 2 +0 SEASALT_SALAAL - - - - - - SALAAL 615 3 2 +0 SEASALT_SALACL - - - - - - SALACL 616 3 2 +(((CalcBrSeasalt +0 SEASALT_BrSALA - - - - - - BrSALA 617 3 2 +)))CalcBrSeasalt +0 SEASALT_SALC $ROOT/OFFLINE_SEASALT/v2019-01/0.5x0.625/$YYYY/$MM/seasalt_05.$YYYY$MM$DD.nc SALC_TOTAL 1980-2022/1-12/1-31/* EFY xy kg/m2/s SALC - 3 2 +0 SEASALT_SALCAL - - - - - - SALCAL 615 3 2 +0 SEASALT_SALCCL - - - - - - SALCCL 616 3 2 +(((CalcBrSeasalt +0 SEASALT_BrSALC - - - - - - BrSALC 617 3 2 +)))CalcBrSeasalt +))).not.SeaSalt +)))OFFLINE_SEASALT + +#============================================================================== +# --- Offline soil NOx emissions --- +#============================================================================== +(((OFFLINE_SOILNOX +(((.not.SoilNOx +0 SOILNOX_NO $ROOT/OFFLINE_SOILNOX/v2021-12/0.5x0.625/$YYYY/$MM/soilnox_05.$YYYY$MM$DD.nc SOIL_NOx 1980-2022/1-12/1-31/* EFY xy kg/m2/s NO - 3 2 +))).not.SoilNOx +)))OFFLINE_SOILNOX + +############################################################################### +### EXTENSION DATA (subsection of BASE EMISSIONS SECTION) +### +### These fields are needed by the extensions listed above. The assigned ExtNr +### must match the ExtNr entry in section 'Extension switches'. These fields +### are only read if the extension is enabled. The fields are imported by the +### extensions by field name. The name given here must match the name used +### in the extension's source code. +############################################################################### + +#============================================================================== +# --- Seawater concentrations for oceanic emissions (Extension 101) --- +#============================================================================== +(((SeaFlux +#101 CH3I_SEAWATER $ROOT/CH3I/v2014-07/ocean_ch3i.geos.4x5.nc CH3I_OCEAN 1985/1-12/1/0 C xy kg/m3 CH3I - 1 1 +101 DMS_SEAWATER $ROOT/DMS/v2015-07/DMS_lana.geos.1x1.nc DMS_OCEAN 1985/1-12/1/0 C xy kg/m3 DMS - 1 1 +101 ACET_SEAWATER $ROOT/ACET/v2014-07/ACET_seawater.generic.1x1.nc ACET 2005/1/1/0 C xy kgC/m3 ACET 40 1 1 +101 ALD2_SEAWATER $ROOT/ALD2/v2017-03/ALD2_seawater.geos.2x25.nc ALD2 2006/1-12/1/0 C xy kgC/m3 ALD2 41 1 1 +101 MENO3_SEAWATER $ROOT/RONO2/v2019-05/RONO2_seawater.geos.2x25.nc MENO3 2006/1-12/1/0 C xy kg/m3 MENO3 - 1 1 +101 ETNO3_SEAWATER $ROOT/RONO2/v2019-05/RONO2_seawater.geos.2x25.nc ETNO3 2006/1-12/1/0 C xy kg/m3 ETNO3 - 1 1 +101 MOH_SEAWATER $ROOT/MOH/v2019-12/MOH_seawater.low.kgCm3.generic.1x1.nc MOH 2005/1/1/0 C xy kg/m3 MOH - 1 1 +)))SeaFlux + +#============================================================================== +# --- SOILNOX emissions (Extension 104) --- +#============================================================================== +(((SoilNOx +104 DEP_RESERVOIR_DEFAULT $ROOT/SOILNOX/v2014-07/DepReservoirDefault.nc DEP_RESERVOIR 2013/7/1/0 C xy kg/m3 NO - 1 1 +(((HEMCO_RESTART +104 PFACTOR ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc PFACTOR $YYYY/$MM/$DD/$HH EY xy 1 NO - 1 1 +104 DRYPERIOD ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc DRYPERIOD $YYYY/$MM/$DD/$HH EY xy 1 NO - 1 1 +104 GWET_PREV ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc GWET_PREV $YYYY/$MM/$DD/$HH EY xy 1 NO - 1 1 +104 DEP_RESERVOIR ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc DEP_RESERVOIR $YYYY/$MM/$DD/$HH EY xy kg/m3 NO - 1 1 +)))HEMCO_RESTART +104 SOILNOX_FERT $ROOT/SOILNOX/v2014-07/soilNOx.fert_res.generic.05x05.nc FERT 2000/1-12/1-31/0 C xy kg/m3 NO - 1 1 +104 SOILNOX_LANDK1 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K01 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK2 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K02 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK3 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K03 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK4 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K04 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK5 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K05 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK6 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K06 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK7 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K07 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK8 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K08 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK9 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K09 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK10 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K10 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK11 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K11 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK12 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K12 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK13 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K13 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK14 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K14 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK15 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K15 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK16 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K16 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK17 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K17 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK18 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K18 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK19 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K19 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK20 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K20 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK21 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K21 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK22 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K22 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK23 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K23 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_LANDK24 $ROOT/SOILNOX/v2014-07/soilNOx.landtype.generic.025x025.1L.nc LANDFRAC_K24 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_ARID $ROOT/SOILNOX/v2014-07/soilNOx.climate.generic.05x05.nc ARID 2000/1/1/0 C xy 1 NO - 1 1 +104 SOILNOX_NONARID $ROOT/SOILNOX/v2014-07/soilNOx.climate.generic.05x05.nc NON_ARID 2000/1/1/0 C xy 1 NO - 1 1 +)))SoilNOx + +#============================================================================== +# --- Dust emissions using DEAD model (Extensions 105 and 131) --- +#============================================================================== +(((DustDead +105 DEAD_EF_GEO $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc EF_GEO 1985/1/1/0 C xy factor * - 1 1 +105 DEAD_LF_DRY $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc LF_DRY 1985/1/1/0 C xy factor * - 1 1 +105 DEAD_MF_CACO3 $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc MF_CaCO3 1985/1/1/0 C xy fraction * - 1 1 +105 DEAD_MF_CLY $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc MF_CLY 1985/1/1/0 C xy fraction * - 1 1 +105 DEAD_MF_SND $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc MF_SND 1985/1/1/0 C xy fraction * - 1 1 +105 DEAD_SFC_TYP $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc SFC_TYP 1985/1/1/0 C xy unitless * - 1 1 +105 DEAD_GOC_SRC $ROOT/DUST_DEAD/v2019-06/GOCART_src_fn.geos.2x25.nc GOC_SRC 1985/1/1/0 C xy unitless * - 1 1 +105 DEAD_VAI $ROOT/DUST_DEAD/v2019-06/dst_tvbds.geos.2x25.nc VAI 1985/1-12/1/0 C xy unitless * - 1 1 +)))DustDead +(((TOMAS_DustDead +131 DEAD_EF_GEO $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc EF_GEO 1985/1/1/0 C xy factor * - 1 1 +131 DEAD_LF_DRY $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc LF_DRY 1985/1/1/0 C xy factor * - 1 1 +131 DEAD_MF_CACO3 $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc MF_CaCO3 1985/1/1/0 C xy fraction * - 1 1 +131 DEAD_MF_CLY $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc MF_CLY 1985/1/1/0 C xy fraction * - 1 1 +131 DEAD_MF_SND $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc MF_SND 1985/1/1/0 C xy fraction * - 1 1 +131 DEAD_SFC_TYP $ROOT/DUST_DEAD/v2019-06/dst_tibds.geos.2x25.nc SFC_TYP 1985/1/1/0 C xy unitless * - 1 1 +131 DEAD_GOC_SRC $ROOT/DUST_DEAD/v2019-06/GOCART_src_fn.geos.2x25.nc GOC_SRC 1985/1/1/0 C xy unitless * - 1 1 +131 DEAD_VAI $ROOT/DUST_DEAD/v2019-06/dst_tvbds.geos.2x25.nc VAI 1985/1-12/1/0 C xy unitless * - 1 1 +)))TOMAS_DustDead + +#============================================================================== +# --- Dust emissions using Paul Ginoux's mechanism (Extension 106) +#============================================================================== +(((DustGinoux +106 GINOUX_SAND $ROOT/DUST_GINOUX/v2014-07/NSP.dust.geos.4x5.nc SAND 1985/1/1/0 C xy unitless * - 1 1 +106 GINOUX_SILT $ROOT/DUST_GINOUX/v2014-07/NSP.dust.geos.4x5.nc SILT 1985/1/1/0 C xy unitless * - 1 1 +106 GINOUX_CLAY $ROOT/DUST_GINOUX/v2014-07/NSP.dust.geos.4x5.nc CLAY 1985/1/1/0 C xy unitless * - 1 1 +)))DustGinoux + +#============================================================================== +# --- Sea salt emissions (Extensions 107 and 130) +# +# MODIS Chlorophyll-A fields used for emissions of marine organic aerosols +#============================================================================== +(((SeaSalt +107 MODIS_CHLR $ROOT/MODIS_CHLR/v2019-11/MODIS.CHLRv.V5.generic.025x025.$YYYY.nc MODIS 2005-2014/1-12/1/0 C xy 1 * - 1 1 +107 MULTISEAICE $ROOT/MULTI_ICE/v2021-07/multiyearice.merra2.05x0625.$YYYY.nc FRSEAICE 1980-2020/1-12/1-31/0 C xy 1 * - 1 1 + +# Climatology CHLR +#107 MODIS_CHLR $ROOT/MODIS_CHLR/v2019-11/MODIS.CHLRv.V5.generic.025x025.Clim.nc MODIS 2007/1-12/1/0 C xy 1 * - 1 1 +)))SeaSalt +(((TOMAS_Jeagle +130 MODIS_CHLR $ROOT/MODIS_CHLR/v2019-11/MODIS.CHLRv.V5.generic.025x025.$YYYY.nc MODIS 2005-2014/1-12/1/0 C xy 1 * - 1 1 +130 MULTISEAICE $ROOT/MULTI_ICE/v2021-07/multiyearice.merra2.05x0625.$YYYY.nc FRSEAICE 1984-2017/1-12/1-31/0 C xy 1 * - 1 1 + +# Climatology CHLR +#130 MODIS_CHLR $ROOT/MODIS_CHLR/v2019-11/MODIS.CHLRv.V5.generic.025x025.Clim.nc MODIS 2007/1-12/1/0 C xy 1 * - 1 1 +)))TOMAS_Jeagle + +#============================================================================== +# --- MEGAN biogenic emissions (Extension 108) +# +# NOTE: These are the base emissions, which will be converted to kgC/m2/s by +# HEMCO. The specified species (OCPI/ISOP/ACET) are required for proper unit +# conversion. Since netCDF files are already in mass carbon (ug(C)), the only +# important thing is to specify a VOC with a specified MW of 12g/mol. +# This is the case for OCPI, ISOP and ACET. +# +# We don't need to read EF maps for acetone, a-pinene or myrcene. We now +# compute those values in the MEGAN extension. +#============================================================================== +(((MEGAN +(((HEMCO_RESTART +108 T_DAVG ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc T_DAVG $YYYY/$MM/$DD/$HH EY xy K * - 1 1 +108 T_PREVDAY ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc T_PREVDAY $YYYY/$MM/$DD/$HH EY xy K * - 1 1 +108 LAI_PREVDAY ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc LAI_PREVDAY $YYYY/$MM/$DD/$HH EY xy 1 * - 1 1 +108 PARDR_DAVG ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc PARDR_DAVG $YYYY/$MM/$DD/$HH EY xy W/m2 * - 1 1 +108 PARDF_DAVG ./Restarts/HEMCO_restart.$YYYY$MM$DD$HH00.nc PARDF_DAVG $YYYY/$MM/$DD/$HH EY xy W/m2 * - 1 1 +)))HEMCO_RESTART +108 MEGAN_AEF_ISOP $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_ISOPRENE 1985/1/1/0 C xy kgC/m2/s * 61 1 1 +108 MEGAN_AEF_MBOX $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_MBO 1985/1/1/0 C xy kgC/m2/s * 64 1 1 +#108 MEGAN_AEF_APIN $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_ALPHA_PINENE 1985/1/1/0 C xy kgC/m2/s * 62 1 1 +108 MEGAN_AEF_BPIN $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_BETA_PINENE 1985/1/1/0 C xy kgC/m2/s * 62 1 1 +108 MEGAN_AEF_CARE $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_CARENE 1985/1/1/0 C xy kgC/m2/s * 62 1 1 +108 MEGAN_AEF_LIMO $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_LIMONENE 1985/1/1/0 C xy kgC/m2/s * 62 1 1 +#108 MEGAN_AEF_MYRC $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_MYRCENE 1985/1/1/0 C xy kgC/m2/s * 62 1 1 +108 MEGAN_AEF_OCIM $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_OCIMENE 1985/1/1/0 C xy kgC/m2/s * 62 1 1 +108 MEGAN_AEF_SABI $ROOT/MEGAN/v2018-05/MEGAN2.1_EF.geos.025x03125.nc AEF_SABINENE 1985/1/1/0 C xy kgC/m2/s * 62 1 1 +108 CLM4_PFT_BARE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BARE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_NDLF_EVGN_TMPT_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_NDLF_EVGN_TMPT_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_NDLF_EVGN_BORL_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_NDLF_EVGN_BORL_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_NDLF_DECD_BORL_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_NDLF_DECD_BORL_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_EVGN_TROP_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_EVGN_TROP_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_EVGN_TMPT_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_EVGN_TMPT_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_DECD_TROP_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_DECD_TROP_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_DECD_TMPT_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_DECD_TMPT_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_DECD_BORL_TREE $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_DECD_BORL_TREE 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_EVGN_SHRB $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_EVGN_SHRB 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_DECD_TMPT_SHRB $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_DECD_TMPT_SHRB 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_BDLF_DECD_BORL_SHRB $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_BDLF_DECD_BORL_SHRB 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_C3_ARCT_GRSS $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_C3_ARCT_GRSS 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_C3_NARC_GRSS $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_C3_NARC_GRSS 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_C4_GRSS $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_C4_GRSS 2000/1/1/0 C xy 1 * - 1 1 +108 CLM4_PFT_CROP $ROOT/MEGAN/v2018-05/CLM4_PFT.geos.025x03125.v201805.nc PFT_CROP 2000/1/1/0 C xy 1 * - 1 1 +)))MEGAN + +#============================================================================== +# --- GFED biomass burning emissions (Extension 111) +# NOTES: +# - These are the base emissions in kgDM/m2/s +# - If a year is not available, you may use the GFED4_CLIMATOLOGY option instead +#============================================================================== +(((GFED4 +111 GFED_TEMP $ROOT/GFED4/v2023-03/$YYYY/GFED4_gen.025x025.$YYYY$MM.nc DM_TEMP 1997-2022/1-12/01/0 RF xy kgDM/m2/s * - 1 1 +111 GFED_AGRI $ROOT/GFED4/v2023-03/$YYYY/GFED4_gen.025x025.$YYYY$MM.nc DM_AGRI 1997-2022/1-12/01/0 RF xy kgDM/m2/s * - 1 1 +111 GFED_DEFO $ROOT/GFED4/v2023-03/$YYYY/GFED4_gen.025x025.$YYYY$MM.nc DM_DEFO 1997-2022/1-12/01/0 RF xy kgDM/m2/s * - 1 1 +111 GFED_BORF $ROOT/GFED4/v2023-03/$YYYY/GFED4_gen.025x025.$YYYY$MM.nc DM_BORF 1997-2022/1-12/01/0 RF xy kgDM/m2/s * - 1 1 +111 GFED_PEAT $ROOT/GFED4/v2023-03/$YYYY/GFED4_gen.025x025.$YYYY$MM.nc DM_PEAT 1997-2022/1-12/01/0 RF xy kgDM/m2/s * - 1 1 +111 GFED_SAVA $ROOT/GFED4/v2023-03/$YYYY/GFED4_gen.025x025.$YYYY$MM.nc DM_SAVA 1997-2022/1-12/01/0 RF xy kgDM/m2/s * - 1 1 + +(((GFED_subgrid_coag +111 FINN_DAILY_NUMBER $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25_with_num.nc number 2002-2016/1-12/1/0 RF xy unitless * - 1 1 +)))GFED_subgrid_coag + +(((GFED_daily +111 GFED_FRAC_DAY $ROOT/GFED4/v2023-03/$YYYY/GFED4_dailyfrac_gen.025x025.$YYYY$MM.nc GFED_FRACDAY 2003-2022/1-12/1-31/0 RF xy 1 * - 1 1 +)))GFED_daily + +(((GFED_3hourly +111 GFED_FRAC_3HOUR $ROOT/GFED4/v2023-03/$YYYY/GFED4_3hrfrac_gen.025x025.$YYYY$MM.nc GFED_FRAC3HR 2003-2022/1-12/1/0-23 RF xy 1 * - 1 1 +)))GFED_3hourly +)))GFED4 + +#============================================================================== +# --- FINN v1.5 biomass burning emissions (Extension 114) +#============================================================================== +(((.not.FINN_daily +114 FINN_VEGTYP1 $ROOT/FINN/v2015-02/FINN_monthly_$YYYY_0.25x0.25.compressed.nc fire_vegtype1 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_VEGTYP2 $ROOT/FINN/v2015-02/FINN_monthly_$YYYY_0.25x0.25.compressed.nc fire_vegtype2 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_VEGTYP3 $ROOT/FINN/v2015-02/FINN_monthly_$YYYY_0.25x0.25.compressed.nc fire_vegtype3 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_VEGTYP4 $ROOT/FINN/v2015-02/FINN_monthly_$YYYY_0.25x0.25.compressed.nc fire_vegtype4 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_VEGTYP5 $ROOT/FINN/v2015-02/FINN_monthly_$YYYY_0.25x0.25.compressed.nc fire_vegtype5 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_VEGTYP9 $ROOT/FINN/v2015-02/FINN_monthly_$YYYY_0.25x0.25.compressed.nc fire_vegtype9 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +))).not.FINN_daily + +(((FINN_daily +114 FINN_DAILY_VEGTYP1 $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25.compressed.nc fire_vegtype1 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_DAILY_VEGTYP2 $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25.compressed.nc fire_vegtype2 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_DAILY_VEGTYP3 $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25.compressed.nc fire_vegtype3 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_DAILY_VEGTYP4 $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25.compressed.nc fire_vegtype4 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_DAILY_VEGTYP5 $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25.compressed.nc fire_vegtype5 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 +114 FINN_DAILY_VEGTYP9 $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25.compressed.nc fire_vegtype9 2002-2016/1-12/1/0 RF xy kg/m2/s * - 1 1 + +(((FINN_subgrid_coag +114 FINN_DAILY_NUMBER $ROOT/FINN/v2015-02/FINN_daily_$YYYY_0.25x0.25_with_num.nc number 2002-2016/1-12/1/0 RF xy unitless * - 1 1 +)))FINN_subgrid_coag + +)))FINN_daily + +)))EMISSIONS + +############################################################################### +### NON-EMISSIONS DATA (subsection of BASE EMISSIONS SECTION) +### +### Non-emissions data. The following fields are read through HEMCO but do +### not contain emissions data. The extension number is set to wildcard +### character denoting that these fields will not be considered for emission +### calculation. A given entry is only read if the assigned species name is +### an HEMCO species. +############################################################################### + +#============================================================================== +# --- Time zones (offset to UTC) --- +#============================================================================== +* TIMEZONES $ROOT/TIMEZONES/v2015-02/timezones_voronoi_1x1.nc UTC_OFFSET 2000/1/1/0 C xy count * - 1 1 + +#============================================================================== +# --- Meteorology fields --- +#============================================================================== +(((METEOROLOGY + +>>>include HEMCO_Config.rc.gmao_metfields + +)))METEOROLOGY + +#============================================================================== +# --- GEOS-Chem restart file --- +#============================================================================== +(((GC_RESTART +* SPC_ ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 SpeciesRst_?ALL? $YYYY/$MM/$DD/$HH EFYO xyz 1 * - 1 1 +* DELPDRY ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Met_DELPDRY $YYYY/$MM/$DD/$HH EY xyz 1 * - 1 1 +* KPP_HVALUE ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_KPPHvalue $YYYY/$MM/$DD/$HH EY xyz 1 * - 1 1 +* WETDEP_N ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_WetDepNitrogen $YYYY/$MM/$DD/$HH EY xy 1 * - 1 1 +* DRYDEP_N ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_DryDepNitrogen $YYYY/$MM/$DD/$HH EY xy 1 * - 1 1 +* SO2_AFTERCHEM ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_SO2AfterChem $YYYY/$MM/$DD/$HH EY xyz 1 * - 1 1 +* H2O2_AFTERCHEM ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_H2O2AfterChem $YYYY/$MM/$DD/$HH EY xyz 1 * - 1 1 +* AEROH2O_SNA ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_AeroH2OSNA $YYYY/$MM/$DD/$HH EY xyz 1 * - 1 1 +* ORVCSESQ ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_ORVCSESQ $YYYY/$MM/$DD/$HH EY xyz 1 * - 1 1 +* JOH ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_JOH $YYYY/$MM/$DD/$HH EY xy 1 * - 1 1 +* JNO2 ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_JNO2 $YYYY/$MM/$DD/$HH EY xy 1 * - 1 1 +* STATE_PSC ./Restarts/GEOSChem.Restart.$YYYY$MM$DD_$HH$MNz.nc4 Chem_StatePSC $YYYY/$MM/$DD/$HH EY xyz count * - 1 1 +)))GC_RESTART + +#============================================================================== +# --- GEOS-Chem boundary condition file --- +#============================================================================== +(((GC_BCs +* BC_ $ROOT/SAMPLE_BCs/GC_14.3.0/fullchem/GEOSChem.BoundaryConditions.$YYYY$MM$DD_$HH$MNz.nc4 SpeciesBC_?ADV? 1980-2021/1-12/1-31/* EFY xyz 1 * - 1 1 +)))GC_BCs + +(((CHEMISTRY_INPUT + +#============================================================================== +# --- UV albedo, for photolysis (cf Hermann & Celarier, 1997) --- +#============================================================================== +(((UVALBEDO +* UV_ALBEDO $ROOT/UVALBEDO/v2019-06/uvalbedo.geos.2x25.nc UVALBD 1985/1-12/1/0 C xy percent * - 1 1 +)))UVALBEDO + +#============================================================================== +# --- Stratospheric Bry data from the CCM model --- +#============================================================================== +(((CCM_STRAT_Bry +* GEOSCCM_Br_DAY $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BR 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_Br2_DAY $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BRCL 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_BrO_DAY $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BRO 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_BrNO3_DAY $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc BRONO2 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_HBr_DAY $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc HBR 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_HOBr_DAY $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.day.nc HOBR 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_Br_NIGHT $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BR 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_Br2_NIGHT $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BRCL 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_BrO_NIGHT $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BRO 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_BrNO3_NIGHT $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc BRONO2 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_HBr_NIGHT $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc HBR 2007/1-12/1/0 C xyz pptv * - 60 1 +* GEOSCCM_HOBr_NIGHT $ROOT/STRAT/v2015-01/Bry/GEOSCCM_Bry.2007$MM.night.nc HOBR 2007/1-12/1/0 C xyz pptv * - 60 1 +)))CCM_STRAT_Bry + +#============================================================================== +#--- Archived GMI OH concentrations --- +#============================================================================== +(((GMI_OH +* GMI_OH $ROOT/GMI/v2015-02/gmi.clim.OH.geos5.2x25.nc species 2005/1-12/1/0 C xyz v/v * - 1 1 +)))GMI_OH + +#============================================================================== +#--- GMI chemistry: prod/loss rates --- +# +# Used for linearized mesospheric chemistry +#============================================================================== +(((GMI_PROD_LOSS +* GMI_LOSS_A3O2 $ROOT/GMI/v2015-02/gmi.clim.A3O2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 A3O2 - 1 1 +* GMI_PROD_A3O2 $ROOT/GMI/v2015-02/gmi.clim.A3O2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s A3O2 - 1 1 +* GMI_LOSS_ACET $ROOT/GMI/v2015-02/gmi.clim.ACET.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ACET - 1 1 +* GMI_PROD_ACET $ROOT/GMI/v2015-02/gmi.clim.ACET.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ACET - 1 1 +* GMI_LOSS_ACTA $ROOT/GMI/v2015-02/gmi.clim.ACTA.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ACTA - 1 1 +* GMI_PROD_ACTA $ROOT/GMI/v2015-02/gmi.clim.ACTA.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ACTA - 1 1 +* GMI_LOSS_ALD2 $ROOT/GMI/v2015-02/gmi.clim.ALD2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ALD2 - 1 1 +* GMI_PROD_ALD2 $ROOT/GMI/v2015-02/gmi.clim.ALD2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ALD2 - 1 1 +* GMI_LOSS_ALK4 $ROOT/GMI/v2015-02/gmi.clim.ALK4.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ALK4 - 1 1 +* GMI_PROD_ALK4 $ROOT/GMI/v2015-02/gmi.clim.ALK4.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ALK4 - 1 1 +* GMI_LOSS_ATO2 $ROOT/GMI/v2015-02/gmi.clim.ATO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ATO2 - 1 1 +* GMI_PROD_ATO2 $ROOT/GMI/v2015-02/gmi.clim.ATO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ATO2 - 1 1 +* GMI_LOSS_B3O2 $ROOT/GMI/v2015-02/gmi.clim.B3O2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 B3O2 - 1 1 +* GMI_PROD_B3O2 $ROOT/GMI/v2015-02/gmi.clim.B3O2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s B3O2 - 1 1 +#* GMI_LOSS_Br $ROOT/GMI/v2015-02/gmi.clim.Br.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 Br - 1 1 +#* GMI_PROD_Br $ROOT/GMI/v2015-02/gmi.clim.Br.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s Br - 1 1 +#* GMI_LOSS_BrCl $ROOT/GMI/v2015-02/gmi.clim.BrCl.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 BrCl - 1 1 +#* GMI_PROD_BrCl $ROOT/GMI/v2015-02/gmi.clim.BrCl.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s BrCl - 1 1 +#* GMI_LOSS_BrO $ROOT/GMI/v2015-02/gmi.clim.BrO.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 BrO - 1 1 +#* GMI_PROD_BrO $ROOT/GMI/v2015-02/gmi.clim.BrO.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s BrO - 1 1 +#* GMI_LOSS_BrNO3 $ROOT/GMI/v2015-02/gmi.clim.BrONO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 BrNO3 - 1 1 +#* GMI_PROD_BrNO3 $ROOT/GMI/v2015-02/gmi.clim.BrONO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s BrNO3 - 1 1 +* GMI_LOSS_C2H6 $ROOT/GMI/v2015-02/gmi.clim.C2H6.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 C2H6 - 1 1 +* GMI_PROD_C2H6 $ROOT/GMI/v2015-02/gmi.clim.C2H6.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s C2H6 - 1 1 +* GMI_LOSS_C3H8 $ROOT/GMI/v2015-02/gmi.clim.C3H8.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 C3H8 - 1 1 +* GMI_PROD_C3H8 $ROOT/GMI/v2015-02/gmi.clim.C3H8.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s C3H8 - 1 1 +* GMI_LOSS_CCl4 $ROOT/GMI/v2015-02/gmi.clim.CCl4.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CCl4 - 1 1 +* GMI_PROD_CCl4 $ROOT/GMI/v2015-02/gmi.clim.CCl4.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CCl4 - 1 1 +#* GMI_LOSS_H1202 $ROOT/GMI/v2015-02/gmi.clim.CF2Br2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H1202 - 1 1 +#* GMI_PROD_H1202 $ROOT/GMI/v2015-02/gmi.clim.CF2Br2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H1202 - 1 1 +* GMI_LOSS_CFC12 $ROOT/GMI/v2015-02/gmi.clim.CF2Cl2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CFC12 - 1 1 +* GMI_PROD_CFC12 $ROOT/GMI/v2015-02/gmi.clim.CF2Cl2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CFC12 - 1 1 +* GMI_LOSS_H1211 $ROOT/GMI/v2015-02/gmi.clim.CF2ClBr.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H1211 - 1 1 +* GMI_PROD_H1211 $ROOT/GMI/v2015-02/gmi.clim.CF2ClBr.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H1211 - 1 1 +#* GMI_LOSS_H1311 $ROOT/GMI/v2015-02/gmi.clim.CF3Br.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H1311 - 1 1 +#* GMI_PROD_H1311 $ROOT/GMI/v2015-02/gmi.clim.CF3Br.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H1311 - 1 1 +* GMI_LOSS_CFC113 $ROOT/GMI/v2015-02/gmi.clim.CFC113.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CFC113 - 1 1 +* GMI_PROD_CFC113 $ROOT/GMI/v2015-02/gmi.clim.CFC113.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CFC113 - 1 1 +* GMI_LOSS_CFC114 $ROOT/GMI/v2015-02/gmi.clim.CFC114.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CFC114 - 1 1 +* GMI_PROD_CFC114 $ROOT/GMI/v2015-02/gmi.clim.CFC114.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CFC114 - 1 1 +* GMI_LOSS_CFC115 $ROOT/GMI/v2015-02/gmi.clim.CFC115.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CFC115 - 1 1 +* GMI_PROD_CFC115 $ROOT/GMI/v2015-02/gmi.clim.CFC115.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CFC115 - 1 1 +* GMI_LOSS_CFC11 $ROOT/GMI/v2015-02/gmi.clim.CFCl3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CFC11 - 1 1 +* GMI_PROD_CFC11 $ROOT/GMI/v2015-02/gmi.clim.CFCl3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CFC11 - 1 1 +* GMI_LOSS_CH2O $ROOT/GMI/v2015-02/gmi.clim.CH2O.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CH2O - 1 1 +* GMI_PROD_CH2O $ROOT/GMI/v2015-02/gmi.clim.CH2O.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CH2O - 1 1 +#* GMI_LOSS_CH3Br $ROOT/GMI/v2015-02/gmi.clim.CH3Br.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CH3Br - 1 1 +#* GMI_PROD_CH3Br $ROOT/GMI/v2015-02/gmi.clim.CH3Br.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CH3Br - 1 1 +* GMI_LOSS_CH3CCl3 $ROOT/GMI/v2015-02/gmi.clim.CH3CCl3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CH3CCl3 - 1 1 +* GMI_PROD_CH3CCl3 $ROOT/GMI/v2015-02/gmi.clim.CH3CCl3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CH3CCl3 - 1 1 +* GMI_LOSS_CH3Cl $ROOT/GMI/v2015-02/gmi.clim.CH3Cl.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CH3Cl - 1 1 +* GMI_PROD_CH3Cl $ROOT/GMI/v2015-02/gmi.clim.CH3Cl.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CH3Cl - 1 1 +* GMI_LOSS_CH4 $ROOT/GMI/v2015-02/gmi.clim.CH4.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CH4 - 1 1 +* GMI_PROD_CH4 $ROOT/GMI/v2015-02/gmi.clim.CH4.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CH4 - 1 1 +* GMI_LOSS_CO $ROOT/GMI/v2015-02/gmi.clim.CO.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 CO - 1 1 +* GMI_PROD_CO $ROOT/GMI/v2015-02/gmi.clim.CO.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s CO - 1 1 +* GMI_LOSS_Cl $ROOT/GMI/v2015-02/gmi.clim.Cl.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 Cl - 1 1 +* GMI_PROD_Cl $ROOT/GMI/v2015-02/gmi.clim.Cl.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s Cl - 1 1 +* GMI_LOSS_Cl2 $ROOT/GMI/v2015-02/gmi.clim.Cl2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 Cl2 - 1 1 +* GMI_PROD_Cl2 $ROOT/GMI/v2015-02/gmi.clim.Cl2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s Cl2 - 1 1 +* GMI_LOSS_Cl2O2 $ROOT/GMI/v2015-02/gmi.clim.Cl2O2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 Cl2O2 - 1 1 +* GMI_PROD_Cl2O2 $ROOT/GMI/v2015-02/gmi.clim.Cl2O2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s Cl2O2 - 1 1 +* GMI_LOSS_ClO $ROOT/GMI/v2015-02/gmi.clim.ClO.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ClO - 1 1 +* GMI_PROD_ClO $ROOT/GMI/v2015-02/gmi.clim.ClO.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ClO - 1 1 +* GMI_LOSS_ClONO2 $ROOT/GMI/v2015-02/gmi.clim.ClONO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ClONO2 - 1 1 +* GMI_PROD_ClONO2 $ROOT/GMI/v2015-02/gmi.clim.ClONO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ClONO2 - 1 1 +* GMI_LOSS_EOH $ROOT/GMI/v2015-02/gmi.clim.EOH.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 EOH - 1 1 +* GMI_PROD_EOH $ROOT/GMI/v2015-02/gmi.clim.EOH.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s EOH - 1 1 +* GMI_LOSS_ETO2 $ROOT/GMI/v2015-02/gmi.clim.ETO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ETO2 - 1 1 +* GMI_PROD_ETO2 $ROOT/GMI/v2015-02/gmi.clim.ETO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ETO2 - 1 1 +* GMI_LOSS_ETP $ROOT/GMI/v2015-02/gmi.clim.ETP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ETP - 1 1 +* GMI_PROD_ETP $ROOT/GMI/v2015-02/gmi.clim.ETP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ETP - 1 1 +* GMI_LOSS_GCO3 $ROOT/GMI/v2015-02/gmi.clim.GCO3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 GCO3 - 1 1 +* GMI_PROD_GCO3 $ROOT/GMI/v2015-02/gmi.clim.GCO3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s GCO3 - 1 1 +* GMI_LOSS_GLYC $ROOT/GMI/v2015-02/gmi.clim.GLYC.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 GLYC - 1 1 +* GMI_PROD_GLYC $ROOT/GMI/v2015-02/gmi.clim.GLYC.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s GLYC - 1 1 +* GMI_LOSS_GLYX $ROOT/GMI/v2015-02/gmi.clim.GLYX.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 GLYX - 1 1 +* GMI_PROD_GLYX $ROOT/GMI/v2015-02/gmi.clim.GLYX.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s GLYX - 1 1 +* GMI_LOSS_GP $ROOT/GMI/v2015-02/gmi.clim.GP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 GP - 1 1 +* GMI_PROD_GP $ROOT/GMI/v2015-02/gmi.clim.GP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s GP - 1 1 +* GMI_LOSS_GPAN $ROOT/GMI/v2015-02/gmi.clim.GPAN.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 GPAN - 1 1 +* GMI_PROD_GPAN $ROOT/GMI/v2015-02/gmi.clim.GPAN.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s GPAN - 1 1 +* GMI_LOSS_H $ROOT/GMI/v2015-02/gmi.clim.H.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H - 1 1 +* GMI_PROD_H $ROOT/GMI/v2015-02/gmi.clim.H.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H - 1 1 +* GMI_LOSS_H2 $ROOT/GMI/v2015-02/gmi.clim.H2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H2 - 1 1 +* GMI_PROD_H2 $ROOT/GMI/v2015-02/gmi.clim.H2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H2 - 1 1 +* GMI_LOSS_H2402 $ROOT/GMI/v2015-02/gmi.clim.H2402.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H2402 - 1 1 +* GMI_PROD_H2402 $ROOT/GMI/v2015-02/gmi.clim.H2402.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H2402 - 1 1 +* GMI_LOSS_H2O $ROOT/GMI/v2015-02/gmi.clim.H2O.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H2O - 1 1 +* GMI_PROD_H2O $ROOT/GMI/v2015-02/gmi.clim.H2O.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H2O - 1 1 +* GMI_LOSS_H2O2 $ROOT/GMI/v2015-02/gmi.clim.H2O2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 H2O2 - 1 1 +* GMI_PROD_H2O2 $ROOT/GMI/v2015-02/gmi.clim.H2O2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s H2O2 - 1 1 +* GMI_LOSS_HAC $ROOT/GMI/v2015-02/gmi.clim.HAC.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HAC - 1 1 +* GMI_PROD_HAC $ROOT/GMI/v2015-02/gmi.clim.HAC.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HAC - 1 1 +#* GMI_LOSS_HBr $ROOT/GMI/v2015-02/gmi.clim.HBr.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HBr - 1 1 +#* GMI_PROD_HBr $ROOT/GMI/v2015-02/gmi.clim.HBr.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HBr - 1 1 +* GMI_LOSS_HCFC141b $ROOT/GMI/v2015-02/gmi.clim.HCFC141b.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HCFC141b - 1 1 +* GMI_PROD_HCFC141b $ROOT/GMI/v2015-02/gmi.clim.HCFC141b.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HCFC141b - 1 1 +* GMI_LOSS_HCFC142b $ROOT/GMI/v2015-02/gmi.clim.HCFC142b.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HCFC142b - 1 1 +* GMI_PROD_HCFC142b $ROOT/GMI/v2015-02/gmi.clim.HCFC142b.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HCFC142b - 1 1 +* GMI_LOSS_HCFC22 $ROOT/GMI/v2015-02/gmi.clim.HCFC22.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HCFC22 - 1 1 +* GMI_PROD_HCFC22 $ROOT/GMI/v2015-02/gmi.clim.HCFC22.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HCFC22 - 1 1 +* GMI_LOSS_HCOOH $ROOT/GMI/v2015-02/gmi.clim.HCOOH.geos5.2x25.20170108.nc loss 2005/1-12/1/0 C xyz s-1 HCOOH - 1 1 +* GMI_PROD_HCOOH $ROOT/GMI/v2015-02/gmi.clim.HCOOH.geos5.2x25.20170108.nc prod 2005/1-12/1/0 C xyz v/v/s HCOOH - 1 1 +* GMI_LOSS_HCl $ROOT/GMI/v2015-02/gmi.clim.HCl.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HCl - 1 1 +* GMI_PROD_HCl $ROOT/GMI/v2015-02/gmi.clim.HCl.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HCl - 1 1 +* GMI_LOSS_HNO2 $ROOT/GMI/v2015-02/gmi.clim.HNO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HNO2 - 1 1 +* GMI_PROD_HNO2 $ROOT/GMI/v2015-02/gmi.clim.HNO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HNO2 - 1 1 +* GMI_LOSS_HNO3 $ROOT/GMI/v2015-02/gmi.clim.HNO3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HNO3 - 1 1 +* GMI_PROD_HNO3 $ROOT/GMI/v2015-02/gmi.clim.HNO3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HNO3 - 1 1 +* GMI_LOSS_HNO4 $ROOT/GMI/v2015-02/gmi.clim.HNO4.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HNO4 - 1 1 +* GMI_PROD_HNO4 $ROOT/GMI/v2015-02/gmi.clim.HNO4.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HNO4 - 1 1 +* GMI_LOSS_HO2 $ROOT/GMI/v2015-02/gmi.clim.HO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HO2 - 1 1 +* GMI_PROD_HO2 $ROOT/GMI/v2015-02/gmi.clim.HO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HO2 - 1 1 +#* GMI_LOSS_HOBr $ROOT/GMI/v2015-02/gmi.clim.HOBr.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HOBr - 1 1 +#* GMI_PROD_HOBr $ROOT/GMI/v2015-02/gmi.clim.HOBr.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HOBr - 1 1 +* GMI_LOSS_HOCl $ROOT/GMI/v2015-02/gmi.clim.HOCl.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 HOCl - 1 1 +* GMI_PROD_HOCl $ROOT/GMI/v2015-02/gmi.clim.HOCl.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s HOCl - 1 1 +* GMI_LOSS_IALD $ROOT/GMI/v2015-02/gmi.clim.IALD.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 IALD - 1 1 +* GMI_PROD_IALD $ROOT/GMI/v2015-02/gmi.clim.IALD.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s IALD - 1 1 +* GMI_LOSS_IAO2 $ROOT/GMI/v2015-02/gmi.clim.IAO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 IAO2 - 1 1 +* GMI_PROD_IAO2 $ROOT/GMI/v2015-02/gmi.clim.IAO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s IAO2 - 1 1 +* GMI_LOSS_IAP $ROOT/GMI/v2015-02/gmi.clim.IAP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 IAP - 1 1 +* GMI_PROD_IAP $ROOT/GMI/v2015-02/gmi.clim.IAP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s IAP - 1 1 +* GMI_LOSS_INO2 $ROOT/GMI/v2015-02/gmi.clim.INO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 INO2 - 1 1 +* GMI_PROD_INO2 $ROOT/GMI/v2015-02/gmi.clim.INO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s INO2 - 1 1 +* GMI_LOSS_INPN $ROOT/GMI/v2015-02/gmi.clim.INPN.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 INPN - 1 1 +* GMI_PROD_INPN $ROOT/GMI/v2015-02/gmi.clim.INPN.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s INPN - 1 1 +* GMI_LOSS_ISN1 $ROOT/GMI/v2015-02/gmi.clim.ISN1.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ISN1 - 1 1 +* GMI_PROD_ISN1 $ROOT/GMI/v2015-02/gmi.clim.ISN1.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ISN1 - 1 1 +* GMI_LOSS_ISNP $ROOT/GMI/v2015-02/gmi.clim.ISNP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ISNP - 1 1 +* GMI_PROD_ISNP $ROOT/GMI/v2015-02/gmi.clim.ISNP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ISNP - 1 1 +* GMI_LOSS_ISOP $ROOT/GMI/v2015-02/gmi.clim.ISOP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ISOP - 1 1 +* GMI_PROD_ISOP $ROOT/GMI/v2015-02/gmi.clim.ISOP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ISOP - 1 1 +* GMI_LOSS_KO2 $ROOT/GMI/v2015-02/gmi.clim.KO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 KO2 - 1 1 +* GMI_PROD_KO2 $ROOT/GMI/v2015-02/gmi.clim.KO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s KO2 - 1 1 +* GMI_LOSS_MACR $ROOT/GMI/v2015-02/gmi.clim.MACR.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MACR - 1 1 +* GMI_PROD_MACR $ROOT/GMI/v2015-02/gmi.clim.MACR.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MACR - 1 1 +* GMI_LOSS_MAN2 $ROOT/GMI/v2015-02/gmi.clim.MAN2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MAN2 - 1 1 +* GMI_PROD_MAN2 $ROOT/GMI/v2015-02/gmi.clim.MAN2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MAN2 - 1 1 +* GMI_LOSS_MAO3 $ROOT/GMI/v2015-02/gmi.clim.MAO3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MAO3 - 1 1 +* GMI_PROD_MAO3 $ROOT/GMI/v2015-02/gmi.clim.MAO3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MAO3 - 1 1 +* GMI_LOSS_MAOP $ROOT/GMI/v2015-02/gmi.clim.MAOP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MAOP - 1 1 +* GMI_PROD_MAOP $ROOT/GMI/v2015-02/gmi.clim.MAOP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MAOP - 1 1 +* GMI_LOSS_MAP $ROOT/GMI/v2015-02/gmi.clim.MAP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MAP - 1 1 +* GMI_PROD_MAP $ROOT/GMI/v2015-02/gmi.clim.MAP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MAP - 1 1 +* GMI_LOSS_MCO3 $ROOT/GMI/v2015-02/gmi.clim.MCO3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MCO3 - 1 1 +* GMI_PROD_MCO3 $ROOT/GMI/v2015-02/gmi.clim.MCO3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MCO3 - 1 1 +* GMI_LOSS_MEK $ROOT/GMI/v2015-02/gmi.clim.MEK.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MEK - 1 1 +* GMI_PROD_MEK $ROOT/GMI/v2015-02/gmi.clim.MEK.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MEK - 1 1 +* GMI_LOSS_MGLY $ROOT/GMI/v2015-02/gmi.clim.MGLY.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MGLY - 1 1 +* GMI_PROD_MGLY $ROOT/GMI/v2015-02/gmi.clim.MGLY.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MGLY - 1 1 +* GMI_LOSS_MO2 $ROOT/GMI/v2015-02/gmi.clim.MO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MO2 - 1 1 +* GMI_PROD_MO2 $ROOT/GMI/v2015-02/gmi.clim.MO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MO2 - 1 1 +* GMI_LOSS_MOH $ROOT/GMI/v2015-02/gmi.clim.MOH.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MOH - 1 1 +* GMI_PROD_MOH $ROOT/GMI/v2015-02/gmi.clim.MOH.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MOH - 1 1 +* GMI_LOSS_MP $ROOT/GMI/v2015-02/gmi.clim.MP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MP - 1 1 +* GMI_PROD_MP $ROOT/GMI/v2015-02/gmi.clim.MP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MP - 1 1 +* GMI_LOSS_MRO2 $ROOT/GMI/v2015-02/gmi.clim.MRO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MRO2 - 1 1 +* GMI_PROD_MRO2 $ROOT/GMI/v2015-02/gmi.clim.MRO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MRO2 - 1 1 +* GMI_LOSS_MRP $ROOT/GMI/v2015-02/gmi.clim.MRP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MRP - 1 1 +* GMI_PROD_MRP $ROOT/GMI/v2015-02/gmi.clim.MRP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MRP - 1 1 +* GMI_LOSS_MVK $ROOT/GMI/v2015-02/gmi.clim.MVK.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MVK - 1 1 +* GMI_PROD_MVK $ROOT/GMI/v2015-02/gmi.clim.MVK.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MVK - 1 1 +* GMI_LOSS_MVN2 $ROOT/GMI/v2015-02/gmi.clim.MVN2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 MVN2 - 1 1 +* GMI_PROD_MVN2 $ROOT/GMI/v2015-02/gmi.clim.MVN2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s MVN2 - 1 1 +* GMI_LOSS_N $ROOT/GMI/v2015-02/gmi.clim.N.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 N - 1 1 +* GMI_PROD_N $ROOT/GMI/v2015-02/gmi.clim.N.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s N - 1 1 +* GMI_LOSS_N2O $ROOT/GMI/v2015-02/gmi.clim.N2O.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 N2O - 1 1 +* GMI_PROD_N2O $ROOT/GMI/v2015-02/gmi.clim.N2O.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s N2O - 1 1 +* GMI_LOSS_N2O5 $ROOT/GMI/v2015-02/gmi.clim.N2O5.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 N2O5 - 1 1 +* GMI_PROD_N2O5 $ROOT/GMI/v2015-02/gmi.clim.N2O5.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s N2O5 - 1 1 +* GMI_LOSS_NO $ROOT/GMI/v2015-02/gmi.clim.NO.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 NO - 1 1 +* GMI_PROD_NO $ROOT/GMI/v2015-02/gmi.clim.NO.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s NO - 1 1 +* GMI_LOSS_NO2 $ROOT/GMI/v2015-02/gmi.clim.NO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 NO2 - 1 1 +* GMI_PROD_NO2 $ROOT/GMI/v2015-02/gmi.clim.NO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s NO2 - 1 1 +* GMI_LOSS_NO3 $ROOT/GMI/v2015-02/gmi.clim.NO3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 NO3 - 1 1 +* GMI_PROD_NO3 $ROOT/GMI/v2015-02/gmi.clim.NO3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s NO3 - 1 1 +* GMI_LOSS_NOx $ROOT/GMI/v2015-02/gmi.clim.NOx.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 NOx - 1 1 +* GMI_PROD_NOx $ROOT/GMI/v2015-02/gmi.clim.NOx.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s NOx - 1 1 +* GMI_LOSS_O $ROOT/GMI/v2015-02/gmi.clim.O.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 O - 1 1 +* GMI_PROD_O $ROOT/GMI/v2015-02/gmi.clim.O.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s O - 1 1 +* GMI_LOSS_O1D $ROOT/GMI/v2015-02/gmi.clim.O1D.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 O1D - 1 1 +* GMI_PROD_O1D $ROOT/GMI/v2015-02/gmi.clim.O1D.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s O1D - 1 1 +* GMI_LOSS_O3 $ROOT/GMI/v2015-02/gmi.clim.O3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 O3 - 1 1 +* GMI_PROD_O3 $ROOT/GMI/v2015-02/gmi.clim.O3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s O3 - 1 1 +* GMI_LOSS_OClO $ROOT/GMI/v2015-02/gmi.clim.OClO.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 OClO - 1 1 +* GMI_PROD_OClO $ROOT/GMI/v2015-02/gmi.clim.OClO.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s OClO - 1 1 +* GMI_LOSS_OH $ROOT/GMI/v2015-02/gmi.clim.OH.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 OH - 1 1 +* GMI_PROD_OH $ROOT/GMI/v2015-02/gmi.clim.OH.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s OH - 1 1 +* GMI_LOSS_Ox $ROOT/GMI/v2015-02/gmi.clim.Ox.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 Ox - 1 1 +* GMI_PROD_Ox $ROOT/GMI/v2015-02/gmi.clim.Ox.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s Ox - 1 1 +* GMI_LOSS_PAN $ROOT/GMI/v2015-02/gmi.clim.PAN.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 PAN - 1 1 +* GMI_PROD_PAN $ROOT/GMI/v2015-02/gmi.clim.PAN.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s PAN - 1 1 +* GMI_LOSS_NPMN $ROOT/GMI/v2015-02/gmi.clim.NPMN.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 NPMN - 1 1 +* GMI_PROD_NPMN $ROOT/GMI/v2015-02/gmi.clim.NPMN.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s NPMN - 1 1 +* GMI_LOSS_IPMN $ROOT/GMI/v2015-02/gmi.clim.IPMN.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 IPMN - 1 1 +* GMI_PROD_IPMN $ROOT/GMI/v2015-02/gmi.clim.IPMN.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s IPMN - 1 1 +* GMI_LOSS_PO2 $ROOT/GMI/v2015-02/gmi.clim.PO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 PO2 - 1 1 +* GMI_PROD_PO2 $ROOT/GMI/v2015-02/gmi.clim.PO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s PO2 - 1 1 +* GMI_LOSS_PP $ROOT/GMI/v2015-02/gmi.clim.PP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 PP - 1 1 +* GMI_PROD_PP $ROOT/GMI/v2015-02/gmi.clim.PP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s PP - 1 1 +* GMI_LOSS_PPN $ROOT/GMI/v2015-02/gmi.clim.PPN.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 PPN - 1 1 +* GMI_PROD_PPN $ROOT/GMI/v2015-02/gmi.clim.PPN.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s PPN - 1 1 +* GMI_LOSS_PRN1 $ROOT/GMI/v2015-02/gmi.clim.PRN1.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 PRN1 - 1 1 +* GMI_PROD_PRN1 $ROOT/GMI/v2015-02/gmi.clim.PRN1.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s PRN1 - 1 1 +* GMI_LOSS_PRPE $ROOT/GMI/v2015-02/gmi.clim.PRPE.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 PRPE - 1 1 +* GMI_PROD_PRPE $ROOT/GMI/v2015-02/gmi.clim.PRPE.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s PRPE - 1 1 +* GMI_LOSS_PRPN $ROOT/GMI/v2015-02/gmi.clim.PRPN.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 PRPN - 1 1 +* GMI_PROD_PRPN $ROOT/GMI/v2015-02/gmi.clim.PRPN.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s PRPN - 1 1 +* GMI_LOSS_R4N1 $ROOT/GMI/v2015-02/gmi.clim.R4N1.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 R4N1 - 1 1 +* GMI_PROD_R4N1 $ROOT/GMI/v2015-02/gmi.clim.R4N1.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s R4N1 - 1 1 +* GMI_LOSS_R4N2 $ROOT/GMI/v2015-02/gmi.clim.R4N2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 R4N2 - 1 1 +* GMI_PROD_R4N2 $ROOT/GMI/v2015-02/gmi.clim.R4N2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s R4N2 - 1 1 +* GMI_LOSS_R4O2 $ROOT/GMI/v2015-02/gmi.clim.R4O2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 R4O2 - 1 1 +* GMI_PROD_R4O2 $ROOT/GMI/v2015-02/gmi.clim.R4O2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s R4O2 - 1 1 +* GMI_LOSS_R4P $ROOT/GMI/v2015-02/gmi.clim.R4P.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 R4P - 1 1 +* GMI_PROD_R4P $ROOT/GMI/v2015-02/gmi.clim.R4P.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s R4P - 1 1 +* GMI_LOSS_RA3P $ROOT/GMI/v2015-02/gmi.clim.RA3P.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RA3P - 1 1 +* GMI_PROD_RA3P $ROOT/GMI/v2015-02/gmi.clim.RA3P.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RA3P - 1 1 +* GMI_LOSS_RB3P $ROOT/GMI/v2015-02/gmi.clim.RB3P.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RB3P - 1 1 +* GMI_PROD_RB3P $ROOT/GMI/v2015-02/gmi.clim.RB3P.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RB3P - 1 1 +* GMI_LOSS_RCHO $ROOT/GMI/v2015-02/gmi.clim.RCHO.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RCHO - 1 1 +* GMI_PROD_RCHO $ROOT/GMI/v2015-02/gmi.clim.RCHO.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RCHO - 1 1 +* GMI_LOSS_RCO3 $ROOT/GMI/v2015-02/gmi.clim.RCO3.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RCO3 - 1 1 +* GMI_PROD_RCO3 $ROOT/GMI/v2015-02/gmi.clim.RCO3.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RCO3 - 1 1 +* GMI_LOSS_RCOOH $ROOT/GMI/v2015-02/gmi.clim.RCOOH.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RCOOH - 1 1 +* GMI_PROD_RCOOH $ROOT/GMI/v2015-02/gmi.clim.RCOOH.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RCOOH - 1 1 +* GMI_LOSS_RIO1 $ROOT/GMI/v2015-02/gmi.clim.RIO1.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RIO1 - 1 1 +* GMI_PROD_RIO1 $ROOT/GMI/v2015-02/gmi.clim.RIO1.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RIO1 - 1 1 +* GMI_LOSS_RIPA $ROOT/GMI/v2015-02/gmi.clim.RIPA.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RIPA - 1 1 +* GMI_PROD_RIPA $ROOT/GMI/v2015-02/gmi.clim.RIPA.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RIPA - 1 1 +* GMI_LOSS_RIPB $ROOT/GMI/v2015-02/gmi.clim.RIPB.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RIPB - 1 1 +* GMI_PROD_RIPB $ROOT/GMI/v2015-02/gmi.clim.RIPB.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RIPB - 1 1 +* GMI_LOSS_RIPD $ROOT/GMI/v2015-02/gmi.clim.RIPD.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RIPD - 1 1 +* GMI_PROD_RIPD $ROOT/GMI/v2015-02/gmi.clim.RIPD.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RIPD - 1 1 +* GMI_LOSS_ROH $ROOT/GMI/v2015-02/gmi.clim.ROH.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 ROH - 1 1 +* GMI_PROD_ROH $ROOT/GMI/v2015-02/gmi.clim.ROH.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s ROH - 1 1 +* GMI_LOSS_RP $ROOT/GMI/v2015-02/gmi.clim.RP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 RP - 1 1 +* GMI_PROD_RP $ROOT/GMI/v2015-02/gmi.clim.RP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s RP - 1 1 +* GMI_LOSS_VRO2 $ROOT/GMI/v2015-02/gmi.clim.VRO2.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 VRO2 - 1 1 +* GMI_PROD_VRO2 $ROOT/GMI/v2015-02/gmi.clim.VRO2.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s VRO2 - 1 1 +* GMI_LOSS_VRP $ROOT/GMI/v2015-02/gmi.clim.VRP.geos5.2x25.nc loss 2005/1-12/1/0 C xyz s-1 VRP - 1 1 +* GMI_PROD_VRP $ROOT/GMI/v2015-02/gmi.clim.VRP.geos5.2x25.nc prod 2005/1-12/1/0 C xyz v/v/s VRP - 1 1 +)))GMI_PROD_LOSS + +#============================================================================== +# --- Spatially varying OM/OC --- +#============================================================================== +(((OMOC_RATIO +* OMOC_DJF $ROOT/OMOC/v2018-01/OMOC.DJF.01x01.nc OMOC 2010/1/1/0 C xy 1 * - 1 1 +* OMOC_MAM $ROOT/OMOC/v2018-01/OMOC.MAM.01x01.nc OMOC 2010/1/1/0 C xy 1 * - 1 1 +* OMOC_JJA $ROOT/OMOC/v2018-01/OMOC.JJA.01x01.nc OMOC 2010/1/1/0 C xy 1 * - 1 1 +* OMOC_SON $ROOT/OMOC/v2018-01/OMOC.SON.01x01.nc OMOC 2010/1/1/0 C xy 1 * - 1 1 +)))OMOC_RATIO + +)))CHEMISTRY_INPUT + +#============================================================================== +# --- NOAA GMD monthly mean surface CH4 --- +#============================================================================== +(((GMD_SFC_CH4 +* NOAA_GMD_CH4 $ROOT/NOAA_GMD/v2018-01/monthly.gridded.surface.methane.1979-2020.1x1.nc SFC_CH4 1979-2020/1-12/1/0 RY xy ppbv * - 1 1 +)))GMD_SFC_CH4 + +#============================================================================== +# --- CMIP6 monthly mean surface CH4 --- +# NOTE: This is only used if NOAA data is unavailable (pre 1979) +#============================================================================== +(((CMIP6_SFC_CH4 +* CMIP6_Sfc_CH4 $ROOT/CMIP6/v2020-03/2x2.5/CMIP6_GHG_surface_VMR_$YYYY.2x25.nc CH4 1750-1978/1-12/1/0 EY xy ppbv * - 1 1 +)))CMIP6_SFC_CH4 + +#============================================================================== +# --- Olson land map masks --- +#============================================================================== +(((OLSON_LANDMAP +* LANDTYPE00 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE00 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE01 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE01 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE02 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE02 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE03 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE03 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE04 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE04 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE05 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE05 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE06 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE06 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE07 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE07 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE08 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE08 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE09 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE09 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE10 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE10 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE11 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE11 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE12 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE12 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE13 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE13 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE14 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE14 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE15 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE15 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE16 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE16 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE17 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE17 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE18 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE18 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE19 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE19 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE20 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE20 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE21 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE21 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE22 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE22 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE23 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE23 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE24 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE24 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE25 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE25 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE26 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE26 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE27 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE27 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE28 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE28 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE29 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE29 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE30 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE30 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE31 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE31 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE32 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE32 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE33 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE33 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE34 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE34 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE35 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE35 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE36 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE36 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE37 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE37 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE38 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE38 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE39 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE39 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE40 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE40 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE41 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE41 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE42 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE42 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE43 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE43 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE44 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE44 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE45 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE45 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE46 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE46 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE47 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE47 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE48 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE48 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE49 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE49 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE50 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE50 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE51 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE51 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE52 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE52 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE53 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE53 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE54 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE54 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE55 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE55 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE56 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE56 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE57 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE57 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE58 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE58 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE59 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE59 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE60 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE60 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE61 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE61 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE62 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE62 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE63 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE63 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE64 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE64 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE65 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE65 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE66 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE66 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE67 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE67 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE68 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE68 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE69 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE69 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE70 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE70 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE71 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE71 1985/1/1/0 C xy 1 * - 1 1 +* LANDTYPE72 $ROOT/OLSON_MAP/v2019-02/Olson_2001_Land_Type_Masks.025x025.generic.nc LANDTYPE72 1985/1/1/0 C xy 1 * - 1 1 +)))OLSON_LANDMAP + +#============================================================================== +# --- Yuan processed MODIS leaf area index data --- +# +# Source: Yuan et al 2011, doi:10.1016/j.rse.2011.01.001 +# http://globalchange.bnu.edu.cn/research/lai +# +# NOTES: +# (1) LAI data corresponding to each Olson land type is stored in +# separate netCDF variables (XLAI00, XLAI01, ... XLAI72). +# The "XLAI" denotes that the files are prepared in this way. +# (2) Units are "cm2 leaf/cm2 grid box". +# (3) Data is timestamped every 8 days, starting from the 2nd of the month. +#============================================================================== +(((YUAN_MODIS_LAI +* XLAI00 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI00 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI01 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI01 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI02 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI02 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI03 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI03 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI04 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI04 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI05 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI05 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI06 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI06 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI07 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI07 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI08 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI08 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI09 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI09 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI10 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI10 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI11 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI11 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI12 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI12 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI13 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI13 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI14 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI14 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI15 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI15 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI16 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI16 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI17 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI17 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI18 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI18 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI19 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI19 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI20 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI20 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI21 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI21 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI22 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI22 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI23 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI23 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI24 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI24 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI25 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI25 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI26 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI26 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI27 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI27 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI28 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI28 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI29 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI29 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI30 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI30 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI31 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI31 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI32 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI32 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI33 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI33 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI34 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI34 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI35 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI35 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI36 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI36 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI37 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI37 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI38 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI38 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI39 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI39 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI40 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI40 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI41 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI41 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI42 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI42 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI43 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI43 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI44 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI44 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI45 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI45 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI46 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI46 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI47 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI47 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI48 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI48 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI49 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI49 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI50 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI50 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI51 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI51 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI52 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI52 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI53 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI53 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI54 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI54 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI55 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI55 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI56 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI56 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI57 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI57 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI58 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI58 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI59 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI59 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI60 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI60 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI61 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI61 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI62 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI62 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI63 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI63 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI64 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI64 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI65 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI65 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI66 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI66 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI67 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI67 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI68 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI68 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI69 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI69 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI70 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI70 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI71 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI71 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +* XLAI72 $ROOT/Yuan_XLAI/v2021-06/Yuan_proc_MODIS_XLAI.025x025.$YYYY.nc XLAI72 2000-2020/1-12/1-31/0 I xy cm2/cm2 * - 1 1 +)))YUAN_MODIS_LAI + +#============================================================================== +# --- Inputs for the RRTMG radiative transfer model --- +# +# NOTE: The 2 x 2.5 albedo fields and emissivity fields will produce +# differences at the level of numerical noise when comparing output to +# simulations from prior versions (esp. when running at 4 x 5 resolution). +# You might see larger differences w/r/t prior verisons for a few grid boxes +# along the coastline of Antarctica, where the difference in resolution +# and regridding will be more apparent in the sharp transition from ice to +# ocean. If this is a problem, you can use the data files at 4x5 resolution +# for 4x5 RRTMG simulations. +# +# ALSO NOTE: The algorithm that HEMCO uses to select each time slice is +# likely different than what was implemented when reading the old bpch +# data from disk. This can also cause differences when comparing to +# prior versions. +#============================================================================== +(((RRTMG +* MODIS_ALBDFNIR $ROOT/RRTMG/v2018-11/modis_surf_albedo.2x25.nc ALBDFNIR 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_ALBDFVIS $ROOT/RRTMG/v2018-11/modis_surf_albedo.2x25.nc ALBDFVIS 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_ALBDRNIR $ROOT/RRTMG/v2018-11/modis_surf_albedo.2x25.nc ALBDRNIR 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_ALBDRVIS $ROOT/RRTMG/v2018-11/modis_surf_albedo.2x25.nc ALBDRVIS 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_01 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band01 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_02 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band02 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_03 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band03 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_04 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band04 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_05 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band05 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_06 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band06 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_07 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band07 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_08 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band08 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_09 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band09 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_10 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band10 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_11 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band11 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_12 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band12 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_13 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band13 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_14 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band14 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_15 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band15 2002/1-12/1-31/0 C xy 1 * - 1 1 +* MODIS_EMISSIVITY_16 $ROOT/RRTMG/v2018-11/modis_emissivity.2x25.nc RTEMISS_band16 2002/1-12/1-31/0 C xy 1 * - 1 1 +* TES_CLIM_CCL4 $ROOT/RRTMG/v2018-11/species_clim_profiles.2x25.nc CCl4 2000/1/1/0 C xyz ppbv * - 1 1 +* TES_CLIM_CFC11 $ROOT/RRTMG/v2018-11/species_clim_profiles.2x25.nc CFC11 2000/1/1/0 C xyz ppbv * - 1 1 +* TES_CLIM_CFC12 $ROOT/RRTMG/v2018-11/species_clim_profiles.2x25.nc CFC12 2000/1/1/0 C xyz ppbv * - 1 1 +* TES_CLIM_CFC22 $ROOT/RRTMG/v2018-11/species_clim_profiles.2x25.nc CFC22 2000/1/1/0 C xyz ppbv * - 1 1 +* TES_CLIM_CH4 $ROOT/RRTMG/v2018-11/species_clim_profiles.2x25.nc CH4 2000/1/1/0 C xyz ppbv * - 1 1 +* TES_CLIM_N2O $ROOT/RRTMG/v2018-11/species_clim_profiles.2x25.nc N2O 2000/1/1/0 C xyz ppbv * - 1 1 +)))RRTMG + +(((SfcVMR +#============================================================================== +# --- CMIP6 files --- +# +# Use core CMIP6 observationally constrained data from Meinshausen et al. (2017) GMD +#============================================================================== +* SfcVMR_CH3Cl $ROOT/CMIP6/v2020-03/2x2.5/CMIP6_GHG_surface_VMR_$YYYY.2x25.nc CH3Cl 1750-2014/1-12/1/0 C xy ppbv * 801 1 1 +* SfcVMR_CH2Cl2 $ROOT/CMIP6/v2020-03/2x2.5/CMIP6_GHG_surface_VMR_$YYYY.2x25.nc CH2Cl2 1750-2014/1-12/1/0 C xy ppbv * 801 1 1 +* SfcVMR_CHCl3 $ROOT/CMIP6/v2020-03/2x2.5/CMIP6_GHG_surface_VMR_$YYYY.2x25.nc CHCl3 1750-2014/1-12/1/0 C xy ppbv * 801 1 1 +* SfcVMR_CH3Br $ROOT/CMIP6/v2020-03/2x2.5/CMIP6_GHG_surface_VMR_$YYYY.2x25.nc CH3Br 1750-2014/1-12/1/0 C xy ppbv * 801 1 1 + +#============================================================================== +# --- WMO-2018 files (GMI) --- +#============================================================================== +* SfcVMR_CCl4 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CCl4 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_CFC113 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CFC113 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_CFC114 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CFC114 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_CFC115 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CFC115 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_CFC11 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CFC11 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_CFC12 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CFC12 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +#* SfcVMR_CH3Br $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CH3Br 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_CH3CCl3 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CH3CCl3 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +#* SfcVMR_CH3Cl $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CH3Cl 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +#* SfcVMR_CH4 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc CH4 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_H1211 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc H1211 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_H1301 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc H1301 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_H2402 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc C2BR2F4 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_HCFC141b $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc HCFC141b 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_HCFC142b $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc HCFC142b 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_HCFC22 $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc HCFC22 1960-2100/1-12/1/0 C xy v/v * 802 1 1 +* SfcVMR_N2O $ROOT/SfcFix/v2019-12/WMO_2018/2x2.5/surface_VMRs_WMO2018_$YYYY.2x25.nc N2O 1960-2100/1-12/1/0 C xy v/v * 802 1 1 + +#============================================================================== +# --- Dummy files with a single surface concentration (for OCS and H2) --- +#============================================================================== +* SfcVMR_OCS $ROOT/SfcFix/v2019-12/surface_VMR_OCS.2x25.nc OCS 1985/1/1/0 C xy ppbv * - 1 1 +* SfcVMR_H2 $ROOT/SfcFix/v2019-12/surface_VMR_H2.2x25.nc H2 1985/1/1/0 C xy ppbv * - 1 1 +)))SfcVMR + +(((CMIP6_SFC_BC + +#============================================================================== +# --- CMIP6 surface boundary conditions for 1750-2100 --- +#============================================================================== + +# Commented-out tracers do not exist in GEOS-Chem yet +# * SfcVMR_C2F6 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 C2F6 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_C3F8 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 C3F8 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_C4F10 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 C4F10 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_C5F12 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 C5F12 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_C6F14 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 C6F14 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_C7F16 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 C7F16 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_C8F18 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 C8F18 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_CC4F8 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CC4F8 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +* SfcVMR_CCl4 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CCl4 1750-2100/1-12/1/0 RY xy v/v CCl4 802 1 1 +# * SfcVMR_CF4 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CF4 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +* SfcVMR_CFC11 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CFC11 1750-2100/1-12/1/0 RY xy v/v CFC11 802 1 1 +* SfcVMR_CFC113 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CFC113 1750-2100/1-12/1/0 RY xy v/v CFC113 802 1 1 +* SfcVMR_CFC114 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CFC114 1750-2100/1-12/1/0 RY xy v/v CFC114 802 1 1 +* SfcVMR_CFC115 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CFC115 1750-2100/1-12/1/0 RY xy v/v CFC115 802 1 1 +* SfcVMR_CFC12 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CFC12 1750-2100/1-12/1/0 RY xy v/v CFC12 802 1 1 +* SfcVMR_CH2Cl2 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CH2Cl2 1750-2100/1-12/1/0 RY xy v/v CH2Cl2 802 1 1 +* SfcVMR_CH3Br $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CH3Br 1750-2100/1-12/1/0 RY xy v/v CH3Br 802 1 1 +* SfcVMR_CH3CCl3 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CH3CCl3 1750-2100/1-12/1/0 RY xy v/v CH3CCl3 802 1 1 +* SfcVMR_CH3Cl $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CH3Cl 1750-2100/1-12/1/0 RY xy v/v CH3Cl 802 1 1 +* SfcVMR_CH4 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CH4 1750-2100/1-12/1/0 RY xy v/v CH4 802 1 1 +* SfcVMR_CHCl3 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CHCl3 1750-2100/1-12/1/0 RY xy v/v CHCl3 802 1 1 +# * SfcVMR_CO2 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 CO2 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +* SfcVMR_H1211 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 H1211 1750-2100/1-12/1/0 RY xy v/v H1211 802 1 1 +* SfcVMR_H1301 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 H1301 1750-2100/1-12/1/0 RY xy v/v H1301 802 1 1 +* SfcVMR_H2402 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 H2402 1750-2100/1-12/1/0 RY xy v/v H2402 802 1 1 +# SFC_BC_HCFC123 <- exists in UCX with lifetime of 2 years but has no surface boundary conditions; 200-600 pptv in https://doi.org/10.1021/es802308m +* SfcVMR_HCFC141b $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HCFC141b 1750-2100/1-12/1/0 RY xy v/v HCFC141b 802 1 1 +* SfcVMR_HCFC142b $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HCFC142b 1750-2100/1-12/1/0 RY xy v/v HCFC142b 802 1 1 +* SfcVMR_HCFC22 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HCFC22 1750-2100/1-12/1/0 RY xy v/v HCFC22 802 1 1 +# * SfcVMR_HFC125 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC125 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC134a $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC134a 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC143a $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC143a 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC152a $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC152a 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC227ea $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC227ea 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC23 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC23 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC236fa $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC236fa 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC245fa $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC245fa 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC32 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC32 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC365mfc $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC365mfc 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_HFC4310mee $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 HFC4310mee 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +* SfcVMR_N2O $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 N2O 1750-2100/1-12/1/0 RY xy v/v N2O 802 1 1 +# * SfcVMR_NF3 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 NF3 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_SF6 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 SF6 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 +# * SfcVMR_SO2F2 $ROOT/CMIP6/v2021-01/$GCAPSCENARIO/$GCAPSCENARIO_BC_$YYYY.nc4 SO2F2 1750-2100/1-12/1/0 RY xy v/v * 802 1 1 + +#============================================================================== +# -- Not part of CMIP6 experimental design; use GEOS-Chem defaults +#============================================================================== +* SfcVMR_OCS $ROOT/SfcFix/v2019-12/surface_VMR_OCS.2x25.nc OCS 1985/1/1/0 C xy ppbv * - 1 1 +* SfcVMR_H2 $ROOT/SfcFix/v2019-12/surface_VMR_H2.2x25.nc H2 1985/1/1/0 C xy ppbv * - 1 1 + +)))CMIP6_SFC_BC + +#============================================================================== +# --- Oceanic ozone deposition --- +# +# Sea surface iodide concentration and salinity to be read in for the +# new calculations for ozone deposition to the ocean +#============================================================================== +(((OCEAN_O3_DRYDEP +* surf_salinity $ROOT/OCEAN_O3_DRYDEP/v2020-02/WOA_2013_salinity.nc s_mn 1985/1/1/0 C xy 1 * - 1 1 +* surf_iodide $ROOT/OCEAN_O3_DRYDEP/v2020-02/Oi_prj_predicted_iodide_0.125x0.125_No_Skagerrak_Just_Ensemble.nc Ensemble_Monthly_mean 1970/1-12/1/0 C xy 1 * - 1 1 +)))OCEAN_O3_DRYDEP + +### END SECTION BASE EMISSIONS ### + +############################################################################### +### BEGIN SECTION SCALE FACTORS +############################################################################### + +# ScalID Name sourceFile sourceVar sourceTime C/R/E SrcDim SrcUnit Oper + +(((EMISSIONS + +#============================================================================== +# --- Annual scale factors --- +#============================================================================== +(((XIAO_C3H8 +6 LIQFUEL_THISYR $ROOT/AnnualScalar/v2014-07/AnnualScalar.geos.1x1.nc COscalar 1985-2010/1/1/0 C xy 1 1 +7 LIQFUEL_1985 $ROOT/AnnualScalar/v2014-07/AnnualScalar.geos.1x1.nc COscalar 1985/1/1/0 C xy 1 -1 +)))XIAO_C3H8 + +#============================================================================== +# --- Diurnal scale factors --- +#============================================================================== +25 EDGAR_TODNOX $ROOT/EDGARv42/v2015-02/NO/EDGAR_hourly_NOxScal.nc NOXscale 2000/1/1/* C xy unitless 1 +26 GEIA_TOD_FOSSIL 0.45/0.45/0.6/0.6/0.6/0.6/1.45/1.45/1.45/1.45/1.4/1.4/1.4/1.4/1.45/1.45/1.45/1.45/0.65/0.65/0.65/0.65/0.45/0.45 - - - xy unitless 1 + +#============================================================================== +# Diurnal variablity of Chinese power plants from Liu et al. (EST, 2019) +#============================================================================== +33 PKU_pow_NOx 0.94/0.93/0.93/0.92/0.93/0.96/0.98/0.99/0.98/1.00/1.05/1.03/1.01/1.04/1.05/1.05/1.07/1.06/1.05/1.05/1.03/1.01/0.99/0.96 - - - xy unitless 1 1009 +34 PKU_pow_SO2 0.92/0.91/0.90/0.89/0.90/0.93/0.97/0.98/0.99/1.02/1.07/1.04/1.03/1.06/1.06/1.07/1.10/1.10/1.06/1.05/1.03/1.01/0.99/0.93 - - - xy unitless 1 1009 +35 PKU_pow_PM_BC_POC_VOC_CO 0.95/0.93/0.92/0.91/0.90/0.93/0.97/0.97/0.99/1.03/1.04/1.03/1.02/1.03/1.05/1.07/1.07/1.07/1.06/1.04/1.03/1.02/1.00/0.97 - - - xy unitless 1 1009 + +# These scale factors undo (Oper=-1) the global diurnal scale factors over China (Mask=1009) +36 EDGAR_TODNOX_UNDO $ROOT/EDGARv42/v2015-02/NO/EDGAR_hourly_NOxScal.nc NOXscale 2000/1/1/* C xy unitless -1 1009 +37 GEIA_TOD_FOSSIL_UNDO 0.45/0.45/0.6/0.6/0.6/0.6/1.45/1.45/1.45/1.45/1.4/1.4/1.4/1.4/1.45/1.45/1.45/1.45/0.65/0.65/0.65/0.65/0.45/0.45 - - - xy unitless -1 1009 + +#============================================================================== +# --- Day-of-week scale factors --- +# ==> data is Sun/Mon/.../Sat +#============================================================================== +(((XIAO_C3H8 +22 GEIA_DOW_HC 0.671/1.1102/1.1102/1.1102/1.1102/1.1102/0.768 - - - xy unitless 1 +)))XIAO_C3H8 + +#============================================================================== +# --- Seasonal scale factors --- +#============================================================================== +(((DICE_Africa +# from GEIA: +30 GEIA_SEASON_NOX $ROOT/GEIA/v2014-07/GEIA_monthscal.generic.1x1.nc NOXrat 1985/1-12/1/0 C xy unitless 1 +31 GEIA_SEASON_SO2 $ROOT/GEIA/v2014-07/GEIA_monthscal.generic.1x1.nc SO2rat 1985/1-12/1/0 C xy unitless 1 +)))DICE_Africa + +#============================================================================== +# --- For Bromocarbons --- +#============================================================================== +(((LIANG_BROMOCARB +39 BROMOCARB_SEASON $ROOT/BROMINE/v2015-02/BromoCarb_Season.nc CHXBRY_scale 2000/1-12/1/0 C xy unitless 1 +)))LIANG_BROMOCARB + +#============================================================================== +# --- Scale factors used for species conversions --- +#============================================================================== + +# Units carbon to species conversions +# Factor = # carbon atoms * MW carbon) / MW species +40 CtoACET MATH:58.09/(3.0*12.0) - - - xy unitless 1 +41 CtoALD2 MATH:44.06/(2.0*12.0) - - - xy unitless 1 +42 CtoALK4 MATH:58.12/(4.3*12.0) - - - xy unitless 1 +43 CtoBENZ MATH:78.12/(6.0*12.0) - - - xy unitless 1 +44 CtoC2H4 MATH:28.05/(2.0*12.0) - - - xy unitless 1 +45 CtoC2H6 MATH:30.08/(2.0*12.0) - - - xy unitless 1 +46 CtoC3H8 MATH:44.11/(3.0*12.0) - - - xy unitless 1 +47 CtoEOH MATH:46.07/(2.0*12.0) - - - xy unitless 1 +48 CtoMEK MATH:72.11/(4.0*12.0) - - - xy unitless 1 +49 CtoPRPE MATH:42.09/(3.0*12.0) - - - xy unitless 1 +55 CtoTOLU MATH:92.15/(7.0*12.0) - - - xy unitless 1 +56 CtoXYLE MATH:106.18/(8.0*12.0) - - - xy unitless 1 +59 CtoC2H2 MATH:26.04/(2.0*12.0) - - - xy unitless 1 +61 CtoISOP MATH:68.13/(5.0*12.0) - - - xy unitless 1 +62 CtoMTPA MATH:136.26/(10.0*12.0) - - - xy unitless 1 +64 CtoMBOX MATH:86.13/(5.0*12.0) - - - xy unitless 1 +67 CtoSESQ MATH:204.4/(15.0*12.0) - - - xy unitless 1 +83 CtoMACR MATH:70.10/(4.0*12.0) - - - xy unitless 1 +84 CtoRCHO MATH:58.09/(3.0*12.0) - - - xy unitless 1 + +# VOC speciations +(((RCP_3PD.or.RCP_45.or.RCP_60.or.RCP_85 +50 KET2MEK 0.25 - - - xy unitless 1 +51 KET2ACET 0.75 - - - xy unitless 1 +)))RCP_3PD.or.RCP_45.or.RCP_60.or.RCP_85 + +(((APEI.or.EDGARv43.or.DICE_Africa.or.QFED2 +52 COPROD_FOSSIL 1.02 - - - xy unitless 1 +54 COPROD_BIOMASS 1.05 - - - xy unitless 1 +)))APEI.or.EDGARv43.or.DICE_Africa.or.QFED2 + +# RCP acids to HCOOH conversion +(((RCP_3PD.or.RCP_45.or.RCP_60.or.RCP_85 +57 RCP_HCOOHfraction 0.25 - - - xy unitless 1 +58 RCP_ACIDStoHCOOH 0.779661 - - - xy unitless 1 +)))RCP_3PD.or.RCP_45.or.RCP_60.or.RCP_85 + +# SOx to SO2 conversion (Chin et al., 2000) +60 SOX2SO2_GLOBAL 0.986 - - - xy unitless 1 +63 SO2toSO4 0.031 - - - xy unitless 1 +65 SO2toSO4_APEI 0.014 - - - xy unitless 1 +66 SO2toPFe 1.0e-3 - - - xy unitless 1 +68 SO2toPFe_APEI 4.7e-4 - - - xy unitless 1 +69 SO2toPFe_NEI 1.0e-3 - - - xy unitless 1 +78 SO2FRAC 0.969 - - - xy unitless 1 + +# Carbon aerosols: speciation of hydrophilic and hydrophobic fractions +# (Fractions applied to the biomass burning extensions (GFED or FINN) are +# specified separately in the extensions section.) +70 BC2BCPI 0.2 - - - xy unitless 1 +71 BC2BCPO 0.8 - - - xy unitless 1 +72 OC2OCPI 0.5 - - - xy unitless 1 +73 OC2OCPO 0.5 - - - xy unitless 1 +74 POGSCAL 1.27 - - - xy unitless 1 +76 SV2POG1 0.49 - - - xy unitless 1 +77 SV2POG2 0.51 - - - xy unitless 1 + +(((BB4MIPS +# Convert MOH to ACET emissions for CMIP6 Scenarios +79 MOH2ACET 0.2094649 - - - xy unitless 1 +)))BB4MIPS + +# Convert CEDS total alchohols to methanol, ethanol, and other alcohols following Chen et al. (2019, ACP) +90 VOC1toMOH 0.5 - - - xy 1 1 +91 VOC1toEOH 0.375 - - - xy 1 1 +92 VOC1toROH 0.125 - - - xy 1 1 + +# NOx/NO2 to NO conversion +115 NO2toNO 6.521739e-1 - - - xy unitless 1 + +# SOA-Precursor scale factors +# +# From Kim, P.S., et. al. 2015 "Sources, seasonality, and trends +# of southeast US aerosol: ..." +# AVOCs and BBVOCs are emitted in proportion to CO, with an emission ratio of +# 0.069 g AVOC (g CO)−1 (Hayes et al., 2015) and +# 0.013 g BBVOC (g CO)−1 (Cubison et al., 2011). +# They are both oxidized by OH in the model ... to generate SOA. +280 COtoSOAP_anth 0.069 - - - xy 1 1 +281 COtoSOAP_burn 0.013 - - - xy 1 1 + +#============================================================================== +# --- QFED2 diurnal scale factors --- +# +# Fire diurnal scaling factors (% per hour) from WRAP Report to Project +# No. 178-6, July 2005 +#============================================================================== +(((QFED2.or.GFAS.or.BB4MIPS +75 QFED2_TOD 0.1392/0.1392/0.1368/0.1368/0.1368/0.1368/0.1368/0.1368/0.1368/0.48/0.96/1.68/2.4/3.12/3.84/4.08/2.88/1.68/0.96/0.1368/0.1368/0.1368/0.1368/0.1368 - - - xy unitless 1 +)))QFED2.or.GFAS.or.BB4MIPS + +#============================================================================== +# --- NAP scale factors --- +# +# Get anthropogenic (FF) NAP emissions by scaling BENZ emissions with the +# following factor. Factor is ratio of TgC NAP to TgC BENZ emissions +# or equivalently, molec C NAP to molec C BENZ. Scaling should produce +# about 0.09 TgC NAP/year, consistent with non-BB,BF emissions predicted +# by Zhang and Tao 2009 Atm Env +# Based on year 2000 1x1 inv (hotp 11/14/09) +#REAL*8, PARAMETER :: NAPTOBENZSCALE = 0.06861d0 + +# NAPTOTSCAL: factor to scale total NAP emissions to POA (hotp 7/24/09) +#REAL*8, PARAMETER :: NAPTOTALSCALE = 66.09027d0 + +# = CO emissions * emissions ratio of mol NAP / mol CO +# * kg C / mol NAP * mol CO / kg CO +# mmol NAP / mol CO = 0.025 g NAP/ kg DM / +# ( 78 g CO/ kg DM ) * 28 g CO / mol CO +# / ( 128 g NAP / mol NAP ) *1000 mmol/mol +# scale emissions down if appropriate to remove the +# effect of VOC ox on CO emission +# EF for NAP from Andreae and Merlet 2001 Glob Biog Cyc +# EF for CO from Andreae and Merlet 2001 Glob Biog Cyc +#BIOFUEL_KG(N,:,:) = BIOFUEL_KG(IDBFCO,:,:) * 0.0701d-3 +# * 120d0 / 28d0 * COSCALEDOWN +#============================================================================== +(((EDGARv43 +80 NAPEMISS 1.0 - - - xy unitless 1 +81 NAPTOTSCAL 66.09 - - - xy unitless 1 +82 BENZTONAP 6.86e-2 - - - xy unitless 1 +)))EDGARv43 + +#============================================================================== +# --- BIOGENIC EMISSIONS FROM DRY LEAF MATTER --- +# +# Use yield of 40ug/dDW. +# Assume organic matter has molecular formula CH2O (MW 30.03), which +# means 0.4 gC / g plant +# ALD2 MW = 44.05 g/mole ==> 0.55 gC/g ALD2 +# Therefore 40ug (ALD2) / g (plant) ==> 55 ug C in ALD2 / gC plant +# EOH MW = 46 g/mole ==> 0.52 gC/g EOH +# Therefore 40ug (EOH) / g (plant) ==> 52 ug C in EOH / gC plant +#============================================================================== +(((DECAYING_PLANTS +85 YIELD_RESP_ALD2 55.0e-6 - - - xy unitless 1 +86 YIELD_RESP_EOH 52.0e-6 - - - xy unitless 1 +)))DECAYING_PLANTS + +#============================================================================== +# --- AEIC2019 aircraft emissions scale factors --- +# +# See http://geoschemdata.wustl.edu/ExtData/HEMCO/AEIC2019/v2022-03/AEIC_2019_technical_note.pdf +#============================================================================== +(((AEIC2019_DAILY.or.AEIC2019_MONMEAN +# Conversions from AEIC2019 inventory quantities to individual species +101 AEICACET 3.693477e-3 - - - xy unitless 1 +102 AEICALD2 4.271822e-2 - - - xy unitless 1 +103 AEICALK4 2.137911e-1 - - - xy unitless 1 +104 AEICC2H6 5.214505e-3 - - - xy unitless 1 +105 AEICC3H8 7.808710e-4 - - - xy unitless 1 +106 AEICCH2O 1.230811e-1 - - - xy unitless 1 +107 AEICPRPE 1.780418e-1 - - - xy unitless 1 +108 AEICMACR 5.362609e-2 - - - xy unitless 1 +109 AEICRCHO 3.676944e-2 - - - xy unitless 1 +111 AEICSO2 1.176000e-3 - - - xy unitless 1 +112 AEICSO4 3.600000e-5 - - - xy unitless 1 +113 AEICBC 3.000000e-5 - - - xy unitless 1 +114 AEICHC 1.160000e+0 - - - xy unitless 1 +120 FB2H2O 1.231000e+0 - - - xy unitless 1 + +#------------------------------------------------------------------------------ +# Scaling factors for 1990-2019 derived from Lee et al. (2021). Increase +# from 2018 to 2019 is estimated based on the growth from 2017 to 2018. +# Lee et al. (2021) only covers 1990 to 2018, so to get to 2019 it is +# assumed that the growth from 2017 to 2018 is the same as that from 2018 +# to 2019. So the formula is something like: +# +# Emissions of CO in 2009 = AEIC 2019 emissions of CO +# * (Lee 2017 CO / Lee 2018 fuel burn) +# * (Lee 2009 fuel burn / Lee 2018 fuel burn) +# +# So in this case, we use the Lee 2017/Lee 2018 value to scale AEIC’s +# emissions to the “2018” values, and then scale directly using the Lee et al +# fuel burn. This ensures that, when running with year 2019, you get an +# unadjusted version of the AEIC2019 inventory, and all previous years are +# scaled down. For NOx, the same procedure is applied but with an additional +# factor to account for changes in NOx EI: +# +# Emissions of NOx in 2009 = [ AEIC 2019 emissions of NOx +# * (Lee 2017 CO / Lee 2018 fuel burn) +# * (Lee 2009 fuel burn / Lee 2018 fuel burn) ] +# * [ (Lee 2017 NOx EI / Lee 2018 NOx EI) +# * (Lee 2009 NOx EI / Lee 2018 NOx EI) ] +# +# In this case though the Lee et al 2018 and 2017 NOx EIs are identical. +# All scaling factors are included in here in HEMCO_Config.rc. +#------------------------------------------------------------------------------ +(((AEIC_SCALE_1990_2019 +240 AC_EINOX 0.852/0.852/0.852/0.859/0.866/0.873/0.881/0.888/0.896/0.903/0.911/0.916/0.922/0.927/0.932/0.937/0.950/0.962/0.974/0.987/1.000/1.000/1.000/1.000/1.000/1.000/1.000/1.000/1.000/1.000 - 1990-2019/1/1/0 C xy 1 1 +241 AC_FBMULT 0.506/0.489/0.490/0.493/0.517/0.529/0.553/0.570/0.581/0.600/0.631/0.607/0.608/0.608/0.646/0.678/0.686/0.706/0.703/0.666/0.700/0.721/0.728/0.749/0.773/0.815/0.854/0.905/0.952/1.000 - 1990-2019/1/1/0 C xy 1 1 +)))AEIC_SCALE_1990_2019 + +# If not applying 1990-2019 scale factors, use 1.0 +(((.not.AEIC_SCALE_1990_2019 +240 AC_EINOX 1.000000e+0 - - - xy 1 1 +241 AC_FBMULT 1.000000e+0 - - - xy 1 1 +))).not.AEIC_SCALE_1990_2019 +)))AEIC2019_DAILY.or.AEIC2019_MONMEAN + +(((CMIP6_AIRCRAFT +# Conversions for SO2 to HCs taken from AEIC +601 CMIP6_SO2_TO_ACET 3.140712 - - - xy unitless 1 +602 CMIP6_SO2_TO_ALD2 36.32502 - - - xy unitless 1 +603 CMIP6_SO2_TO_ALK4 181.7952 - - - xy unitless 1 +604 CMIP6_SO2_TO_C2H6 4.434103 - - - xy unitless 1 +605 CMIP6_SO2_TO_C3H8 0.664006 - - - xy unitless 1 +606 CMIP6_SO2_TO_CH2O 104.6608 - - - xy unitless 1 +607 CMIP6_SO2_TO_PRPE 151.3961 - - - xy unitless 1 +608 CMIP6_SO2_TO_MACR 45.60042 - - - xy unitless 1 +609 CMIP6_SO2_TO_RCHO 31.26653 - - - xy unitless 1 +)))CMIP6_AIRCRAFT + +#============================================================================== +# --- EPA NEI day-of-week scale factors --- +#============================================================================== +(((NEI2016_MONMEAN +210 NEI99_DOW_NOX $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc NOX 1999/1-12/WD/0 C xy 1 1 +211 NEI99_DOW_CO $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc CO 1999/1-12/WD/0 C xy 1 1 +212 NEI99_DOW_ALK4 $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc ALK4 1999/1-12/WD/0 C xy 1 1 +213 NEI99_DOW_ACET $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc ACET 1999/1-12/WD/0 C xy 1 1 +214 NEI99_DOW_MEK $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc MEK 1999/1-12/WD/0 C xy 1 1 +215 NEI99_DOW_PRPE $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc PRPE 1999/1-12/WD/0 C xy 1 1 +216 NEI99_DOW_C3H8 $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc C3H8 1999/1-12/WD/0 C xy 1 1 +217 NEI99_DOW_C2H6 $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc C2H6 1999/1-12/WD/0 C xy 1 1 +218 NEI99_DOW_SO2 $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc SO2 1999/1-12/WD/0 C xy 1 1 +219 NEI99_DOW_SO4 $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc SO4 1999/1-12/WD/0 C xy 1 1 +220 NEI99_DOW_MSA $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc MSA 1999/1-12/WD/0 C xy 1 1 +221 NEI99_DOW_BCPI $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc BCPI 1999/1-12/WD/0 C xy 1 1 +222 NEI99_DOW_OCPI $ROOT/NEI2005/v2023-02/NEI99.dow.geos.1x1.corrected.012023.nc OCPI 1999/1-12/WD/0 C xy 1 1 +)))NEI2016_MONMEAN + +#============================================================================== +# --- EPA NEI2016 annual scale factors --- +# +# Annual scale factors were computed from the EPA Trends Report for Tier 1 CAPS +# (obtained 21 Sep 2021) using the "Total without wildfires" field. NH3 and +# PM2.5 only had values for 2002-2020, while the remaining species had yearly +# values for 1990-2020 (we include only 2002-2020 here). +# +# See NEI2016/v2021-06/national_tier1_caps+HEMCOscaling.xlsx for details. +#============================================================================== +(((NEI2016_MONMEAN +251 NEI2016_NOx_YRSCALE 2.341/2.213/2.083/1.989/1.879/1.768/1.651/1.539/1.448/1.407/1.345/1.282/1.224/1.135/1.000/0.943/0.895/0.840/0.785 - 2002-2020/1/1/0 C xy 1 1 +252 NEI2016_CO_YRSCALE 1.817/1.767/1.716/1.666/1.610/1.554/1.393/1.251/1.272/1.261/1.220/1.178/1.137/1.095/1.000/0.973/0.950/0.927/0.904 - 2002-2020/1/1/0 C xy 1 1 +253 NEI2016_NH3_YRSCALE 0.996/0.999/1.002/1.005/1.043/1.082/1.100/1.088/1.077/1.012/0.957/0.954/0.899/0.950/1.000/1.052/1.051/1.050/1.049 - 2002-2020/1/1/0 C xy 1 1 +254 NEI2016_VOC_YRSCALE 1.314/1.285/1.255/1.223/1.234/1.246/1.148/1.135/1.154/1.175/1.153/1.131/1.110/1.067/1.000/0.970/0.956/0.941/0.926 - 2002-2020/1/1/0 C xy 1 1 +255 NEI2016_SO2_YRSCALE 4.773/4.701/4.626/4.625/4.171/3.717/3.273/2.879/2.446/2.038/1.591/1.525/1.469/1.237/1.000/0.767/0.735/0.641/0.583 - 2002-2020/1/1/0 C xy 1 1 +256 NEI2016_PM25_YRSCALE 1.120/1.140/1.159/1.178/1.213/1.248/1.202/1.195/1.190/1.192/1.153/1.115/1.077/1.040/1.000/0.964/0.961/0.958/0.955 - 2002-2020/1/1/0 C xy 1 1 +)))NEI2016_MONMEAN + +#============================================================================== +# --- GFAS scale factors --- +#============================================================================== +(((GFAS +300 GFAS_EMITL $ROOT/GFAS/v2018-09/$YYYY/GFAS_$YYYY$MM.nc mami 2003-2021/1-12/1-31/0 C xy m 1 +)))GFAS + +#============================================================================== +# --- QFED vertical partitioning --- +# Following Fischer et al. (2014) and Travis et al. (2016), emit 35% of QFED +# emissions above the PBL. +#============================================================================== +(((QFED2 +311 QFED_PBL_FRAC 0.65 - - - xy 1 1 +312 QFED_FT_FRAC 0.35 - - - xy 1 1 +)))QFED2 + +#============================================================================== +# --- CEDS vertical partitioning --- +#============================================================================== +(((CEDSv2.or.CEDS_GBDMAPS +315 ENERGY_LEVS 1.0 - - - xyz 1 1 +316 INDUSTRY_LEVS 1.0 - - - xyz 1 1 +317 SHIP_LEVS 1.0 - - - xyz 1 1 +)))CEDSv2.or.CEDS_GBDMAPS + +#============================================================================== +# --- DICE-Africa --- +#============================================================================== +(((DICE_Africa +# Charcoal production scale factor to reduce charcoal production +# by a factor of 5 after finding error in implementation of emission factors. +320 DICE_CP_SF 0.20 - - - xy 1 1 + +# Car emissions of OCPI and OCPO scale factor to address a factor of 7 overestimate +# in car OC emissions that results from incorrect emission factors used in the original inventory +330 DICE_CAR_OC_SF 0.14 - - - xy 1 1 +)))DICE_Africa + +#============================================================================== +# --- Offline biogenic VOC scale factors --- +# +# Isoprene : 1.5% mass yield SOAP, 1.5% mass yield SOAS +# Monoterpenes : 5.0% mass yield SOAP, 5.0% mass yield SOAS +# Other terpenes: 5.0% mass yield SOAP, 5.0% mass yield SOAS +# --> Need to multiply by 1.133 to convert from carbon basis to mass basis +#============================================================================== +(((OFFLINE_BIOGENICVOC +610 ISOPtoSOA 0.0170 - - - xy 1 1 +611 MONOtoSOA 0.0567 - - - xy 1 1 +612 OTHRtoSOA 0.0567 - - - xy 1 1 +)))OFFLINE_BIOGENICVOC + +#============================================================================== +# --- Offline sea salt scale factors --- +# +# NOTES: +# - Sea salt alkalinity and chloride values obtained from hcox_seasalt_mod.F90 +# - BrContent obtained from '--> Br- mass ratio' in SeaSalt extension above +#============================================================================== +(((OFFLINE_SEASALT +615 SSAlkalinity 1.0 - - - xy 1 1 +616 SSChloride 0.5504 - - - xy 1 1 +617 BrContent 2.11e-3 - - - xy 1 1 +)))OFFLINE_SEASALT + +)))EMISSIONS + +#============================================================================== +# Scale the CMIP6 values in pptv to ppbv +#============================================================================== +801 pptv2ppbv 0.001 - - - xy 1 1 +802 vv2ppbv 1000000000 - - - xy 1 1 + +#============================================================================== +# --- EDGAR 4.3.1 --- +# Using data of 2010, the calculated seasonal ratio for different species in the +# same sector are nearly identical, possibly due to consistent activity data used. +# Therefore we use the seasonal scale factors of CO in 2010 for most sectors, +# except for AGR, AWB and SOL. +# For AGR, the NH3 AGR seasonal scale factors are used. +# For AWB, the CO AGR seasonal scale factors are used. +# For SOL, the NOx AGR seasonal scale factors are used. +#============================================================================== +(((EDGARv43.or.DICE_Africa +1201 POW $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc POW 2010/1-12/1/0 C xy unitless 1 +1202 ENG $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc ENG 2010/1-12/1/0 C xy unitless 1 +1203 IND $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc IND 2010/1-12/1/0 C xy unitless 1 +1204 TRO $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc TRO 2010/1-12/1/0 C xy unitless 1 +1205 TNG $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc TNG 2010/1-12/1/0 C xy unitless 1 +1206 RCO $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc RCO 2010/1-12/1/0 C xy unitless 1 +1207 PPA $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc PPA 2010/1-12/1/0 C xy unitless 1 +1208 AGR $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc AGR 2010/1-12/1/0 C xy unitless 1 +1209 AWB $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc AWB 2010/1-12/1/0 C xy unitless 1 +1210 SOL $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc SOL 2010/1-12/1/0 C xy unitless 1 +1211 SWD $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc SWD 2010/1-12/1/0 C xy unitless 1 +1212 FFF $ROOT/EDGARv43/v2016-11/EDGAR_v43.Seasonal.1x1.nc FFF 2010/1-12/1/0 C xy unitless 1 +)))EDGARv43.or.DICE_Africa + +### END SECTION SCALE FACTORS ### + +############################################################################### +### BEGIN SECTION MASKS +############################################################################### + +# ScalID Name sourceFile sourceVar sourceTime C/R/E SrcDim SrcUnit Oper Lon1/Lat1/Lon2/Lat2 + +(((EMISSIONS + +#============================================================================== +# Country/region masks +#============================================================================== +(((APEI +1002 CANADA_MASK $ROOT/MASKS/v2018-09/Canada_mask.geos.1x1.nc MASK 2000/1/1/0 C xy 1 1 -141/40/-52/85 +)))APEI + +(((NEI2016_MONMEAN +1007 CONUS_MASK $ROOT/MASKS/v2018-09/CONUS_Mask.01x01.nc MASK 2000/1/1/0 C xy 1 1 -140/20/-50/60 +)))NEI2016_MONMEAN + +(((DICE_Africa +1008 AFRICA_MASK $ROOT/MASKS/v2018-09/AF_LANDMASK.geos.05x0666.global.nc LANDMASK 1985/1/1/0 C xy 1 1 -20/-37/54/40 +)))DICE_Africa + +1009 CHINA_MASK $ROOT/MASKS/v2018-09/China_mask.generic.1x1.nc MASK 2000/1/1/0 C xy 1 1 70/10/150/60 + +(((AFCID +1010 INDIA_MASK $ROOT/MASKS/v2019-05/India_mask.generic.1x1.nc MASK 2000/1/1/0 C xy 1 1 67/7/99/39 +)))AFCID + +)))EMISSIONS + +### END SECTION MASKS ### + +### END OF HEMCO INPUT FILE ### +#EOC diff --git a/.dev/config/HEMCO_Diagn.rc b/.dev/config/HEMCO_Diagn.rc new file mode 100644 index 00000000..c8fd80e5 --- /dev/null +++ b/.dev/config/HEMCO_Diagn.rc @@ -0,0 +1,762 @@ +#------------------------------------------------------------------------------ +# GEOS-Chem Global Chemical Transport Model ! +#------------------------------------------------------------------------------ +#BOP +# +# !MODULE: HEMCO_Diagn.rc +# +# !DESCRIPTION: Configuration file for netCDF diagnostic output from HEMCO. +#\\ +#\\ +# !REMARKS: +# For more information about scheduling HEMCO diagnostics, see: +# http://wiki.geos-chem.org/The_HEMCO_User%27s_Guide#Diagnostics +# +# For a list of species by inventory, please see: +# http://wiki.geos-chem.org/HEMCO_data_directories#Default_GEOS-Chem_emissions_configurations +# +# All diagnostics will now be saved out in units of kg/m2/s. If necessary, +# you can convert hydrocarbon species to e.g. kg C/m2/s in post-processing. +# +# The INVENTORY DIAGNOSTICS (starting with "Inv") are only needed for +# benchmark simulations, and can be left commented out for production runs. +# +# !REVISION HISTORY: +# 13 Feb 2018 - E. Lundgren - Initial version +# See https://github.com/geoschem/geos-chem for complete history +#EOP +#------------------------------------------------------------------------------ +#BOC +# Name Spec ExtNr Cat Hier Dim OutUnit LongName + +############################################################################### +##### ACET emissions ##### +############################################################################### +EmisACET_Total ACET -1 -1 -1 3 kg/m2/s ACET_emission_flux_from_all_sectors +EmisACET_BioBurn ACET 111 -1 -1 2 kg/m2/s ACET_emission_flux_from_biomass_burning +EmisACET_Biogenic ACET 0 4 -1 2 kg/m2/s ACET_emission_flux_from_biogenic_sources +EmisACET_Ocean ACET 101 -1 -1 2 kg/m2/s ACET_emission_flux_from_ocean + +############################################################################### +##### ACTA emissions ##### +############################################################################### +EmisACTA_Total ACTA -1 -1 -1 3 kg/m2/s ACTA_emission_flux_from_all_sectors +EmisACTA_BioBurn ACTA 111 -1 -1 2 kg/m2/s ACTA_emission_flux_from_biomass_burning + +############################################################################### +##### ALD2 emissions ##### +############################################################################### +EmisALD2_Total ALD2 -1 -1 -1 3 kg/m2/s ALD2_emission_flux_from_all_sectors +EmisALD2_Anthro ALD2 0 1 -1 3 kg/m2/s ALD2_emission_flux_from_anthropogenic +EmisALD2_BioBurn ALD2 111 -1 -1 2 kg/m2/s ALD2_emission_flux_from_biomass_burning +EmisALD2_Biogenic ALD2 0 4 -1 2 kg/m2/s ALD2_emission_flux_from_biogenic_sources +EmisALD2_Ocean ALD2 101 -1 -1 2 kg/m2/s ALD2_emission_flux_from_ocean +EmisALD2_PlantDecay ALD2 0 3 -1 2 kg/m2/s ALD2_emission_flux_from_decaying_plants +EmisALD2_Ship ALD2 0 10 -1 2 kg/m2/s ALD2_emission_flux_from_ships + +############################################################################### +##### ALK4 emissions ##### +############################################################################### +EmisALK4_Total ALK4 -1 -1 -1 3 kg/m2/s ALK4_emission_flux_from_all_sectors +EmisALK4_Aircraft ALK4 0 20 -1 3 kg/m2/s ALK4_emission_flux_from_aircraft +EmisALK4_Anthro ALK4 0 1 -1 3 kg/m2/s ALK4_emission_flux_from_anthropogenic +EmisALK4_BioBurn ALK4 111 -1 -1 2 kg/m2/s ALK4_emission_flux_from_biomass_burning +EmisALK4_Ship ALK4 0 10 -1 2 kg/m2/s ALK4_emission_flux_from_ships + +############################################################################### +##### BCPI and BCPO emissions ##### +############################################################################### +EmisBCPI_Total BCPI -1 -1 -1 3 kg/m2/s BCPI_emission_flux_from_all_sectors +EmisBCPI_Aircraft BCPI 0 20 -1 3 kg/m2/s BCPI_emission_flux_from_aircraft +EmisBCPI_Anthro BCPI 0 1 -1 3 kg/m2/s BCPI_emission_flux_from_anthropogenic +EmisBCPI_BioBurn BCPI 111 -1 -1 2 kg/m2/s BCPI_emission_flux_from_biomass_burning +EmisBCPI_Ship BCPI 0 10 -1 2 kg/m2/s BCPI_emission_flux_from_ships +EmisBCPO_Total BCPO -1 -1 -1 3 kg/m2/s BCPO_emission_flux_from_all_sectors +EmisBCPO_Anthro BCPO 0 1 -1 3 kg/m2/s BCPO_emission_flux_from_anthropogenic +EmisBCPO_BioBurn BCPO 111 -1 -1 2 kg/m2/s BCPO_emission_flux_from_biomass_burning +EmisBCPO_Ship BCPO 0 10 -1 2 kg/m2/s BCPO_emission_flux_from_ships + +############################################################################### +##### BENZ emissions ##### +############################################################################### +EmisBENZ_Total BENZ -1 -1 -1 3 kg/m2/s BENZ_emission_flux_from_all_sectors +EmisBENZ_Anthro BENZ 0 1 -1 3 kg/m2/s BENZ_emission_flux_from_anthropogenic +EmisBENZ_BioBurn BENZ 111 -1 -1 2 kg/m2/s BENZ_emission_flux_from_biomass_burning +EmisBENZ_Ship BENZ 0 10 -1 2 kg/m2/s BENZ_emission_flux_from_ships + +############################################################################### +##### C2H2 emissions ###### +############################################################################### +EmisC2H2_Total C2H2 -1 -1 -1 3 kg/m2/s C2H2_emission_flux_from_all_sectors +EmisC2H2_Anthro C2H2 0 1 -1 3 kg/m2/s C2H2_emission_flux_from_anthropogenic +EmisC2H2_BioBurn C2H2 111 -1 -1 2 kg/m2/s C2H2_emission_flux_from_biomass_burning +EmisC2H2_Ship C2H2 0 10 -1 2 kg/m2/s C2H2_emission_flux_from_ships + +############################################################################### +##### C2H4 emissions ###### +############################################################################### +EmisC2H4_Total C2H4 -1 -1 -1 3 kg/m2/s C2H4_emission_flux_from_all_sectors +EmisC2H4_Anthro C2H4 0 1 -1 3 kg/m2/s C2H4_emission_flux_from_anthropogenic +EmisC2H4_BioBurn C2H4 111 -1 -1 2 kg/m2/s C2H4_emission_flux_from_biomass_burning +EmisC2H4_Biogenic C2H4 0 4 -1 2 kg/m2/s C2H4_emission_flux_from_biogenic_sources +EmisC2H4_Ship C2H4 0 10 -1 2 kg/m2/s C2H4_emission_flux_from_ships + +############################################################################### +##### C2H6 emissions ###### +############################################################################### +EmisC2H6_Total C2H6 -1 -1 -1 3 kg/m2/s C2H6_emission_flux_from_all_sectors +EmisC2H6_Aircraft C2H6 0 20 -1 3 kg/m2/s C2H6_emission_flux_from_aircraft +EmisC2H6_Anthro C2H6 0 1 -1 3 kg/m2/s C2H6_emission_flux_from_anthropogenic +EmisC2H6_BioBurn C2H6 111 -1 -1 2 kg/m2/s C2H6_emission_flux_from_biomass_burning +EmisC2H6_Ship C2H6 0 10 -1 2 kg/m2/s C2H6_emission_flux_from_ships + +############################################################################### +##### C3H8 emissions ##### +############################################################################### +EmisC3H8_Total C3H8 -1 -1 -1 3 kg/m2/s C3H8_emission_flux_from_all_sectors +EmisC3H8_Aircraft C3H8 0 20 -1 3 kg/m2/s C3H8_emission_flux_from_aircraft +EmisC3H8_Anthro C3H8 0 1 -1 3 kg/m2/s C3H8_emission_flux_from_anthropogenic +EmisC3H8_BioBurn C3H8 111 -1 -1 2 kg/m2/s C3H8_emission_flux_from_biomass_burning +EmisC3H8_Ship C3H8 0 10 -1 2 kg/m2/s C3H8_emission_flux_from_ships + +############################################################################### +##### CH2Br2 emissions ##### +############################################################################### +EmisCH2Br2_Ocean CH2Br2 0 1 -1 2 kg/m2/s CH2Br2_emission_flux_from_ocean + +############################################################################### +##### CH2I2 emissions ##### +############################################################################### +EmisCH2I2_Ocean CH2I2 0 1 -1 2 kg/m2/s CH2I2_emission_flux_from_ocean + +############################################################################### +##### CH2ICl emissions ##### +############################################################################### +EmisCH2ICl_Ocean CH2ICl 0 1 -1 2 kg/m2/s CH2ICl_emission_flux_from_ocean + +############################################################################### +##### CH2IBr emissions ##### +############################################################################### +EmisCH2IBr_Ocean CH2IBr 0 1 -1 2 kg/m2/s CH2IBr_emission_flux_from_ocean + +############################################################################### +##### CH2O emissions ##### +############################################################################### +EmisCH2O_Total CH2O -1 -1 -1 3 kg/m2/s CH2O_emission_flux_from_all_sectors +EmisCH2O_Aircraft CH2O 0 20 -1 3 kg/m2/s CH2O_emission_flux_from_aircraft +EmisCH2O_Anthro CH2O 0 1 -1 3 kg/m2/s CH2O_emission_flux_from_anthropogenic +EmisCH2O_BioBurn CH2O 111 -1 -1 2 kg/m2/s CH2O_emission_flux_from_biomass_burning +EmisCH2O_Ship CH2O 0 10 -1 2 kg/m2/s CH2O_emission_flux_from_ships + +############################################################################### +##### CH3I emissions ##### +############################################################################### +EmisCH3I_Ocean CH3I 0 1 -1 2 kg/m2/s CH3I_emission_flux_from_ocean + +############################################################################### +##### CH4 emissions ##### +############################################################################### +# Zero for now, so comment out +#EmisCH4_Total CH4 -1 -1 -1 3 kg/m2/s CH4_emission_flux_from_all_sectors +#EmisCH4_Anthro CH4 0 1 -1 3 kg/m2/s CH4_emission_flux_from_anthropogenic +#EmisCH4_BioBurn CH4 0 5 -1 2 kg/m2/s CH4_emission_flux_from_biomass_burning +#EmisCH4_Ship CH4 0 10 -1 2 kg/m2/s CH4_emission_flux_from_ships + +############################################################################### +##### CHBr3 emissions ##### +############################################################################### +EmisCHBr3_Ocean CHBr3 0 1 -1 2 kg/m2/s CHBr3_emission_flux_from_ocean + +############################################################################### +##### CO emissions ##### +############################################################################### +EmisCO_Total CO -1 -1 -1 3 kg/m2/s CO_emission_flux_from_all_sectors +EmisCO_Aircraft CO 0 20 -1 3 kg/m2/s CO_emission_flux_from_aircraft +EmisCO_Anthro CO 0 1 -1 3 kg/m2/s CO_emission_flux_from_anthropogenic +EmisCO_BioBurn CO 111 -1 -1 2 kg/m2/s CO_emission_flux_from_biomass_burning +EmisCO_Ship CO 0 10 -1 2 kg/m2/s CO_emission_flux_from_ships + +############################################################################### +##### CO2 emissions ##### +############################################################################### +EmisCO2_Total CO2 -1 -1 -1 3 kg/m2/s CO2_emission_flux_from_all_sectors +EmisCO2_Anthro CO2 0 1 -1 3 kg/m2/s CO2_emission_flux_from_anthropogenic +EmisCO2_BioBurn CO2 0 5 -1 2 kg/m2/s CO2_emission_flux_from_biomass_burning +EmisCO2_Ship CO2 0 10 -1 2 kg/m2/s CO2_emission_flux_from_ships + +############################################################################### +##### DMS emissions ##### +############################################################################### +EmisDMS_Ocean DMS 101 -1 -1 2 kg/m2/s DMS_emission_flux_from_ocean + +############################################################################### +##### Dust emissions ##### +############################################################################### +EmisDST1_Total DST1 -1 -1 -1 2 kg/m2/s DST1_emission_flux_from_all_sectors +EmisDST1_Anthro DST1 0 1 -1 2 kg/m2/s DST1_emission_flux_from_anthropogenic +EmisDST1_Natural DST1 0 3 -1 2 kg/m2/s DST1_emission_flux_from_natural_sources +EmisDST2_Natural DST2 0 3 -1 2 kg/m2/s DST2_emission_flux_from_natural_sources +EmisDST3_Natural DST3 0 3 -1 2 kg/m2/s DST3_emission_flux_from_natural_sources +EmisDST4_Natural DST4 0 3 -1 2 kg/m2/s DST4_emission_flux_from_natural_sources + +############################################################################### +##### EOH emissions ##### +############################################################################### +EmisEOH_Total EOH -1 -1 -1 3 kg/m2/s EOH_emission_flux_from_all_sectors +EmisEOH_Anthro EOH 0 1 -1 3 kg/m2/s EOH_emission_flux_from_anthropogenic +EmisEOH_BioBurn EOH 111 -1 -1 2 kg/m2/s EOH_emission_flux_from_biomass_burning +EmisEOH_Biogenic EOH 0 4 -1 2 kg/m2/s EOH_emission_flux_from_biogenic_sources +EmisEOH_PlantDecay EOH 0 3 -1 2 kg/m2/s EOH_emission_flux_from_decaying_plants +EmisEOH_Ship EOH 0 10 -1 2 kg/m2/s EOH_emission_flux_from_ships + +############################################################################### +##### ETNO3 emissions ##### +############################################################################### +EmisETNO3_Ocean ETNO3 101 -1 -1 2 kg/m2/s ETNO3_emission_flux_from_ocean + +############################################################################### +##### FURA emissions ##### +############################################################################### +EmisFURA_Total FURA -1 -1 -1 3 kg/m2/s FURA_emission_flux_from_all_sectors +EmisFURA_BioBurn FURA 111 -1 -1 2 kg/m2/s FURA_emission_flux_from_biomass_burning + +############################################################################### +##### GLYX emissions ##### +############################################################################### +EmisGLYX_Total GLYX -1 -1 -1 3 kg/m2/s GLYX_emission_flux_from_all_sectors +EmisGLYX_BioBurn GLYX 111 -1 -1 2 kg/m2/s GLYX_emission_flux_from_biomass_burning + +############################################################################### +##### H2O emissions ##### +############################################################################### +EmisH2O_Aircraft H2O 0 20 -1 3 kg/m2/s H2O_emission_flux_from_aircraft + +############################################################################### +##### HCOOH sources ##### +############################################################################### +EmisHCOOH_Total HCOOH -1 -1 -1 3 kg/m2/s HCOOH_emission_flux_from_all_sectors +EmisHCOOH_Anthro HCOOH 0 1 -1 3 kg/m2/s HCOOH_emission_flux_from_anthropogenic +EmisHCOOH_Ship HCOOH 0 10 -1 2 kg/m2/s HCOOH_emission_flux_from_ship + +############################################################################### +##### HNO3 emissions ##### +############################################################################### +EmisHNO3_Ship HNO3 102 -1 -1 2 kg/m2/s HNO3_emission_flux_from_ships + +############################################################################### +##### HONO emissions ##### +############################################################################### +EmisHONO_Aircraft HONO 0 20 -1 3 kg/m2/s HONO_emission_flux_from_aircraft + +############################################################################### +##### ISOP emissions ##### +############################################################################### +EmisISOP_Total ISOP -1 -1 -1 3 kg/m2/s ISOP_emission_flux_from_all_sectors +EmisISOP_BioBurn ISOP 111 -1 -1 2 kg/m2/s ISOP_emission_flux_from_biomass_burning +EmisISOP_Biogenic ISOP 0 4 -1 2 kg/m2/s ISOP_emission_flux_from_biogenic_sources + +############################################################################### +##### LIMO emissions ##### +############################################################################### +EmisLIMO_Biogenic LIMO 0 4 -1 2 kg/m2/s LIMO_emission_flux_from_biogenic_sources + +############################################################################### +##### MACR emissions ##### +############################################################################### +EmisMACR_Total MACR -1 -1 -1 3 kg/m2/s MACR_emission_flux_from_all_sectors +EmisMACR_Aircraft MACR 0 20 -1 3 kg/m2/s MACR_emission_flux_from_anthropogenic + +############################################################################### +##### MEK emissions ##### +############################################################################### +EmisMEK_Total MEK -1 -1 -1 3 kg/m2/s MEK_emission_flux_from_all_sectors +EmisMEK_Anthro MEK 0 1 -1 3 kg/m2/s MEK_emission_flux_from_anthropogenic +EmisMEK_BioBurn MEK 111 -1 -1 2 kg/m2/s MEK_emission_flux_from_biomass_burning +EmisMEK_Ship MEK 0 10 -1 2 kg/m2/s MEK_emission_flux_from_ships + +############################################################################### +##### MENO3 emissions ##### +############################################################################### +EmisMENO3_Ocean MENO3 101 -1 -1 2 kg/m2/s MENO3_emission_flux_from_ocean + +############################################################################### +##### MGLY emissions ##### +############################################################################### +EmisMGLY_Total MGLY -1 -1 -1 3 kg/m2/s MGLY_emission_flux_from_all_sectors +EmisMGLY_BioBurn MGLY 111 -1 -1 2 kg/m2/s MGLY_emission_flux_from_biomass_burning + +############################################################################### +##### MOH emissions ##### +############################################################################### +EmisMOH_Total MOH -1 -1 -1 3 kg/m2/s MOH_emission_flux_from_all_sectors +EmisMOH_Anthro MOH 0 1 -1 3 kg/m2/s MOH_emission_flux_from_anthropogenic +EmisMOH_BioBurn MOH 111 -1 -1 2 kg/m2/s MOH_emission_flux_from_biomass_burning +EmisMOH_Biogenic MOH 108 -1 -1 2 kg/m2/s MOH_emission_flux_from_biogenic_sources +EmisMOH_Ocean MOH 101 -1 -1 2 kg/m2/s MOH_emission_flux_from_ocean +EmisMOH_Ship MOH 0 10 -1 2 kg/m2/s MOH_emission_flux_from_ships + +############################################################################### +##### MTPA emissions ##### +############################################################################### +EmisMTPA_Total MTPA -1 -1 -1 3 kg/m2/s MTPA_emission_flux_from_all_sectors +EmisMTPA_BioBurn MTPA 111 -1 -1 2 kg/m2/s MTPA_emission_flux_from_biomass_burning +EmisMTPA_Biogenic MTPA 0 4 -1 2 kg/m2/s MTPA_emission_flux_from_biogenic_sources + +############################################################################### +##### MTPO emissions ##### +############################################################################### +EmisMTPO_Total MTPO -1 -1 -1 3 kg/m2/s MTPO_emission_flux_from_all_sectors +EmisMTPO_Biogenic MTPO 0 4 -1 2 kg/m2/s MTPO_emission_flux_from_biogenic_sources + +############################################################################### +##### MVK emissions ##### +############################################################################### +EmisMVK_Total MVK -1 -1 -1 3 kg/m2/s MVK_emission_flux_from_all_sectors +EmisMVK_BioBurn MVK 111 -1 -1 2 kg/m2/s MVK_emission_flux_from_biomass_burning + +############################################################################### +##### NAP emissions ##### +############################################################################### +EmisNAP_Total NAP -1 -1 -1 3 kg/m2/s NAP_emission_flux_from_all_sectors +EmisNAP_Anthro NAP 0 1 -1 3 kg/m2/s NAP_emission_flux_from_anthropogenic +EmisNAP_BioBurn NAP 111 -1 -1 2 kg/m2/s NAP_emission_flux_from_biomass_burning + +############################################################################### +##### NH3 emissions ##### +############################################################################### +EmisNH3_Total NH3 -1 -1 -1 3 kg/m2/s NH3_emission_flux_from_all_sectors +EmisNH3_Anthro NH3 0 1 -1 3 kg/m2/s NH3_emission_flux_from_anthropogenic +EmisNH3_BioBurn NH3 111 -1 -1 2 kg/m2/s NH3_emission_flux_from_biomass_burning +EmisNH3_Natural NH3 0 3 -1 2 kg/m2/s NH3_emission_flux_from_natural_sources +EmisNH3_Seabirds NH3 0 30 -1 2 kg/m2/s NH3_emission_flux_from_seabirds +EmisNH3_Ship NH3 0 10 -1 2 kg/m2/s NH3_emission_flux_from_ships + +############################################################################### +##### NO emissions ##### +##### ##### +##### - Separate fertilizer NOx emissions are only available when the ##### +##### SoilNOx extension is enabled ##### +############################################################################### +EmisNO_Total NO -1 -1 -1 3 kg/m2/s NO_emission_flux_from_all_sectors +EmisNO_Aircraft NO 0 20 -1 3 kg/m2/s NO_emission_flux_from_aircraft +EmisNO_Anthro NO 0 1 -1 3 kg/m2/s NO_emission_flux_from_anthropogenic +EmisNO_BioBurn NO 111 -1 -1 2 kg/m2/s NO_emission_flux_from_biomass_burning +EmisNO_Lightning NO 103 -1 -1 3 kg/m2/s NO_emission_flux_from_lightning +EmisNO_Ship NO 102 -1 -1 2 kg/m2/s NO_emission_flux_from_ships +EmisNO_Soil NO 0 3 -1 2 kg/m2/s NO_emission_flux_from_soil_including_fertilizer +#EmisNO_Fert -1 104 -1 -1 2 kg/m2/s NO_emission_flux_from_fertilizer_only + +############################################################################### +##### NO2 emissions ##### +############################################################################### +EmisNO2_Total NO2 -1 -1 -1 3 kg/m2/s NO2_emission_flux_from_all_sectors +EmisNO2_Aircraft NO2 0 20 -1 3 kg/m2/s NO2_emission_flux_from_aircraft +EmisNO2_Ship NO2 102 -1 -1 2 kg/m2/s NO2_emission_flux_from_ships + +############################################################################### +##### O3 emissions ##### +############################################################################### +EmisO3_Ship O3 102 -1 -1 2 kg/m2/s O3_emission_flux_from_ships + +############################################################################### +##### OCPI and OCPO emissions ##### +############################################################################### +EmisOCPI_Total OCPI -1 -1 -1 3 kg/m2/s OCPI_emission_flux_from_all_sectors +EmisOCPI_Aircraft OCPI 0 20 -1 3 kg/m2/s OCPI_emission_flux_from_aircraft +EmisOCPI_Anthro OCPI 0 1 -1 3 kg/m2/s OCPI_emission_flux_from_anthropogenic +EmisOCPI_BioBurn OCPI 111 -1 -1 2 kg/m2/s OCPI_emission_flux_from_biomass_burning +EmisOCPI_Ship OCPI 0 10 -1 2 kg/m2/s OCPI_emission_flux_from_ships +EmisOCPO_Total OCPO -1 -1 -1 3 kg/m2/s OCPO_emission_flux_from_all_sectors +EmisOCPO_Anthro OCPO 0 1 -1 3 kg/m2/s OCPO_emission_flux_from_anthropogenic +EmisOCPO_BioBurn OCPO 111 -1 -1 2 kg/m2/s OCPO_emission_flux_from_biomass_burning +EmisOCPO_Ship OCPO 0 10 -1 2 kg/m2/s OCPO_emission_flux_from_ships + +############################################################################### +##### pFe emissions ##### +############################################################################### +EmispFe_Total pFe -1 -1 -1 3 kg/m2/s pFe_emission_flux_from_all_sectors +EmispFe_Anthro pFe 0 1 -1 3 kg/m2/s pFe_emission_flux_from_anthropogenic +EmispFe_Ship pFe 0 10 -1 2 kg/m2/s pFe_emission_flux_from_ships + +############################################################################### +##### PHEN emissions ##### +############################################################################### +EmisPHEN_Total PHEN -1 -1 -1 3 kg/m2/s PHEN_emission_flux_from_all_sectors +EmisPHEN_BioBurn PHEN 111 -1 -1 2 kg/m2/s PHEN_emission_flux_from_biomass_burning + +############################################################################### +##### POG1 and POG2 emissions ##### +############################################################################### +EmisPOG1_Total POG1 -1 -1 -1 3 kg/m2/s POG1_emission_flux_from_all_sectors +EmisPOG1_Anthro POG1 0 1 -1 3 kg/m2/s POG1_emission_flux_from_anthropogenic +EmisPOG1_BioBurn POG1 111 -1 -1 2 kg/m2/s POG1_emission_flux_from_GFED_inventory +EmisPOG2_Total POG2 -1 -1 -1 3 kg/m2/s POG2_emission_flux_from_all_sectors +EmisPOG2_Anthro POG2 0 1 -1 3 kg/m2/s POG2_emission_flux_from_anthropogenic +EmisPOG2_BioBurn POG2 111 -1 -1 2 kg/m2/s POG2_emission_flux_from_GFED_inventory + +############################################################################### +##### PRPE emissions ##### +############################################################################### +EmisPRPE_Total PRPE -1 -1 -1 3 kg/m2/s PRPE_emission_flux_from_all_sectors +EmisPRPE_Aircraft PRPE 0 20 -1 3 kg/m2/s PRPE_emission_flux_from_aircraft +EmisPRPE_Anthro PRPE 0 1 -1 3 kg/m2/s PRPE_emission_flux_from_anthropogenic +EmisPRPE_BioBurn PRPE 111 -1 -1 2 kg/m2/s PRPE_emission_flux_from_biomass_burning +EmisPRPE_Biogenic PRPE 0 4 -1 2 kg/m2/s PRPE_emission_flux_from_biogenic_sources +EmisPRPE_Ship PRPE 0 10 -1 2 kg/m2/s PRPE_emission_flux_from_ships + +############################################################################### +##### RCHO emissions ##### +############################################################################### +EmisRCHO_Total RCHO -1 -1 -1 3 kg/m2/s RCHO_emission_flux_from_all_sectors +EmisRCHO_Aircraft RCHO 0 20 -1 3 kg/m2/s RCHO_emission_flux_from_aircraft +EmisRCHO_BioBurn RCHO 111 -1 -1 2 kg/m2/s RCHO_emission_flux_from_biomass_burning + +############################################################################### +##### SESQ emissions ##### +############################################################################### +# SESQ is not an active species in GEOS-Chem; disable for now +#EmisSESQ_Biogenic SESQ 0 4 -1 2 kg/m2/s SESQ_emission_flux_from_biogenic_sources + +############################################################################### +##### Sea salt emissions ##### +############################################################################### +EmisSALA_Natural SALA 0 3 -1 2 kg/m2/s SALA_emission_flux_from_natural_sources +EmisBrSALA_Natural BrSALA 0 3 -1 2 kg/m2/s BrSALA_emission_flux_from_natural_sources +EmisSALAAL_Natural SALAAL 0 3 -1 2 kg/m2/s SALAAL_emission_flux_from_natural_sources +EmisSALACL_Natural SALACL 0 3 -1 2 kg/m2/s SALACL_emission_flux_from_natural_sources +EmisSALC_Natural SALC 0 3 -1 2 kg/m2/s SALC_emission_flux_from_natural_sources +EmisBrSALC_Natural BrSALC 0 3 -1 2 kg/m2/s BrSALC_emission_flux_from_natural_sources +EmisSALCAL_Natural SALCAL 0 3 -1 2 kg/m2/s SALCAL_emission_flux_from_natural_sources +EmisSALCCL_Natural SALCCL 0 3 -1 2 kg/m2/s SALCCL_emission_flux_from_natural_sources + +############################################################################### +##### SO2 emissions ##### +############################################################################### +EmisSO2_Total SO2 -1 -1 -1 3 kg/m2/s SO2_emission_flux_from_all_sectors +EmisSO2_Aircraft SO2 0 20 -1 3 kg/m2/s SO2_emission_flux_from_aircraft +EmisSO2_Anthro SO2 0 1 -1 3 kg/m2/s SO2_emission_flux_from_anthropogenic +EmisSO2_BioBurn SO2 111 -1 -1 2 kg/m2/s SO2_emission_flux_from_biomass_burning +EmisSO2_VolcErupt SO2 117 51 -1 3 kg/m2/s SO2_emission_flux_from_eruptive_volcano +EmisSO2_VolcDegas SO2 117 52 -1 3 kg/m2/s SO2_emission_flux_from_noneruptive_volcano +EmisSO2_Ship SO2 0 10 -1 2 kg/m2/s SO2_emission_flux_from_ships + +############################################################################### +##### SO4 emissions ##### +############################################################################### +EmisSO4_Total SO4 -1 -1 -1 3 kg/m2/s SO4_emission_flux_from_all_sectors +EmisSO4_Aircraft SO4 0 20 -1 3 kg/m2/s SO4_emission_flux_from_aircraft +EmisSO4_Anthro SO4 0 1 -1 3 kg/m2/s SO4_emission_flux_from_anthropogenic +EmisSO4_Ship SO4 0 10 -1 2 kg/m2/s SO4_emission_flux_from_ship + +############################################################################### +##### SOAP sources ##### +############################################################################### +EmisSOAP_Total SOAP -1 -1 -1 3 kg/m2/s SOAP_emission_flux_from_all_sectors +EmisSOAP_Aircraft SOAP 0 20 -1 3 kg/m2/s SOAP_emission_flux_from_aircraft +EmisSOAP_Anthro SOAP 0 1 -1 3 kg/m2/s SOAP_emission_flux_from_anthropogenic +EmisSOAP_Biogenic SOAP 0 4 -1 2 kg/m2/s SOAP_emission_flux_from_biogenic_sources +EmisSOAP_BioBurn SOAP 111 -1 -1 2 kg/m2/s SOAP_emission_flux_from_biomass_burning +EmisSOAP_Ship SOAP 0 10 -1 2 kg/m2/s SOAP_emission_flux_from_ships + +############################################################################### +##### SOAS sources ##### +############################################################################### +EmisSOAS_Biogenic SOAS 0 4 -1 2 kg/m2/s SOAS_emission_flux_from_biogenic_sources + +############################################################################### +##### TOLU emissions ##### +############################################################################### +EmisTOLU_Total TOLU -1 -1 -1 3 kg/m2/s TOLU_emission_flux_from_all_sectors +EmisTOLU_Anthro TOLU 0 1 -1 3 kg/m2/s TOLU_emission_flux_from_anthropogenic +EmisTOLU_BioBurn TOLU 111 -1 -1 2 kg/m2/s TOLU_emission_flux_from_biomass_burning +EmisTOLU_Ship TOLU 0 10 -1 2 kg/m2/s TOLU_emission_flux_from_ships + +############################################################################### +##### XYLE emissions ##### +############################################################################### +EmisXYLE_Total XYLE -1 -1 -1 3 kg/m2/s XYLE_emission_flux_from_all_sectors +EmisXYLE_Anthro XYLE 0 1 -1 3 kg/m2/s XYLE_emission_flux_from_anthropogenic +EmisXYLE_BioBurn XYLE 111 -1 -1 2 kg/m2/s XYLE_emission_flux_from_biomass_burning +EmisXYLE_Ship XYLE 0 10 -1 2 kg/m2/s XYLE_emission_flux_from_ships + +############################################################################### +##### Additional diagnostics saved out via HEMCO extensions ##### +############################################################################### + +#============================= +# LIGHTNOX extension +#============================= +HcoLightningFlashRate_Total -1 103 -1 -1 2 flashes/min/km2 Total_lightning_flash_rate +HcoLightningFlashRate_IntraCld -1 103 -1 -1 2 flashes/min/km2 Intra-cloud_lightning_flash_rate +HcoLightningFlashRate_CldGround -1 103 -1 -1 2 flashes/min/km2 Cloud-ground_lightning_flash_rate +HcoConvectiveCloudTopHeight -1 103 -1 -1 2 level Convective_cloud_top_height + +############################################################################### +##### INVENTORY DIAGNOSTICS, needed for benchmarking simulations only ##### +##### Listed in same order as HEMCO_Config.rc ##### +##### (You can comment these out for production runs, to save memory) ##### +############################################################################### + +#============================= +# CEDS +#============================= +#InvCEDS_ALD2 ALD2 0 1 5 3 kg/m2/s ALD2_emission_flux_from_CEDS_inventory +#InvCEDS_ALK4 ALK4 0 1 5 3 kg/m2/s ALK4_emission_flux_from_CEDS_inventory +#InvCEDS_BCPI BCPI 0 1 5 3 kg/m2/s BCPI_emission_flux_from_CEDS_inventory +#InvCEDS_BCPO BCPO 0 1 5 3 kg/m2/s BCPO_emission_flux_from_CEDS_inventory +#InvCEDS_BENZ BENZ 0 1 5 3 kg/m2/s BENZ_emission_flux_from_CEDS_inventory +#InvCEDS_C2H2 C2H2 0 1 5 3 kg/m2/s C2H2_emission_flux_from_CEDS_inventory +#InvCEDS_C2H4 C2H4 0 1 5 3 kg/m2/s C2H4_emission_flux_from_CEDS_inventory +#InvCEDS_C2H6 C2H6 0 1 5 3 kg/m2/s C2H6_emission_flux_from_CEDS_inventory +#InvCEDS_C3H8 C3H8 0 1 5 3 kg/m2/s C3H8_emission_flux_from_CEDS_inventory +#InvCEDS_CH2O CH2O 0 1 5 3 kg/m2/s CH2O_emission_flux_from_CEDS_inventory +#InvCEDS_CO CO 0 1 5 3 kg/m2/s CO_emission_flux_from_CEDS_inventory +#InvCEDS_MOH MOH 0 1 5 3 kg/m2/s MOH_emission_flux_from_CEDS_inventory +#InvCEDS_EOH EOH 0 1 5 3 kg/m2/s EOH_emission_flux_from_CEDS_inventory +#InvCEDS_ROH ROH 0 1 5 3 kg/m2/s ROH_emission_flux_from_CEDS_inventory +#InvCEDS_HCOOH HCOOH 0 1 5 3 kg/m2/s HCOOH_emission_flux_from_CEDS_inventory +#InvCEDS_MEK MEK 0 1 5 3 kg/m2/s MEK_emission_flux_from_CEDS_inventory +#InvCEDS_NH3 NH3 0 1 5 3 kg/m2/s NH3_emission_flux_from_CEDS_inventory +#InvCEDS_NO NO 0 1 5 3 kg/m2/s NO_emission_flux_from_CEDS_inventory +#InvCEDS_OCPI OCPI 0 1 5 3 kg/m2/s OCPI_emission_flux_from_CEDS_inventory +#InvCEDS_OCPO OCPO 0 1 5 3 kg/m2/s OCPO_emission_flux_from_CEDS_inventory +#InvCEDS_pFe pFe 0 1 5 3 kg/m2/s pFe_emission_flux_from_CEDS_inventory +#InvCEDS_POG1 POG1 0 1 5 3 kg/m2/s POG1_emission_flux_from_CEDS_inventory +#InvCEDS_POG2 POG2 0 1 5 3 kg/m2/s POG2_emission_flux_from_CEDS_inventory +#InvCEDS_PRPE PRPE 0 1 5 3 kg/m2/s PRPE_emission_flux_from_CEDS_inventory +#InvCEDS_SO2 SO2 0 1 5 3 kg/m2/s SO2_emission_flux_from_CEDS_inventory +#InvCEDS_SO4 SO4 0 1 5 3 kg/m2/s SO4_emission_flux_from_CEDS_inventory +#InvCEDS_SOAP SOAP 0 1 5 3 kg/m2/s SOAP_emission_flux_from_CEDS_inventory +#InvCEDS_TOLU TOLU 0 1 5 3 kg/m2/s TOLU_emission_flux_from_CEDS_inventory +#InvCEDS_XYLE XYLE 0 1 5 3 kg/m2/s XYLE_emission_flux_from_CEDS_inventory + +#============================= +# GEIA_NH3 +#============================= +#InvGEIAnatural_NH3 NH3 0 3 1 2 kg/m2/s NH3_emission_flux_from_GEIA_natural_source + +#============================= +# Seabirds +#============================= +#InvSEABIRDS_NH3 NH3 0 30 1 2 kg/m2/s NH3_emission_flux_from_arctic_seabirds + +#============================= +# C2H62010 +#============================= +#InvC2H62010_C2H6 C2H6 0 1 100 2 kg/m2/s C2H6_from_C2H62010_anthropogenic_inventory + +#============================= +# XIAO_C3H8 +#============================= +#InvXIAO_C3H8 C3H8 0 1 10 2 kg/m2/s C3H8_from_XIAO_anthropogenic_inventory + +#============================= +# LIANG_BROMOCARB +#============================= +#InvLIANG_CH2Br2 CH2Br2 0 1 1 2 kg/m2/s CH2Br2_emission_flux_from_LIANG_BROMOCARB_inventory +#InvLIANG_CHBr3 CHBr3 0 1 1 2 kg/m2/s CHBr3_emission_flux_from_LIANG_BROMOCARB_inventory + +#============================= +# ORDONEZ_IODOCARB +#============================= +#InvORDONEZ_CH2I2 CH2I2 0 1 1 2 kg/m2/s CH2I2_emission_flux_from_ORDONEZ_IODOCARB_inventory +#InvORDONEZ_CH2ICl CH2ICl 0 1 1 2 kg/m2/s CH2ICl_emission_flux_from_ORDONEZ_IODOCARB_inventory +#InvORDONEZ_CH2IBr CH2IBr 0 1 1 2 kg/m2/s CH2IBr_emission_flux_from_ORDONEZ_IODOCARB_inventory +#InvORDONEZ_CH3I CH3I 0 1 1 2 kg/m2/s CH3I_emission_flux_from_ORDONEZ_IODOCARB_inventory + +#============================= +# CEDS_SHIP +#============================= +#InvCEDSship_ALD2 ALD2 0 10 5 2 kg/m2/s ALD2_emission_flux_from_CEDSship_inventory +#InvCEDSship_ALK4 ALK4 0 10 5 2 kg/m2/s ALK4_emission_flux_from_CEDSship_inventory +#InvCEDSship_BCPI BCPI 0 10 5 2 kg/m2/s BCPI_emission_flux_from_CEDSship_inventory +#InvCEDSship_BCPO BCPO 0 10 5 2 kg/m2/s BCPO_emission_flux_from_CEDSship_inventory +#InvCEDSship_BENZ BENZ 0 10 5 2 kg/m2/s BENZ_emission_flux_from_CEDSship_inventory +#InvCEDSship_C2H2 C2H2 0 10 5 2 kg/m2/s C2H2_emission_flux_from_CEDSship_inventory +#InvCEDSship_C2H4 C2H4 0 10 5 2 kg/m2/s C2H4_emission_flux_from_CEDSship_inventory +#InvCEDSship_C2H6 C2H6 0 10 5 2 kg/m2/s C2H6_emission_flux_from_CEDSship_inventory +#InvCEDSship_C3H8 C3H8 0 10 5 2 kg/m2/s C3H8_emission_flux_from_CEDSship_inventory +#InvCEDSship_CH2O CH2O 0 10 5 2 kg/m2/s CH2O_emission_flux_from_CEDSship_inventory +#InvCEDSship_CO CO 0 10 5 2 kg/m2/s CO_emission_flux_from_CEDSship_inventory +#InvCEDSship_EOH EOH 0 10 5 2 kg/m2/s EOH_emission_flux_from_CEDSship_inventory +#InvCEDSship_HCOOH HCOOH 0 10 5 2 kg/m2/s HCOOH_emission_flux_from_CEDSship_inventory +#InvCEDSship_MEK MEK 0 10 5 2 kg/m2/s MEK_emission_flux_from_CEDSship_inventory +#InvCEDSship_NH3 NH3 0 10 5 2 kg/m2/s NH3_emission_flux_from_CEDSship_inventory +#InvCEDSship_pFe pFe 0 10 5 2 kg/m2/s pFe_emission_flux_from_CEDSship_inventory +#InvCEDSship_PRPE PRPE 0 10 5 2 kg/m2/s PRPE_emission_flux_from_CEDSship_inventory +#InvCEDSship_OCPI OCPI 0 10 5 2 kg/m2/s OCPI_emission_flux_from_CEDSship_inventory +#InvCEDSship_OCPO OCPO 0 10 5 2 kg/m2/s OCPO_emission_flux_from_CEDSship_inventory +#InvCEDSship_SO2 SO2 0 10 5 2 kg/m2/s SO2_emission_flux_from_CEDSship_inventory +#InvCEDSship_SO4 SO4 0 10 5 2 kg/m2/s SO4_emission_flux_from_CEDSship_inventory +#InvCEDSship_SOAP SOAP 0 10 5 2 kg/m2/s SOAP_emission_flux_from_CEDSship_inventory +#InvCEDSship_TOLU TOLU 0 10 5 2 kg/m2/s TOLU_emission_flux_from_CEDSship_inventory +#InvCEDSship_XYLE XYLE 0 10 5 2 kg/m2/s XYLE_emission_flux_from_CEDSship_inventory + +#============================= +# AEIC +#============================= +#InvAEIC_ACET ACET 0 20 1 3 kg/m2/s ACET_emission_flux_from_AEIC_inventory +#InvAEIC_ALD2 ALD2 0 20 1 3 kg/m2/s ALD2_emission_flux_from_AEIC_inventory +#InvAEIC_ALK4 ALK4 0 20 1 3 kg/m2/s ALK4_emission_flux_from_AEIC_inventory +#InvAEIC_BCPI BCPI 0 20 1 3 kg/m2/s BCPI_emission_flux_from_AEIC_inventory +#InvAEIC_C2H6 C2H6 0 20 1 3 kg/m2/s C2H6_emission_flux_from_AEIC_inventory +#InvAEIC_C3H8 C3H8 0 20 1 3 kg/m2/s C3H8_emission_flux_from_AEIC_inventory +#InvAEIC_CH2O CH2O 0 20 1 3 kg/m2/s CH2O_emission_flux_from_AEIC_inventory +#InvAEIC_CO CO 0 20 1 3 kg/m2/s CO_emission_flux_from_AEIC_inventory +#InvAEIC_HONO HONO 0 20 1 3 kg/m2/s HONO_emission_flux_from_AEIC_inventory +#InvAEIC_MACR MACR 0 20 1 3 kg/m2/s MACR_emission_flux_from_AEIC_inventory +#InvAEIC_NO NO 0 20 1 3 kg/m2/s NO_emission_flux_from_AEIC_inventory +#InvAEIC_NO2 NO2 0 20 1 3 kg/m2/s NO2_emission_flux_from_AEIC_inventory +#InvAEIC_OCPI OCPI 0 20 1 3 kg/m2/s OCPI_emission_flux_from_AEIC_inventory +#InvAEIC_PRPE PRPE 0 20 1 3 kg/m2/s PRPE_emission_flux_from_AEIC_inventory +#InvAEIC_RCHO RCHO 0 20 1 3 kg/m2/s RCHO_emission_flux_from_AEIC_inventory +#InvAEIC_SO2 SO2 0 20 1 3 kg/m2/s SO2_emission_flux_from_AEIC_inventory +#InvAEIC_SO4 SO4 0 20 1 3 kg/m2/s SO4_emission_flux_from_AEIC_inventory +#InvAEIC_SOAP SOAP 0 20 1 3 kg/m2/s SOAP_emission_flux_from_AEIC_inventory + +#============================= +# Decaying plants +#============================= +#InvPLANTDECAY_ALD2 ALD2 0 3 1 2 kg/m2/s ALD2_emission_flux_from_PLANTDECAY_inventory +#InvPLANTDECAY_EOH EOH 0 3 1 2 kg/m2/s EOH_emission_flux_from_PLANTDECAY_inventory + +#============================= +# AFCID emissions +#============================= +#InvAFCID_DST1 DST1 0 1 -1 2 kg/m2/s DST1_emission_flux_from_AFCID_inventory + +#============================= +# Seaflux extension +#============================= +#InvSeaFlux_ACET ACET 101 -1 -1 2 kg/m2/s ACET_emission_flux_from_SeaFlux_extension +#InvSeaFlux_ALD2 ALD2 101 -1 -1 2 kg/m2/s ALD2_emission_flux_from_SeaFlux_extension +#InvSeaFlux_DMS DMS 101 -1 -1 2 kg/m2/s DMS_emission_flux_from_SeaFlux_extension +#InvSeaFlux_ETNO3 ETNO3 101 -1 -1 2 kg/m2/s ETNO3_emission_flux_from_SeaFlux_extension +#InvSeaFlux_MENO3 MENO3 101 -1 -1 2 kg/m2/s MENO3_emission_flux_from_SeaFlux_extension +#InvSeaFlux_MOH MOH 101 -1 -1 2 kg/m2/s MOH_emission_flux_from_SeaFlux_extension + +#============================= +# PARANOX extension +#============================= +#InvPARANOX_HNO3 HNO3 102 -1 -1 2 kg/m2/s HNO3_emission_flux_from_PARANOX_extension +#InvPARANOX_NO NO 102 -1 -1 2 kg/m2/s NO_emission_flux_from_PARANOX_extension +#InvPARANOX_NO2 NO2 102 -1 -1 2 kg/m2/s NO2_emission_flux_from_PARANOX_extension +#InvPARANOX_O3 O3 102 -1 -1 2 kg/m2/s O3_emission_flux_from_PARANOX_extension + +#============================= +# LIGHTNOX extension +#============================= +#InvLIGHTNOX_NO NO 103 -1 -1 3 kg/m2/s NO_emission_flux_from_lightning_extension + +#============================= +# SOILNOX extension +#============================= +#InvSOILNOX_NO NO 104 -1 -1 2 kg/m2/s NO_emission_flux_from_SOINOX_extension_including_soil_and_fertilizer_emissions + +#============================= +# DEAD (dust) Extension +#============================= +#InvDEAD_DST1 DST1 105 -1 -1 2 kg/m2/s DST1_emission_flux_from_DEAD_extension +#InvDEAD_DST2 DST2 105 -1 -1 2 kg/m2/s DST2_emission_flux_from_DEAD_extension +#InvDEAD_DST3 DST3 105 -1 -1 2 kg/m2/s DST3_emission_flux_from_DEAD_extension +#InvDEAD_DST4 DST4 105 -1 -1 2 kg/m2/s DST4_emission_flux_from_DEAD_extension + +#============================= +# SeaSalt extension +#============================= +#InvSeaSalt_BrSALA BrSALA 107 -1 -1 2 kg/m2/s BrSALA_emission_flux_from_SeaSalt_extension +#InvSeaSalt_BrSALC BrSALC 107 -1 -1 2 kg/m2/s BrSALC_emission_flux_from_SeaSalt_extension +#InvSeaSalt_SALA SALA 107 -1 -1 2 kg/m2/s SALA_emission_flux_from_SeaSalt_extension +#InvSeaSalt_SALC SALC 107 -1 -1 2 kg/m2/s SALC_emission_flux_from_SeaSalt_extension +#InvSeaSalt_SALAAL SALAAL 107 -1 -1 2 kg/m2/s SALAAL_emission_flux_from_SeaSalt_extension +#InvSeaSalt_SALACL SALACL 107 -1 -1 2 kg/m2/s SALACL_emission_flux_from_SeaSalt_extension +#InvSeaSalt_SALCAL SALCAL 107 -1 -1 2 kg/m2/s SALAAL_emission_flux_from_SeaSalt_extension +#InvSeaSalt_SALCCL SALCCL 107 -1 -1 2 kg/m2/s SALCCL_emission_flux_from_SeaSalt_extension + +#============================= +# MEGAN Extension +#============================= +#InvMEGAN_ALD2 ALD2 108 -1 -1 2 kg/m2/s ALD2_biogenic_emission_flux_from_MEGAN_extension +# C2H4 is not an active species in GEOS-Chem; disable for now +##InvMEGAN_C2H4 C2H4 108 -1 -1 2 kg/m2/s C2H4_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_EOH EOH 108 -1 -1 2 kg/m2/s EOH_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_ISOP ISOP 108 -1 -1 2 kg/m2/s ISOP_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_LIMO LIMO 108 -1 -1 2 kg/m2/s LIMO_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_MTPA MTPA 108 -1 -1 2 kg/m2/s MTPA_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_MTPO MTPO 108 -1 -1 2 kg/m2/s MTPO_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_PRPE PRPE 108 -1 -1 2 kg/m2/s PRPE_biogenic_emission_flux_from_MEGAN_extension +# SESQ is not an active species in GEOS-Chem; disable for now +##InvMEGAN_SESQ SESQ 108 -1 -1 2 kg/m2/s SESQ_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_SOAP SOAP 108 -1 -1 2 kg/m2/s SOAP_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_SOAS SOAS 108 -1 -1 2 kg/m2/s SOAS_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_ACET ACET 108 -1 -1 2 kg/m2/s ACET_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_ACET_MONO -1 108 -1 -1 2 kg/m2/s Acetone_from_monoterpenes_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_ACET_MBOX -1 108 -1 -1 2 kg/m2/s Acetone_from_methyl_butenol_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_ACET_DIRECT -1 108 -1 -1 2 kg/m2/s Direct_acetone_biogenic_emission_flux_from_MEGAN_extension +#InvMEGAN_MOH MOH 108 -1 -1 2 kg/m2/s Methanol_emission_flux_from_MEGAN_extension +#InvMEGAN_APIN -1 108 -1 -1 2 kg/m2/s Alpha_pinene_emission_flux_from_MEGAN_extension +#InvMEGAN_BPIN -1 108 -1 -1 2 kg/m2/s Beta_pinene_acid_emission_flux_from_MEGAN_extension +#InvMEGAN_SABI -1 108 -1 -1 2 kg/m2/s Sabinene_emission_flux_from_MEGAN_extension +#InvMEGAN_MYRC -1 108 -1 -1 2 kg/m2/s Mycrene_emission_flux_from_MEGAN_extension +#InvMEGAN_CARE -1 108 -1 -1 2 kg/m2/s 3_Carene_emission_flux_from_MEGAN_extension +#InvMEGAN_OCIM -1 108 -1 -1 2 kg/m2/s Ocimene_emission_flux_from_MEGAN_extension +#InvMEGAN_OMON -1 108 -1 -1 2 kg/m2/s Other_monoterpene_emission_flux_from_MEGAN_extension +#InvMEGAN_MONX -1 108 -1 -1 2 kg/m2/s Total_monoterpene_emission_flux_from_MEGAN_extension +#InvMEGAN_FARN -1 108 -1 -1 2 kg/m2/s alpha_Farnesene_emission_flux_from_MEGAN_extension +#InvMEGAN_BCAR -1 108 -1 -1 2 kg/m2/s beta_caryophyllene_emission_flux_from_MEGAN_extension +#InvMEGAN_OSQT -1 108 -1 -1 2 kg/m2/s Other_sesquiterpenes_emission_flux_from_MEGAN_extension +#InvMEGAN_MBOX -1 108 -1 -1 2 kg/m2/s Methyl_butenol_emission_flux_from_MEGAN_extension +#InvMEGAN_FAXX -1 108 -1 -1 2 kg/m2/s Formic_acid_emission_flux_from_MEGAN_extension +#InvMEGAN_AAXX -1 108 -1 -1 2 kg/m2/s Acetic_acid_emission_flux_from_MEGAN_extension + +#============================= +# GFED Extension +#============================= +#InvGFED_ACET ACET 111 -1 -1 2 kg/m2/s ACET_emission_flux_from_GFED_extension +#InvGFED_ACTA ACTA 111 -1 -1 2 kg/m2/s ACTA_emission_flux_from_GFED_extension +#InvGFED_ALD2 ALD2 111 -1 -1 2 kg/m2/s ALD2_emission_flux_from_GFED_extension +#InvGFED_ALK4 ALK4 111 -1 -1 2 kg/m2/s ALK4_emission_flux_from_GFED_extension +#InvGFED_BCPI BCPI 111 -1 -1 2 kg/m2/s BCPI_emission_flux_from_GFED_extension +#InvGFED_BCPO BCPO 111 -1 -1 2 kg/m2/s BCPO_emission_flux_from_GFED_extension +#InvGFED_BENZ BENZ 111 -1 -1 2 kg/m2/s BENZ_emission_flux_from_GFED_extension +#InvGFED_C2H6 C2H6 111 -1 -1 2 kg/m2/s C2H6_emission_flux_from_GFED_extension +#InvGFED_C3H8 C3H8 111 -1 -1 2 kg/m2/s C3H8_emission_flux_from_GFED_extension +#InvGFED_CH2O CH2O 111 -1 -1 2 kg/m2/s CH2O_emission_flux_from_GFED_extension +#InvGFED_CO CO 111 -1 -1 2 kg/m2/s CO_emission_flux_from_GFED_extension +#InvGFED_EOH EOH 111 -1 -1 2 kg/m2/s EOH_emission_flux_from_GFED_extension +#InvGFED_FURA FURA 111 -1 -1 2 kg/m2/s FURA_emission_flux_from_GFED_extension +#InvGFED_GLYX GLYX 111 -1 -1 2 kg/m2/s GLYX_emission_flux_from_GFED_extension +#InvGFED_ISOP ISOP 111 -1 -1 2 kg/m2/s ISOP_emission_flux_from_GFED_extension +#InvGFED_MEK MEK 111 -1 -1 2 kg/m2/s MEK_emission_flux_from_GFED_extension +#InvGFED_MGLY MGLY 111 -1 -1 2 kg/m2/s MGLY_emission_flux_from_GFED_extension +#InvGFED_MOH MOH 111 -1 -1 2 kg/m2/s MOH_emission_flux_from_GFED_extension +#InvGFED_MTPA MTP 111 -1 -1 2 kg/m2/s MTPA_emission_flux_from_GFED_extension +#InvGFED_MVK MVK 111 -1 -1 2 kg/m2/s MVK_emission_flux_from_GFED_extension +#InvGFED_NAP NAP 111 -1 -1 2 kg/m2/s NAP_emission_flux_from_GFED_extension +#InvGFED_NH3 NH3 111 -1 -1 2 kg/m2/s NH3_emission_flux_from_GFED_extension +#InvGFED_NO NO 111 -1 -1 2 kg/m2/s NO_emission_flux_from_GFED_extension +#InvGFED_OCPI OCPI 111 -1 -1 2 kg/m2/s OCPI_emission_flux_from_GFED_extension +#InvGFED_OCPO OCPO 111 -1 -1 2 kg/m2/s OCPO_emission_flux_from_GFED_extension +#InvGFED_PHEN PHEN 111 -1 -1 2 kg/m2/s PHEN_emission_flux_from_GFED_extension +#InvGFED_POG1 POG1 111 -1 -1 2 kg/m2/s POG1_emission_flux_from_GFED_extension +#InvGFED_POG2 POG2 111 -1 -1 2 kg/m2/s POG2_emission_flux_from_GFED_extension +#InvGFED_PRPE PRPE 111 -1 -1 2 kg/m2/s PRPE_emission_flux_from_GFED_extension +#InvGFED_RCHO RCHO 111 -1 -1 2 kg/m2/s RCHO_emission_flux_from_GFED_extension +#InvGFED_SO2 SO2 111 -1 -1 2 kg/m2/s SO2_emission_flux_from_GFED_extension +#InvGFED_SOAP SOAP 111 -1 -1 2 kg/m2/s SOAP_emission_flux_from_GFED_extension +#InvGFED_TOLU TOLU 111 -1 -1 2 kg/m2/s TOLU_emission_flux_from_GFED_extension +#InvGFED_XYLE ACET 111 -1 -1 2 kg/m2/s XYLE_emission_flux_from_GFED_extension + +#============================= +# Volcano extension +#============================= +#InvVOLCANOerupt_SO2 SO2 117 51 -1 3 kg/m2/s SO2_eruptive_emission_flux_from_Volcano_extension +#InvVOLCANOdegas_SO2 SO2 117 52 -1 3 kg/m2/s SO2_degassing_emission_flux_from_Volcano_extension + +#============================= +# INORG_IODINE Extension +#============================= +#InvIODINE_HOI HOI 120 -1 -1 2 kg/m2/s HOI_emission_flux_from_INORG_IODINE_extension +#InvIODINE_I2 I2 120 -1 -1 2 kg/m2/s I2_emission_flux_from_INORG_IODINE_extension + +#EOC diff --git a/.dev/config/HISTORY.rc b/.dev/config/HISTORY.rc new file mode 100644 index 00000000..79c078aa --- /dev/null +++ b/.dev/config/HISTORY.rc @@ -0,0 +1,1355 @@ +############################################################################### +### HISTORY.rc file for GEOS-Chem full chemistry simulations ### +### Contact: GEOS-Chem Support Team (geos-chem-supportg.harvard.edu) ### +############################################################################### + +#============================================================================ +# EXPID allows you to specify the beginning of the file path corresponding +# to each diagnostic collection. For example: +# +# EXPID: ./GEOSChem +# Will create netCDF files whose names begin "GEOSChem", +# in this run directory. +# +# EXPID: ./OutputDir/GEOSChem +# Will create netCDF files whose names begin with "GEOSChem" +# in the OutputDir sub-folder of this run directory. +# +#============================================================================ +EXPID: ./OutputDir/GEOSChem + +#============================================================================== +# %%%%% COLLECTION NAME DECLARATIONS %%%%% +# +# To enable a collection, remove the "#" character in front of its name. The +# Restart collection should always be turned on. +# +# NOTE: These are the "default" collections for GEOS-Chem, but you can create +# your own customized diagnostic collections as well. +#============================================================================== +COLLECTIONS: 'Restart', + 'Metrics', + 'SpeciesConc', + #'AdvFluxVert', + #'AerosolMass', + #'Aerosols', + ##'Budget', + ##'CloudConvFlux', + ##'ConcAboveSfc', + ##'ConcAfterChem', + ##'DryDep', + #'JValues', + ##'KppDiags', + ##'KppARDiags', + ##'LevelEdgeDiags', + ##'ProdLoss', + ##'RRTMG', + ##'RxnRates', + ##'RxnConst', + ##'SatDiagn', + ##'SatDiagnEdge', + ##'StateChm', + #'StateMet', + ##'StratBM', + ##'Tomas', + ##'UVFlux', + ##'WetLossConv', + ##'WetLossLS', + ##'BoundaryConditions', +:: +############################################################################### +### The rest of this file consists of collection definitions. ### +### Above collections whose declarations are commented out will be ignored. ### +### Make sure that each collection definition, as well as the list of ### +### collections above, ends with a double-colon ("::"). ### +############################################################################### + +#============================================================================== +# %%%%% THE Restart COLLECTION %%%%% +# +# GEOS-Chem restart file fields +# +# Available for all simulations +#============================================================================== + Restart.filename: './Restarts/GEOSChem.Restart.%y4%m2%d2_%h2%n2z.nc4', + Restart.frequency: 00000100 000000 + Restart.duration: 00000100 000000 + Restart.mode: 'instantaneous' + Restart.fields: 'SpeciesRst_?ALL? ', + 'Chem_AeroH2OSNA ', + 'Chem_ORVCsesq ', + 'Chem_H2O2AfterChem ', + 'Chem_JOH ', + 'Chem_JNO2 ', + 'Chem_SO2AfterChem ', + 'Chem_DryDepNitrogen ', + 'Chem_WetDepNitrogen ', + 'Chem_KPPHvalue ', + 'Chem_StatePSC ', + 'Met_DELPDRY ', + 'Met_BXHEIGHT ', + 'Met_TropLev ', +:: +#============================================================================== +# %%%%% THE Metrics COLLECTION %%%%% +# +# Diagnostics for chemistry metrics such as global mean OH concentration, +# MCF lifetime, and CH4 lifetime. +# +# This diagnostic collection should always be left on. +# Use the run-directory script ./metrics_fullchem.py to print results. +# +# Available for full-chemistry and CH4 simulations only. +#============================================================================== + Metrics.template: '%y4%m2%d2_%h2%n2z.nc4', + Metrics.frequency: 'End', + Metrics.duration: 'End', + Metrics.mode: 'time-averaged' + Metrics.fields: 'AirMassColumnFull ', + 'LossOHbyCH4columnTrop ', + 'LossOHbyMCFcolumnTrop ', + 'OHwgtByAirMassColumnFull ', +:: +#============================================================================== +# %%%%% THE SpeciesConc COLLECTION %%%%% +# +# GEOS-Chem species concentrations (default = all species) +# +# Available for all simulations +# +# Concentrations may be saved out as SpeciesConcVV [v/v dry air] or +# SpeciesConcMND [molec/cm3] +#============================================================================== + SpeciesConc.template: '%y4%m2%d2_%h2%n2z.nc4', + SpeciesConc.frequency: 00000100 000000 + SpeciesConc.duration: 00000100 000000 + SpeciesConc.mode: 'time-averaged' + SpeciesConc.fields: 'SpeciesConcVV_?ALL? ', + ##'SpeciesConcMND_?ALL? ', +:: +#============================================================================== +# %%%%% THE AdvFluxVert COLLECTION %%%%% +# +# GEOS-Chem vertical mass flux of species in kg/s (default = O3 only) +# +# Available for all simulations +#============================================================================== + AdvFluxVert.template: '%y4%m2%d2_%h2%n2z.nc4', + AdvFluxVert.frequency: 00000100 000000 + AdvFluxVert.duration: 00000100 000000 + AdvFluxVert.mode: 'time-averaged' + AdvFluxVert.fields: 'AdvFluxVert_O3 ', +:: +#============================================================================== +# %%%%% THE AerosolMass COLLECTION %%%%% +# +# Aerosol and PM2.5 mass +# +# Available for full-chemistry and aerosol-only simulations +#============================================================================== + AerosolMass.template: '%y4%m2%d2_%h2%n2z.nc4', + AerosolMass.frequency: 00000100 000000 + AerosolMass.duration: 00000100 000000 + AerosolMass.mode: 'time-averaged' + AerosolMass.fields: 'AerMassASOA ', + 'AerMassBC ', + 'AerMassHMS ', + 'AerMassINDIOL ', + 'AerMassLVOCOA ', + 'AerMassNH4 ', + 'AerMassNIT ', + 'AerMassOPOA ', + 'AerMassPOA ', + 'AerMassSAL ', + 'AerMassSO4 ', + 'AerMassSOAGX ', + 'AerMassSOAIE ', + 'AerMassTSOA ', + 'BetaNO ', + 'PM25 ', + 'PM10 ', + 'TotalBiogenicOA ', + 'TotalOA ', + 'TotalOC ', +:: +#============================================================================== +# %%%%% The Aerosols COLLECTION %%%%% +# +# Aerosol optical depth, surface area, number density, and hygroscopic growth +# +# Available for full-chemistry or aerosol-only simulations +#============================================================================== + Aerosols.template: '%y4%m2%d2_%h2%n2z.nc4', + Aerosols.frequency: 00000100 000000 + Aerosols.duration: 00000100 000000 + Aerosols.mode: 'time-averaged' + Aerosols.fields: 'AODDust ', + 'AODDustWL1_?DUSTBIN? ', + 'AODHygWL1_?HYG? ', + 'AODSOAfromAqIsopreneWL1 ', + 'AODStratLiquidAerWL1 ', + 'AODPolarStratCloudWL1 ', + 'AerHygroscopicGrowth_?HYG? ', + 'AerNumDensityStratLiquid ', + 'AerNumDensityStratParticulate ', + 'AerAqueousVolume ', + 'AerSurfAreaDust ', + 'AerSurfAreaHyg_?HYG? ', + 'AerSurfAreaStratLiquid ', + 'AerSurfAreaPolarStratCloud ', + 'Chem_AeroAreaMDUST1 ', + 'Chem_AeroAreaMDUST2 ', + 'Chem_AeroAreaMDUST3 ', + 'Chem_AeroAreaMDUST4 ', + 'Chem_AeroAreaMDUST5 ', + 'Chem_AeroAreaMDUST6 ', + 'Chem_AeroAreaMDUST7 ', + 'Chem_AeroAreaSULF ', + 'Chem_AeroAreaBC ', + 'Chem_AeroAreaOC ', + 'Chem_AeroAreaSSA ', + 'Chem_AeroAreaSSC ', + #'Chem_AeroAreaBGSULF ', + #'Chem_AeroAreaICEI ', + 'Chem_AeroRadiMDUST1 ', + 'Chem_AeroRadiMDUST2 ', + 'Chem_AeroRadiMDUST3 ', + 'Chem_AeroRadiMDUST4 ', + 'Chem_AeroRadiMDUST5 ', + 'Chem_AeroRadiMDUST6 ', + 'Chem_AeroRadiMDUST7 ', + 'Chem_AeroRadiSULF ', + 'Chem_AeroRadiBC ', + 'Chem_AeroRadiOC ', + 'Chem_AeroRadiSSA ', + 'Chem_AeroRadiSSC ', + #'Chem_AeroRadiBGSULF ', + #'Chem_AeroRadiICEI ', + 'Chem_WetAeroAreaMDUST1 ', + 'Chem_WetAeroAreaMDUST2 ', + 'Chem_WetAeroAreaMDUST3 ', + 'Chem_WetAeroAreaMDUST4 ', + 'Chem_WetAeroAreaMDUST5 ', + 'Chem_WetAeroAreaMDUST6 ', + 'Chem_WetAeroAreaMDUST7 ', + 'Chem_WetAeroAreaSULF ', + 'Chem_WetAeroAreaBC ', + 'Chem_WetAeroAreaOC ', + 'Chem_WetAeroAreaSSA ', + 'Chem_WetAeroAreaSSC ', + #'Chem_WetAeroAreaBGSULF ', + #'Chem_WetAeroAreaICEI ', + 'Chem_WetAeroRadiMDUST1 ', + 'Chem_WetAeroRadiMDUST2 ', + 'Chem_WetAeroRadiMDUST3 ', + 'Chem_WetAeroRadiMDUST4 ', + 'Chem_WetAeroRadiMDUST5 ', + 'Chem_WetAeroRadiMDUST6 ', + 'Chem_WetAeroRadiMDUST7 ', + 'Chem_WetAeroRadiSULF ', + 'Chem_WetAeroRadiBC ', + 'Chem_WetAeroRadiOC ', + 'Chem_WetAeroRadiSSA ', + 'Chem_WetAeroRadiSSC ', + #'Chem_WetAeroRadiBGSULF ', + #'Chem_WetAeroRadiICEI ', + #'Chem_StatePSC ', + #'Chem_KhetiSLAN2O5H2O ', + #'Chem_KhetiSLAN2O5HCl ', + #'Chem_KhetiSLAClNO3H2O ', + #'Chem_KhetiSLAClNO3HCl ', + #'Chem_KhetiSLAClNO3HBr ', + #'Chem_KhetiSLABrNO3H2O ', + #'Chem_KhetiSLABrNO3HCl ', + #'Chem_KhetiSLAHOClHCl ', + #'Chem_KhetiSLAHOClHBr ', + #'Chem_KhetiSLAHOBrHCl ', + #'Chem_KhetiSLAHOBrHBr ', +:: +#============================================================================== +# %%%%% THE Budget COLLECTION %%%%% +# +# GEOS-Chem budget diagnostics defined as species kg/s in the column +# (full, troposphere, or PBL) due to a single component (e.g. chemistry) +# (default = advected species) +# +# Available for all simulations +#============================================================================== + Budget.template: '%y4%m2%d2_%h2%n2z.nc4', + Budget.frequency: 00000100 000000 + Budget.duration: 00000100 000000 + Budget.mode: 'time-averaged' + Budget.fields: 'BudgetEmisDryDepFull_?ADV? ', + 'BudgetEmisDryDepTrop_?ADV? ', + 'BudgetEmisDryDepPBL_?ADV? ', + 'BudgetEmisDryDepLevs1to35_?ADV? ', + 'BudgetChemistryFull_?ADV? ', + 'BudgetChemistryTrop_?ADV? ', + 'BudgetChemistryPBL_?ADV? ', + 'BudgetChemistryLevs1to35_?ADV? ', + 'BudgetTransportFull_?ADV? ', + 'BudgetTransportTrop_?ADV? ', + 'BudgetTransportPBL_?ADV? ', + 'BudgetTransportLevs1to35_?ADV? ', + 'BudgetMixingFull_?ADV? ', + 'BudgetMixingTrop_?ADV? ', + 'BudgetMixingPBL_?ADV? ', + 'BudgetMixingLevs1to35_?ADV? ', + 'BudgetConvectionFull_?ADV? ', + 'BudgetConvectionTrop_?ADV? ', + 'BudgetConvectionPBL_?ADV? ', + 'BudgetConvectionLevs1to35_?ADV? ', + 'BudgetWetDepFull_?WET? ', + 'BudgetWetDepTrop_?WET? ', + 'BudgetWetDepPBL_?WET? ', + 'BudgetWetDepLevs1to35_?WET? ', +:: +#============================================================================== +# %%%%% THE CloudConvFlux COLLECTION %%%%% +# +# Cloud convective flux (default = advected species) +# +# Available for all simulations +#============================================================================== + CloudConvFlux.template: '%y4%m2%d2_%h2%n2z.nc4', + CloudConvFlux.frequency: 00000100 000000 + CloudConvFlux.duration: 00000100 000000 + CloudConvFlux.mode: 'time-averaged' + CloudConvFlux.fields: 'CloudConvFlux_?ADV? ', +:: +#============================================================================== +# %%%%% THE ConcAboveSfc COLLECTION %%%%% +# +# Concentrations of O3 and HNO3 at a user-specified altitude above +# the surface, such as 10m. Set the desired output altitude in meters +# in the deposition settings in geoschem_config.yml. +# +# NOTES: +# (1) This collection requires dry deposition to be turned on. +# (2) All of the fields in the collection must be turned on. +# (3) This collection is best used with mode "instantaneous". +#============================================================================== + ConcAboveSfc.template: '%y4%m2%d2_%h2%n2z.nc4', + ConcAboveSfc.frequency: 00000100 000000 + ConcAboveSfc.duration: 00000100 000000 + ConcAboveSfc.mode: 'instantaneous' + ConcAboveSfc.fields: 'DryDepRaALT1 ', + 'DryDepVelForALT1_?DRYALT? ', + 'SpeciesConcALT1_?DRYALT? ', +:: +#============================================================================== +# %%%%% THE ConcAfterChem COLLECTION %%%%% +# +# Concentrations of OH, HO2, O1D, O3P immediately after exiting the KPP solver +# or OH after the CH4 specialty-simulation chemistry routine. +# +# OH: Available for all full-chemistry simulations and CH4 specialty sim +# HO2: Available for all full-chemistry simulations +# O1D, O3P: Availalbe for full-chemistry simulations using UCX mechanism +#============================================================================== + ConcAfterChem.template: '%y4%m2%d2_%h2%n2z.nc4', + ConcAfterChem.frequency: 00000100 000000 + ConcAfterChem.duration: 00000100 000000 + ConcAfterChem.mode: 'time-averaged' + ConcAfterChem.fields: 'OHconcAfterChem ', + 'HO2concAfterChem ', + 'O1DconcAfterChem ', + 'O3PconcAfterChem ', +:: +#============================================================================== +# %%%%% THE DryDep COLLECTION %%%%% +# +# Dry depositon fluxes and velocities (for all dry-depositing species) +# +# Available for all simuations that have dry-depositing species +#============================================================================== + DryDep.template: '%y4%m2%d2_%h2%n2z.nc4', + DryDep.frequency: 00000100 000000 + DryDep.duration: 00000100 000000 + DryDep.mode: 'time-averaged' + DryDep.fields: 'DryDep_?DRY? ', + 'DryDepVel_?DRY? ', + ##'DryDepChm_?DRY? ', + ##'DryDepMix_?DRY? ', +:: +#============================================================================== +# %%%%% THE JValues COLLECTION %%%%% +# +# Photolysis rates (from the photolysis module) +# +# Available for all full-chemistry simulations with photolysis +#============================================================================== + JValues.template: '%y4%m2%d2_%h2%n2z.nc4', + JValues.frequency: 00000100 000000 + JValues.duration: 00000100 000000 + JValues.mode: 'time-averaged' + JValues.fields: 'Jval_?PHO? ', + 'JvalO3O1D ', + 'JvalO3O3P ', +:: +#============================================================================== +# %%%%% THE UVFlux COLLECTION %%%%% +# +# UV fluxes (from the photolysis module) +# +# Available for all full-chemistry simulations with photolysis +#============================================================================== + UVFlux.template: 'UVFluxDiffuse_?UVFLX? ', + 'UVFluxDirect_?UVFLX? ', + 'UVFluxNet_?UVFLX? ', +:: +#============================================================================== +# %%%%% THE KppDiags COLLECTION %%%%% +# +# Diagnostics from the KPP solver. +# +# Available for full-chemistry simulations (all variations) +#============================================================================== + KppDiags.template: '%y4%m2%d2_%h2%n2z.nc4', + KppDiags.frequency: 00000100 000000 + KppDiags.duration: 00000100 000000 + KppDiags.mode: 'time-averaged' + KppDiags.fields: 'KppIntCounts ', + 'KppJacCounts ', + 'KppTotSteps ', + 'KppAccSteps ', + 'KppRejSteps ', + 'KppLuDecomps ', + 'KppSubsts ', + 'KppSmDecomps ', + 'KppTime ', + #'KppNegatives ', + #'KppNegatives0 ', +:: +#============================================================================== +# %%%%% THE KppARDiags COLLECTION %%%%% +# +# Diagnostics from the KPP solver when auto-reduction solver is used. +# +# Available for full-chemistry simulations only if auto-reduce is enabled. +#============================================================================== + KppARDiags.template: '%y4%m2%d2_%h2%n2z.nc4', + KppARDiags.frequency: 00000100 000000 + KppARDiags.duration: 00000100 000000 + KppARDiags.mode: 'time-averaged' + KppARDiags.fields: 'KppAutoReducerNVAR ', + 'KppAutoReduceThres ', + 'KppcNONZERO ', +:: +#============================================================================== +# %%%%% THE LevelEdgeDiags COLLECTION %%%%% +# +# Diagnostics that are defined on grid box level edges +# +# Available for all simulations +#============================================================================== + LevelEdgeDiags.template: '%y4%m2%d2_%h2%n2z.nc4', + LevelEdgeDiags.frequency: 00000100 000000 + LevelEdgeDiags.duration: 00000100 000000 + LevelEdgeDiags.mode: 'time-averaged' + LevelEdgeDiags.fields: 'Met_CMFMC ', + 'Met_PEDGE ', + 'Met_PEDGEDRY ', + 'Met_PFICU ', + 'Met_PFILSAN ', + 'Met_PFLCU ', + 'Met_PFLLSAN ', +:: +#============================================================================== +# %%%%% THE ProdLoss COLLECTION %%%%% +# +# Chemical production and loss rates +# +# Available for full-chemistry, aerosol-only, tagO3, and tagCO simulations +#============================================================================== + ProdLoss.template: '%y4%m2%d2_%h2%n2z.nc4', + ProdLoss.frequency: 00000100 000000 + ProdLoss.duration: 00000100 000000 + ProdLoss.mode: 'time-averaged' + ProdLoss.fields: 'Prod_?PRD? ', + 'ProdBCPIfromBCPO ', + 'ProdOCPIfromOCPO ', + 'ProdHMSfromSO2andHCHOinCloud ', + 'ProdSO2andHCHOfromHMSinCloud ', + 'ProdSO4fromHMSinCloud ', + 'ProdSO4fromH2O2inCloud ', + 'ProdSO4fromO2inCloudMetal ', + 'ProdSO4fromO3inCloud ', + 'ProdSO4fromO3inSeaSalt ', + 'ProdSO4fromHOBrInCloud ', + 'ProdSO4fromSRO3 ', + 'ProdSO4fromSRHObr ', + 'ProdSO4fromO3s ', + 'Loss_?LOS? ', + 'LossHNO3onSeaSalt ', + 'ProdCOfromCH4 ', + 'ProdCOfromNMVOC ', +:: +#============================================================================== +# %%%%% THE RRTMG COLLECTION %%%%% +# +# Outputs for different species from the RRTMG radiative transfer model: +# (See http://wiki.geos-chem.org/Coupling_GEOS-Chem_with_RRTMG) +# +# 0=BA (Baseline ) 1=O3 (Ozone ) 2=ME (Methane ) +# 3=SU (Sulfate ) 4=NI (Nitrate ) 5=AM (Ammonium ) +# 6=BC (Black carbon) 7=OA (Organic aerosol) 8=SS (Sea Salt ) +# 9=DU (Mineral dust) 10=PM (All part. matter) 12=ST (Strat aer., UCX only) +# +# NOTES: +# (1) Only request diagnostics you need to reduce the overall run time. +# (2) The ?RRTMG? wildcard includes all output except ST (strat aerosols). +# However, if ST is included explicitly for one diagnostic then it +# will be included for all others that use the wildcard. +# (3) Only enable ST if running with UCX. +# (4) Optics diagnostics have a reduced set of output species (no BASE, O3, ME) +#============================================================================== + RRTMG.template: '%y4%m2%d2_%h2%n2z.nc4', + RRTMG.frequency: 00000100 000000 + RRTMG.duration: 00000100 000000 + RRTMG.mode: 'time-averaged' + RRTMG.fields: 'RadClrSkyLWSurf_BASE ', + 'RadClrSkyLWSurf_O3 ', + 'RadClrSkyLWSurf_ME ', + 'RadClrSkyLWSurf_SU ', + 'RadClrSkyLWSurf_NI ', + 'RadClrSkyLWSurf_AM ', + 'RadClrSkyLWSurf_BC ', + 'RadClrSkyLWSurf_OA ', + 'RadClrSkyLWSurf_SS ', + 'RadClrSkyLWSurf_DU ', + 'RadClrSkyLWSurf_PM ', + #'RadClrSkyLWSurf_ST ', + 'RadAllSkyLWSurf_?RRTMG?', + 'RadClrSkySWSurf_?RRTMG?', + 'RadAllSkySWSurf_?RRTMG?', + 'RadClrSkyLWTOA_?RRTMG? ', + 'RadAllSkyLWTOA_?RRTMG? ', + 'RadClrSkySWTOA_?RRTMG? ', + 'RadAllSkySWTOA_?RRTMG? ', + 'RadAODWL1_SU ', + 'RadAODWL1_NI ', + 'RadAODWL1_AM ', + 'RadAODWL1_BC ', + 'RadAODWL1_OA ', + 'RadAODWL1_SS ', + 'RadAODWL1_DU ', + 'RadAODWL1_PM ', + #'RadAODWL1_ST ', + 'RadSSAWL1_SU ', + 'RadSSAWL1_NI ', + 'RadSSAWL1_AM ', + 'RadSSAWL1_BC ', + 'RadSSAWL1_OA ', + 'RadSSAWL1_SS ', + 'RadSSAWL1_DU ', + 'RadSSAWL1_PM ', + #'RadSSAWL1_ST ', + 'RadAsymWL1_SU ', + 'RadAsymWL1_NI ', + 'RadAsymWL1_AM ', + 'RadAsymWL1_BC ', + 'RadAsymWL1_OA ', + 'RadAsymWL1_SS ', + 'RadAsymWL1_DU ', + 'RadAsymWL1_PM ', + #'RadAsymWL1_ST ', +:: +#============================================================================== +# %%%%% THE RxnRates COLLECTION %%%%% +# +# Archives chemical reaction rates from the KPP solver. +# It is best to list individual reactions to avoid using too much memory. +# Reactions should be listed as "RxnRate_EQnnn", where nnn is the reaction +# index as listed in KPP/fullchem/gckpp_Monitor.F90 (pad zeroes as needed). +# +# Available for the fullchem simulations. +#============================================================================== + RxnRates.template: '%y4%m2%d2_%h2%n2z.nc4', + RxnRates.frequency: 00000100 000000 + RxnRates.duration: 00000100 000000 + RxnRates.mode: 'time-averaged' + RxnRates.fields: 'RxnRate_EQ001 ', + 'RxnRate_EQ002 ', +:: +#============================================================================== +# %%%%% THE RxnConst COLLECTION %%%%% +# +# Archives chemical reaction rates constants from the KPP solver. +# It is best to list individual reactions to avoid using too much memory. +# Reactions should be listed as "RxnConst_EQnnn", where nnn is the reaction +# index as listed in KPP/fullchem/gckpp_Monitor.F90 (pad zeroes as needed). +# +# The units of reaction rate constants vary according to the number of reactants +# in the reaction. +# +# Available for the fullchem simulations. +#============================================================================== + RxnConst.template: '%y4%m2%d2_%h2%n2z.nc4', + RxnConst.frequency: 00000100 000000 + RxnConst.duration: 00000100 000000 + RxnConst.mode: 'time-averaged' + RxnConst.fields: 'RxnConst_EQ001 ', + 'RxnConst_EQ002 ', +:: +#============================================================================== +# %%%%% THE SatDiagn COLLECTION %%%%% +# +# GEOS-Chem data during satellite overpass +# +# Available for all simulations +#============================================================================== + SatDiagn.template: '%y4%m2%d2_%h2%n2z.nc4', + SatDiagn.format: 'CFIO', + SatDiagn.frequency: 00000001 000000 + SatDiagn.duration: 00000100 000000 + SatDiagn.hrrange: 11.98 15.02 + SatDiagn.mode: 'time-averaged' + SatDiagn.fields: 'SatDiagnConc_ISOP ', + 'SatDiagnConc_CH2O ', + 'SatDiagnConc_MVK ', + 'SatDiagnConc_MACR ', + 'SatDiagnConc_MOH ', + 'SatDiagnConc_CO ', + 'SatDiagnConc_NO ', + 'SatDiagnConc_NO2 ', + 'SatDiagnConc_NO3 ', + 'SatDiagnConc_O3 ', + 'SatDiagnConc_HO2 ', + 'SatDiagnOH ', + 'SatDiagnRH ', + 'SatDiagnAirDen ', + 'SatDiagnBoxHeight ', + 'SatDiagnPEdge ', + 'SatDiagnTROPP ', + 'SatDiagnPBLHeight ', + 'SatDiagnPBLTop ', + 'SatDiagnTAir ', + 'SatDiagnGWETROOT ', + 'SatDiagnGWETTOP ', + 'SatDiagnPARDR ', + 'SatDiagnPARDF ', + 'SatDiagnPRECTOT ', + 'SatDiagnSLP ', + 'SatDiagnSPHU ', + 'SatDiagnTS ', + 'SatDiagnPBLTOPL ', + 'SatDiagnMODISLAI ', + 'SatDiagnWetLossLS_CH2O ', + 'SatDiagnWetLossConv_CH2O ', + 'SatDiagnJval_CH2O ', + 'SatDiagnJval_NO2 ', + 'SatDiagnJval_NO3 ', + 'SatDiagnJval_O3 ', + 'SatDiagnJvalO3O1D ', + 'SatDiagnJvalO3O3P ', + 'SatDiagnDryDep_CH2O ', + 'SatDiagnDryDep_NO2 ', + 'SatDiagnDryDep_O3 ', + 'SatDiagnDryDepVel_CH2O ', + 'SatDiagnDryDepVel_NO2 ', + 'SatDiagnDryDepVel_O3 ', + 'SatDiagnOHreactivity ', + 'SatDiagnColEmis_ISOP ', + 'SatDiagnSurfFlux_ISOP ', + 'SatDiagnColEmis_CH2O ', + 'SatDiagnSurfFlux_CH2O ', + 'SatDiagnColEmis_NO ', + 'SatDiagnSurfFlux_NO ', + 'SatDiagnProd_?PRD? ', + 'SatDiagnLoss_?LOS? ', + 'SatDiagnRxnRate_EQ385 ', + 'SatDiagnRxnRate_EQ386 ', + 'SatDiagnRxnRate_EQ387 ', + 'SatDiagnRxnRate_EQ388 ', +:: +#============================================================================== +# %%%%% THE SatDiagnEdge COLLECTION %%%%% +# +# GEOS-Chem data (on level edges) during satellite overpass +# +# Available for all simulations +#============================================================================== + SatDiagnEdge.template: '%y4%m2%d2_%h2%n2z.nc4', + SatDiagnEdge.format: 'CFIO', + SatDiagnEdge.frequency: 00000001 000000 + SatDiagnEdge.duration: 00000100 000000 + SatDiagnEdge.hrrange: 11.98 15.02 + SatDiagnEdge.mode: 'time-averaged' + SatDiagnEdge.fields: 'SatDiagnConc_PEDGE ', +:: +#============================================================================== +# %%%%% THE StateChm COLLECTION %%%%% +# +# Fields of the State_Chm object (see also Aerosols collection) +# +# Available for full-chemistry and aerosols-only simulations +#============================================================================== + StateChm.template: '%y4%m2%d2_%h2%n2z.nc4', + StateChm.frequency: 00000100 000000 + StateChm.duration: 00000100 000000 + StateChm.mode: 'time-averaged' + StateChm.fields: 'Chem_IsorropAeropHAccum ', + 'Chem_IsorropAeropHCoarse ', + 'Chem_IsorropHplusAccum ', + 'Chem_IsorropHplusCoarse ', + 'Chem_IsorropAeroH2OAccum ', + 'Chem_IsorropAeroH2OCoarse ', + 'Chem_IsorropSulfate ', + 'Chem_IsorropNitrateAccum ', + 'Chem_IsorropNitrateCoarse ', + 'Chem_IsorropChlorideAccum ', + 'Chem_IsorropChlorideCoarse ', + 'Chem_IsorropBisulfate ', + 'Chem_pHCloud ', + 'Chem_isCloud ', + 'Chem_SSAlkAccumMode ', + 'Chem_SSAlkCoarseMode ', + 'Chem_HSO3AQ ', + 'Chem_SO3AQ ', + 'Chem_fupdateHOBr ', + 'Chem_GammaN2O5overall ', + 'Chem_GammaN2O5fine ', + 'Chem_YieldClNO2fine ', +:: +#============================================================================== +# %%%%% The StateMet COLLECTION %%%%% +# +# Fields of the State_Met object (also see the LevelEdgeDiags collection) +# +# Available for all simulations +#============================================================================== + StateMet.template: '%y4%m2%d2_%h2%n2z.nc4', + StateMet.frequency: 00000100 000000 + StateMet.duration: 00000100 000000 + StateMet.mode: 'time-averaged' + StateMet.fields: 'Met_AD ', + 'Met_AIRDEN ', + 'Met_AIRVOL ', + 'Met_ALBD ', + 'Met_AVGW ', + 'Met_BXHEIGHT ', + 'Met_ChemGridLev ', + 'Met_CLDF ', + 'Met_CLDFRC ', + 'Met_CLDTOPS ', + 'Met_CONVDEPTH ', + 'Met_DELP ', + 'Met_DELPDRY ', + 'Met_DQRCU ', + 'Met_DQRLSAN ', + 'Met_DTRAIN ', + 'Met_EFLUX ', + 'Met_FLASHDENS ', + 'Met_FRCLND ', + 'Met_FRLAKE ', + 'Met_FRLAND ', + 'Met_FRLANDIC ', + 'Met_FROCEAN ', + 'Met_FRSEAICE ', + 'Met_FRSNO ', + 'Met_GWETROOT ', + 'Met_GWETTOP ', + 'Met_HFLUX ', + 'Met_LAI ', + 'Met_PARDR ', + 'Met_PARDF ', + 'Met_PBLTOPL ', + 'Met_PBLH ', + 'Met_PHIS ', + 'Met_PMID ', + 'Met_PMIDDRY ', + 'Met_PRECANV ', + 'Met_PRECCON ', + 'Met_PRECLSC ', + 'Met_PRECTOT ', + 'Met_PS1DRY ', + 'Met_PS1WET ', + 'Met_PS2DRY ', + 'Met_PS2WET ', + 'Met_PSC2WET ', + 'Met_PSC2DRY ', + 'Met_QI ', + 'Met_QL ', + 'Met_OMEGA ', + 'Met_OPTD ', + 'Met_REEVAPCN ', + 'Met_REEVAPLS ', + 'Met_SLP ', + 'Met_SNODP ', + 'Met_SNOMAS ', + 'Met_SPHU ', + 'Met_SPHU1 ', + 'Met_SPHU2 ', + 'Met_SUNCOS ', + 'Met_SUNCOSmid ', + 'Met_SWGDN ', + 'Met_T ', + 'Met_TAUCLI ', + 'Met_TAUCLW ', + 'Met_THETA ', + 'Met_TMPU1 ', + 'Met_TMPU2 ', + 'Met_TO3 ', + 'Met_TropHt ', + 'Met_TropLev ', + 'Met_TropP ', + 'Met_TS ', + 'Met_TSKIN ', + 'Met_TV ', + 'Met_U ', + 'Met_U10M ', + 'Met_USTAR ', + 'Met_UVALBEDO ', + 'Met_V ', + 'Met_V10M ', + 'Met_Z0 ', + 'FracOfTimeInTrop ', +:: +#============================================================================== +# %%%%% THE StratBM COLLECTION %%%%% +# +# Fields needed for GEOS-Chem 10-year stratospheric benchmarks +# +# Available for full-chemistry simulations +#============================================================================== + StratBM.template: '%y4%m2%d2_%h2%n2z.nc4', + StratBM.frequency: 00000000 010000 + StratBM.duration: 00000001 000000 + StratBM.mode: 'time-averaged' + StratBM.fields: 'SpeciesConcVV_NO2 ', + 'SpeciesConcVV_O3 ', + 'SpeciesConcVV_ClO ', + 'Met_PSC2WET ', + 'Met_BXHEIGHT ', + 'Met_AIRDEN ', + 'Met_AD ', +:: +#============================================================================== +# %%%%% THE Tomas Microphysics Rate COLLECTION %%%%% +# +# Tomas microphysics rates +# +# Available for full-chemistry and aerosol-only simulations +#============================================================================== + Tomas.template: '%y4%m2%d2_%h2%n2z.nc4', + Tomas.format: 'CFIO', + Tomas.timestampStart: .true. + Tomas.monthly: 0 + Tomas.frequency: 010000 + Tomas.duration: 010000 + Tomas.mode: 'time-averaged' + Tomas.fields: 'TomasH2SO4 ', + 'TomasH2SO4mass_bin01 ', + 'TomasH2SO4mass_bin02 ', + 'TomasH2SO4mass_bin03 ', + 'TomasH2SO4mass_bin04 ', + 'TomasH2SO4mass_bin05 ', + 'TomasH2SO4mass_bin06 ', + 'TomasH2SO4mass_bin07 ', + 'TomasH2SO4mass_bin08 ', + 'TomasH2SO4mass_bin09 ', + 'TomasH2SO4mass_bin10 ', + 'TomasH2SO4mass_bin11 ', + 'TomasH2SO4mass_bin12 ', + 'TomasH2SO4mass_bin13 ', + 'TomasH2SO4mass_bin14 ', + 'TomasH2SO4mass_bin15 ', + 'TomasH2SO4number_bin01 ', + 'TomasH2SO4number_bin02 ', + 'TomasH2SO4number_bin03 ', + 'TomasH2SO4number_bin04 ', + 'TomasH2SO4number_bin05 ', + 'TomasH2SO4number_bin06 ', + 'TomasH2SO4number_bin07 ', + 'TomasH2SO4number_bin08 ', + 'TomasH2SO4number_bin09 ', + 'TomasH2SO4number_bin10 ', + 'TomasH2SO4number_bin11 ', + 'TomasH2SO4number_bin12 ', + 'TomasH2SO4number_bin13 ', + 'TomasH2SO4number_bin14 ', + 'TomasH2SO4number_bin15 ', + 'TomasCOAG ', + 'TomasCOAGmass_bin01 ', + 'TomasCOAGmass_bin02 ', + 'TomasCOAGmass_bin03 ', + 'TomasCOAGmass_bin04 ', + 'TomasCOAGmass_bin05 ', + 'TomasCOAGmass_bin06 ', + 'TomasCOAGmass_bin07 ', + 'TomasCOAGmass_bin08 ', + 'TomasCOAGmass_bin09 ', + 'TomasCOAGmass_bin10 ', + 'TomasCOAGmass_bin11 ', + 'TomasCOAGmass_bin12 ', + 'TomasCOAGmass_bin13 ', + 'TomasCOAGmass_bin14 ', + 'TomasCOAGmass_bin15 ', + 'TomasCOAGnumber_bin01 ', + 'TomasCOAGnumber_bin02 ', + 'TomasCOAGnumber_bin03 ', + 'TomasCOAGnumber_bin04 ', + 'TomasCOAGnumber_bin05 ', + 'TomasCOAGnumber_bin06 ', + 'TomasCOAGnumber_bin07 ', + 'TomasCOAGnumber_bin08 ', + 'TomasCOAGnumber_bin09 ', + 'TomasCOAGnumber_bin10 ', + 'TomasCOAGnumber_bin11 ', + 'TomasCOAGnumber_bin12 ', + 'TomasCOAGnumber_bin13 ', + 'TomasCOAGnumber_bin14 ', + 'TomasCOAGnumber_bin15 ', + 'TomasNUCL ', + 'TomasNUCRATEFN ', + 'TomasNUCLmass_bin01 ', + 'TomasNUCLmass_bin02 ', + 'TomasNUCLmass_bin03 ', + 'TomasNUCLmass_bin04 ', + 'TomasNUCLmass_bin05 ', + 'TomasNUCLmass_bin06 ', + 'TomasNUCLmass_bin07 ', + 'TomasNUCLmass_bin08 ', + 'TomasNUCLmass_bin09 ', + 'TomasNUCLmass_bin10 ', + 'TomasNUCLmass_bin11 ', + 'TomasNUCLmass_bin12 ', + 'TomasNUCLmass_bin13 ', + 'TomasNUCLmass_bin14 ', + 'TomasNUCLmass_bin15 ', + 'TomasNUCLnumber_bin01 ', + 'TomasNUCLnumber_bin02 ', + 'TomasNUCLnumber_bin03 ', + 'TomasNUCLnumber_bin04 ', + 'TomasNUCLnumber_bin05 ', + 'TomasNUCLnumber_bin06 ', + 'TomasNUCLnumber_bin07 ', + 'TomasNUCLnumber_bin08 ', + 'TomasNUCLnumber_bin09 ', + 'TomasNUCLnumber_bin10 ', + 'TomasNUCLnumber_bin11 ', + 'TomasNUCLnumber_bin12 ', + 'TomasNUCLnumber_bin13 ', + 'TomasNUCLnumber_bin14 ', + 'TomasNUCLnumber_bin15 ', + 'TomasNUCRATEnumber_bin01 ', + 'TomasNUCRATEnumber_bin02 ', + 'TomasNUCRATEnumber_bin03 ', + 'TomasNUCRATEnumber_bin04 ', + 'TomasNUCRATEnumber_bin05 ', + 'TomasNUCRATEnumber_bin06 ', + 'TomasNUCRATEnumber_bin07 ', + 'TomasNUCRATEnumber_bin08 ', + 'TomasNUCRATEnumber_bin09 ', + 'TomasNUCRATEnumber_bin10 ', + 'TomasNUCRATEnumber_bin11 ', + 'TomasNUCRATEnumber_bin12 ', + 'TomasNUCRATEnumber_bin13 ', + 'TomasNUCRATEnumber_bin14 ', + 'TomasNUCRATEnumber_bin15 ', + 'TomasAQOX ', + 'TomasAQOXmass_bin01 ', + 'TomasAQOXmass_bin02 ', + 'TomasAQOXmass_bin03 ', + 'TomasAQOXmass_bin04 ', + 'TomasAQOXmass_bin05 ', + 'TomasAQOXmass_bin06 ', + 'TomasAQOXmass_bin07 ', + 'TomasAQOXmass_bin08 ', + 'TomasAQOXmass_bin09 ', + 'TomasAQOXmass_bin10 ', + 'TomasAQOXmass_bin11 ', + 'TomasAQOXmass_bin12 ', + 'TomasAQOXmass_bin13 ', + 'TomasAQOXmass_bin14 ', + 'TomasAQOXmass_bin15 ', + 'TomasAQOXnumber_bin01 ', + 'TomasAQOXnumber_bin02 ', + 'TomasAQOXnumber_bin03 ', + 'TomasAQOXnumber_bin04 ', + 'TomasAQOXnumber_bin05 ', + 'TomasAQOXnumber_bin06 ', + 'TomasAQOXnumber_bin07 ', + 'TomasAQOXnumber_bin08 ', + 'TomasAQOXnumber_bin09 ', + 'TomasAQOXnumber_bin10 ', + 'TomasAQOXnumber_bin11 ', + 'TomasAQOXnumber_bin12 ', + 'TomasAQOXnumber_bin13 ', + 'TomasAQOXnumber_bin14 ', + 'TomasAQOXnumber_bin15 ', + 'TomasMNFIX ', + 'TomasMNFIXmass_bin01 ', + 'TomasMNFIXmass_bin02 ', + 'TomasMNFIXmass_bin03 ', + 'TomasMNFIXmass_bin04 ', + 'TomasMNFIXmass_bin05 ', + 'TomasMNFIXmass_bin06 ', + 'TomasMNFIXmass_bin07 ', + 'TomasMNFIXmass_bin08 ', + 'TomasMNFIXmass_bin09 ', + 'TomasMNFIXmass_bin10 ', + 'TomasMNFIXmass_bin11 ', + 'TomasMNFIXmass_bin12 ', + 'TomasMNFIXmass_bin13 ', + 'TomasMNFIXmass_bin14 ', + 'TomasMNFIXmass_bin15 ', + 'TomasMNFIXnumber_bin01 ', + 'TomasMNFIXnumber_bin02 ', + 'TomasMNFIXnumber_bin03 ', + 'TomasMNFIXnumber_bin04 ', + 'TomasMNFIXnumber_bin05 ', + 'TomasMNFIXnumber_bin06 ', + 'TomasMNFIXnumber_bin07 ', + 'TomasMNFIXnumber_bin08 ', + 'TomasMNFIXnumber_bin09 ', + 'TomasMNFIXnumber_bin10 ', + 'TomasMNFIXnumber_bin11 ', + 'TomasMNFIXnumber_bin12 ', + 'TomasMNFIXnumber_bin13 ', + 'TomasMNFIXnumber_bin14 ', + 'TomasMNFIXnumber_bin15 ', + 'TomasMNFIXh2so4mass_bin01 ', + 'TomasMNFIXh2so4mass_bin02 ', + 'TomasMNFIXh2so4mass_bin03 ', + 'TomasMNFIXh2so4mass_bin04 ', + 'TomasMNFIXh2so4mass_bin05 ', + 'TomasMNFIXh2so4mass_bin06 ', + 'TomasMNFIXh2so4mass_bin07 ', + 'TomasMNFIXh2so4mass_bin08 ', + 'TomasMNFIXh2so4mass_bin09 ', + 'TomasMNFIXh2so4mass_bin10 ', + 'TomasMNFIXh2so4mass_bin11 ', + 'TomasMNFIXh2so4mass_bin12 ', + 'TomasMNFIXh2so4mass_bin13 ', + 'TomasMNFIXh2so4mass_bin14 ', + 'TomasMNFIXh2so4mass_bin15 ', + 'TomasMNFIXh2so4number_bin01 ', + 'TomasMNFIXh2so4number_bin02 ', + 'TomasMNFIXh2so4number_bin03 ', + 'TomasMNFIXh2so4number_bin04 ', + 'TomasMNFIXh2so4number_bin05 ', + 'TomasMNFIXh2so4number_bin06 ', + 'TomasMNFIXh2so4number_bin07 ', + 'TomasMNFIXh2so4number_bin08 ', + 'TomasMNFIXh2so4number_bin09 ', + 'TomasMNFIXh2so4number_bin10 ', + 'TomasMNFIXh2so4number_bin11 ', + 'TomasMNFIXh2so4number_bin12 ', + 'TomasMNFIXh2so4number_bin13 ', + 'TomasMNFIXh2so4number_bin14 ', + 'TomasMNFIXh2so4number_bin15 ', + 'TomasMNFIXcoagmass_bin01 ', + 'TomasMNFIXcoagmass_bin02 ', + 'TomasMNFIXcoagmass_bin03 ', + 'TomasMNFIXcoagmass_bin04 ', + 'TomasMNFIXcoagmass_bin05 ', + 'TomasMNFIXcoagmass_bin06 ', + 'TomasMNFIXcoagmass_bin07 ', + 'TomasMNFIXcoagmass_bin08 ', + 'TomasMNFIXcoagmass_bin09 ', + 'TomasMNFIXcoagmass_bin10 ', + 'TomasMNFIXcoagmass_bin11 ', + 'TomasMNFIXcoagmass_bin12 ', + 'TomasMNFIXcoagmass_bin13 ', + 'TomasMNFIXcoagmass_bin14 ', + 'TomasMNFIXcoagmass_bin15 ', + 'TomasMNFIXcoagnumber_bin01 ', + 'TomasMNFIXcoagnumber_bin02 ', + 'TomasMNFIXcoagnumber_bin03 ', + 'TomasMNFIXcoagnumber_bin04 ', + 'TomasMNFIXcoagnumber_bin05 ', + 'TomasMNFIXcoagnumber_bin06 ', + 'TomasMNFIXcoagnumber_bin07 ', + 'TomasMNFIXcoagnumber_bin08 ', + 'TomasMNFIXcoagnumber_bin09 ', + 'TomasMNFIXcoagnumber_bin10 ', + 'TomasMNFIXcoagnumber_bin11 ', + 'TomasMNFIXcoagnumber_bin12 ', + 'TomasMNFIXcoagnumber_bin13 ', + 'TomasMNFIXcoagnumber_bin14 ', + 'TomasMNFIXcoagnumber_bin15 ', + 'TomasMNFIXaqoxmass_bin01 ', + 'TomasMNFIXaqoxmass_bin02 ', + 'TomasMNFIXaqoxmass_bin03 ', + 'TomasMNFIXaqoxmass_bin04 ', + 'TomasMNFIXaqoxmass_bin05 ', + 'TomasMNFIXaqoxmass_bin06 ', + 'TomasMNFIXaqoxmass_bin07 ', + 'TomasMNFIXaqoxmass_bin08 ', + 'TomasMNFIXaqoxmass_bin09 ', + 'TomasMNFIXaqoxmass_bin10 ', + 'TomasMNFIXaqoxmass_bin11 ', + 'TomasMNFIXaqoxmass_bin12 ', + 'TomasMNFIXaqoxmass_bin13 ', + 'TomasMNFIXaqoxmass_bin14 ', + 'TomasMNFIXaqoxmass_bin15 ', + 'TomasMNFIXaqoxnumber_bin01 ', + 'TomasMNFIXaqoxnumber_bin02 ', + 'TomasMNFIXaqoxnumber_bin03 ', + 'TomasMNFIXaqoxnumber_bin04 ', + 'TomasMNFIXaqoxnumber_bin05 ', + 'TomasMNFIXaqoxnumber_bin06 ', + 'TomasMNFIXaqoxnumber_bin07 ', + 'TomasMNFIXaqoxnumber_bin08 ', + 'TomasMNFIXaqoxnumber_bin09 ', + 'TomasMNFIXaqoxnumber_bin10 ', + 'TomasMNFIXaqoxnumber_bin11 ', + 'TomasMNFIXaqoxnumber_bin12 ', + 'TomasMNFIXaqoxnumber_bin13 ', + 'TomasMNFIXaqoxnumber_bin14 ', + 'TomasMNFIXaqoxnumber_bin15 ', + 'TomasMNFIXezwat1mass_bin01 ', + 'TomasMNFIXezwat1mass_bin02 ', + 'TomasMNFIXezwat1mass_bin03 ', + 'TomasMNFIXezwat1mass_bin04 ', + 'TomasMNFIXezwat1mass_bin05 ', + 'TomasMNFIXezwat1mass_bin06 ', + 'TomasMNFIXezwat1mass_bin07 ', + 'TomasMNFIXezwat1mass_bin08 ', + 'TomasMNFIXezwat1mass_bin09 ', + 'TomasMNFIXezwat1mass_bin10 ', + 'TomasMNFIXezwat1mass_bin11 ', + 'TomasMNFIXezwat1mass_bin12 ', + 'TomasMNFIXezwat1mass_bin13 ', + 'TomasMNFIXezwat1mass_bin14 ', + 'TomasMNFIXezwat1mass_bin15 ', + 'TomasMNFIXezwat1number_bin01 ', + 'TomasMNFIXezwat1number_bin02 ', + 'TomasMNFIXezwat1number_bin03 ', + 'TomasMNFIXezwat1number_bin04 ', + 'TomasMNFIXezwat1number_bin05 ', + 'TomasMNFIXezwat1number_bin06 ', + 'TomasMNFIXezwat1number_bin07 ', + 'TomasMNFIXezwat1number_bin08 ', + 'TomasMNFIXezwat1number_bin09 ', + 'TomasMNFIXezwat1number_bin10 ', + 'TomasMNFIXezwat1number_bin11 ', + 'TomasMNFIXezwat1number_bin12 ', + 'TomasMNFIXezwat1number_bin13 ', + 'TomasMNFIXezwat1number_bin14 ', + 'TomasMNFIXezwat1number_bin15 ', + 'TomasMNFIXezwat2mass_bin01 ', + 'TomasMNFIXezwat2mass_bin02 ', + 'TomasMNFIXezwat2mass_bin03 ', + 'TomasMNFIXezwat2mass_bin04 ', + 'TomasMNFIXezwat2mass_bin05 ', + 'TomasMNFIXezwat2mass_bin06 ', + 'TomasMNFIXezwat2mass_bin07 ', + 'TomasMNFIXezwat2mass_bin08 ', + 'TomasMNFIXezwat2mass_bin09 ', + 'TomasMNFIXezwat2mass_bin10 ', + 'TomasMNFIXezwat2mass_bin11 ', + 'TomasMNFIXezwat2mass_bin12 ', + 'TomasMNFIXezwat2mass_bin13 ', + 'TomasMNFIXezwat2mass_bin14 ', + 'TomasMNFIXezwat2mass_bin15 ', + 'TomasMNFIXezwat2number_bin01 ', + 'TomasMNFIXezwat2number_bin02 ', + 'TomasMNFIXezwat2number_bin03 ', + 'TomasMNFIXezwat2number_bin04 ', + 'TomasMNFIXezwat2number_bin05 ', + 'TomasMNFIXezwat2number_bin06 ', + 'TomasMNFIXezwat2number_bin07 ', + 'TomasMNFIXezwat2number_bin08 ', + 'TomasMNFIXezwat2number_bin09 ', + 'TomasMNFIXezwat2number_bin10 ', + 'TomasMNFIXezwat2number_bin11 ', + 'TomasMNFIXezwat2number_bin12 ', + 'TomasMNFIXezwat2number_bin13 ', + 'TomasMNFIXezwat2number_bin14 ', + 'TomasMNFIXezwat2number_bin15 ', + 'TomasMNFIXezwat3mass_bin01 ', + 'TomasMNFIXezwat3mass_bin02 ', + 'TomasMNFIXezwat3mass_bin03 ', + 'TomasMNFIXezwat3mass_bin04 ', + 'TomasMNFIXezwat3mass_bin05 ', + 'TomasMNFIXezwat3mass_bin06 ', + 'TomasMNFIXezwat3mass_bin07 ', + 'TomasMNFIXezwat3mass_bin08 ', + 'TomasMNFIXezwat3mass_bin09 ', + 'TomasMNFIXezwat3mass_bin10 ', + 'TomasMNFIXezwat3mass_bin11 ', + 'TomasMNFIXezwat3mass_bin12 ', + 'TomasMNFIXezwat3mass_bin13 ', + 'TomasMNFIXezwat3mass_bin14 ', + 'TomasMNFIXezwat3mass_bin15 ', + 'TomasMNFIXezwat3number_bin01 ', + 'TomasMNFIXezwat3number_bin02 ', + 'TomasMNFIXezwat3number_bin03 ', + 'TomasMNFIXezwat3number_bin04 ', + 'TomasMNFIXezwat3number_bin05 ', + 'TomasMNFIXezwat3number_bin06 ', + 'TomasMNFIXezwat3number_bin07 ', + 'TomasMNFIXezwat3number_bin08 ', + 'TomasMNFIXezwat3number_bin09 ', + 'TomasMNFIXezwat3number_bin10 ', + 'TomasMNFIXezwat3number_bin11 ', + 'TomasMNFIXezwat3number_bin12 ', + 'TomasMNFIXezwat3number_bin13 ', + 'TomasMNFIXezwat3number_bin14 ', + 'TomasMNFIXezwat3number_bin15 ', + 'TomasMNFIXcheck1mass_bin01 ', + 'TomasMNFIXcheck1mass_bin02 ', + 'TomasMNFIXcheck1mass_bin03 ', + 'TomasMNFIXcheck1mass_bin04 ', + 'TomasMNFIXcheck1mass_bin05 ', + 'TomasMNFIXcheck1mass_bin06 ', + 'TomasMNFIXcheck1mass_bin07 ', + 'TomasMNFIXcheck1mass_bin08 ', + 'TomasMNFIXcheck1mass_bin09 ', + 'TomasMNFIXcheck1mass_bin10 ', + 'TomasMNFIXcheck1mass_bin11 ', + 'TomasMNFIXcheck1mass_bin12 ', + 'TomasMNFIXcheck1mass_bin13 ', + 'TomasMNFIXcheck1mass_bin14 ', + 'TomasMNFIXcheck1mass_bin15 ', + 'TomasMNFIXcheck1number_bin01 ', + 'TomasMNFIXcheck1number_bin02 ', + 'TomasMNFIXcheck1number_bin03 ', + 'TomasMNFIXcheck1number_bin04 ', + 'TomasMNFIXcheck1number_bin05 ', + 'TomasMNFIXcheck1number_bin06 ', + 'TomasMNFIXcheck1number_bin07 ', + 'TomasMNFIXcheck1number_bin08 ', + 'TomasMNFIXcheck1number_bin09 ', + 'TomasMNFIXcheck1number_bin10 ', + 'TomasMNFIXcheck1number_bin11 ', + 'TomasMNFIXcheck1number_bin12 ', + 'TomasMNFIXcheck1number_bin13 ', + 'TomasMNFIXcheck1number_bin14 ', + 'TomasMNFIXcheck1number_bin15 ', + 'TomasMNFIXcheck2mass_bin01 ', + 'TomasMNFIXcheck2mass_bin02 ', + 'TomasMNFIXcheck2mass_bin03 ', + 'TomasMNFIXcheck2mass_bin04 ', + 'TomasMNFIXcheck2mass_bin05 ', + 'TomasMNFIXcheck2mass_bin06 ', + 'TomasMNFIXcheck2mass_bin07 ', + 'TomasMNFIXcheck2mass_bin08 ', + 'TomasMNFIXcheck2mass_bin09 ', + 'TomasMNFIXcheck2mass_bin10 ', + 'TomasMNFIXcheck2mass_bin11 ', + 'TomasMNFIXcheck2mass_bin12 ', + 'TomasMNFIXcheck2mass_bin13 ', + 'TomasMNFIXcheck2mass_bin14 ', + 'TomasMNFIXcheck2mass_bin15 ', + 'TomasMNFIXcheck2number_bin01 ', + 'TomasMNFIXcheck2number_bin02 ', + 'TomasMNFIXcheck2number_bin03 ', + 'TomasMNFIXcheck2number_bin04 ', + 'TomasMNFIXcheck2number_bin05 ', + 'TomasMNFIXcheck2number_bin06 ', + 'TomasMNFIXcheck2number_bin07 ', + 'TomasMNFIXcheck2number_bin08 ', + 'TomasMNFIXcheck2number_bin09 ', + 'TomasMNFIXcheck2number_bin10 ', + 'TomasMNFIXcheck2number_bin11 ', + 'TomasMNFIXcheck2number_bin12 ', + 'TomasMNFIXcheck2number_bin13 ', + 'TomasMNFIXcheck2number_bin14 ', + 'TomasMNFIXcheck2number_bin15 ', + 'TomasMNFIXcheck3mass_bin01 ', + 'TomasMNFIXcheck3mass_bin02 ', + 'TomasMNFIXcheck3mass_bin03 ', + 'TomasMNFIXcheck3mass_bin04 ', + 'TomasMNFIXcheck3mass_bin05 ', + 'TomasMNFIXcheck3mass_bin06 ', + 'TomasMNFIXcheck3mass_bin07 ', + 'TomasMNFIXcheck3mass_bin08 ', + 'TomasMNFIXcheck3mass_bin09 ', + 'TomasMNFIXcheck3mass_bin10 ', + 'TomasMNFIXcheck3mass_bin11 ', + 'TomasMNFIXcheck3mass_bin12 ', + 'TomasMNFIXcheck3mass_bin13 ', + 'TomasMNFIXcheck3mass_bin14 ', + 'TomasMNFIXcheck3mass_bin15 ', + 'TomasMNFIXcheck3number_bin01 ', + 'TomasMNFIXcheck3number_bin02 ', + 'TomasMNFIXcheck3number_bin03 ', + 'TomasMNFIXcheck3number_bin04 ', + 'TomasMNFIXcheck3number_bin05 ', + 'TomasMNFIXcheck3number_bin06 ', + 'TomasMNFIXcheck3number_bin07 ', + 'TomasMNFIXcheck3number_bin08 ', + 'TomasMNFIXcheck3number_bin09 ', + 'TomasMNFIXcheck3number_bin10 ', + 'TomasMNFIXcheck3number_bin11 ', + 'TomasMNFIXcheck3number_bin12 ', + 'TomasMNFIXcheck3number_bin13 ', + 'TomasMNFIXcheck3number_bin14 ', + 'TomasMNFIXcheck3number_bin15 ', + 'TomasSOA ', + 'TomasSOAmass_bin01 ', + 'TomasSOAmass_bin02 ', + 'TomasSOAmass_bin03 ', + 'TomasSOAmass_bin04 ', + 'TomasSOAmass_bin05 ', + 'TomasSOAmass_bin06 ', + 'TomasSOAmass_bin07 ', + 'TomasSOAmass_bin08 ', + 'TomasSOAmass_bin09 ', + 'TomasSOAmass_bin10 ', + 'TomasSOAmass_bin11 ', + 'TomasSOAmass_bin12 ', + 'TomasSOAmass_bin13 ', + 'TomasSOAmass_bin14 ', + 'TomasSOAmass_bin15 ', + 'TomasSOAnumber_bin01 ', + 'TomasSOAnumber_bin02 ', + 'TomasSOAnumber_bin03 ', + 'TomasSOAnumber_bin04 ', + 'TomasSOAnumber_bin05 ', + 'TomasSOAnumber_bin06 ', + 'TomasSOAnumber_bin07 ', + 'TomasSOAnumber_bin08 ', + 'TomasSOAnumber_bin09 ', + 'TomasSOAnumber_bin10 ', + 'TomasSOAnumber_bin11 ', + 'TomasSOAnumber_bin12 ', + 'TomasSOAnumber_bin13 ', + 'TomasSOAnumber_bin14 ', + 'TomasSOAnumber_bin15 ', +:: +#============================================================================== +# %%%%% THE WetLossConv COLLECTION %%%%% +# +# Loss of soluble species in convective updrafts +# +# Available for all simulations that have soluble species +#============================================================================== + WetLossConv.template: '%y4%m2%d2_%h2%n2z.nc4', + WetLossConv.frequency: 00000100 000000 + WetLossConv.duration: 00000100 000000 + WetLossConv.mode: 'time-averaged' + WetLossConv.fields: 'WetLossConv_?WET? ', + 'WetLossConvFrac_?WET? ', +:: +#============================================================================== +# %%%%% THE WetLossLS COLLECTION %%%%% +# +# Loss of soluble species in large-scale wetdep (i.e. rainout and washout) +# +# Available for all simulations that have soluble species +#============================================================================== +# Loss due to rainout and washout (per deposited species) + WetLossLS.template: '%y4%m2%d2_%h2%n2z.nc4', + WetLossLS.frequency: 00000100 000000 + WetLossLS.duration: 00000100 000000 + WetLossLS.mode: 'time-averaged' + WetLossLS.fields: 'WetLossLS_?WET? ', +:: +#============================================================================== +# %%%%% THE BoundaryConditions COLLECTION %%%%% +# +# GEOS-Chem boundary conditions for use in nested grid simulations +# +# Available for all simulations +#============================================================================== + BoundaryConditions.template: '%y4%m2%d2_%h2%n2z.nc4', + BoundaryConditions.frequency: 00000000 030000 + BoundaryConditions.duration: 00000001 000000 + BoundaryConditions.mode: 'instantaneous' + BoundaryConditions.fields: 'SpeciesBC_?ADV? ', +:: diff --git a/.dev/config/geoschem_config.yml b/.dev/config/geoschem_config.yml new file mode 100644 index 00000000..8ffdc8bb --- /dev/null +++ b/.dev/config/geoschem_config.yml @@ -0,0 +1,463 @@ +--- +### geoschem_config.yml: GEOS-Chem Runtime configuration options. +### Customized for simulations using the KPP "fullchem" mechanism. +### +### NOTE: Add quotes around nitrogen oxide ('NO'), because YAML +### parsers will confuse this with a negative "no" value. + +#============================================================================ +# Simulation settings +#============================================================================ +simulation: + name: fullchem + start_date: [20160701, 000000] + end_date: [20160701, 020000] + root_data_dir: /home/joe/data/GISS-GC/prod_input_files/ExtData + met_field: MERRA2 + species_database_file: ./species_database.yml + species_metadata_output_file: OutputDir/geoschem_species_metadata.yml + verbose: + activate: false + on_cores: root # Allowed values: root all + use_gcclassic_timers: false + +#============================================================================ +# Grid settings +#============================================================================ +grid: + resolution: 2.0x2.5 + number_of_levels: 40 + longitude: + range: [-180.0, 180.0] + center_at_180: true + latitude: + range: [-90.0, 90.0] + half_size_polar_boxes: true + nested_grid_simulation: + activate: false + buffer_zone_NSEW: [0, 0, 0, 0] + +#============================================================================ +# Timesteps settings +#============================================================================ +timesteps: + transport_timestep_in_s: 600 + chemistry_timestep_in_s: 1200 + radiation_timestep_in_s: 10800 + +#============================================================================ +# Settings for GEOS-Chem operations +#============================================================================ +operations: + + chemistry: + # TODO: Reactivate chemistry + activate: false + linear_chemistry_aloft: + activate: true + use_linoz_for_O3: true + active_strat_H2O: + activate: true + use_static_bnd_cond: true + gamma_HO2: 0.2 + autoreduce_solver: + activate: false + use_target_threshold: + activate: true + oh_tuning_factor: 0.00005 + no2_tuning_factor: 0.0001 + use_absolute_threshold: + scale_by_pressure: true + absolute_threshold: 100.0 + keep_halogens_active: false + append_in_internal_timestep: false + + convection: + activate: true + + dry_deposition: + activate: true + CO2_effect: + activate: false + CO2_level: 600.0 + reference_CO2_level: 380.0 + diag_alt_above_sfc_in_m: 10 + + pbl_mixing: + activate: true + use_non_local_pbl: true + + photolysis: + activate: true + input_directories: + fastjx_input_dir: /home/joe/data/GISS-GC/prod_input_files/ExtData/CHEM_INPUTS/FAST_JX/v2024-05/ + cloudj_input_dir: /home/joe/data/GISS-GC/prod_input_files/ExtData/CHEM_INPUTS/CLOUD_J/v2023-05/ + overhead_O3: + use_online_O3_from_model: true + use_column_O3_from_met: true + use_TOMS_SBUV_O3: false + photolyze_nitrate_aerosol: + activate: true + NITs_Jscale_JHNO3: 100.0 + NIT_Jscale_JHNO2: 100.0 + percent_channel_A_HONO: 66.667 + percent_channel_B_NO2: 33.333 + + rrtmg_rad_transfer_model: + activate: false + aod_wavelengths_in_nm: + - 550 + longwave_fluxes: false + shortwave_fluxes: false + clear_sky_flux: false + all_sky_flux: false + fixed_dyn_heating: false + seasonal_fdh: false + read_dyn_heating: false + co2_ppmv: 390.0 + + transport: + gcclassic_tpcore: # GEOS-Chem Classic only + activate: true # GEOS-Chem Classic only + fill_negative_values: true # GEOS-Chem Classic only + iord_jord_kord: [3, 3, 7] # GEOS-Chem Classic only + transported_species: + - ACET + - ACTA + - AERI + - ALD2 + - ALK4 + - AONITA + - AROMP4 + - AROMP5 + - ATOOH + - BALD + - BCPI + - BCPO + - BENZ + - BENZP + - Br + - Br2 + - BrCl + - BrNO2 + - BrNO3 + - BrO + - BrSALA + - BrSALC + - BUTDI + - BZCO3H + - BZPAN + - C2H2 + - C2H4 + - C2H6 + - C3H8 + - CCl4 + - CFC11 + - CFC113 + - CFC114 + - CFC115 + - CFC12 + - CH2Br2 + - CH2Cl2 + - CH2I2 + - CH2IBr + - CH2ICl + - CH2O + - CH3Br + - CH3CCl3 + - CH3Cl + - CH3I + - CH4 + - CHBr3 + - CHCl3 + - Cl + - Cl2 + - Cl2O2 + - ClNO2 + - ClNO3 + - ClO + - ClOO + - CLOCK + - CO + - CSL + - DMS + - DST1 + - DST2 + - DST3 + - DST4 + - EOH + - ETHLN + - ETHN + - ETHP + - ETNO3 + - ETP + - FURA + - GLYC + - GLYX + - H1211 + - H1301 + - H2402 + - H2O + - H2O2 + - HAC + - HBr + - HC5A + - HCFC123 + - HCFC141b + - HCFC142b + - HCFC22 + - HCl + - HCOOH + - HI + - HMHP + - HMML + - HMS + - HNO2 + - HNO3 + - HNO4 + - HOBr + - HOCl + - HOI + - HONIT + - HPALD1 + - HPALD2 + - HPALD3 + - HPALD4 + - HPETHNL + - I + - I2 + - I2O2 + - I2O3 + - I2O4 + - IBr + - ICHE + - ICl + - ICN + - ICPDH + - IDC + - IDCHP + - IDHDP + - IDHPE + - IDN + - IEPOXA + - IEPOXB + - IEPOXD + - IHN1 + - IHN2 + - IHN3 + - IHN4 + - INDIOL + - INO + - INPB + - INPD + - IO + - IONITA + - IONO + - IONO2 + - IPRNO3 + - ISALA + - ISALC + - ISOP + - ITCN + - ITHN + - LIMO + - LVOC + - LVOCOA + - MACR + - MACR1OOH + - MAP + - MCRDH + - MCRENOL + - MCRHN + - MCRHNB + - MCRHP + - MCT + - MEK + - MENO3 + - MGLY + - MOH + - MONITA + - MONITS + - MONITU + - MP + - MPAN + - MPN + - MSA + - MTPA + - MTPO + - MVK + - MVKDH + - MVKHC + - MVKHCB + - MVKHP + - MVKN + - MVKPC + - N2O + - N2O5 + - NH3 + - NH4 + - NIT + - NITs + - 'NO' + - NO2 + - NO3 + - NPHEN + - NPRNO3 + - O3 + - OClO + - OCPI + - OCPO + - OCS + - OIO + - PAN + - pFe + - PHEN + - PIP + - PP + - PPN + - PROPNN + - PRPE + - PRPN + - PYAC + - R4N2 + - R4P + - RA3P + - RB3P + - RCHO + - RIPA + - RIPB + - RIPC + - RIPD + - RP + - SALA + - SALAAL + - SALACL + - SALC + - SALCAL + - SALCCL + - SO2 + - SO4 + - SO4s + - SOAGX + - SOAIE + - SOAP + - SOAS + - TOLU + - XYLE + + wet_deposition: + activate: true + +#============================================================================ +# Settings for GEOS-Chem aerosols +#============================================================================ +aerosols: + + carbon: + activate: true + brown_carbon: false + enhance_black_carbon_absorption: + activate: true + hydrophilic: 1.5 + hydrophobic: 1.0 + + complex_SOA: + activate: false + semivolatile_POA: false + + dust: + activate: true + acid_uptake_on_dust: false + + sea_salt: + activate: true + SALA_radius_bin_in_um: [0.01, 0.5] + SALC_radius_bin_in_um: [0.5, 8.0] + marine_organic_aerosols: false + + stratosphere: + settle_strat_aerosol: true + polar_strat_clouds: + activate: true + het_chem: true + allow_homogeneous_NAT: false + NAT_supercooling_req_in_K: 3.0 + supersat_factor_req_for_ice_nucl: 1.2 + calc_strat_aod: true + + sulfate: + activate: true + metal_cat_SO2_oxidation: true + +#============================================================================ +# Settings for diagnostics (other than HISTORY and HEMCO) +#============================================================================ +extra_diagnostics: + + obspack: + activate: false + quiet_logfile_output: false + input_file: ./obspack_co2_1_OCO2MIP_2018-11-28.YYYYMMDD.nc + output_file: ./OutputDir/GEOSChem.ObsPack.YYYYMMDD_hhmmz.nc4 + output_species: + - CO + - 'NO' + - O3 + + planeflight: + activate: false + flight_track_file: Planeflight.dat.YYYYMMDD + output_file: plane.log.YYYYMMDD + + legacy_bpch: # 1 2 3 + output_menu: # 1234567890123456789012345678901 + schedule_output_for_JAN: 3000000000000000000000000000000 + schedule_output_for_FEB: 30000000000000000000000000000 + schedule_output_for_MAR: 3000000000000000000000000000000 + schedule_output_for_APR: 300000000000000000000000000000 + schedule_output_for_MAY: 3000000000000000000000000000000 + schedule_output_for_JUN: 300000000000000000000000000000 + schedule_output_for_JUL: 3000000000000000000000000000000 + schedule_output_for_AUG: 3000000000000000000000000000000 + schedule_output_for_SEP: 300000000000000000000000000000 + schedule_output_for_OCT: 3000000000000000000000000000000 + schedule_output_for_NOV: 300000000000000000000000000000 + schedule_output_for_DEC: 3000000000000000000000000000000 + + gamap: + diaginfo_dat_file: ./diaginfo.dat + tracerinfo_dat_file: ./tracerinfo.dat + + bpch_diagnostics: + TOMAS_aerosol_emissions: "0 all" + TOMAS_rate: "0 all" + TOMAS_3D_rate: "0 all" + ND65_prodloss: + activate: true + number_of_levels: 72 + + ND51_satellite: + activate: false + output_file: ts_satellite.YYYYMMDD.bpch + tracers: + - 1 + - 2 + - 501 + UTC_hour_for_write: 0 + averaging_period_in_LT: [9, 11] + IMIN_and_IMAX_of_region: [1, 72] + JMIN_and_JMAX_of_region: [1, 46] + LMIN_and_LMAX_of_region: [1, 1] + + ND51b_satellite: + activate: false + output_file: ts_13_15_NA..YYYYMMDD.bpch + tracers: + - 1 + - 2 + - 501 + UTC_hour_for_write: 1 + averaging_period_in_LT: [13, 15] + IMIN_and_IMAX_of_region: [1, 72] + JMIN_and_JMAX_of_region: [1, 46] + LMIN_and_LMAX_of_region: [1, 1] diff --git a/.dev/config/species_database.yml b/.dev/config/species_database.yml new file mode 100644 index 00000000..7788822f --- /dev/null +++ b/.dev/config/species_database.yml @@ -0,0 +1,4708 @@ +# GEOS-Chem Species Database +# Core species only (neglecting microphysics) +# NOTE: Anchors must be defined before any variables that reference them. +A3O2: + Formula: CH3CH2CH2OO + FullName: Primary peroxy radical from C3H8 + Is_Gas: true + MW_g: 75.10 +ACET: + DD_F0: 1.0 + DD_Hstar: 1.0e+5 + Formula: CH3C(O)CH3 + FullName: Acetone + Henry_CR: 5500.0 + Henry_K0: 2.74e+1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 58.09 +ACTA: + DD_F0: 1.0 + DD_Hstar: 4.1e+3 + Formula: CH3C(O)OH + FullName: Acetic acid + Henry_CR: 6200.0 + Henry_K0: 4.05e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 60.06 + WD_RetFactor: 2.0e-2 +AERI: + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: I + FullName: Iodine on aerosol + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 126.90 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +DST1_PROP: &DST1properties + DD_DustDryDep: true + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 2500.0 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + Radius: 7.3e-7 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 1.0, 1.0] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [1.0, 0.1, 0.0] +DST2_PROP: &DST2properties + DD_DustDryDep: true + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 2650.0 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + Radius: 1.4e-6 + WD_AerScavEff: 1.0 + WD_CoarseAer: true + WD_KcScaleFac: [1.0, 1.0, 1.0] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [1.0, 0.1, 0.0] +DST3_PROP: &DST3properties + DD_DustDryDep: true + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 2650.0 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + Radius: 2.4e-6 + WD_AerScavEff: 1.0 + WD_CoarseAer: true + WD_KcScaleFac: [1.0, 1.0, 1.0] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [1.0, 0.1, 0.0] +DST4_PROP: &DST4properties + DD_DustDryDep: true + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 2650.0 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + Radius: 4.5e-6 + WD_AerScavEff: 1.0 + WD_CoarseAer: true + WD_KcScaleFac: [1.0, 1.0, 1.0] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [1.0, 0.1, 0.0] +AlF1: + << : *DST1properties + Formula: Al + Fullname: Aluminium on dust Reff = 0.7 microns + MW_g: 26.98 + WD_CoarseAer: true +AlF2: + << : *DST2properties + Formula: Al + Fullname: Aluminium on dust, Reff = 1.4 microns + MW_g: 26.98 +ALD2: + DD_F0: 1.0 + DD_Hstar: 1.1e+1 + Formula: CH3CHO + FullName: Acetaldehyde + Henry_CR: 5900.0 + Henry_K0: 1.32e+1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 44.06 + WD_RetFactor: 2.0e-2 +ALK4: + FullName: Lumped >= C4 Alkanes + Is_Advected: true + Is_Gas: true + MW_g: 58.12 +aoa_PROP: &aoaproperties + Is_Advected: true + Is_Gas: true + Is_Tracer: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g + Snk_Mode: constant + Snk_Value: 0 + Src_Add: true + Src_Horiz: all + Src_Mode: constant + Src_Units: timestep + Src_Value: 1 + Src_Vert: all + Units: days +aoa: + << : *aoaproperties + FullName: Age of air uniform source tracer + Snk_Horiz: all + Snk_Vert: surface +aoa_bl: + << : *aoaproperties + FullName: Age of air uniform source tracer with sink restricted to the boundary layer + Snk_Horiz: all + Snk_Vert: boundary_layer +aoa_nh: + << : *aoaproperties + FullName: Age of air uniform source tracer with surface sink restricted to a zone in the northern hemisphere + Snk_Horiz: lat_zone + Snk_Lats: [30.0, 50.0] + Snk_Vert: surface +AONITA: + DD_F0: 1.0 + DD_Hstar: 2.9e+3 + Formula: C6H6O6N + FullName: Aerosol-phase organonitrates from aromatics + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + Henry_CR: 6800.0 + Henry_K0: 2.9e+3 + MW_g: 189.12 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RetFactor: 2.0e-2 +AROMP4: + DD_F0: 1.0 + DD_Hstar: 4.1e+5 + Formula: C4H4O2 + FullName: Generic C4 product of aromatics + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 68.08 + Henry_CR: 7500.0 + Henry_K0: 4.1e+5 + WD_RetFactor: 2.0e-2 +AROMP5: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H6O2 + FullName: C5 unsaturated dicarbonyl + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 98.10 + Henry_CR: 7500.0 + Henry_K0: 2.0e+6 + WD_RetFactor: 2.0e-2 +AROMRO2: + Formula: C6H7O3 + FullName: hydroxy-peroxy radical from aromatics + Is_Gas: true + MW_g: 127.00 +AsF1: + << : *DST1properties + Formula: As + Fullname: Arsenic on dust Reff = 0.7 microns + MW_g: 74.92 + WD_CoarseAer: true +AsF2: + << : *DST2properties + Formula: As + Fullname: Arsenic on dust, Reff = 1.4 microns + MW_g: 74.92 +ASOA_PROP: &ASOAproperties + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Lumped non-volatile aerosol products of light aromatics + IVOCs + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 150.00 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +ASOA1: + << : *ASOAproperties +ASOA2: + << : *ASOAproperties +ASOA3: + << : *ASOAproperties +ASOAN: + << : *ASOAproperties +ASOG_PROP: &ASOGproperties + DD_F0: 0.0 + DD_Hstar: 1.0e+5 + FullName: Lumped non-volatile gas products of light aromatics + IVOCs + Henry_CR: 6039.0 + Henry_K0: 1.0e+5 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 150.00 + WD_RetFactor: 2.0e-2 +ASOG1: + << : *ASOGproperties +ASOG2: + << : *ASOGproperties +ASOG3: + << : *ASOGproperties +ATO2: + Formula: CH3C(O)CH2O2 + FullName: Peroxy radical from acetone + Is_Gas: true + MW_g: 89.08 +ATOOH: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: CH3C(O)CH2OOH + FullName: ATO2 peroxide + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 90.09 + WD_RetFactor: 2.0e-2 +B3O2: + Formula: CH3CH(OO)CH3 + FullName: B3O2 + Is_Gas: true + MW_g: 75.10 +BALD: + DD_F0: 1.0 + DD_Hstar: 3.8e+1 + Formula: C7H6O + FullName: Benzaldehyde + Henry_CR: 5500.0 + Henry_K0: 3.8e+1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 106.12 + WD_RetFactor: 2.0e-2 +BCPI: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1800.0 + Formula: C + FullName: Hydrophilic black carbon aerosol + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_HygroGrowth: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 0.5] +BCPO: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1800.0 + Formula: C + FullName: Hydrophobic black carbon aerosol + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 1.0, 0.5] + WD_KcScaleFac_Luo: [1.0, 1.0, 0.0] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [0.5, 0.05, 0.0] +Be_PROP: &Beproperties + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_RadioNuclide: true + Is_Tracer: true + Is_WetDep: true +# Comment out tracer-specific code for now and use RnPbBe_mod.F90 +# Snk_Horiz: all +# Snk_Mode: halflife +# Snk_Vert: all +# Src_Add: true +# Src_Mode: HEMCO + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +Be10: + << : *Beproperties + Formula: Be10 + FullName: Beryllium-10 isotope + MW_g: 10.0 +# Snk_Period: 5.84e8 +# Src_Vert: all +Be10s: + << : *Beproperties + Formula: Be10 + FullName: Beryllium-10 isotope stratospheric-source tracer + MW_g: 10.0 +# Snk_Period: 5.84e8 +# Src_Vert: stratosphere +Be7: + << : *Beproperties + Formula: Be7 + FullName: Beryllium-7 isotope + MW_g: 7.0 +# Snk_Period: 53.3 +# Src_Vert: all +Be7s: + << : *Beproperties + Formula: Be7 + FullName: Beryllium-7 isotope stratospheric-source tracer + MW_g: 7.0 +# Snk_Period: 53.3 +# Src_Vert: stratosphere +BENZ: + Formula: C6H6 + FullName: Benzene + Is_Advected: true + Is_Gas: true + MW_g: 78.12 +BENZO: + Formula: C6H5O + FullName: alkoxy radical from aromatics + Is_Gas: true + MW_g: 93.00 +BENZO2: + Formula: C6H5O2 + FullName: peroxy radical from aromatics + Is_Gas: true + MW_g: 109.00 +BENZP: + DD_F0: 1.0 + DD_Hstar: 2.9e+3 + Formula: C6H6O2 + FullName: Phenyl hydroperoxide + Henry_CR: 6800.0 + Henry_K0: 2.9e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 110.11 + WD_RetFactor: 2.0e-2 +Br: + Formula: Br + FullName: Atomic bromine + Is_Advected: true + Is_Gas: true + MW_g: 79.90 +Br2: + DD_F0: 0.0 + DD_Hstar: 7.6e-1 + Formula: Br2 + FullName: Molecular Bromine + Henry_CR: 3720.0 + Henry_K0: 7.6e-1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 159.80 + WD_RetFactor: 0.0 +BrCl: + DD_F0: 0.0 + DD_Hstar: 9.7e-1 + Henry_CR: 5600.0 + Henry_K0: 9.7e-1 + Formula: BrCl + FullName: Bromine chloride + Is_Advected: true + Is_Gas: true + Is_DryDep: true + Is_WetDep: true + WD_RetFactor: 0.0 + Is_Photolysis: true + MW_g: 115.45 +BrNO2: + Formula: BrNO2 + FullName: Nitryl bromide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 125.91 +BrNO3: + DD_F0: 0.0 + DD_Hstar: 1.0e+20 + Formula: BrNO3 + FullName: Bromine nitrate + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 141.91 +BrO: + Formula: BrO + FullName: Bromine monoxide + Is_Advected: true + Is_Gas: true + Is_DryAlt: true + Is_Photolysis: true + MW_g: 95.90 +BRO2: + Formula: C6H7O5 + FullName: Peroxy radical from BENZ oxidation + Is_Gas: true + MW_g: 159.13 +SALA_PROP: &SALAproperties + DD_AeroDryDep: true + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 2200.0 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + Radius: 2.55e-7 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +BrSALA: + << : *SALAproperties + Formula: Br + FullName: Fine sea salt bromine + Is_HygroGrowth: false + MW_g: 79.90 +BUTDI: + Formula: C4H4O2 + FullName: Butenedial + Is_Advected: true + Is_Gas: true + MW_g: 84.07 +BZCO3: + Formula: C7H5O3 + FullName: Acyl peroxy radical from benzaldehyde + Is_Gas: true + MW_g: 137.00 +BZCO3H: + DD_F0: 1.0 + DD_Hstar: 2.4e+4 + Formula: C6H5CO3H + FullName: Perbenzoic acid + Henry_CR: 0.0 + Henry_K0: 2.4e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 138.12 + WD_RetFactor: 2.0e-2 +BZPAN: + DD_F0: 1.0 + DD_Hstar: 7.0e+1 + Formula: C7H5O5N + FullName: Peroxybenzoylnitrate + Henry_CR: 4600.0 + Henry_K0: 7.0e+1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 183.12 + WD_RetFactor: 2.0e-2 +SALC_PROP: &SALCproperties + DD_AeroDryDep: true + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 2200.0 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + Radius: 4.25e-6 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +BrSALC: + << : *SALCproperties + Formula: Br + FullName: Coarse sea salt bromine + Is_HygroGrowth: false + MW_g: 79.90 + WD_CoarseAer: true +C: + Formula: C + FullName: Atomic carbon + MW_g: 12.01 +C2H2: + Formula: C2H2 + FullName: Acetylene (aka Ethyne) + Is_Advected: true + Is_Gas: true + MW_g: 26.05 +C2H4: + Formula: C2H4 + FullName: Ethylene + Is_Advected: true + Is_Gas: true + MW_g: 28.05 +C2H6: + Formula: C2H6 + FullName: Ethane + Henry_CR: 2400.0 + Henry_K0: 1.93e-3 + Is_Advected: true + Is_Gas: true + MW_g: 30.08 +C3H8: + Formula: C3H8 + FullName: Propane + Henry_CR: 2400.0 + Henry_K0: 1.52e-3 + Is_Advected: true + Is_Gas: true + MW_g: 44.11 +C4HVP1: + Formula: C4H7O3 + FullName: C4 hydroxy-vinyl peroxy radicals from HPALDS + Is_Gas: true + MW_g: 103.11 +C4HVP2: + Formula: C4H7O3 + FullName: C4 hydroxy-vinyl peroxy radicals from HPALDS + Is_Gas: true + MW_g: 103.11 +CaF1: + << : *DST1properties + Formula: Ca + Fullname: Calcium on dust Reff = 0.7 microns + MW_g: 40.08 + WD_CoarseAer: true +CaF2: + << : *DST2properties + Formula: Ca + Fullname: Calcium on dust, Reff = 1.4 microns + MW_g: 40.08 +CaC3: + << : *DST3properties + Formula: Ca + Fullname: Calcium on dust, Reff = 2.4 microns + MW_g: 40.08 +CaC4: + << : *DST4properties + Formula: Ca + Fullname: Calcium on dust, Reff = 4.5 microns + MW_g: 40.08 +CCl4: + Formula: CCl4 + FullName: Carbon tetrachloride + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 153.82 +CdF1: + << : *DST1properties + Formula: Cd + Fullname: Cadmium on dust Reff = 0.7 microns + MW_g: 112.41 + WD_CoarseAer: true +CdF2: + << : *DST2properties + Formula: Cd + Fullname: Cadmium on dust, Reff = 1.4 microns + MW_g: 112.41 +CFC11: + Formula: CCl3F + FullName: CFC-11 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 137.37 +CFC113: + Formula: C2Cl3F3 + FullName: CFC-113 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 187.38 +CFC114: + Formula: C2Cl2F4 + FullName: CFC-114 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 170.92 +CFC115: + Formula: C2ClF5 + FullName: CFC-115 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 154.47 +CFC12: + Formula: CCl2F2 + FullName: CFC-12 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 120.91 +CH2Br2: + Formula: CH2Br2 + FullName: Dibromomethane + Henry_CR: 5000.0 + Henry_K0: 1.22 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 173.83 +CH2Cl2: + Formula: CH2Cl2 + FullName: Dichloromethane + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 84.93 +CH2I2: + Formula: CH2I2 + FullName: Diiodomethane + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 267.84 +CH2IBr: + Formula: CH2IBr + FullName: Bromoiodomethane + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 220.84 +CH2ICl: + Formula: CH2ICl + FullName: Chloroiodomethane + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 176.38 +CH2O: + Background_VV: 4.0e-15 + DD_F0: 1.0 + DD_Hstar: 3.0e+3 + Formula: CH2O + FullName: Formaldehyde + Henry_CR: 6800.0 + Henry_K0: 3.24e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 30.03 + WD_RetFactor: 2.0e-2 +CH2OO: + Formula: CH2OO + FullName: Criegee intermediate + Is_Gas: true + MW_g: 46.03 +CH3Br: + Formula: CH3Br + FullName: Methyl bromide + Henry_CR: 2800.0 + Henry_K0: 1.32e-1 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 94.94 +CH3CCl3: + Formula: CH3CCl3 + FullName: Methyl chloroform + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 133.35 +CH3CHOO: + Formula: CH3CHOO + FullName: Criegee intermediate + Is_Gas: true + MW_g: 60.06 +CH3Cl: + Formula: CH3Cl + FullName: Chloromethane + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 50.45 +CH3I: + Background_VV: 1.0e-20 + Formula: CH3I + FullName: Methyl iodide + Henry_CR: 3.6e+3 + Henry_K0: 0.20265 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_Tracer: true + Snk_Horiz: all + Snk_Mode: efolding + Snk_Period: 5 + Snk_Vert: all + Src_Add: true + Src_Mode: HEMCO + MW_g: 141.94 +CH4_PROP: &CH4properties + Formula: CH4 + Is_Advected: true + Is_Gas: true + MW_g: 16.04 +CH4: + << : *CH4properties + Background_VV: 1.8e-6 + FullName: Methane +CH4_BBN: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from biomass burning emissions +CH4_COL: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from coal emissions +CH4_GAS: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from gas emissions +CH4_LAK: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from lake emissions +CH4_LDF: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from landfill emissions +CH4_LIV: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from livestock emissions +CH4_OIL: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from oil emissions +CH4_OTA: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from other anthropogenic emissions +CH4_RES: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from hydroelectric reservoir emissions +CH4_RIC: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from rice emissions +CH4_SAB: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from soil absorption +CH4_SEE: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from geological seep emissions +CH4_TER: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from termite emissions +CH4_WST: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from waste emissions +CH4_WTL: + << : *CH4properties + Background_VV: 1.0e-20 + FullName: Methane from wetland emissions +CHBr3: + Formula: CHBr3 + FullName: Bromoform + Henry_CR: 5200.0 + Henry_K0: 1.72 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 252.73 +CHCl3: + Formula: CHCl3 + FullName: Chloroform + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 119.35 +Cl: + Formula: Cl + FullName: Atomic chlorine + Is_Advected: true + Is_Gas: true + MW_g: 35.45 +Cl2: + DD_F0: 0.0 + DD_Hstar: 9.2e-2 + Formula: Cl2 + FullName: Molecular chlorine + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_DryDep: true + Henry_K0: 9.2e-2 + Henry_CR: 2000.0 + MW_g: 70.90 +Cl2O2: + Formula: Cl2O2 + FullName: Dichlorine dioxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 102.91 +ClNO2: + DD_F0: 0.0 + DD_Hstar: 4.5e-2 + Formula: ClNO2 + FullName: Nitryl chloride + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_DryDep: true + MW_g: 81.45 +ClNO3: + DD_F0: 0.0 + DD_Hstar: 1.0e+20 + Formula: ClNO3 + FullName: Chlorine nitrate + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Henry_K0: 1.0e+20 + Henry_CR: 0.0 + WD_RetFactor: 1.0 + MW_g: 97.45 +ClO: + DD_F0: 0.0 + DD_Hstar: 7.0e-1 + Formula: ClO + FullName: Chlorine monoxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_DryDep: true + MW_g: 51.45 +ClOO: + DD_F0: 0.0 + DD_Hstar: 1.0 + Formula: ClOO + FullName: Chlorine dioxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_DryDep: true + Henry_K0: 1.0 + Henry_CR: 3500.0 + MW_g: 67.45 +CLOCK: + Background_VV: 0.0 + FullName: Clock tracer for diagnosing age of air + Is_Advected: true + Is_Gas: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g +CO2_PROP: &CO2properties + Formula: CO2 + Is_Gas: true + MW_g: 44.01 +CO2: + << : *CO2properties + Background_VV: 3.55e-4 + FullName: Carbon dioxide +CO2av: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from aviation emissions +CO2bal: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from balanced biosphere +CO2bb: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from biomass burning emissions +CO2bf: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from biofuel emissions +CO2ch: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from chemical sources +CO2corr: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide chemical source surface correction +CO2ff: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from fossil fuel emissions +CO2nte: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from net terrestrial exchange +CO2oc: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from ocean emissions +CO2se: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide from ship emissions +CO2fromOH: + << : *CO2properties + Background_VV: 1.0e-20 + FullName: Carbon dioxide loss by OH (carbon mechanism) +CO_PROP: &COproperties + Formula: CO + Is_Advected: true + Is_Gas: true + MW_g: 28.01 +CO: + << : *COproperties + FullName: Carbon monoxide + Background_VV: 1.0e-7 +COacet: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from acetone oxidation +CO_25: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Anthropogenic CO 25 day tracer + Is_Tracer: true + Snk_Horiz: all + Snk_Mode: efolding + Snk_Period: 25 + Snk_Vert: all + Src_Add: true + Src_Mode: HEMCO +CO_50: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Anthropogenic CO 50 day tracer + Is_Tracer: true + Snk_Horiz: all + Snk_Mode: efolding + Snk_Period: 50 + Snk_Vert: all + Src_Add: true + Src_Mode: HEMCO +COasia: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Anthropogenic + biofuel CO emitted over Asia +CObbaf: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Biomass burning CO emitted over Africa +CObbam: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Biomass burning CO emitted over South America +CObbas: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Biomass burning CO emitted over Asia +CObbeu: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Biomass burning CO emitted over Europe +CObboc: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Biomass burning CO emitted over Oceania +CObboth: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Biomass burning CO emitted everywhere else +CObiof: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from biofuels (whole world) +COch4: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from methane oxidation +COeur: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Anthropogenic + biofuel CO emitted over Europe +COisop: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from isoprene oxidation +COmeoh: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from methanol oxidation +COmono: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from monoterpene oxidation +COnmvoc: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from NMVOC oxidation +COoth: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Anthropogenic + biofuel CO emitted everywhere else +COUniformEmis25dayTracer: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO_with_uniform_emission_and_25day_lifetime +COus: + << : *COproperties + Background_VV: 1.0e-20 + FullName: Anthropogenic + biofuel CO emitted over the USA +COfromCH4: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from methane oxidation (carbon mechanism) +COfromNMVOC: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from non-methane VOCs oxidation (carbon mechanism) +CSL: + DD_F0: 1.0 + DD_Hstar: 4.2e+2 + Formula: C7H8O + FullName: Cresols + Henry_CR: 8500.0 + Henry_K0: 4.2e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 108.14 + WD_RetFactor: 2.0e-2 +DMS: + Formula: (CH3)2S + FullName: Dimethyl sulfide + Henry_CR: 3100.0 + Henry_K0: 0.48 + Is_Advected: true + Is_Aerosol: true + MW_g: 62.13 +DST1: + << : *DST1properties + FullName: Dust aerosol, Reff = 0.7 microns + MW_g: 29.0 +DST2: + << : *DST2properties + FullName: Dust aerosol, Reff = 1.4 microns + MW_g: 29.0 +DST3: + << : *DST3properties + FullName: Dust aerosol, Reff = 2.4 microns + MW_g: 29.0 +DST4: + << : *DST4properties + FullName: Dust aerosol, Reff = 4.5 microns + MW_g: 29.0 +DSTAL1: + << : *DST1properties + FullName: Dust alkalinity, Reff = 0.7 microns + MW_g: 29.0 +DSTAL2: + << : *DST2properties + FullName: Dust alkalinity, Reff = 1.4 microns + MW_g: 29.0 +DSTAL3: + << : *DST3properties + FullName: Dust alkalinity, Reff = 2.4 microns + MW_g: 29.0 +DSTAL4: + << : *DST4properties + FullName: Dust alkalinity, Reff = 4.5 microns + MW_g: 29.0 +Dummy: + FullName: Dummy species (carbon mechanism) + Is_Gas: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g +DummyCH4: + << : *CH4properties + Background_VV: 1.8e-6 + FullName: Methane (external input for carbon mechanism) +DummyNMVOC: + << : *COproperties + Background_VV: 1.0e-20 + FullName: CO produced from NMVOC oxidation (external input for carbon mechanism) +e90_PROP: &e90properties + Background_VV: 1.0e-20 + Is_Advected: true + Is_Gas: true + Is_Tracer: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g + Snk_Horiz: all + Snk_Mode: efolding + Snk_Period: 90 + Snk_Vert: all + Src_Add: true + Src_Mode: maintain_mixing_ratio + Src_Units: ppbv + Src_Value: 100 + Src_Vert: surface +e90: + << : *e90properties + FullName: Constant burden 90 day tracer + Src_Horiz: all +e90_n: + << : *e90properties + FullName: Constant burden Northern Hemisphere 90 day tracer + Src_Horiz: lat_zone + Src_Lats: [ 40.0, 91.0] +e90_s: + << : *e90properties + FullName: Constant burden Southern Hemisphere 90 day tracer + Src_Horiz: lat_zone + Src_Lats: [ -91.0, -40.0 ] +EOH: + DD_F0: 0.0 + DD_Hstar: 1.9e+2 + Formula: C2H5OH + FullName: Ethanol + Henry_CR: 6400.0 + Henry_K0: 1.93e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 46.07 + WD_RetFactor: 2.0e-2 +ETHLN: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: CHOCH2ONO2 + FullName: Ethanol nitrate + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 105.06 + WD_RetFactor: 2.0e-2 +ETHN: + Formula: HOCH2CH2ONO2 + FullName: hydroxy-nitrooxy-ethane + Is_Advected: true + Is_Gas: true + MW_g: 107.07 + Is_DryDep: true + Is_WetDep: true + WD_RetFactor: 2.0e-2 + DD_F0: 0.1 + DD_Hstar: 3.90e+04 + Henry_CR: 8600.0 + Henry_K0: 3.90e+04 +ETHP: + Formula: HOCH2CH2OOH + FullName: hydroxy-hydroperoxy-ethane + Is_Advected: true + Is_Gas: true + MW_g: 78.07 + Is_DryDep: true + Is_WetDep: true + Is_Photolysis: true + WD_RetFactor: 2.0e-2 + DD_F0: 0.1 + DD_Hstar: 6.50e+5 + Henry_CR: 8800.0 + Henry_K0: 6.50e+5 +ETNO3: + DD_F0: 0.1 + DD_Hstar: 1.6 + Formula: C2H5ONO2 + FullName: Ethyl nitrate + Henry_CR: 5400.0 + Henry_K0: 1.6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 91.08 +ETO2: + Formula: CH3CH2OO + FullName: ETO2 + Is_Gas: true + MW_g: 61.07 +ETO: + Formula: HOCH2CH2O + FullName: alkoxy radical from ETOO + Is_Gas: true + MW_g: 61.06 +ETOO: + Formula: HOCH2CH2OO + FullName: peroxy radical from ethene + Is_Gas: true + MW_g: 77.06 +ETP: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: CH3CH2OOH + FullName: Ethylhydroperoxide + Henry_CR: 6000.0 + Henry_K0: 3.34e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 62.08 + WD_RetFactor: 2.0e-2 +FeF1: + << : *DST1properties + Formula: Fe + Fullname: Iron on dust. Reff = 0.7 microns + MW_g: 55.84 + WD_CoarseAer: true +FeF2: + << : *DST2properties + Formula: Fe + Fullname: Iron on dust, Reff = 1.4 microns + MW_g: 55.84 +FixedCl: + Formula: Cl + FullName: Atomic chlorine (external input for carbon mechanism) + Is_Advected: true + Is_Gas: true + MW_g: 35.45 +FixedOH: + Background_VV: 4.0e-15 + Formula: OH + FullName: Hydroxyl radical (external input for carbon mechanism) + Is_Gas: true + MW_g: 17.01 +FURA: + DD_F0: 1.0 + DD_Hstar: 1.80e-1 + Formula: C4H4O + FullName: Furan + Henry_CR: 6100.0 + Henry_K0: 1.80e-1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: false + Is_WetDep: true + MW_g: 68.07 + WD_RetFactor: 2.0e-2 +GLYC: + DD_F0: 1.0 + DD_Hstar: 4.1e+4 + Formula: HOCH2CHO + FullName: Glycoaldehyde + Henry_CR: 4600.0 + Henry_K0: 4.15e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 60.06 + WD_RetFactor: 2.0e-2 +GLYX: + DD_F0: 1.0 + DD_Hstar: 3.6e+5 + Formula: CHOCHO + FullName: Glyoxal + Henry_CR: 7500.0 + Henry_K0: 4.15e+5 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 58.04 + WD_RetFactor: 2.0e-2 +H: + Formula: H + FullName: Atomic hydrogen + Is_Gas: true + MW_g: 1.01 +H1211: + Formula: CBrClF2 + FullName: Halon 1211, Freon 12B1 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 165.36 +H1301: + Formula: CBrF3 + FullName: Halon 1301, Freon 13B1 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 148.91 +H2: + Background_VV: 5.0e-7 + Formula: H2 + FullName: Molecular hydrogen + Is_Gas: true + MW_g: 2.02 +H2402: + Formula: C2Br2F4 + FullName: Halon 2402 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 259.82 +H2O: + Background_VV: 1.839e-2 + Formula: H2O + FullName: Water vapor + Is_Advected: true + Is_Gas: true + MW_g: 18.02 +H2O2: + Background_VV: 4.0e-15 + DD_F0: 1.0 + DD_Hstar: 5.0e+7 + Formula: H2O2 + FullName: Hydrogen peroxide + Henry_CR: 7400.0 + Henry_K0: 8.3e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 34.02 + WD_RetFactor: 5e-2 + WD_LiqAndGas: true + WD_ConvFacI2G: 4.36564e-1 +HAC: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: HOCH2C(O)CH3 + FullName: Hydroxyacetone + Henry_CR: 0.0 + Henry_K0: 7800.0 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 74.08 + WD_RetFactor: 2.0e-2 +HBr: + DD_F0: 0.0 + DD_Hstar: 7.1e+15 + Formula: HBr + FullName: Hypobromic acid + Henry_CR: 10200.0 + Henry_K0: 7.1e+13 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 80.91 + WD_RetFactor: 1.0e+0 +HC5A: + DD_F0: 0.0 + DD_Hstar: 7.8e+3 + Formula: C5H8O2 + FullName: isoprene-4,1-hydroxyaldehyde + Henry_CR: 0.0 + Henry_K0: 7.8e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 100.13 + WD_RetFactor: 2.0e-2 +HCFC123: + Formula: C2HCl2F3 + FullName: HCFC-123, Freon 123 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 152.93 +HCFC141b: + Formula: C(CH3)Cl2F + FullName: HCFC-141b, Freon 141b + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 116.94 +HCFC142b: + Formula: C(CH3)ClF2 + FullName: HCFC-142b, Freon 142b + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 100.50 +HCFC22: + Formula: CHClF2 + FullName: HCFC-22, Freon 22 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 86.47 +HCl: + DD_F0: 0.0 + DD_Hstar: 2.0e+13 + Formula: HCl + FullName: Hydrochloric acid + Henry_CR: 9000.0 + Henry_K0: 6.3e+10 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 36.45 + WD_RetFactor: 1.0e+0 +HCOOH: + DD_F0: 1.0 + DD_Hstar: 8.90e+3 + Formula: HCOOH + FullName: Formic acid + Henry_CR: 6100.0 + Henry_K0: 8.92e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 46.03 + WD_RetFactor: 2.0e-2 +Hg0_PROP: &Hg0properties + DD_F0: 3.0e-5 + DD_Hstar: 0.11 + Formula: 'Hg' + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Hg0: true + MW_g: 200.59 +Hg0: + << : *Hg0properties + FullName: Elemental mercury +Hg0_ant: + << : *Hg0properties + FullName: Elemental mercury from Antarctic subsurface water +Hg0_arc: + << : *Hg0properties + FullName: Elemental mercury from Arctic subsurface water +Hg0_atl: + << : *Hg0properties + FullName: Elemental mercury from Mid-Atlantic subsurface water +Hg0_bb: + << : *Hg0properties + FullName: Elemental mercury from biomass burning +Hg0_cam: + << : *Hg0properties + FullName: Elemental mercury from Central America +Hg0_can: + << : *Hg0properties + FullName: Elemental mercury from Canada +Hg0_eaf: + << : *Hg0properties + FullName: Elemental mercury from East Africa +Hg0_eas: + << : *Hg0properties + FullName: Elemental mercury from East Asia +Hg0_eeu: + << : *Hg0properties + FullName: Elemental mercury from Eastern Europe +Hg0_eur: + << : *Hg0properties + FullName: Elemental mercury from OECD Europe +Hg0_geo: + << : *Hg0properties + FullName: Elemental mercury from geogenic sources +Hg0_jpn: + << : *Hg0properties + FullName: Elemental mercury from Japan +Hg0_mde: + << : *Hg0properties + FullName: Elemental mercury from Middle East +Hg0_naf: + << : *Hg0properties + FullName: Elemental mercury from North Africa +Hg0_nat: + << : *Hg0properties + FullName: Elemental mercury from North Atlantic subsurface water +Hg0_npa: + << : *Hg0properties + FullName: Elemental mercury from North Pacific subsurface water +Hg0_oce: + << : *Hg0properties + FullName: Elemental mercury from Oceania +Hg0_ocn: + << : *Hg0properties + FullName: Elemental mercury from Indo-Pacific subsurface water +Hg0_saf: + << : *Hg0properties + FullName: Elemental mercury from South Africa +Hg0_sam: + << : *Hg0properties + FullName: Elemental mercury from South America +Hg0_sas: + << : *Hg0properties + FullName: Elemental mercury from South Asia +Hg0_sat: + << : *Hg0properties + FullName: Elemental mercury from South Atlantic subsurface water +Hg0_sea: + << : *Hg0properties + FullName: Elemental mercury from Southeast Asia +Hg0_so: + << : *Hg0properties + FullName: Elemental mercury from organic soil +Hg0_sov: + << : *Hg0properties + FullName: Elemental mercury from former USSR +Hg0_str: + << : *Hg0properties + FullName: Elemental mercury from stratosphere +Hg0_usa: + << : *Hg0properties + FullName: Elemental mercury from USA +Hg0_waf: + << : *Hg0properties + FullName: Elemental mercury from West Africa +Hg2_PROP: &Hg2properties + DD_F0: 0.0 + DD_Hstar: 1.0e+14 + Formula: 'Hg' + Henry_CR: 8400.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Hg2: true + Is_WetDep: true + MW_g: 200.59 + WD_RetFactor: 1.0 +Hg2: + << : *Hg2properties + FullName: Divalent mercury +Hg2_ant: + << : *Hg2properties + FullName: Divalent mercury from Antarctic subsurface water +Hg2_arc: + << : *Hg2properties + FullName: Divalent mercury from Arctic subsurface water +Hg2_atl: + << : *Hg2properties + FullName: Divalent mercury from Mid-Atlantic subsurface water +Hg2_bb: + << : *Hg2properties + FullName: Divalent mercury from biomass burning +Hg2_cam: + << : *Hg2properties + FullName: Divalent mercury from Central America +Hg2_can: + << : *Hg2properties + FullName: Divalent mercury from Canada +Hg2_eaf: + << : *Hg2properties + FullName: Divalent mercury from East Africa +Hg2_eas: + << : *Hg2properties + FullName: Divalent mercury from East Asia +Hg2_eeu: + << : *Hg2properties + FullName: Divalent mercury from Eastern Europe +Hg2_eur: + << : *Hg2properties + FullName: Divalent mercury from OECD Europe +Hg2_geo: + << : *Hg2properties + FullName: Divalent mercury from geogenic sources +Hg2_jpn: + << : *Hg2properties + FullName: Divalent mercury from Japan +Hg2_mde: + << : *Hg2properties + FullName: Divalent mercury from Middle East +Hg2_naf: + << : *Hg2properties + FullName: Divalent mercury from North Africa +Hg2_nat: + << : *Hg2properties + FullName: Divalent mercury from North Atlantic subsurface water +Hg2_npa: + << : *Hg2properties + FullName: Divalent mercury from North Pacific subsurface water +Hg2_oce: + << : *Hg2properties + FullName: Divalent mercury from Oceania +Hg2_ocn: + << : *Hg2properties + FullName: Divalent mercury from Indo-Pacific subsurface water +Hg2_saf: + << : *Hg2properties + FullName: Divalent mercury from South Africa +Hg2_sam: + << : *Hg2properties + FullName: Divalent mercury from South America +Hg2_sas: + << : *Hg2properties + FullName: Divalent mercury from South Asia +Hg2_sat: + << : *Hg2properties + FullName: Divalent mercury from South Atlantic subsurface water +Hg2_sea: + << : *Hg2properties + FullName: Divalent mercury from Southeast Asia +Hg2_so: + << : *Hg2properties + FullName: Divalent mercury from organic soil +Hg2_sov: + << : *Hg2properties + FullName: Divalent mercury from former USSR +Hg2_str: + << : *Hg2properties + FullName: Divalent mercury from stratosphere +Hg2_usa: + << : *Hg2properties + FullName: Divalent mercury from USA +Hg2_waf: + << : *Hg2properties + FullName: Divalent mercury from West Africa +HgP_PROP: &HgPproperties + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: 'Hg' + Is_Advected: true + Is_DryDep: true + Is_Aerosol: true + Is_HgP: true + Is_WetDep: true + MW_g: 200.59 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 1.0, 1.0] + WD_RainoutEff_Luo: [0.4, 1.0, 1.0] +HgP: + << : *HgPproperties + FullName: Particulate mercury +HgP_ant: + << : *HgPproperties + FullName: Particulate mercury from Antarctic subsurface water +HgP_arc: + << : *HgPproperties + FullName: Particulate mercury from Arctic subsurface water +HgP_atl: + << : *HgPproperties + FullName: Particulate mercury from Mid-Atlantic subsurface water +HgP_bb: + << : *HgPproperties + FullName: Particulate mercury from biomass burning +HgP_cam: + << : *HgPproperties + FullName: Particulate mercury from Central America +HgP_can: + << : *HgPproperties + FullName: Particulate mercury from Canada +HgP_eaf: + << : *HgPproperties + FullName: Particulate mercury from East Africa +HgP_eas: + << : *HgPproperties + FullName: Particulate mercury from East Asia +HgP_eeu: + << : *HgPproperties + FullName: Particulate mercury from Eastern Europe +HgP_eur: + << : *HgPproperties + FullName: Particulate mercury from OECD Europe +HgP_geo: + << : *HgPproperties + FullName: Particulate mercury from geogenic sources +HgP_jpn: + << : *HgPproperties + FullName: Particulate mercury from Japan +HgP_mde: + << : *HgPproperties + FullName: Particulate mercury from Middle East +HgP_naf: + << : *HgPproperties + FullName: Particulate mercury from North Africa +HgP_nat: + << : *HgPproperties + FullName: Particulate mercury from North Atlantic subsurface water +HgP_npa: + << : *HgPproperties + FullName: Particulate mercury from North Pacific subsurface water +HgP_oce: + << : *HgPproperties + FullName: Particulate mercury from Oceania +HgP_ocn: + << : *HgPproperties + FullName: Particulate mercury from Indo-Pacific subsurface water +HgP_saf: + << : *HgPproperties + FullName: Particulate mercury from South Africa +HgP_sam: + << : *HgPproperties + FullName: Particulate mercury from South America +HgP_sas: + << : *HgPproperties + FullName: Particulate mercury from South Asia +HgP_sat: + << : *HgPproperties + FullName: Particulate mercury from South Atlantic subsurface water +HgP_sea: + << : *HgPproperties + FullName: Particulate mercury from Southeast Asia +HgP_so: + << : *HgPproperties + FullName: Particulate mercury from organic soil +HgP_sov: + << : *HgPproperties + FullName: Particulate mercury from former USSR +HgP_str: + << : *HgPproperties + FullName: Particulate mercury from stratosphere +HgP_usa: + << : *HgPproperties + FullName: Particulate mercury from USA +HgP_waf: + << : *HgPproperties + FullName: Particulate mercury from West Africa +Hg_OTHER_PROP: &HgChemProperties + Henry_CR: 8.40e+03 + Henry_K0: 1.40e+06 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + WD_RetFactor: 1.0 +HgBr: + Fullname: HgBr + Formula: HgBr + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 280.49 +HgBrNO2: + Fullname: syn-HgBrONO + Formula: BrHgONO + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 326.50 +HgBrHO2: + << : *HgChemProperties + Fullname: HgBrHO2 + Formula: BrHgOOH + MW_g: 313.50 +HgBrBrO: + << : *HgChemProperties + Fullname: HgBrBrO + Formula: BrHgOBr + MW_g: 376.40 +HgBrClO: + << : *HgChemProperties + Fullname: HgBrClO + Formula: BrHgOCl + MW_g: 332.00 +HgBrOH: + << : *HgChemProperties + Fullname: HgBrOH + Formula: BrHgOH + MW_g: 297.50 +HgBr2: + << : *HgChemProperties + Fullname: HgBr2 + Formula: HgBr2 + MW_g: 360.40 +HgCl: + Fullname: HgCl + Formula: HgCl + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: false + MW_g: 236.04 +HgClNO2: + << : *HgChemProperties + Fullname: syn-HgClONO + Formula: ClHgONO + MW_g: 282.00 +HgClHO2: + WD_RetFactor: 1.0 + << : *HgChemProperties + Fullname: HgClHO2 + Formula: ClHgOOH + MW_g: 269.00 + WD_RetFactor: 1.0 +HgClClO: + << : *HgChemProperties + Fullname: HgClClO + Formula: ClHgOCl + MW_g: 287.50 +HgClBrO: + << : *HgChemProperties + Fullname: HgClBrO + Formula: ClHgOBr + MW_g: 332.00 +HgClBr: + << : *HgChemProperties + Fullname: HgClBr + Formula: HgBrCl + MW_g: 316.00 +HgClOH: + << : *HgChemProperties + Fullname: HgClOH + Formula: ClHgOH + MW_g: 253.00 +HgOH: + Fullname: HgOH + Formula: HgOH + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 201.00 +HgOHNO2: + << : *HgChemProperties + Fullname: syn-HgOHONO + Formula: HOHgONO + MW_g: 263.60 +HgOHHO2: + << : *HgChemProperties + Fullname: HgOHHO2 + Formula: HOHgOOH + MW_g: 250.60 +HgOHClO: + << : *HgChemProperties + Fullname: HgBrClO + Formula: HOHgOCl + MW_g: 269.0000 +HgOHBrO: + << : *HgChemProperties + Fullname: HgOHBrO + Formula: HOHgOBr + MW_g: 313.5000 +HgOHOH: + << : *HgChemProperties + Fullname: HgOH2 + Formula: HOHgOH + MW_g: 234.60 +HgCl2: + << : *HgChemProperties + Fullname: HgCl2 + Formula: HgCl2 + MW_g: 271.5000 +Hg2ClP: + Fullname: Hg(II) chloride salts on sea-salt aerosols + Formula: HgCln + Is_Aerosol: true + Is_DryDep: true + Is_HygroGrowth: false + Is_WetDep: true + MW_g: 201.00 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 1.0, 1.0] +Hg2ORGP: + Fullname: Hg(II) organic complex in aerosols + Formula: R-Hg + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 201.00 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 1.0, 1.0] +Hg2STRP: + Fullname: Hg(II) in stratospheric aerosols + Formula: Hg2+ + Is_Advected: true + Is_Aerosol: true + MW_g: 201.00 +HI: + DD_F0: 0.0 + DD_Hstar: 2.35e+16 + Formula: HI + FullName: Hydrogen iodide + Henry_CR: 3.1872e+3 + Henry_K0: 7.43e+13 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 127.91 + WD_RetFactor: 1.0 +HMHP: + DD_F0: 1.0 + DD_Hstar: 1.3e+6 + Formula: HOCH2OOH + FullName: Hydroxymethyl hydroperoxide + Henry_CR: 5200.0 + Henry_K0: 1.3e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 64.05 + WD_RetFactor: 2.0e-2 +HMML: + DD_F0: 1.0 + DD_Hstar: 1.2e+5 + Formula: C4H6O3 + FullName: hydroxymethyl-methyl-a-lactone + Henry_CR: 7200.0 + Henry_K0: 1.2e+5 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 102.10 + WD_RetFactor: 2.0e-2 +HMS: + Background_VV: 1.0e-15 + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: HOCH2SO3− + FullName: Hydroxymethanesulfonate + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 111.10 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] +HNO2: + Background_VV: 4.0e-15 + Formula: HNO2 + FullName: Nitrous acid + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 47.01 +HNO3: + Background_VV: 4.0e-15 + DD_F0: 0.0 + DD_Hstar: 1.0e+14 + Formula: HNO3 + FullName: Nitric acid + Henry_CR: 7400.0 + Henry_K0: 8.3e+4 + Is_Advected: true + Is_DryAlt: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 63.01 + WD_AerScavEff: 1.0 + WD_Is_HNO3: true + WD_KcScaleFac: [1.0, 1.0, 1.0] + WD_KcScaleFac_Luo: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 1.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +HNO4: + Background_VV: 4.0e-15 + Formula: HNO4 + FullName: Peroxynitric acid + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 79.01 +HO2: + Background_VV: 4.0e-15 + Formula: HO2 + FullName: Hydroperoxyl radical + Is_Gas: true + MW_g: 33.01 +HOBr: + DD_F0: 0.0 + DD_Hstar: 1.3e+3 + Formula: HOBr + FullName: Hypobromous acid + Henry_CR: 4000.0 + Henry_K0: 1.3e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 96.91 + WD_RetFactor: 0.0 +HOCl: + DD_F0: 0.0 + DD_Hstar: 6.5e+2 + Formula: HOCl + FullName: Hypochlorous acid + Henry_CR: 5900.0 + Henry_K0: 6.50e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 52.45 + WD_RetFactor: 0.0 +HOI: + DD_F0: 0.0 + DD_Hstar: 1.54e+4 + Formula: HOI + FullName: Hypoiodous acid + Henry_CR: 8371.0 + Henry_K0: 1.54e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 143.89 + WD_RetFactor: 2.0e-2 +HONIT: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + FullName: 2nd gen monoterpene organic nitrate + Henry_CR: 5487.0 + Henry_K0: 2.69e+13 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 215.0 + WD_RetFactor: 2.0e-2 +HPALD1: + DD_F0: 0.0 + DD_Hstar: 4.0e+4 + Formula: C5H8O3 + FullName: d-4,1-C5-hydroperoxyaldehyde + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 116.13 +HPALD1OO: + Formula: C5H7O5 + FullName: HPALD1OO + Is_Gas: true + MW_g: 147.12 +HPALD2: + DD_F0: 0.0 + DD_Hstar: 4.0e+4 + Formula: C5H8O3 + FullName: d-1,4-C5-hydroperoxyaldehyde + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 116.13 +HPALD2OO: + Formula: C5H7O5 + FullName: HPALD2OO + Is_Gas: true + MW_g: 147.12 +HPALD3: + DD_F0: 0.0 + DD_Hstar: 4.0e+4 + Formula: C5H8O3 + FullName: b-2,1-C5-hydroperoxyaldehyde + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 116.13 +HPALD4: + DD_F0: 0.0 + DD_Hstar: 4.0e+4 + Formula: C5H8O3 + FullName: b-3,4-C5-hydroperoxyaldehyde + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 116.13 +HPETHNL: + DD_F0: 1.0 + DD_Hstar: 4.1e+4 + Formula: HOOCH2CHO + FullName: Hydroperoxy ethanal + Henry_CR: 4600.0 + Henry_K0: 4.1e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 76.06 + WD_RetFactor: 2.0e-2 +HSO3m: + Formula: HSO3- + FullName: Hydrogen sulfite + Is_Gas: true + MW_g: 81.07 +I: + Formula: I + FullName: Atomic iodine + Is_Advected: true + Is_Gas: true + MW_g: 126.90 +I2: + DD_F0: 0.0 + DD_Hstar: 2.7 + Formula: I2 + FullName: Molecular iodine + Henry_CR: 7.5074e+3 + Henry_K0: 2.7 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 253.80 + WD_RetFactor: 0.0 +I2O2: + DD_F0: 0.0 + DD_Hstar: 1.0e+20 + Formula: I2O2 + FullName: Diiodine dioxide + Henry_CR: 1.89e+4 + Henry_K0: 1.0e+20 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 285.80 + WD_RetFactor: 1.0 +I2O3: + DD_F0: 0.0 + DD_Hstar: 1.0e+20 + Formula: I2O3 + FullName: Diiodine trioxide + Henry_CR: 1.34e+4 + Henry_K0: 1.0e+20 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 301.80 + WD_RetFactor: 1.0 +I2O4: + DD_F0: 0.0 + DD_Hstar: 1.0e+20 + Formula: I2O4 + FullName: Diiodine tetraoxide + Henry_CR: 1.34e+4 + Henry_K0: 1.0e+20 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 317.80 + WD_RetFactor: 1.0 +IBr: + DD_F0: 0.0 + DD_Hstar: 2.43e+1 + Formula: IBr + FullName: Iodine monobromide + Henry_CR: 4.9167e+3 + Henry_K0: 2.4e+1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 206.90 + WD_RetFactor: 0.0 +ICHE: + DD_F0: 1.0 + DD_Hstar: 8.0e+7 + Formula: C5H8O3 + FullName: Isoprene hydroxy-carbonyl-epoxides + Henry_CR: 0.0 + Henry_K0: 8.0e+7 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 116.13 + WD_RetFactor: 2.0e-2 +ICHOO: + Formula: C5H9O5 + FullName: Peroxy radical from IEPOXD + Is_Gas: true + MW_g: 149.14 +ICl: + DD_F0: 0.0 + DD_Hstar: 1.11e+2 + Formula: ICl + FullName: Iodine monochloride + Henry_CR: 2.1055e+3 + Henry_K0: 1.11e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 162.45 + WD_RetFactor: 0.0 +ICN: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H7NO4 + FullName: Lumped isoprene carbonyl-nitrates + Henry_CR: 9200.0 + Henry_K0: 1.70e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 145.13 + WD_RetFactor: 2.0e-2 +ICNOO: + Formula: C5H8NO7 + FullName: Peroxy radicals from ICN + Is_Gas: true + MW_g: 194.14 +ICPDH: + DD_F0: 1.0 + DD_Hstar: 1.0e+8 + Formula: C5H10O5 + FullName: Isoprene dihydroxy hydroperoxycarbonyl + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 150.15 + WD_RetFactor: 2.0e-2 +IDC: + DD_F0: 0.0 + DD_Hstar: 4.0e+4 + Formula: C5H6O2 + FullName: Lumped isoprene dicarbonyls + Is_Advected: true + Is_DryDep: true + Is_Gas: true + MW_g: 98.11 +IDCHP: + DD_F0: 1.0 + DD_Hstar: 1.0e+8 + Formula: C5H8O5 + FullName: Isoprene dicarbonyl hydroxy dihydroperoxide + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 148.13 + WD_RetFactor: 2.0e-2 +IDHDP: + DD_F0: 1.0 + DD_Hstar: 1.0e+8 + Formula: C5H12O6 + FullName: Isoprene dihydroxy dihydroperoxide + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 168.17 + WD_RetFactor: 2.0e-2 +IDHNBOO: + Formula: C5H10NO7 + FullName: Peroxy radicals from INPB + Is_Gas: true + MW_g: 196.16 +IDHNDOO1: + Formula: C5H10NO7 + FullName: Peroxy radicals from INPD + Is_Gas: true + MW_g: 196.16 +IDHNDOO2: + Formula: C5H10NO7 + FullName: Peroxy radicals from INPD + Is_Gas: true + MW_g: 196.16 +IDHPE: + DD_F0: 1.0 + DD_Hstar: 1.0e+8 + Formula: C5H10O5 + FullName: Isoprene dihydroxy hydroperoxy epoxide + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 150.15 + WD_RetFactor: 2.0e-2 +IDN: + DD_F0: 1.0 + DD_Hstar: 1.0e+8 + Formula: C5H8N2O6 + FullName: Lumped isoprene dinitrates + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 192.15 + WD_RetFactor: 2.0e-2 +IDNOO: + Formula: C5H9N2O6 + FullName: IDNOO + Is_Gas: true + MW_g: 241.14 +IEPOXA: + DD_F0: 1.0 + DD_Hstar: 8.0e+7 + Formula: C4H10O3 + FullName: trans-Beta isoprene epoxydiol + Henry_CR: 0.0 + Henry_K0: 8.0e+7 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 106.14 + WD_RetFactor: 2.0e-2 +IEPOXAOO: + Formula: C5H8O5 + FullName: Peroxy radical from trans-Beta isoprene epoxydiol + Is_Gas: true + MW_g: 149.14 +IEPOXB: + DD_F0: 1.0 + DD_Hstar: 8.0e+7 + Formula: C4H10O3 + FullName: cis-Beta isoprene epoxydiol + Henry_CR: 0.0 + Henry_K0: 8.0e+7 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 106.14 + WD_RetFactor: 2.0e-2 +IEPOXBOO: + Formula: C5H9O5 + FullName: peroxy radical from cis-Beta isoprene epoxydiol + Is_Gas: true + MW_g: 149.14 +IEPOXD: + DD_F0: 1.0 + DD_Hstar: 8.0e+7 + Formula: C4H10O3 + FullName: Delta isoprene epoxydiol + Henry_CR: 0.0 + Henry_K0: 8.0e+7 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 106.14 + WD_RetFactor: 2.0e-2 +IHN1: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H9NO4 + FullName: Isoprene-d-4,1-hydroxynitrate + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 147.15 + WD_RetFactor: 2.0e-2 +IHN2: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H9NO4 + FullName: Isoprene-b-1,2-hydroxynitrate + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 147.15 + WD_RetFactor: 2.0e-2 +IHN3: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H9NO4 + FullName: Isoprene-b-4,3-hydroxynitrate + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 147.15 + WD_RetFactor: 2.0e-2 +IHN4: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H9NO4 + FullName: Isoprene-d-4,1-hydroxynitrate + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 147.15 + WD_RetFactor: 2.0e-2 +IHOO1: + Formula: C5H9O3 + FullName: Peroxy radical from OH addition to isoprene at C1 + Is_Gas: true + MW_g: 117.14 +IHOO4: + Formula: C5H9O3 + FullName: Peroxy radical from OH addition to isoprene at C4 + Is_Gas: true + MW_g: 117.14 +IHPNBOO: + Formula: C5H10NO8 + FullName: Peroxy radicals from INPB + Is_Gas: true + MW_g: 212.16 +IHPNDOO: + Formula: C5H10NO8 + FullName: Peroxy radicals from INPD + Is_Gas: true + MW_g: 212.16 +IHPOO1: + Formula: C5H11O6 + FullName: Peroxy radical from ISOPOOH + Is_Gas: true + MW_g: 167.16 +IHPOO2: + Formula: C5H11O6 + FullName: Peroxy radical from ISOPOOH + Is_Gas: true + MW_g: 167.16 +IHPOO3: + Formula: C5H11O6 + FullName: Peroxy radical from ISOPOOH + Is_Gas: true + MW_g: 167.16 +INA: + Formula: C5H8NO4 + FullName: Alkoxy radical from INO2D + Is_Gas: true + MW_g: 146.14 +INDIOL: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Generic aerosol-phase organonitrate hydrolysis product + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 102.0 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +INO: + Formula: INO + FullName: Nitrosyl iodide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 156.91 +INO2B: + Formula: C5H8NO5 + FullName: beta-peroxy radicals from isoprene + NO3 + Is_Gas: true + MW_g: 162.14 +INO2D: + Formula: C5H8NO5 + FullName: delta-peroxy radicals from isoprene + NO3 + Is_Gas: true + MW_g: 162.14 +INPB: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H9NO5 + FullName: Lumped b-hydroperoxy isoprene nitrates + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 163.15 + WD_RetFactor: 2.0e-2 +INPD: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C5H9NO5 + FullName: Lumped d-hydroperoxy isoprene nitrates + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 163.15 + WD_RetFactor: 2.0e-2 +IO: + Formula: IO + FullName: Iodine monoxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 142.90 +IONITA: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Aer-phase organic nitrate from isoprene precursors + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 14.01 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +IONO: + DD_F0: 0.0 + DD_Hstar: 3.0e-1 + Formula: IONO + FullName: Nitryl iodide + Henry_CR: 7.2404e+3 + Henry_K0: 3.0e-1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 172.91 + WD_RetFactor: 2.0e-2 +IONO2: + DD_F0: 0.0 + DD_Hstar: 1.0e+20 + Formula: IONO2 + FullName: Iodine nitrate + Henry_CR: 3.98e+3 + Henry_K0: 1.0e+20 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 188.91 + WD_RetFactor: 1.0 +IPRNO3: + DD_F0: 0.1 + DD_Hstar: 7.9e-1 + Formula: C3H7ONO2 + FullName: Isopropyl nitrate + Henry_CR: 5400.0 + Henry_K0: 0.79 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 105.11 +ISALA: + << : *SALAproperties + Formula: I + FullName: Fine sea salt iodine + Is_HygroGrowth: false + MW_g: 126.90 +ISALC: + << : *SALCproperties + Formula: I + FullName: Coarse sea salt iodine + Is_HygroGrowth: false + MW_g: 126.90 + WD_CoarseAer: true +ISOP: + Formula: CH2=C(CH3)CH=CH2 + FullName: Isoprene + Henry_CR: 4400.0 + Henry_K0: 3.45e-2 + Is_Advected: true + Is_Gas: true + MW_g: 68.13 +ISOPNOO1: + Formula: C5H10NO7 + FullName: Peroxy radicals from IHN2 + Is_Gas: true + MW_g: 196.16 +ISOPNOO2: + Formula: C5H10NO7 + FullName: Peroxy radicals from IHN3 + Is_Gas: true + MW_g: 196.16 +ITCN: + DD_F0: 1.0 + DD_Hstar: 1.00e+8 + Formula: C5H9NO7 + FullName: lumped isoprene tetrafunctional carbonylnitrates + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 195.15 + WD_RetFactor: 2.0e-2 +ITHN: + DD_F0: 1.0 + DD_Hstar: 1.00e+8 + Formula: C5H11NO7 + FullName: Lumped isoprene tetrafunctional hydroxynitrates + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 197.17 + WD_RetFactor: 2.0e-2 +KF1: + << : *DST1properties + Formula: K + Fullname: Potassium on dust. Reff = 0.7 microns + MW_g: 39.10 + WD_CoarseAer: true +KF2: + << : *DST2properties + Formula: K + Fullname: Potassium on dust, Reff = 1.4 microns + MW_g: 39.10 +KC3: + << : *DST3properties + Formula: K + Fullname: Potassium on dust, Reff = 2.4 microns + MW_g: 39.10 +KC4: + << : *DST4properties + Formula: K + Fullname: Potassium on dust, Reff = 4.5 microns + MW_g: 39.10 +KO2: + Formula: C4H5O3 + FullName: Peroxy radical from >3 ketones + Is_Gas: true + MW_g: 101.09 +LBRO2H: + FullName: Dummy species to track oxidation of BRO2 by HO2 + Is_Gas: true + MW_g: 159.13 +LBRO2N: + FullName: Dummy species to track oxidation of BRO2 by NO + Is_Gas: true + MW_g: 159.13 +LCH4: + FullName: Dummy species to track loss rate of CH4 + Is_Gas: true + MW_g: 16.04 +LCO: + FullName: Dummy species to track loss rate of CO + Is_Gas: true + MW_g: 28.01 +LIMO: + DD_F0: 0.0 + DD_Hstar: 7.0e-2 + Formula: C10H16 + FullName: Limonene + Henry_CR: 0.0 + Henry_K0: 7.0e-2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 136.26 + WD_RetFactor: 2.0e-2 +LIMO2: + Formula: C10H17O3 + FullName: Peroxy radical from LIMO + Is_Gas: true + MW_g: 185.27 +LISOPNO3: + FullName: Dummy species to track oxidation of ISOP by NO3 + Is_Gas: true + MW_g: 68.13 +LISOPOH: + FullName: Dummy species to track oxidation of ISOP by OH + Is_Gas: true + MW_g: 68.13 +LNRO2H: + FullName: Dummy species to track oxidation of NRO2 by HO2 + Is_Gas: true + MW_g: 159.17 +LNRO2N: + FullName: Dummy species to track oxidation of NRO2 by NO + Is_Gas: true + MW_g: 159.17 +LOx: + FullName: Dummy species to track loss rate of Ox + Is_Gas: true + MW_g: 48.00 +LTRO2H: + FullName: Dummy species to track oxidation of TRO2 by HO2 + Is_Gas: true + MW_g: 173.16 +LTRO2N: + FullName: Dummy species to track oxidation of TRO2 by NO + Is_Gas: true + MW_g: 173.16 +LVOC: + DD_F0: 1.0 + DD_Hstar: 1.0e+8 + Formula: C5H14O5 + FullName: Gas-phase low-volatility non-IEPOX product of RIP ox + Henry_CR: 7200.0 + Henry_K0: 1.0e+8 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 154.19 + WD_RetFactor: 2.0e-2 +LVOCOA: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C5H14O5 + FullName: Aer-phase low-volatility non-IEPOX product of RIP ox + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 154.19 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +LXRO2H: + FullName: Dummy species to track oxidation of XRO2 by HO2 + Is_Gas: true + MW_g: 187.19 +LXRO2N: + FullName: Dummy species to track oxidation of XRO2 by NO + Is_Gas: true + MW_g: 187.19 +MACR: + DD_F0: 1.0 + DD_Hstar: 6.5 + Formula: CH2=C(CH3)CHO + FullName: Methacrolein + Henry_CR: 4300.0 + Henry_K0: 4.86 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 70.10 +MACR1OO: + Formula: CH2=C(CH3)C(O)OO + FullName: Peroxyacyl radical from MACR + OH + Is_Gas: true + MW_g: 101.09 +MACR1OOH: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: CH2=C(CH3)C(O)OOH + FullName: Peracid from MACR + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 102.10 + WD_RetFactor: 2.0e-2 +MACRNO2: + Formula: C4H6NO7 + FullName: Product of MCRHN + OH + Is_Gas: true + MW_g: 180.10 +MAP: + DD_F0: 1.0 + DD_Hstar: 8.4e+2 + Formula: CH3C(O)OOH + FullName: Peroxyacetic acid + Henry_CR: 5300.0 + Henry_K0: 8.4e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 76.06 + WD_RetFactor: 2.0e-2 +MCO3: + Formula: CH3C(O)OO + FullName: Peroxyacetyl radical + Is_Gas: true + MW_g: 75.05 +MCRDH: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: C4H8O3 + FullName: Dihydroxy-methacrolein + Henry_CR: 7200.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 104.12 + WD_RetFactor: 2.0e-2 +MCRENOL: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: C4H6O2 + FullName: Lumped enols from MVK/MACR + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 86.10 + WD_RetFactor: 2.0e-2 +MCRHN: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: HOCH2C(ONO2)(CH3)CHO + FullName: Nitrate from MACR + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 149.11 + WD_RetFactor: 2.0e-2 +MCRHNB: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: O2NOCH2C(OH)(CH3)CHO + FullName: Nitrate from MACR + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 149.11 + WD_RetFactor: 2.0e-2 +MCRHP: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: HOCH2C(OOH)(CH3)CHO + FullName: Hydroxy-hydroperoxy-methacrolein + Henry_CR: 7200.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 120.12 + WD_RetFactor: 2.0e-2 +MCROHOO: + Formula: C4H7O4 + FullName: Peroxy radical from MACR + OH + Is_Gas: true + MW_g: 119.11 +MCT: + DD_F0: 1.0 + DD_Hstar: 4.2e+2 + Formula: C7H8O2 + FullName: Catechols and methyl catechols + Henry_CR: 8500.0 + Henry_K0: 4.2e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 124.0 + WD_RetFactor: 2.0e-2 +MEK: + Formula: RC(O)R + FullName: Methyl Ethyl Ketone + Henry_CR: 5700.0 + Henry_K0: 1.82e+1 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 72.11 + WD_RetFactor: 2.0e-2 +MENO3: + DD_F0: 0.1 + DD_Hstar: 2.0 + Formula: CH3ONO2 + FullName: Methyl nitrate + Henry_CR: 4700.0 + Henry_K0: 1.1e+1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 77.05 +MgF1: + << : *DST1properties + Formula: Mg + Fullname: Magnesium on dust. Reff = 0.7 microns + MW_g: 24.31 + WD_CoarseAer: true +MgF2: + << : *DST2properties + Formula: Mg + Fullname: Magnesium on dust, Reff = 1.4 microns + MW_g: 24.31 +MgC3: + << : *DST3properties + Formula: Mg + Fullname: Magnesium on dust, Reff = 2.4 microns + MW_g: 24.31 +MgC4: + << : *DST4properties + Formula: Mg + Fullname: Magnesium on dust, Reff = 4.5 microns + MW_g: 24.31 +MGLY: + DD_F0: 1.0 + DD_Hstar: 3.7e+3 + Formula: CH3COCHO + FullName: Methylglyoxal + Henry_CR: 6200.0 + Henry_K0: 3.24e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 72.07 + WD_RetFactor: 2.0e-2 +MnF1: + << : *DST1properties + Formula: Mn + Fullname: Manganese on dust. Reff = 0.7 microns + MW_g: 54.94 + WD_CoarseAer: true +MnF2: + << : *DST2properties + Formula: Mn + Fullname: Manganese on dust, Reff = 1.4 microns + MW_g: 54.94 +MO2: + Background_VV: 4.0e-15 + Formula: CH3O2 + FullName: Methylperoxy radical + Is_Gas: true + MW_g: 47.04 +MOH: + DD_F0: 1.0 + DD_Hstar: 2.03e+2 + Formula: CH3OH + FullName: Methanol + Henry_CR: 5600.0 + Henry_K0: 2.03e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 32.05 + WD_RetFactor: 2.0e-2 +MONITA: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Aer-phase organic nitrate from monoterpene precursors + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 14.01 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +MONITS: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C10H17NO4 + FullName: Saturated 1st gen monoterpene organic nitrate + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 215.28 + WD_RetFactor: 2.0e-2 +MONITU: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: C10H17NO4 + FullName: Unsaturated 1st gen monoterpene organic nitrate + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 215.28 + WD_RetFactor: 2.0e-2 +MOPI: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1300.0 + Formula: C + FullName: Hydrophilic marine organic carbon aerosol + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +MOPO: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1300.0 + Formula: C + FullName: Hydrophobic marine organic carbon aerosol + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [0.5, 0.5, 0.5] + WD_RainoutEff: [0.0, 0.0, 0.0] +MP: + Background_VV: 4.0e-15 + Formula: CH3OOH + FullName: Methyl hydro peroxide + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 48.05 + WD_RetFactor: 2.0e-2 +MPAN: + DD_F0: 1.0 + DD_Hstar: 1.72 + Formula: CH2=C(CH3)C(O)OONO2 + FullName: Peroxymethacroyl nitrate (PMN) + Henry_CR: 0.0 + Henry_K0: 1.72 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 147.10 + WD_RetFactor: 2.0e-2 +MPN: + Formula: CH3O2NO2 + FullName: Methyl peroxy nitrate + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 93.05 + WD_RetFactor: 2.0e-2 +MSA: + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: CH4SO3 + FullName: Methyl sulfonic acid + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 96.10 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +MTPA: + DD_F0: 0.0 + DD_Hstar: 4.9e-2 + FullName: a-pinene, b-pinene, sabinene, carene + Henry_CR: 0.0 + Henry_K0: 4.9e-2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 136.26 + WD_RetFactor: 2.0e-2 +MTPO: + DD_F0: 0.0 + DD_Hstar: 4.9e-2 + FullName: Terpinene, terpinolene, myrcene, ocimene, other monoterpenes + Henry_CR: 0.0 + Henry_K0: 4.9e-2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 136.26 + WD_RetFactor: 2.0e-2 +MVK: + DD_F0: 1.0 + DD_Hstar: 4.4e+1 + Formula: CH2=CHC(=O)CH3 + FullName: Methyl vinyl ketone + Henry_CR: 4800.0 + Henry_K0: 2.63e+1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 70.09 + WD_RetFactor: 2.0e-2 +MVKDH: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: HOCH2CH2OHC(O)CH3 + FullName: dihydroxy-MVK + Henry_CR: 7200.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 105.13 + WD_RetFactor: 2.0e-2 +MVKHC: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: C4H6O3 + FullName: MVK hydroxy-carbonyl + Henry_CR: 7200.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 102.10 + WD_RetFactor: 2.0e-2 +MVKHCB: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: C4H6O3 + FullName: MVK hydroxy-carbonyl + Henry_CR: 7200.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 102.10 + WD_RetFactor: 2.0e-2 +MVKHP: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: C4H8O4 + FullName: MVK hydroxy-hydroperoxide + Henry_CR: 7200.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 120.12 + WD_RetFactor: 2.0e-2 +MVKN: + DD_F0: 1.0 + DD_Hstar: 2.0e+6 + Formula: HOCH2CH(ONO2)C(=O)CH3 + FullName: Nitrate from MVK + Henry_CR: 9200.0 + Henry_K0: 1.7e+4 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 149.12 + WD_RetFactor: 2.0e-2 +MVKOHOO: + Formula: C4H7O4 + FullName: Peroxy radical from MVK + OH + Is_Gas: true + MW_g: 119.11 +MVKPC: + DD_F0: 1.0 + DD_Hstar: 1.4e+6 + Formula: OCHCH(OOH)C(O)CH3 + FullName: MVK hydroperoxy-carbonyl + Henry_CR: 7200.0 + Henry_K0: 1.4e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 118.10 + WD_RetFactor: 2.0e-2 +N: + Background_VV: 4.0e-20 + Formula: N + FullName: Atomic nitrogen + Is_Gas: true + MW_g: 14.01 +N2: + Background_VV: 7.808e-1 + Formula: N2 + FullName: Molecular nitrogen + Is_Gas: true + MW_g: 28.02 +N2O: + Background_VV: 3.0e-7 + Formula: N2O + FullName: Nitrous oxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 44.02 +N2O5: + Background_VV: 4.0e-15 + DD_F0: 0.0 + DD_Hstar: 1.0e+14 + Formula: N2O5 + FullName: Dinitrogen pentoxide + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 108.02 +NAP: + Formula: C10H8 + FullName: Naphtalene/IVOC surrogate + Is_Advected: true + Is_Gas: true + MW_g: 128.18 +nh_PROP: &nhproperties + Is_Advected: true + Is_Gas: true + Is_Tracer: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g + Snk_Horiz: all + Snk_Mode: efolding + Snk_Vert: all + Src_Add: false + Src_Mode: constant + Src_Horiz: lat_zone + Src_Lats: [30.0, 50.0] + Src_Units: ppbv + Src_Value: 100 + Src_Vert: all +nh_5: + << : *nhproperties + FullName: Northern Hemisphere 5 day tracer + Snk_Period: 5 +nh_50: + << : *nhproperties + FullName: Northern Hemisphere 50 day tracer + Snk_Period: 50 +NH3: + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.2, 0.3] + DD_DvzMinVal_Luo: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 2.0e+4 + Formula: NH3 + FullName: Ammonia + Henry_CR: 4100.0 + Henry_CR_Luo: 4200.0 + Henry_K0: 3.3e+6 + Henry_K0_Luo: 59.78175 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 17.04 + WD_RetFactor: 5.0e-2 + WD_LiqAndGas: true + WD_ConvFacI2G: 6.17395e-1 +NH4: + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: NH4 + FullName: Ammonium + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 18.05 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +NiF1: + << : *DST1properties + Formula: Ni + Fullname: Nickel on dust. Reff = 0.7 microns + MW_g: 58.69 + WD_CoarseAer: true +NiF2: + << : *DST2properties + Formula: Ni + Fullname: Nickel on dust, Reff = 1.4 microns + MW_g: 58.69 +NIT: + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Inorganic nitrates + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 62.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +NITD1: + << : *DST1properties + FullName: Nitrate on dust, Reff = 0.7 microns + MW_g: 29.0 +NITD2: + << : *DST2properties + FullName: Nitrate on dust, Reff = 1.4 microns + MW_g: 29.0 +NITD3: + << : *DST3properties + FullName: Nitrate on dust, Reff = 2.4 microns + MW_g: 29.0 +NITD4: + << : *DST4properties + FullName: Nitrate on dust, Reff = 4.5 microns + MW_g: 29.0 +NITs: + << : *SALCproperties + FullName: Inorganic nitrates on surface of seasalt aerosol + Is_Photolysis: true + MW_g: 31.4 + WD_CoarseAer: true +'NO': + Background_VV: 4.0e-13 + Formula: 'NO' + FullName: Nitrogen oxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 30.01 +NO2: + Background_VV: 4.0e-13 + DD_F0: 0.1 + DD_Hstar: 1.0e-2 + Formula: NO2 + FullName: Nitrogen dioxide + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 46.01 +NO3: + Background_VV: 4.0e-15 + Formula: NO3 + FullName: Nitrate radical + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 62.01 +NPHEN: + DD_F0: 1.0 + DD_Hstar: 2.3e+3 + Formula: C6H5NO3 + FullName: Nitrophenols + Henry_CR: 0.0 + Henry_K0: 2.3e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 139.11 + WD_RetFactor: 2.0e-2 +NPRNO3: + DD_F0: 0.1 + DD_Hstar: 1.1 + Formula: C3H7ONO2 + FullName: n-propyl nitrate + Henry_CR: 5500.0 + Henry_K0: 1.1 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 105.11 +NRO2: + Formula: C10H7O2 + FullName: Peroxy radical from NAP oxidation + Is_Gas: true + MW_g: 159.17 +O: + Formula: O(3P) + FullName: Ground state atomic oxygen + Is_Gas: true + MW_g: 16.00 +O1D: + Background_VV: 1.0e-15 + Formula: O(1D) + FullName: Excited atomic oxygen (1D) + Is_Gas: true + MW_g: 16.00 +O2: + Background_VV: 2.095e-1 + Formula: O2 + FullName: Molecular oxygen + Is_Gas: true + Is_Photolysis: true + MW_g: 32.0 +O3_PROP: &O3properties + DD_F0: 1.0 + DD_Hstar: 1.0e-2 + Formula: O3 + FullName: Ozone + Henry_CR: 2800.0 + Henry_K0: 0.0101325e0 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + MW_g: 48.00 +O3: + << : *O3properties + Background_VV: 2.0e-8 + FullName: Ozone + Henry_CR: 2800.0 + Henry_K0: 0.0101325e0 + Is_DryAlt: true +O3afbl: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the African boundary layer +O3asbl: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the Asian boundary layer +O3atbl: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the Atlantic Ocean boundary layer +O3eubl: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the European boundary layer +O3init: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone from the initial condition +O3mt: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the middle troposphere +O3nabl: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the North America boundary layer +O3pcbl: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the Pacific Ocean boundary layer +O3row: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the rest of the world +O3Strat: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the stratosphere +O3usa: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced over the United States in PBL +O3ut: + << : *O3properties + Background_VV: 1.0e-20 + FullName: Ozone produced in the upper troposphere +OClO: + Formula: OClO + FullName: Chlorine dioxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 67.45 +OCPI: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1300.0 + FullName: Hydrophilic organic carbon aerosol + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_HygroGrowth: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_KcScaleFac_Luo: [0.5, 0.25, 0.5] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 0.5] +OCPO: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1300.0 + FullName: Hydrophobic organic carbon aerosol + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [0.5, 0.5, 0.5] + WD_KcScaleFac_Luo: [0.0, 0.0, 0.0] + WD_RainoutEff: [0.0, 0.0, 0.0] +OCS: + Background_VV: 9.0e-15 + Formula: COS + FullName: Carbonyl sulfide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 60.07 +OH: + Background_VV: 4.0e-15 + Formula: OH + FullName: Hydroxyl radical + Is_Gas: true + MW_g: 17.01 +OIO: + Formula: OIO + FullName: Iodine dioxide + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 158.90 +OLND: + Formula: C10H16NO5 + FullName: Monoterpene-derived NO3-alkene adduct + Is_Gas: true + MW_g: 230.27 +OLNN: + Formula: C10H16NO5 + FullName: Monoterpene-derived NO3 adduct + Is_Gas: true + MW_g: 230.27 +OPOA1: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Lumped aerosol product of SVOC oxidation + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +OPOA2: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Lumped aerosol product of SVOC oxidation + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +OPOG1: + DD_F0: 0.0 + DD_Hstar: 1.0e+5 + FullName: Lumped gas product of SVOC oxidation + Henry_CR: 6039.0 + Henry_K0: 1.0e+5 + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 12.01 + WD_RetFactor: 2.0e-2 +OPOG2: + DD_F0: 0.0 + DD_Hstar: 1.0e+5 + FullName: Lumped gas product of SVOC oxidation + Henry_CR: 6039.0 + Henry_K0: 1.0e+5 + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 12.01 + WD_RetFactor: 2.0e-2 +OTHRO2: + Formula: CH3CH2OO + FullName: Other C2 RO2 not from C2H6 oxidation + Is_Gas: true + MW_g: 61.07 +PAN: + DD_F0: 1.0 + DD_Hstar: 3.6 + Formula: CH3C(O)OONO2 + FullName: Peroxyacetyl nitrate + Henry_CR: 5700.0 + Henry_K0: 2.94 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 121.06 + WD_RetFactor: 2.0e-2 +PassiveTracer: + Background_VV: 1.0e-7 + FullName: Passive tracer for mass conservation evaluation + Is_Advected: true + Is_Gas: true + Is_Tracer: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g + Snk_Mode: none + Src_Mode: none +Pb210_PROP: &Pbproperties + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: Pb210 + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_RadioNuclide: true + Is_Tracer: true + Is_WetDep: true + MW_g: 210.0 +# Comment out tracer-specific code for now and use RnPbBe_mod.F90 +# Snk_Horiz: all +# Snk_Mode: efolding +# Snk_Period: 11742.8 +# Snk_Vert: all +# Src_Add: true +# Src_Mode: HEMCO +# Src_Mode: decay_of_another_species +# Src_Species: Rn222 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +Pb210: + << : *Pbproperties + FullName: Lead-210 isotope +# Src_Vert: all +Pb210s: + << : *Pbproperties + FullName: Lead-210 isotope stratospheric-source tracer +# Src_Vert: stratosphere +PbF1: + << : *DST1properties + Formula: Pb + Fullname: Lead on dust. Reff = 0.7 microns + MW_g: 210.0 + WD_CoarseAer: true +PbF2: + << : *DST2properties + Formula: Pb + Fullname: Lead on dust, Reff = 1.4 microns + MW_g: 210.0 +PCO: + FullName: Dummy species to track production rate of CO + Is_Gas: true + MW_g: 28.01 +pFe: + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: Fe + FullName: Anthropogenic iron + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 55.85 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +PH2O2: + FullName: Dummy species to track production rate of H2O2 + Is_Gas: true + MW_g: 34.02 +PH2SO4: + FullName: SO4 from gas-phase chemistry + Is_Gas: true + MW_g: 96.06 +PHEN: + DD_F0: 1.0 + DD_Hstar: 2.8e+3 + Formula: C6H6O + FullName: Phenol + Henry_CR: 2700.0 + Henry_K0: 2.8e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 94.11 + WD_RetFactor: 2.0e-2 +PIO2: + Formula: C10H17O3 + FullName: Peroxy radical from MTPA + Is_Gas: true + MW_g: 185.27 +PIP: + Formula: C10H18O3 + FullName: Peroxide from MTPA + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 186.28 +PO2: + Formula: HOCH2CH(OO)CH3 + FullName: Peroxy radical from propene + Is_Gas: true + MW_g: 91.10 +POA1: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1300.0 + FullName: Lumped aerosol primary SVOCs + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_HygroGrowth: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [0.5, 0.5, 0.5] + WD_KcScaleFac_Luo: [0.0, 0.0, 0.0] + WD_RainoutEff: [0.0, 0.0, 0.0] +POA2: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1300.0 + FullName: Lumped aerosol primary SVOCs + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 12.01 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [0.5, 0.5, 0.5] + WD_KcScaleFac_Luo: [0.0, 0.0, 0.0] + WD_RainoutEff: [0.0, 0.0, 0.0] +POG1: + DD_F0: 0.0 + DD_Hstar: 9.5 + FullName: Lumped gas primary SVOCs + Henry_CF: 4700.0 + Henry_K0: 9.5 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 12.01 + WD_RetFactor: 2.0e-2 +POG2: + DD_F0: 0.0 + DD_Hstar: 9.5 + FullName: Lumped gas primary SVOCs + Henry_CF: 4700.0 + Henry_K0: 9.5 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 12.01 + WD_RetFactor: 2.0e-2 +POPG_BaP: + DD_F0: 0.0 + DD_Hstar: 1319.354829 # 1.0 / 3.10e-5 * 0.0409 + DD_KOA: 9.88144e+9 # 3.02e+11 * 0.0409 * 0.8 + Formula: C20H12 + FullName: Benzo(a)pyrene (gas phase) + Henry_CR: 5168.269231 # 43.0 / 8.32e-3 + Henry_K0: 1318.496208 # 1.0 / 3.10e-5 / 8.21e-2 / 298.0 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 252.32 + WD_RetFactor: 0.0 +POPG_PHE: + DD_F0: 0.0 + DD_Hstar: 23.50574713 # 1.0 / 1.74e-3 * 0.0409 + DD_KOA: 1.429864e+6 # 4.37e+7 * 0.0409 * 0.8 + Formula: C14H10 + FullName: Phenanthrene (gas phase) + Henry_CR: 5649.038462 # 47.0/ 8.32e-3 + Henry_K0: 23.49044968 # 1.0 / 1.74e-3 / 8.21e-2 / 298.0 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 178.24 + WD_RetFactor: 0.0 +POPG_PYR: + DD_F0: 0.0 + DD_Hstar: 76.16387337 # 1.0 / 5.37e-4 * 0.0409 + DD_KOA: 2.368928e+7 # 7.24e+8 * 0.0409 * 0.8 + Formula: C16H10 + FullName: Pyrene (gas phase) + Henry_CR: 5168.269231 # 43.0 / 8.32e-3 + Henry_K0: 76.11430621 # 1.0 / 5.37e-4 / 8.21e-2 / 298.0 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 202.26 + WD_RetFactor: 0.0 +POPPBCPI_BaP: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C20H12 + FullName: Benzo(a)pyrene particles on hydrophilic black carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 252.32 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [ 0.4, 0.0, 1.0] +POPPBCPI_PHE: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C14H10 + FullName: Phenanthrene particles on hydrophilic black carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 178.24 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [ 0.4, 0.0, 1.0] +POPPBCPI_PYR: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C16H10 + FullName: Pyrene particles on hydrophilic black carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 202.26 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [ 0.4, 0.0, 1.0] +POPPBCPO_BaP: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C20H12 + FullName: Benzo(a)pyrene particles on hydrophobic black carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 252.32 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 1.0, 0.5] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [0.4, 1.0, 0.0] +POPPBCPO_PHE: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C14H10 + FullName: Phenanthrene particles on hydrophobic black carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 178.24 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 1.0, 0.5] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [0.4, 1.0, 0.0] +POPPBCPO_PYR: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C16H10 + FullName: Pyrene particles on hydrophobic black carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 202.26 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 1.0, 0.5] + WD_RainoutEff: [1.0, 1.0, 0.0] + WD_RainoutEff_Luo: [0.4, 1.0, 0.0] +POPPOCPI_BaP: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C20H12 + FullName: Benzo(a)pyrene particles on hydrophilic organic carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 252.32 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +POPPOCPI_PHE: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C14H10 + FullName: Phenanthrene particles on hydrophilic organic carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 178.24 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +POPPOCPI_PYR: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C16H10 + FullName: Pyrene particles on hydrophilic organic carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 202.26 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +POPPOCPO_BaP: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C20H12 + FullName: Benzo(a)pyrene particles on hydrophobic organic carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 252.32 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [0.5, 0.5, 0.5] + WD_RainoutEff: [0.0, 0.0, 0.0] +POPPOCPO_PHE: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C14H10 + FullName: Phenanthrene particles on hydrophobic organic carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 178.24 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [0.5, 0.5, 0.5] + WD_RainoutEff: [0.0, 0.0, 0.0] +POPPOCPO_PYR: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C16H10 + FullName: Pyrene particles on hydrophobic organic carbon + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 202.26 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [0.5, 0.5, 0.5] + WD_RainoutEff: [0.0, 0.0, 0.0] +POx: + FullName: Dummy species to track production rate of Ox + Is_Gas: true + MW_g: 48.00 +PP: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: HOCH2CH(OOH)CH3 + FullName: Peroxide from PO2 + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 92.11 + WD_RetFactor: 2.0e-2 +PPN: + DD_F0: 1.0 + DD_Hstar: 3.6 + Formula: CH3CH2C(O)OONO2 + FullName: Lumped peroxypropionyl nitrate + Henry_CR: 0.0 + Henry_K0: 2.94 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 135.08 + WD_RetFactor: 2.0e-2 +PRN1: + Formula: O2NOCH2CH(OO)CH3 + FullName: Peroxy radical from propene + NO3 + Is_Gas: true + MW_g: 136.09 +PROPNN: + DD_F0: 1.0 + DD_Hstar: 5.0e+5 + Formula: CH3C(=O)CH2ONO2 + FullName: Propanone nitrate + Henry_CR: 0.0 + Henry_K0: 1.0e+3 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 119.08 + WD_RetFactor: 2.0e-2 +PRPE: + Formula: C3H6 + FullName: Lumped >= C3 alkenes + Henry_CR: 3400.0 + Henry_K0: 7.4e-3 + Is_Advected: true + Is_Gas: true + Is_WetDep: true + MW_g: 42.09 + WD_RetFactor: 2.0e-2 +PRPN: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: O2NOCH2CH(OOH)CH3 + FullName: Peroxide from PRN1 + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 137.11 + WD_RetFactor: 2.0e-2 +PSO4: + FullName: Dummy species to track production of SO4 + Is_Gas: true + MW_g: 96.06 +PSO4AQ: + FullName: SO4 from cloud chemistry + Is_Gas: true + MW_g: 96.06 +PYAC: + DD_F0: 1.0 + DD_Hstar: 3.14e+5 + Formula: C3H4O3 + FullName: Pyruvic acid + Henry_CR: 5100.0 + Henry_K0: 3.14e+5 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 88.07 + WD_RetFactor: 2.0e-2 +R4N1: + Formula: C4H8NO5 + FullName: Peroxy radical from R4N2 + Is_Gas: true + MW_g: 150.13 +R4N2: + DD_F0: 1.0 + DD_Hstar: 1.7e+4 + Formula: RO2NO + FullName: Lumped alkyl nitrate + Henry_CR: 5800.0 + Henry_K0: 1.0 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 119.10 + WD_RetFactor: 2.0e-2 +R4O2: + Formula: C4H9O2 + FullName: Peroxy radical from ALK4 + Is_Gas: true + MW_g: 89.13 +R4P: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: CH3CH2CH2CH2OOH + FullName: Peroxide from R4O2 + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 90.14 + WD_RetFactor: 2.0e-2 +RA3P: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: CH3CH2CH2OOH + FullName: Peroxide from A3O2 + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 76.11 + WD_RetFactor: 2.0e-2 +RB3P: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: CH3CH(OOH)CH3 + FullName: Peroxide from B3O2 + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 76.11 + WD_RetFactor: 2.0e-2 +RCHO: + Formula: CH3CH2CHO + FullName: Lumped aldehyde >= C3 + Henry_CR: 0.0 + Henry_K0: 1.0e+1 + Is_Advected: true + Is_Gas: true + Is_Photolysis: true + MW_g: 58.09 + WD_RetFactor: 2.0e-2 +RCO3: + Formula: CH3CH2C(O)OO + FullName: Peroxypropionyl radical + Is_Gas: true + MW_g: 89.08 +RCOOH: + Formula: C2H5C(O)OH + FullName: '> C2 organic acids' + Is_Gas: true + MW_g: 74.09 +RIPA: + DD_F0: 1.0 + DD_Hstar: 1.7e+6 + Formula: C5H10O3 + FullName: 1,2-ISOPOOH + Henry_CR: 0.0 + Henry_K0: 1.7e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 118.15 + WD_RetFactor: 2.0e-2 +RIPB: + DD_F0: 1.0 + DD_Hstar: 1.7e+6 + Formula: C5H10O3 + FullName: 4,3-ISOPOOH + Henry_CR: 0.0 + Henry_K0: 1.7e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 118.15 + WD_RetFactor: 2.0e-2 +RIPC: + DD_F0: 1.0 + DD_Hstar: 1.7e+6 + Formula: C5H10O3 + FullName: d-1,4-ISOPOOH + Henry_CR: 0.0 + Henry_K0: 1.7e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 118.15 + WD_RetFactor: 2.0e-2 +RIPD: + DD_F0: 1.0 + DD_Hstar: 1.7e+6 + Formula: C5H10O3 + FullName: d-4,1-ISOPOOH + Henry_CR: 0.0 + Henry_K0: 1.7e+6 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 118.15 + WD_RetFactor: 2.0e-2 +Rn222: + Formula: Rn222 + FullName: Radon-222 isotope + Is_Advected: true + Is_Aerosol: true + Is_RadioNuclide: true + Is_Tracer: true + MW_g: 222.0 +# Comment out tracer-specific code for now and use RnPbBe_mod.F90 +# Snk_Horiz: all +# Snk_Mode: efolding +# Snk_Period: 5.5 +# Snk_Vert: all +# Src_Add: true +# Src_Mode: HEMCO +# Src_Mode: decay_of_another_species +# Src_Species: Rn222 +ROH: + Formula: C3H7OH + FullName: '> C2 alcohols' + Is_Gas: true + MW_g: 60.11 +RP: + DD_F0: 1.0 + DD_Hstar: 2.94e+2 + Formula: CH3CH2C(O)OOH + FullName: Peroxide from RCO3 + Henry_CR: 5200.0 + Henry_K0: 2.94e+2 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 90.09 + WD_RetFactor: 2.0e-2 +S: + Formula: S + FullName: Atomic sulfur + MW_g: 32.06 +SALA: + << : *SALAproperties + FullName: Fine (0.01-0.05 microns) sea salt aerosol + Is_HygroGrowth: true + MW_g: 31.4 +SALAAL: + << : *SALAproperties + FullName: Accumulation mode sea salt alkalinity + Is_HygroGrowth: false + MW_g: 31.4 +SALACL: + << : *SALAproperties + FullName: Chloride in Accumulation mode sea salt aerosol + Is_HygroGrowth: false + MW_g: 35.45 +SALC: + << : *SALCproperties + FullName: Coarse (0.5-8 microns) sea salt aerosol + Is_HygroGrowth: true + MW_g: 31.4 + WD_CoarseAer: true +SALCAL: + << : *SALCproperties + FullName: Coarse mode sea salt alkalinity + Is_HygroGrowth: false + MW_g: 31.4 + WD_CoarseAer: true +SALCCL: + << : *SALCproperties + FullName: Chloride in Coarse mode sea salt aerosol + Is_HygroGrowth: false + MW_g: 35.45 + WD_CoarseAer: true +SF6: + Background_VV: 1.0e-20 + Formula: SF6 + FullName: Sulfur hexafluoride + Is_Advected: true + Is_Gas: true + Is_Tracer: true + MW_g: 146.06 + Snk_Mode: none + Src_Add: true + Src_Mode: HEMCO +SiF1: + << : *DST1properties + Fullname: Silicon on dust, Reff = 0.7 microns + MW_g: 28.09 + WD_CoarseAer: true +SiF2: + << : *DST2properties + Fullname: Silicon on dust, Reff = 1.4 microns + MW_g: 28.09 +SO2: + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.2, 0.3] + DD_DvzMinVal_Luo: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 1.0e+5 + Formula: SO2 + FullName: Sulfur dioxide + Henry_CR_Luo: 3100.0 + Henry_K0_Luo: 1.22 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 64.04 + WD_AerScavEff: 1.0 + WD_Is_SO2: true + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] + WD_RetFactor_Luo: 5.0e-2 + WD_LiqAndGas_Luo: true + WD_ConvFacI2G_Luo: 6.17395e-1 +SO3mm: + Formula: SO3-- + FullName: Sulfite + Is_Gas: true + MW_g: 80.07 +SO4: + DD_DvzAerSnow: 0.03 + DD_DvzMinVal: [0.01, 0.01] + DD_F0: 0.0 + DD_Hstar: 0.0 + Density: 1700.0 + Formula: SO4 + FullName: Sulfate + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_HygroGrowth: true + Is_Photolysis: true + Is_WetDep: true + MW_g: 96.06 + WD_AerScavEff: 1.0 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [1.0, 0.0, 1.0] + WD_RainoutEff_Luo: [0.4, 0.0, 1.0] +SO4D1: + << : *DST1properties + FullName: Sulfate on dust, Reff = 0.7 microns + MW_g: 29.0 +SO4D2: + << : *DST2properties + FullName: Sulfate on dust, Reff = 1.4 microns + MW_g: 29.0 +SO4D3: + << : *DST3properties + FullName: Sulfate on dust, Reff = 2.4 microns + MW_g: 29.0 +SO4D4: + << : *DST4properties + FullName: Sulfate on dust, Reff = 4.5 microns + MW_g: 29.0 +SO4H1: + Formula: SO4 + FullName: Sulfate produced by HOBr + Is_Gas: true + MW_g: 96.06 +SO4H2: + Formula: SO4 + FullName: Sulfate produced by HOBr + Is_Gas: true + MW_g: 96.06 +SO4H3: + Formula: SO4 + FullName: Sulfate produced by HOCl + Is_Gas: true + MW_g: 96.06 +SO4H4: + Formula: SO4 + FullName: Sulfate produced by HOCl + Is_Gas: true + MW_g: 96.06 +SO4s: + << : *SALCproperties + FullName: Sulfate on surface of seasalt aerosol + MW_g: 31.4 + WD_CoarseAer: true +SOAGX: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C2H2O2 + FullName: Aerosol-phase glyoxal + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 58.04 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +SOAIE: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + Formula: C5H10O3 + FullName: Aerosol-phase IEPOX + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 118.15 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +SOAP: + FullName: SOA Precursor - lumped species for simplified SOA parameterization + Is_Advected: true + Is_Gas: true + MW_g: 150.0 +SOAS: + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: SOA Simple - simplified non-volatile SOA parameterization + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 150.0 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +st80_25: + FullName: Stratosphere source 25 day tracer + Is_Advected: true + Is_Gas: true + Is_Tracer: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g + Snk_Horiz: all + Snk_Mode: efolding + Snk_Period: 25 + Snk_Vert: troposphere + Src_Add: false + Src_Horiz: all + Src_Mode: constant + Src_Pressures: [0, 80] + Src_Units: ppbv + Src_Value: 200 + Src_Vert: pressures +stOX: + FullName: Tracer with O3 values in stratosphere and O3 loss applied in troposphere + Is_Advected: true + Is_Gas: true + Is_Tracer: true + MW_g: 1.0 # Use value of 1.0 to get past checks for missing MW_g + Loss_Species: O3 + Snk_Horiz: all + Snk_Mode: chemical_loss + Snk_Vert: troposphere + Src_Add: false + Src_Horiz: all + Src_Mode: model_field + Src_Vert: stratosphere +TiF1: + << : *DST1properties + Formula: Ti + Fullname: Titanium on dust, Reff = 0.7 microns + MW_g: 47.87 + WD_CoarseAer: true +TiF2: + << : *DST2properties + Formula: Ti + Fullname: Titanium on dust, Reff = 1.4 microns + MW_g: 47.87 +TOLU: + Formula: C7H8 + FullName: Toluene + Is_Advected: true + Is_Gas: true + MW_g: 92.15 +TRO2: + Formula: C7H9O5 + FullName: Peroxy radical from TOLU oxidation + Is_Gas: true + MW_g: 173.16 +TSOA_PROP: &TSOAproperties + DD_DvzAerSnow: 0.03 + DD_F0: 0.0 + DD_Hstar: 0.0 + FullName: Lumped semivolatile aerosol products of monoterpene + sesquiterpene oxidation + Is_Advected: true + Is_Aerosol: true + Is_DryDep: true + Is_WetDep: true + MW_g: 150.0 + WD_AerScavEff: 0.8 + WD_KcScaleFac: [1.0, 0.5, 1.0] + WD_RainoutEff: [0.8, 0.0, 0.8] + WD_RainoutEff_Luo: [0.4, 0.0, 0.8] +TSOA0: + << : *TSOAproperties +TSOA1: + << : *TSOAproperties +TSOA2: + << : *TSOAproperties +TSOA3: + << : *TSOAproperties +TSOG_PROP: &TSOGproperties + DD_F0: 0.0 + DD_Hstar: 1.0e+5 + FullName: Lumped semivolatile gas products of monoterpene + sesquiterpene oxidation + Henry_CR: 6039.0 + Henry_K0: 1.0e+5 + Is_Advected: true + Is_DryDep: true + Is_Gas: true + Is_WetDep: true + MW_g: 150.0 + WD_RetFactor: 2.0e-2 +TSOG0: + << : *TSOGproperties +TSOG1: + << : *TSOGproperties +TSOG2: + << : *TSOGproperties +TSOG3: + << : *TSOGproperties +XRO2: + Formula: C8H11O5 + FullName: Peroxy radical from TOLU oxidation + Is_Gas: true + MW_g: 187.19 +XYLE: + Formula: C8H10 + FullName: Xylene + Is_Advected: true + Is_Gas: true + MW_g: 106.18 diff --git a/.dev/utils/build.sh b/.dev/utils/build.sh new file mode 100755 index 00000000..5f59a6be --- /dev/null +++ b/.dev/utils/build.sh @@ -0,0 +1,197 @@ +#!/bin/env bash +# ============================================================================ # +# Build GISS Model E with (or without) GEOS-Chem support. # +# ============================================================================ # + +set -e + +# Default values +CLASSIC=false +COMPILE_WITH_TRAPS=NO +DEBUG=false +FRESH=false +GISS_ONLY=false +MECH=fullchem +OPENMP=false + +# Function to display help text +show_help() { + echo "Usage: $0 [MECH=fullchem|carbon|Hg|custom] [--openmp] [--giss-only] [--classic]" + echo " [--debug] [--traps] [-f] [--help]" + echo + echo "Options:" + echo " MECH= Set the chemical mechanism (defaults to fullchem)." + echo " --openmp Compile with OpenMP enabled." + echo " --giss-only Build without GEOS-Chem coupling." + echo " --classic Build without GCClassic as the driver, rather than Model E." + echo " --debug Run with debugging turned on." + echo " --traps Run with additional 'COMPILE_WITH_TRAPS' debugging option." + echo " -f Fresh rebuild of the model." + echo " --help Show this help message and exit." +} + +# Check for --help option +if [ "$1" = "--help" ]; then + show_help + exit 0 +fi + +# Parse arguments +for arg in "$@"; do + case $arg in + MECH=*) + MECH="${arg#*=}" + ;; + --openmp) + OPENMP=true + shift + ;; + --giss-only) + GISS_ONLY=true + shift + ;; + --classic) + CLASSIC=true + shift + ;; + --debug) + DEBUG=true + shift + ;; + --traps) + COMPILE_WITH_TRAPS=YES + shift + ;; + -f) + FRESH=true + shift + ;; + *) + echo "Unknown argument: $arg" + show_help + exit 1 + ;; + esac +done + +# Print the values for verification +echo "CLASSIC=${CLASSIC}" +echo "COMPILE_WITH_TRAPS=${COMPILE_WITH_TRAPS}" +echo "DEBUG=${DEBUG}" +echo "FRESH=${FRESH}" +echo "GISS_ONLY=${GISS_ONLY}" +echo "MECH=${MECH}" +echo "OPENMP=${OPENMP}" + +# Check for unset environment variables +if [ -z ${GISS_HOME+x} ]; then + echo "GISS_HOME is unset. Exiting." + exit 0 +fi +if [ "${CLASSIC}" = true ]; then + if [ -z ${GCCLASSIC_RUNDIR+x} ]; then + echo "GCCLASSIC_RUNDIR is unset. Exiting." + exit 0 + fi + if [ -z ${F90FLAGS+x} ]; then + echo "F90FLAGS is unset. Exiting." + exit 0 + fi +else + if [ -z ${ModelE_Support+x} ]; then + echo "ModelE_Support is unset. Exiting." + exit 0 + fi +fi + +# Set environment variables appropriately for the chosen mode +if [ "${GISS_ONLY}" = true ]; then + if [ "${CLASSIC}" = true ]; then + echo "--giss-only and --classic are mutually exclusive" + exit 1 + fi + GC=NO + RUNID=GISS_ONLY +else + GC=YES + RUNID=GISS_GC_14 +fi +echo "GC=${GC}" +echo "RUNID=${RUNID}" + +# Conditionally fresh rebuild of the model +cd "${GISS_HOME}/decks" +if [ "${FRESH}" = true ]; then + make clean OVERWRITE=YES + make clean_all OVERWRITE=YES +fi + +if [ "${DEBUG}" = true ]; then + TYPE=Debug +else + TYPE=Release +fi +echo "TYPE=${TYPE}" + +# Compile +if [ "${CLASSIC}" = true ]; then + # Build GCClassic + cd "${GCCLASSIC_RUNDIR}" + BUILD_DIR=build + if [ "${DEBUG}" = true ]; then + BUILD_DIR=${BUILD_DIR}_debug + fi + echo "BUILD_DIR=${BUILD_DIR}" + if [ "${FRESH}" = true ]; then + rm -rf ${BUILD_DIR} + fi + mkdir -p ${BUILD_DIR} + cd ${BUILD_DIR} + cmake "${GISS_HOME}/model/geos-chem" -DRUNDIR=.. -DCMAKE_BUILD_TYPE=${TYPE} \ + -DMECH="${MECH}" -DCMAKE_Fortran_FLAGS="${F90FLAGS}" + make -j10 + RUNDIR="${GCCLASSIC_RUNDIR}" +else + if [ "${DEBUG}" = true ]; then + # Build GISS Model E in Debug mode + ln -s -f "${GISS_HOME}/.github/rundecks/${RUNID}.R" "$(pwd)/${RUNID}_DEBUG.R" + RUNID="${RUNID}_DEBUG" + make -j setup RUN="${RUNID}" F90=mpif90 GC="${GC}" MP="${OPENMP}" MPI=YES MECH="${MECH}" \ + TYPE="${TYPE}" DEBUG=YES COMPILE_WITH_TRAPS="${COMPILE_WITH_TRAPS}" TRACEBACK=YES OVERWRITE=YES + elif [ "${COMPILE_WITH_TRAPS}" = "YES" ]; then + echo "COMPILE_WITH_TRAPS only has an effect if debug mode is turned on. Exiting." + exit 0 + else + # Build GISS Model E in Release mode + ln -s -f "${GISS_HOME}/.github/rundecks/${RUNID}.R" "$(pwd)/${RUNID}.R" + make -j setup RUN="${RUNID}" F90=mpif90 GC="${GC}" MP="${OPENMP}" MPI=YES MECH="${MECH}" \ + TYPE="${TYPE}" OVERWRITE=YES + fi + RUNDIR=${ModelE_Support}/huge_space/${RUNID} +fi + +# Configuration +if [ "${GISS_ONLY}" = false ]; then + # Copy over configuration files + CONFIG="${GISS_HOME}/.dev/config" + for DIR in ${GISS_HOME} ${RUNDIR}; do + ln -s -f "${CONFIG}/geoschem_config.yml" "${DIR}/geoschem_config.yml" + ln -s -f "${CONFIG}/HEMCO_Config.rc" "${DIR}/HEMCO_Config.rc" + ln -s -f "${CONFIG}/HEMCO_Diagn.rc" "${DIR}/HEMCO_Diagn.rc" + ln -s -f "${CONFIG}/HISTORY.rc" "${DIR}/HISTORY.rc" + ln -s -f "${CONFIG}/species_database.yml" "${DIR}/species_database.yml" + done + # Create output directories + mkdir -p "${RUNDIR}/OutputDir" + # Setup restarts + mkdir -p "${RUNDIR}/Restarts" + # NOTE: The restart file will need to have been saved in the following location + ln -s -f "${GC_INPUTS}/ExtData/GEOSCHEM_RESTARTS/GC_14.3.0/GEOSChem.Restart.20160701_0000z.LATEST.nc4" \ + "${RUNDIR}/Restarts/GEOSChem.Restart.20160701_0000z.nc4" + # Edit HEMCO_Config to say whether we are running with or without meteorology + if [ "${CLASSIC}" = true ]; then + sed -i "s/METEOROLOGY : false/METEOROLOGY : true /" "${CONFIG}/HEMCO_Config.rc" + else + sed -i "s/METEOROLOGY : true /METEOROLOGY : false/" "${CONFIG}/HEMCO_Config.rc" + fi +fi diff --git a/.dev/utils/run.sh b/.dev/utils/run.sh new file mode 100755 index 00000000..0fcbcaf2 --- /dev/null +++ b/.dev/utils/run.sh @@ -0,0 +1,126 @@ +#!/bin/env bash +# ============================================================================ # +# Run GISS Model E with (or without) GEOS-Chem support. # +# ============================================================================ # + +set -e + +# Default values +NP=1 +GISS_ONLY=false +CLASSIC=false +COLD_RESTART=false +DEBUG=false + +# Function to display help text +show_help() { + echo "Usage: $0 [NP=] [--giss-only] [--classic] [--cold-restart] [--debug] [--help]" + echo + echo "Arguments:" + echo " NP Set number of MPI processes (default: 1). Must be an integer." + echo + echo "Options:" + echo " --giss-only Build without GEOS-Chem coupling." + echo " --classic Build without GCClassic as the driver, rather than Model E." + echo " --cold-restart Run for a single hour from the restart files to generate a checkpoint." + echo " --debug Run with debugging turned on." + echo " --help Show this help message and exit." +} + +# Check for --help option +if [ "$1" = "--help" ]; then + show_help + exit 0 +fi + +# Parse arguments +for arg in "$@"; do + case $arg in + NP=*) + NP="${arg#*=}" + ;; + --giss-only) + GISS_ONLY=true + shift + ;; + --classic) + CLASSIC=true + shift + ;; + --cold-restart) + COLD_RESTART=true + shift + ;; + --debug) + DEBUG=true + shift + ;; + *) + echo "Unknown argument: $arg" + show_help + exit 1 + ;; + esac +done + +# Print the values for verification +echo "GISS_ONLY=${GISS_ONLY}" +echo "CLASSIC=${CLASSIC}" +echo "COLD_RESTART=${COLD_RESTART}" +echo "DEBUG=${DEBUG}" +echo "NP=${NP}" + +# Check for unset environment variables +if [ -z ${ModelE_Support+x} ]; then + echo "ModelE_Support is unset. Exiting." + exit 0 +fi +if [ "${CLASSIC}" = true ]; then + if [ -z ${GCCLASSIC_RUNDIR+x} ]; then + echo "GCCLASSIC_RUNDIR is unset. Exiting." + exit 0 + fi +fi + +if [ "${CLASSIC}" = true ]; then + if [ "${NP}" != "1" ]; then + echo "GCClassic only runs in serial" + exit 1 + fi + if [ "${COLD_RESTART}" = true ]; then + echo "GCClassic does not support cold restart" + exit 1 + fi + cd "${GCCLASSIC_RUNDIR}" + if [ "${DEBUG}" = true ]; then + ./build_debug/bin/gcclassic + else + ./build/bin/gcclassic + fi +else + # Set RUNID appropriately + if [ "${GISS_ONLY}" = true ]; then + RUNID=GISS_ONLY + else + RUNID=GISS_GC_14 + fi + if [ "${DEBUG}" = true ]; then + ln -s -f "$(pwd)/${RUNID}.R" "$(pwd)/${RUNID}_DEBUG.R" + RUNID="${RUNID}_DEBUG" + fi + echo "RUNID=${RUNID}" + + # Navigate to the run directory + cd "${ModelE_Support}/prod_runs/${RUNID}" + ./${RUNID}ln + if [ "${COLD_RESTART}" = true ]; then + # Remove any existing restart files to avoid confusion + rm -f fort.*.nc + # Run the model for one hour + # NOTE: Add --tag-output (OpenMPI) or -prepend-rank (Intel) to see output per rank + mpiexec -np "${NP}" ./${RUNID}.exe -i I -cold-restart 2>&1 | tee cold-restart.log + else + # Pick up from a checkpoint and run the model for the full duration + mpiexec -np "${NP}" ./${RUNID}.exe -i I 2>&1 | tee "${RUNID}.PRT" + fi +fi diff --git a/.dev/utils/setup.sh b/.dev/utils/setup.sh new file mode 100755 index 00000000..e7a66f12 --- /dev/null +++ b/.dev/utils/setup.sh @@ -0,0 +1,52 @@ +#!/bin/env bash +# ============================================================================ # +# Activate the Python and spack environments used by GISS-GC. # +# ============================================================================ # + +# Environment variables for GISS modelE +# NOTE: Path may need to be edited for your system +export GISS_HOME="${HOME}/software/GISS-GC" +# NOTE: Path may need to be edited for your system +export ModelE_Support="${HOME}/run/GISS-GC" +mkdir -p "${ModelE_Support}" +# NOTE: Path may need to be edited for your system +export GCCLASSIC_RUNDIR="${HOME}/run/gcclassic" +mkdir -p "${GCCLASSIC_RUNDIR}" +# Environment variables for compiler +export CC=gcc # NOTE: C compiler may need to be modified for your system +export CXX=g++ # NOTE: C++ compiler may need to be modified for your system +export FC=gfortran # NOTE: Fortran compiler may need to be modified for your system +export F90="${FC}" +export F77="${FC}" +# Misc. enviroment variables +export F_UFMTENDIAN=big +export KMP_STACKSIZE=100000000 +export OMP_NUM_THREADS=1 + +# Spack setup +# NOTE: This section may need to be edited for your setup +spack env activate -p giss-gc +MPIF90=$(find "${SPACK_ENV}" -name mpif90 | head -n 1) +export MPI_ROOT=${MPIF90%/bin/mpif90} + +# Environment variables for passing NetCDF-C paths to GEOS-Chem +NETCDF_HOME="$(nc-config --prefix)" +export NETCDF_HOME +export GC_BIN="${NETCDF_HOME}/bin" +export GC_INCLUDE="${NETCDF_HOME}/include" +export GC_LIB="${NETCDF_HOME}/lib" + +# Environment variables for passing NetCDF-Fortran paths to GEOS-Chem +NETCDF_F_HOME="$(nf-config --prefix)" +export NETCDF_F_HOME +export GC_F_BIN="${NETCDF_F_HOME}/bin" +export GC_F_INCLUDE="${NETCDF_F_HOME}/include" +export GC_F_LIB="${NETCDF_F_HOME}/lib" + +# GEOS-Chem input data +# NOTE: Path may need to be edited for your system +export GC_INPUTS="${DATA}/GISS-GC/prod_input_files" +export ROOT="${GC_INPUTS}/ExtData/HEMCO" + +# Put tools in the path +export PATH="${SOFTWARE}/tools/mk_diags:${PATH}" diff --git a/.github/modelErc b/.github/modelErc new file mode 100644 index 00000000..ef42870d --- /dev/null +++ b/.github/modelErc @@ -0,0 +1,111 @@ +# This file contains global options for modelE. +# By default it assumes that the directory structure for modelE runs +# is set under /home/joe/data/giss-gc . + +## Directory structure ## + +# DECKS_REPOSITORY - a directory for permanenet storage of run info. +# All rundecks that you create will be copied to this directory. +DECKS_REPOSITORY=/__w/GISS-GC/GISS-GC/run/prod_decks + +# CMRUNDIR - directory to which all run directories will be linked. +# This directory will be searched by most scripts for locations of +# specific runs. +CMRUNDIR=/__w/GISS-GC/GISS-GC/run/prod_runs + +# GCMSEARCHPATH - directory to search for gcm input files. +# All necessary input files should be copied or linked to this directory. +GCMSEARCHPATH=/__w/GISS-GC/GISS-GC/run/prod_input_files + +# EXECDIR - path to directory with modelE scripts and with some +# executables. This directory should contain the scripts from modelE/exec. +EXECDIR=/__w/GISS-GC/GISS-GC/run/exec + +# SAVEDISK - a directory where all run directories (which will contain +# all output files such as rsf, acc etc.) will be created. This should +# be big enough to accomodate all model output. +SAVEDISK=/__w/GISS-GC/GISS-GC/run/huge_space + +## External libraries ## + +# Some of these options can be provided by environment modules (if you +# use them). Specify here only what is necessary. Options specified +# here will overwrite options proviided by environment modules. + +# NETCDFHOME - path to location of netcdf installation directory. +NETCDFHOME=${NETCDF_F_HOME} + +# MPI - set to YES if you want to compile the model for parallel +# execution on multiple CPU cores. Keep in mind, that functional +# MPI library should be installed on your computer and its type +# and location should be specified below. +# This option can be overwritten from the compile line. +MPI=YES + +# MPIDISTR - the MPI distribution you are using. Currently supported +# distributions are: 'intel, 'openmpi', 'mpich2', 'mvapich2', 'SCALI', +# 'mpt' +MPIDISTR=openmpi + +# MPIDIR - path to the MPI installation directory. (Needs to be set +# only if compiler can't find correct MPI library and include files by +# default) +# MPIDIR=/opt/openmpi +MPIDIR=${MPI_ROOT} + +# MPILIBDIR - path to the location of MPI library. Set it only if +# it is different from the default $MPIDIR/lib +# MPILIBDIR=/opt/openmpi/lib + +# MPIINCLUDEDIR - path to location of MPI include files. Set it only +# if it is different from the default $MPIDIR/include +# MPIINCLUDEDIR=/opt/openmpi/include + +# ESMF5_DIR - path to the installation directory of ESMF (version 5) +# library. (Required only for Cubed Sphere simulations) +# ESMF5_DIR= + +# ESMF_BOPT - optimization level of ESMF library. (Should only be used +# togeteher with ESMF5_DIR) +# ESMF_BOPT=O +ESMF=NO + +## Architecture and compiler + +# ABI - Application Binary Interfaces. This variable specifies the +# architecture you are using. The valid values are '64' and '32'. +# On most modern systems you should use '64'. Use '32' if your +# hardware or compiler support only 32-bit binaries. +ABI=64 + +# COMPILER - specifies the Fortran compiler you are using. Currently +# only 'intel' and 'gfortran' are supported. ('nag' has partial +# support on development branch.) If you are using Modules for +# Environment Management, then this variable may already be set in the +# environment. In this case you don't need to set it here. +COMPILER=gfortran + +## General User Preferences ## + +# MAILTO - email address of the user. When the program ends/crashes +# all notifications will be sent to this address. Leave empty +# or unset if you don't want to receive these emails +MAILTO= + +# UMASK - the value of 'umask' you want to use for model runs. The files +# inside the run directory will have permissions set according to this +# mask. +UMASK=002 + +# OVERWRITE - can "gmake rundeck" overwrite files already in repository? +# (i.e. in the directory DECKS_REPOSITORY) +OVERWRITE=NO + +# OUTPUT_TO_FILES - if set to YES all errors and warnings will be sent +# to files with the names .ERR +OUTPUT_TO_FILES=NO + +# VERBOSE_OUTPUT - if set to YES gmake will show compilation commands +# and some other information. Otherwise most of the output will be +# suppressed +VERBOSE_OUTPUT=YES diff --git a/.github/rundecks/GISS_GC_14.R b/.github/rundecks/GISS_GC_14.R new file mode 100644 index 00000000..38f319b3 --- /dev/null +++ b/.github/rundecks/GISS_GC_14.R @@ -0,0 +1,265 @@ +GISS_GC_14.R GISS ModelE Lat-Lon Atmosphere Model, 1850 atm./ocean + +! GISS_GC_14 is based on E6F40 with updated aerosol/ozone input files for CMIP6 +! simulations +! +! It uses GEOS-Chem at version 14.3.1 +! +! Lat-lon: 2x2.5 degree horizontal resolution +! F40: 40 vertical layers with standard hybrid coordinate, top at .1 mb +! Atmospheric composition for year 1850 +! Ocean climatology prescribed from years 1876-1885, CMIP6 +! Uses turbulence scheme (no dry conv), grav.wave drag +! timesteps: dynamics 3.75 min leap frog; physics 30 min.; radiation 2.5 hrs +! Filters: U,V in E-W and N-S direction (after every physics timestep) +! U,V in E-W direction near poles (after every dynamics timestep) +! sea level pressure (after every physics timestep) + +Preprocessor Options +#define STDHYB ! standard hybrid vertical coordinate +#define ATM_LAYERING L40 ! 40 layers, top at .1 mb +#define NEW_IO ! new I/O (netcdf) on +#define IRRIGATION_ON +#define MODIS_LAI +#define NEW_BCdalbsn +#define NEW_IO_SUBDD +#define CACHED_SUBDD +#define CALC_MERRA2_LIKE_DIAGS +#define CALCULATE_LIGHTNING +#define TRACERS_GC ! tracers using GISS-GC coupling +#define MERRA_NUDGING +#define NUDGE_ON +End Preprocessor Options + +Object modules: + +! resolution-specific source codes +Atm144x90 ! horizontal resolution 144x90 -> 2x2.5deg +AtmLayering ! vertical resolution +DIAG_RES_F ! diagnostics +FFT144 ! Fast Fourier Transform + +IO_DRV ! new i/o + +! GISS dynamics with gravity wave drag +ATMDYN MOMEN2ND ! atmospheric dynamics +QUS_DRV QUS3D ! advection of Q/tracers +STRATDYN STRAT_DIAG ! stratospheric dynamics (incl. gw drag) +NUDGE + +! latitude-longitude grid specific source codes +AtmRes +GEOM_B ! model geometry +DIAG_ZONAL GCDIAGb ! grid-dependent code for lat-circle diags +DIAG_PRT POUT ! diagn/post-processing output +MODEL_COM ! calendar, timing variables +MODELE_DRV ! ModelE cap +MODELE ! initialization and main loop +ATM_COM ! main atmospheric variables +ATM_DRV ! driver for atmosphere-grid components +ATMDYN_COM ! atmospheric dynamics +ATM_UTILS ! utilities for some atmospheric quantities +CHEM_DRV CHEM_COM ! GEOS-Chem +QUS_COM QUSDEF ! T/Q moments, 1D QUS +CLOUDS2 CLOUDS2_DRV CLOUDS_COM ! clouds modules +SURFACE SURFACE_LANDICE FLUXES ! surface calculation and fluxes +GHY_COM GHY_DRV ! land surface and soils + snow model +VEG_DRV ! vegetation +ENT_DRV ENT_COM ! new vegetation +PBL_COM PBL_DRV PBL ! atmospheric pbl +IRRIGMOD ! irrigation module +ATURB ! turbulence in whole atmosphere +LAKES_COM LAKES ! lake modules +SEAICE SEAICE_DRV ! seaice modules +LANDICE LANDICE_COM LANDICE_DRV ! land ice modules +ICEDYN_DRV ICEDYN ! ice dynamics modules +RAD_COM RAD_DRV RADIATION ! radiation modules +RAD_UTILS ALBEDO READ_AERO ocalbedo ! radiation and albedo +DIAG_COM DIAG DEFACC ! diagnostics +OCN_DRV ! driver for ocean-grid components +OCEAN OCNML ! ocean modules + +lightning +SUBDD + +Components: +shared MPI_Support solvers giss_LSM +dd2d +Ent + +Component Options: +OPTS_Ent = ONLINE=YES PS_MODEL=FBB PFT_MODEL=ENT + +Data input files: +! Atmospheric initial conditions for automatic relayering to model vertical grid +AIC=NCARIC.144x90.D7712010_ext.nc +! Ground initial condition +GIC=GIC.144X90.DEC01.1.ext_1.nc + +OSST=OST_144x90.1876-1885avg.CMIP6.nc ! climatological ocean temperature +SICE=SICE_144x90.1876-1885avg.CMIP6.nc ! climatological sea ice cover +ZSIFAC=ZSIfac_144x90.1876-1885avg.CMIP6.nc ! climatological sea ice thickness +TOPO=Z2HX2fromZ1QX1N.BS1.nc ! ocean frac. and surface topography +RVR=RD_Fd.nc ! river direction file +NAMERVR=RD_Fd.names.txt ! named river outlets + +CDN=CD144X90.ext.nc +VEG=V144x90_EntMM16_lc_max_trimmed_scaled_nocrops.ext.nc +LAIMAX=V144x90_EntMM16_lai_max_trimmed_scaled_ext.nc +HITEent=V144x90_EntMM16_height_trimmed_scaled_ext.nc +LAI=V144x90_EntMM16_lai_trimmed_scaled_ext.nc +CROPS=CROPS_and_pastures_Pongratz_to_Hurtt_144X90N_nocasp.nc +IRRIG=Irrig144x90_1848to2100_FixedFuture_v3.nc +SOIL=S144X900098M.ext.nc +TOP_INDEX=top_index_144x90_a.ij.ext.nc +ZVAR=ZVAR2X25A.nc ! topographic variation for gravity wave drag + +! probably need these (should convert to 144x90) +soil_textures=soil_textures_top30cm_2x2.5 +SOILCARB_global=soilcarb_top30cm_2x2.5.nc +GLMELT=GLMELT_144X90_gas.OCN.nc +RADN1=sgpgxg.table8 ! rad.tables and history files +RADN2=LWTables33k_lowH2O_CO2_O3_planck_1-800 ! rad.tables and history files +RADN4=LWCorrTables33k ! rad.tables and history files +RADN5=H2Ocont_MT_CKD ! Mlawer/Tobin_Clough/Kneizys/Davies H2O continuum table +RADN3=miescatpar.abcdv2 + +RH_QG_Mie=oct2003.relhum.nr.Q633G633.table +RADN7=STRATAER.VOL.1850-2014_CMIP6_hdr ! needs MADVOL=2 +RADN8=cloud.epsilon4.72x46 +RADN9=solar.CMIP6official.ann1850-2299_with_E3_fastJ.nc ! needs KSOLAR=2 +RADNE=topcld.trscat8 + +ISCCP=ISCCP.tautables +GHG=GHG.CMIP6.1-2014.txt ! GreenHouse Gases for CMIP6 runs up to 2014 +CO2profile=CO2profile.Jul16-2017.txt ! scaling of CO2 in stratosphere +dH2O=dH2O_by_CH4_monthly + +! NINT E2.1 input files +BCdalbsn=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCdalbsn +DUSTaer=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/DUST +TAero_SUL=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SUL +TAero_SSA=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SSA +TAero_NIT=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/NIT +TAero_OCA=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/OCA +TAero_BCA=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCA +TAero_BCB=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCB +u2014.nc=nudging/merra2/uwnd.2014.MERRA2onGISSE2.nc4 +v2014.nc=nudging/merra2/vwnd.2014.MERRA2onGISSE2.nc4 +u2015.nc=nudging/merra2/uwnd.2015.MERRA2onGISSE2.nc4 +v2015.nc=nudging/merra2/vwnd.2015.MERRA2onGISSE2.nc4 +u2016.nc=nudging/merra2/uwnd.2016.MERRA2onGISSE2.nc4 +v2016.nc=nudging/merra2/vwnd.2016.MERRA2onGISSE2.nc4 +O3file=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/O3 +Ox_ref=o3_2010_shindell_144x90x49_April1850.nc + +MSU_wts=MSU_SSU_RSS_weights.txt ! MSU-diag +REG=REG2X2.5 ! special regions-diag + +Label and Namelist: (next 2 lines) +GISS_GC_14 (LLF40 + updated aerosol/ozone input files for CMIP6 simulations, 1850 atm/ocean) + +&&PARAMETERS +! parameters set for choice of ocean model: +KOCEAN=0 ! ocean is prescribed +Kvflxo=0 ! usually set to 1 only during a prescr.ocn run by editing "I" +variable_lk=1 ! variable lakes + +! drag params if gravity wave drag is not used and top is at .01mb +X_SDRAG=.002,.0002 ! used above P(P)_sdrag mb (and in top layer) +C_SDRAG=.0002 ! constant SDRAG above PTOP=150mb +P_sdrag=1. ! linear SDRAG only above 1mb (except near poles) +PP_sdrag=1. ! linear SDRAG above PP_sdrag mb near poles +P_CSDRAG=1. ! increase CSDRAG above P_CSDRAG to approach lin. drag +Wc_JDRAG=30. ! crit.wind speed for J-drag (Judith/Jim) +ANG_sdrag=1 ! if 1: SDRAG conserves ang.momentum by adding loss below PTOP +! vsdragl is a tuning coefficient for SDRAG starting at LS1 +! layer: 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 +vsdragl=0.000,0.000,0.000,0.000,0.00,0.000,0.000,0.000,0.00,0.00,0.00,0.00,0.00,0.3,0.6,0.83,1. + +! Gravity wave parameters +PBREAK = 200. ! the level for GW breaking above. +DEFTHRESH=0.000055 ! threshold (1/s) for triggering deformation waves +PCONPEN=400. ! penetrating convection defn for GWDRAG +CMC = 0.0000002 ! parameter for GW Moist Convective drag +CSHEAR=10. ! shear drag coefficient +CMTN=0.1 ! default is 0.5 +CDEF=1.6 ! tuning factor for deformation -> momentum flux +XCDNST=400.,10000. ! strat. gw drag parameters +QGWMTN=1 ! mountain waves ON +QGWDEF=1 ! deformation waves ON +QGWSHR=0 ! shear drag OFF +QGWCNV=0 ! convective drag OFF + +! following two lines are only used when aerosol/radiation interactions are off +FS8OPX=1.,1.,1.,1.,1.5,1.5,1.,1. +FT8OPX=1.,1.,1.,1.,1.,1.,1.3,1. + +! increasing U00a decreases the high cloud cover (tune first) +U00a=0.655 ! above 850mb w/o MC region; tune to get 30-35% high clouds +! increasing U00b decreases net rad at TOA (tune last) +U00b=1.00 ! below 850mb and MC regions; tune this to get radiative balance +WMUI_multiplier=2. +use_vmp=1 +radius_multiplier=1.1 + +PTLISO=0. ! pressure(mb) above which radiation assumes isothermal layers +H2ObyCH4=1. ! activates stratospheric H2O generated by CH4 without interactive chemistry +KSOLAR=2 ! use long annual mean file + +! parameters that control the atmospheric/boundary conditions +! if set to 0, the current (day/) year is used: transient run +master_yr=0 ! transient run +volc_yr=-1 +od_cdncx=0. ! do not include 1st indirect effect +cc_cdncx=0. ! do not include 2nd indirect effect (used 0.0036) +dalbsnX=1. + +MADVOL=2 + +! GEOS-Chem Operators (1=true, 0=false) ! TODO: Turn these on +! DoGCConv=1 +! DoGCEmis=1 +! DoGCTend=0 +! DoGCTurb=1 +! DoGCChem=1 +! DoGCDryDep=1 +! DoGCWetDep=1 + +DTsrc=1800. ! physics timestep (cannot be changed after a run starts) +DT=225. ! advection timestep + +! parameters that control the Shapiro filter +DT_XUfilter=225. ! Shapiro filter on U in E-W direction; usually same as DT +DT_XVfilter=225. ! Shapiro filter on V in E-W direction; usually same as DT +DT_YVfilter=0. ! Shapiro filter on V in N-S direction +DT_YUfilter=0. ! Shapiro filter on U in N-S direction + +NIsurf=2 ! surface interaction computed NIsurf times per source timestep +NRAD=1 ! radiation computed NRAD times per source timestep +! parameters that affect at most diagn. output: standard if DTsrc=1800. (sec) +TAero_aod_diag=2 ! save band6 only +aer_rad_forc=0 ! turn off aerosol radiative forcing diagnostics +cloud_rad_forc=1 ! turn on cloud radiative forcing diagnostics + +! diagnostics +SUBDD='OH:4 NO:4 O3:4 NO2:4 CO:4 CH4:4 PS:4' +NSUBDD=1 ! saving sub-daily diags every NSUBDD-th physics timestep +DAYS_PER_FILE=1 +KCOPY=1 ! save accumulated diagnostics files +KRSF=12 ! save restart file at the beginning of every 12 months +isccp_diags=1 ! include all key diagnostics +nda5d=13 +nda5s=13 +ndaa=13 +nda5k=13 +nda4=48 +Nssw=2 +Ndisk=960 ! write fort.1.nc or fort.2.nc every NDISK source timestep +&&END_PARAMETERS + +&INPUTZ + YEARI=2016,MONTHI=7,DATEI=1,HOURI=0, + YEARE=2016,MONTHE=7,DATEE=1,HOURE=2, KDIAG=13*0, + ISTART=2,IRANDI=0, YEARE=2016,MONTHE=7,DATEE=1,HOURE=1, +/ diff --git a/.github/rundecks/GISS_ONLY.R b/.github/rundecks/GISS_ONLY.R new file mode 100644 index 00000000..d4b8e2b0 --- /dev/null +++ b/.github/rundecks/GISS_ONLY.R @@ -0,0 +1,255 @@ +GISS_ONLY.R GISS ModelE Lat-Lon Atmosphere Model, 1850 atm./ocean + +! GISS_ONLY is based on E6F40 with updated aerosol/ozone input files for CMIP6 +! simulations +! +! It uses GEOS-Chem at version 14.3.1 +! +! Lat-lon: 2x2.5 degree horizontal resolution +! F40: 40 vertical layers with standard hybrid coordinate, top at .1 mb +! Atmospheric composition for year 1850 +! Ocean climatology prescribed from years 1876-1885, CMIP6 +! Uses turbulence scheme (no dry conv), grav.wave drag +! timesteps: dynamics 3.75 min leap frog; physics 30 min.; radiation 2.5 hrs +! Filters: U,V in E-W and N-S direction (after every physics timestep) +! U,V in E-W direction near poles (after every dynamics timestep) +! sea level pressure (after every physics timestep) + +Preprocessor Options +#define STDHYB ! standard hybrid vertical coordinate +#define ATM_LAYERING L40 ! 40 layers, top at .1 mb +#define NEW_IO ! new I/O (netcdf) on +#define IRRIGATION_ON +#define MODIS_LAI +#define NEW_BCdalbsn +#define NEW_IO_SUBDD +#define CACHED_SUBDD +#define CALC_MERRA2_LIKE_DIAGS +#define CALCULATE_LIGHTNING +#define MERRA_NUDGING +#define NUDGE_ON +End Preprocessor Options + +Object modules: + +! resolution-specific source codes +Atm144x90 ! horizontal resolution 144x90 -> 2x2.5deg +AtmLayering ! vertical resolution +DIAG_RES_F ! diagnostics +FFT144 ! Fast Fourier Transform + +IO_DRV ! new i/o + +! GISS dynamics with gravity wave drag +ATMDYN MOMEN2ND ! atmospheric dynamics +QUS_DRV QUS3D ! advection of Q/tracers +STRATDYN STRAT_DIAG ! stratospheric dynamics (incl. gw drag) +NUDGE + +! latitude-longitude grid specific source codes +AtmRes +GEOM_B ! model geometry +DIAG_ZONAL GCDIAGb ! grid-dependent code for lat-circle diags +DIAG_PRT POUT ! diagn/post-processing output +MODEL_COM ! calendar, timing variables +MODELE_DRV ! ModelE cap +MODELE ! initialization and main loop +ATM_COM ! main atmospheric variables +ATM_DRV ! driver for atmosphere-grid components +ATMDYN_COM ! atmospheric dynamics +ATM_UTILS ! utilities for some atmospheric quantities +QUS_COM QUSDEF ! T/Q moments, 1D QUS +CLOUDS2 CLOUDS2_DRV CLOUDS_COM ! clouds modules +SURFACE SURFACE_LANDICE FLUXES ! surface calculation and fluxes +GHY_COM GHY_DRV ! land surface and soils + snow model +VEG_DRV ! vegetation +ENT_DRV ENT_COM ! new vegetation +PBL_COM PBL_DRV PBL ! atmospheric pbl +IRRIGMOD ! irrigation module +ATURB ! turbulence in whole atmosphere +LAKES_COM LAKES ! lake modules +SEAICE SEAICE_DRV ! seaice modules +LANDICE LANDICE_COM LANDICE_DRV ! land ice modules +ICEDYN_DRV ICEDYN ! ice dynamics modules +RAD_COM RAD_DRV RADIATION ! radiation modules +RAD_UTILS ALBEDO READ_AERO ocalbedo ! radiation and albedo +DIAG_COM DIAG DEFACC ! diagnostics +OCN_DRV ! driver for ocean-grid components +OCEAN OCNML ! ocean modules + +lightning +SUBDD + +Components: +shared MPI_Support solvers giss_LSM +dd2d +Ent + +Component Options: +OPTS_Ent = ONLINE=YES PS_MODEL=FBB PFT_MODEL=ENT + +Data input files: +! Atmospheric initial conditions for automatic relayering to model vertical grid +AIC=NCARIC.144x90.D7712010_ext.nc +! Ground initial condition +GIC=GIC.144X90.DEC01.1.ext_1.nc + +OSST=OST_144x90.1876-1885avg.CMIP6.nc ! climatological ocean temperature +SICE=SICE_144x90.1876-1885avg.CMIP6.nc ! climatological sea ice cover +ZSIFAC=ZSIfac_144x90.1876-1885avg.CMIP6.nc ! climatological sea ice thickness +TOPO=Z2HX2fromZ1QX1N.BS1.nc ! ocean frac. and surface topography +RVR=RD_Fd.nc ! river direction file +NAMERVR=RD_Fd.names.txt ! named river outlets + +CDN=CD144X90.ext.nc +VEG=V144x90_EntMM16_lc_max_trimmed_scaled_nocrops.ext.nc +LAIMAX=V144x90_EntMM16_lai_max_trimmed_scaled_ext.nc +HITEent=V144x90_EntMM16_height_trimmed_scaled_ext.nc +LAI=V144x90_EntMM16_lai_trimmed_scaled_ext.nc +CROPS=CROPS_and_pastures_Pongratz_to_Hurtt_144X90N_nocasp.nc +IRRIG=Irrig144x90_1848to2100_FixedFuture_v3.nc +SOIL=S144X900098M.ext.nc +TOP_INDEX=top_index_144x90_a.ij.ext.nc +ZVAR=ZVAR2X25A.nc ! topographic variation for gravity wave drag + +! probably need these (should convert to 144x90) +soil_textures=soil_textures_top30cm_2x2.5 +SOILCARB_global=soilcarb_top30cm_2x2.5.nc +GLMELT=GLMELT_144X90_gas.OCN.nc +RADN1=sgpgxg.table8 ! rad.tables and history files +RADN2=LWTables33k_lowH2O_CO2_O3_planck_1-800 ! rad.tables and history files +RADN4=LWCorrTables33k ! rad.tables and history files +RADN5=H2Ocont_MT_CKD ! Mlawer/Tobin_Clough/Kneizys/Davies H2O continuum table +RADN3=miescatpar.abcdv2 + +RH_QG_Mie=oct2003.relhum.nr.Q633G633.table +RADN7=STRATAER.VOL.1850-2014_CMIP6_hdr ! needs MADVOL=2 +RADN8=cloud.epsilon4.72x46 +RADN9=solar.CMIP6official.ann1850-2299_with_E3_fastJ.nc ! needs KSOLAR=2 +RADNE=topcld.trscat8 + +ISCCP=ISCCP.tautables +GHG=GHG.CMIP6.1-2014.txt ! GreenHouse Gases for CMIP6 runs up to 2014 +CO2profile=CO2profile.Jul16-2017.txt ! scaling of CO2 in stratosphere +dH2O=dH2O_by_CH4_monthly + +! NINT E2.1 input files +BCdalbsn=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCdalbsn +DUSTaer=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/DUST +TAero_SUL=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SUL +TAero_SSA=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SSA +TAero_NIT=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/NIT +TAero_OCA=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/OCA +TAero_BCA=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCA +TAero_BCB=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCB +u2014.nc=nudging/merra2/uwnd.2014.MERRA2onGISSE2.nc4 +v2014.nc=nudging/merra2/vwnd.2014.MERRA2onGISSE2.nc4 +u2015.nc=nudging/merra2/uwnd.2015.MERRA2onGISSE2.nc4 +v2015.nc=nudging/merra2/vwnd.2015.MERRA2onGISSE2.nc4 +u2016.nc=nudging/merra2/uwnd.2016.MERRA2onGISSE2.nc4 +v2016.nc=nudging/merra2/vwnd.2016.MERRA2onGISSE2.nc4 +O3file=cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/O3 +Ox_ref=o3_2010_shindell_144x90x49_April1850.nc + +MSU_wts=MSU_SSU_RSS_weights.txt ! MSU-diag +REG=REG2X2.5 ! special regions-diag + +Label and Namelist: (next 2 lines) +GISS_ONLY (LLF40 + updated aerosol/ozone input files for CMIP6 simulations, 1850 atm/ocean) + +&&PARAMETERS +! parameters set for choice of ocean model: +KOCEAN=0 ! ocean is prescribed +Kvflxo=0 ! usually set to 1 only during a prescr.ocn run by editing "I" +variable_lk=1 ! variable lakes + +! drag params if gravity wave drag is not used and top is at .01mb +X_SDRAG=.002,.0002 ! used above P(P)_sdrag mb (and in top layer) +C_SDRAG=.0002 ! constant SDRAG above PTOP=150mb +P_sdrag=1. ! linear SDRAG only above 1mb (except near poles) +PP_sdrag=1. ! linear SDRAG above PP_sdrag mb near poles +P_CSDRAG=1. ! increase CSDRAG above P_CSDRAG to approach lin. drag +Wc_JDRAG=30. ! crit.wind speed for J-drag (Judith/Jim) +ANG_sdrag=1 ! if 1: SDRAG conserves ang.momentum by adding loss below PTOP +! vsdragl is a tuning coefficient for SDRAG starting at LS1 +! layer: 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 +vsdragl=0.000,0.000,0.000,0.000,0.00,0.000,0.000,0.000,0.00,0.00,0.00,0.00,0.00,0.3,0.6,0.83,1. + +! Gravity wave parameters +PBREAK = 200. ! the level for GW breaking above. +DEFTHRESH=0.000055 ! threshold (1/s) for triggering deformation waves +PCONPEN=400. ! penetrating convection defn for GWDRAG +CMC = 0.0000002 ! parameter for GW Moist Convective drag +CSHEAR=10. ! shear drag coefficient +CMTN=0.1 ! default is 0.5 +CDEF=1.6 ! tuning factor for deformation -> momentum flux +XCDNST=400.,10000. ! strat. gw drag parameters +QGWMTN=1 ! mountain waves ON +QGWDEF=1 ! deformation waves ON +QGWSHR=0 ! shear drag OFF +QGWCNV=0 ! convective drag OFF + +! following two lines are only used when aerosol/radiation interactions are off +FS8OPX=1.,1.,1.,1.,1.5,1.5,1.,1. +FT8OPX=1.,1.,1.,1.,1.,1.,1.3,1. + +! increasing U00a decreases the high cloud cover (tune first) +U00a=0.655 ! above 850mb w/o MC region; tune to get 30-35% high clouds +! increasing U00b decreases net rad at TOA (tune last) +U00b=1.00 ! below 850mb and MC regions; tune this to get radiative balance +WMUI_multiplier=2. +use_vmp=1 +radius_multiplier=1.1 + +PTLISO=0. ! pressure(mb) above which radiation assumes isothermal layers +H2ObyCH4=1. ! activates stratospheric H2O generated by CH4 without interactive chemistry +KSOLAR=2 ! use long annual mean file + +! parameters that control the atmospheric/boundary conditions +! if set to 0, the current (day/) year is used: transient run +master_yr=0 ! transient run +volc_yr=-1 +od_cdncx=0. ! do not include 1st indirect effect +cc_cdncx=0. ! do not include 2nd indirect effect (used 0.0036) +dalbsnX=1. + +MADVOL=2 + +DTsrc=1800. ! physics timestep (cannot be changed after a run starts) +DT=225. ! advection timestep + +! parameters that control the Shapiro filter +DT_XUfilter=225. ! Shapiro filter on U in E-W direction; usually same as DT +DT_XVfilter=225. ! Shapiro filter on V in E-W direction; usually same as DT +DT_YVfilter=0. ! Shapiro filter on V in N-S direction +DT_YUfilter=0. ! Shapiro filter on U in N-S direction + +NIsurf=2 ! surface interaction computed NIsurf times per source timestep +NRAD=1 ! radiation computed NRAD times per source timestep +! parameters that affect at most diagn. output: standard if DTsrc=1800. (sec) +TAero_aod_diag=2 ! save band6 only +aer_rad_forc=0 ! turn off aerosol radiative forcing diagnostics +cloud_rad_forc=1 ! turn on cloud radiative forcing diagnostics + +! diagnostics +! SUBDD='OH:4 NO:4 O3:4 NO2:4 CO:4 CH4:4 PS:4' ! TODO: Turn these on +SUBDD='' +NSUBDD=1 ! saving sub-daily diags every NSUBDD-th physics timestep +DAYS_PER_FILE=1 +KCOPY=1 ! save accumulated diagnostics files +KRSF=12 ! save restart file at the beginning of every 12 months +isccp_diags=1 ! include all key diagnostics +nda5d=13 +nda5s=13 +ndaa=13 +nda5k=13 +nda4=48 +Nssw=2 +Ndisk=960 ! write fort.1.nc or fort.2.nc every NDISK source timestep +&&END_PARAMETERS + +&INPUTZ + YEARI=2016,MONTHI=7,DATEI=1,HOURI=0, + YEARE=2016,MONTHE=7,DATEE=1,HOURE=2, KDIAG=13*0, + ISTART=2,IRANDI=0, YEARE=2016,MONTHE=7,DATEE=1,HOURE=1, +/ diff --git a/.github/set_gcclassic_rundir.sh b/.github/set_gcclassic_rundir.sh new file mode 100755 index 00000000..6afdc2ee --- /dev/null +++ b/.github/set_gcclassic_rundir.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# ============================================================================ # +# Script for setting the GCClassic rundir in the CI # +# ============================================================================ # + +set -eu + +mkdir -p "${GCCLASSIC_RUNDIR}" +cd "${GISS_HOME}/model/geos-chem/src/GEOS-Chem/run/GCClassic" +./createRunDir.sh <<<"1 +1 +1 +2 +2 +${GCCLASSIC_RUNDIR} + +n" diff --git a/.github/workflows/compile_gcclassic.yml b/.github/workflows/compile_gcclassic.yml new file mode 100644 index 00000000..61a7bdc0 --- /dev/null +++ b/.github/workflows/compile_gcclassic.yml @@ -0,0 +1,99 @@ +# Workflow to test compilation of GCClassic +name: Compile GCClassic + +# Controls when the workflow will run +on: + # Trigger the CI whenever a commit is pushed to main or develop, i.e., a PR is merged + push: + branches: [main, develop] + + # Trigger the CI whenever a commit is pushed to an open PR that changes files matching one or more + # paths listed + pull_request: + paths: + - '.github/workflows/compile_gcclassic.yml' + - '.gitmodules' + - '.dev/utils/*.sh' + +# Cancel jobs running if new commits are pushed +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + # Environment variables for GCClassic + GISS_HOME: /__w/GISS-GC/GISS-GC + DATA: /__w/GISS-GC/GISS-GC/data/ExtData + GCCLASSIC_RUNDIR: /__w/GISS-GC/GISS-GC/run/gcclassic + # Environment variables for compiler + CC: gcc + CXX: g++ + FC: gfortran + F90: gfortran + F77: gfortran + F90FLAGS: -nostartfiles + # Misc. environment variables + F_UFMTENDIAN: big + KMP_STACKSIZE: 100000000 + OMP_NUM_THREADS: 1 + +jobs: + # Test that GCClassic can be compiled without error + compile: + strategy: + matrix: + mode: ["debug", "release"] + + runs-on: ubuntu-22.04 + container: + image: ghcr.io/fetch4/giss-gc-dev-env:latest + credentials: + username: ${{ github.actor }} + password: ${{ secrets.github_token }} + + steps: + - name: Checkout code + with: + persist-credentials: false + uses: actions/checkout@v2 + + - name: Setup submodules + run: | + git config --global --add safe.directory ${GISS_HOME} + git submodule init + git submodule update + + - name: Create fake inputs + run: | + mkdir -p ${DATA}/GEOSCHEM_RESTARTS/GC_14.3.0 + touch ${DATA}/GEOSCHEM_RESTARTS/GC_14.3.0/GEOSChem.Restart.fullchem.20190701_0000z.nc4 + + - name: Setup GCClassic environment + run: | + mkdir -p ~/.geoschem + { + echo "export GC_DATA_ROOT=${DATA}" + echo "export GC_USER_REGISTERED=true" + } > ~/.geoschem/config + + - name: Setup GCClassic run directory + run: | + set -eu + cp .dev/config/HISTORY.rc .github/ + cd .github + ./set_gcclassic_rundir.sh + + - name: Build GCClassic + run: | + . /opt/spack-environment/activate.sh + set -eu + # Environment variables for passing NetCDF-C and NetCDF-Fortran + export NETCDF_HOME=$(nc-config --prefix) + export NETCDF_F_HOME=$(nf-config --prefix) + # Build the model without GEOS-Chem support + cp .dev/utils/build.sh . + OPTS="--classic" + if [ "${{ matrix.mode }}" = "debug" ]; then + OPTS="${OPTS} --debug" + fi + ./build.sh ${OPTS} diff --git a/.github/workflows/compile_giss.yml b/.github/workflows/compile_giss.yml new file mode 100644 index 00000000..b3643c04 --- /dev/null +++ b/.github/workflows/compile_giss.yml @@ -0,0 +1,162 @@ +# Workflow to test compilation of GISS Model E +name: Compile Model E + +# Controls when the workflow will run +on: + # Trigger the CI whenever a commit is pushed to main or develop, i.e., a PR is merged + push: + branches: [main, develop] + + # Triggers the workflow on pushes to open pull requests with code changes + pull_request: + paths: + - '.dev/config/*.rc' + - '.dev/config/*.yml' + - '.dev/utils/*.sh' + - '.github/rundecks/*.R' + - '.github/workflows/compile_giss.yml' + - '.gitmodules' + - 'model/**' + +# Cancel jobs running if new commits are pushed +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + # Environment variables for GISS Model E + GISS_HOME: /__w/GISS-GC/GISS-GC + ModelE_Support: /__w/GISS-GC/GISS-GC/run + DATA: /__w/GISS-GC/GISS-GC/run/prod_input_files + # Environment variables for compiler + CC: gcc + CXX: g++ + FC: gfortran + F90: gfortran + F77: gfortran + # Misc. environment variables + F_UFMTENDIAN: big + KMP_STACKSIZE: 100000000 + OMP_NUM_THREADS: 1 + +jobs: + # Test that GISS Model E can be compiled without error + compile: + strategy: + matrix: + mode: ["debug", "release"] + model: ["giss-only", "giss-gc"] + + runs-on: ubuntu-22.04 + container: + image: ghcr.io/fetch4/giss-gc-dev-env:latest + credentials: + username: ${{ github.actor }} + password: ${{ secrets.github_token }} + + steps: + - name: Checkout code + with: + persist-credentials: false + uses: actions/checkout@v2 + + - name: Setup submodules + run: | + git config --global --add safe.directory ${GISS_HOME} + git submodule init + git submodule update + + - name: Build tools + run: | + . /opt/spack-environment/activate.sh + cd ${GISS_HOME}/model/mk_diags + /bin/bash compscr + + - name: Create fake inputs + run: | + # Make run directories + mkdir -p ${DATA} + mkdir -p ${ModelE_Support}/exec + mkdir -p ${ModelE_Support}/huge_space + mkdir -p ${ModelE_Support}/prod_decks + mkdir -p ${ModelE_Support}/prod_runs + # Fake input files + touch ${DATA}/CD144X90.ext.nc + touch ${DATA}/cloud.epsilon4.72x46 + touch ${DATA}/CO2profile.Jul16-2017.txt + touch ${DATA}/CROPS_and_pastures_Pongratz_to_Hurtt_144X90N_nocasp.nc + touch ${DATA}/dH2O_by_CH4_monthly + touch ${DATA}/GHG.CMIP6.1-2014.txt + touch ${DATA}/GIC.144X90.DEC01.1.ext_1.nc + touch ${DATA}/GLMELT_144X90_gas.OCN.nc + touch ${DATA}/H2Ocont_MT_CKD + touch ${DATA}/Irrig144x90_1848to2100_FixedFuture_v3.nc + touch ${DATA}/ISCCP.tautables + touch ${DATA}/LWCorrTables33k + touch ${DATA}/LWTables33k_lowH2O_CO2_O3_planck_1-800 + touch ${DATA}/miescatpar.abcdv2 + touch ${DATA}/MSU_SSU_RSS_weights.txt + touch ${DATA}/NCARIC.144x90.D7712010_ext.nc + touch ${DATA}/o3_2010_shindell_144x90x49_April1850.nc + touch ${DATA}/oct2003.relhum.nr.Q633G633.table + touch ${DATA}/OST_144x90.1876-1885avg.CMIP6.nc + touch ${DATA}/RD_Fd.nc + touch ${DATA}/RD_Fd.names.txt + touch ${DATA}/REG2X2.5 + touch ${DATA}/S144X900098M.ext.nc + touch ${DATA}/sgpgxg.table8 + touch ${DATA}/SICE_144x90.1876-1885avg.CMIP6.nc + touch ${DATA}/soil_textures_top30cm_2x2.5 + touch ${DATA}/soilcarb_top30cm_2x2.5.nc + touch ${DATA}/solar.CMIP6official.ann1850-2299_with_E3_fastJ.nc + touch ${DATA}/STRATAER.VOL.1850-2014_CMIP6_hdr + touch ${DATA}/top_index_144x90_a.ij.ext.nc + touch ${DATA}/topcld.trscat8 + touch ${DATA}/V144x90_EntMM16_height_trimmed_scaled_ext.nc + touch ${DATA}/V144x90_EntMM16_lai_max_trimmed_scaled_ext.nc + touch ${DATA}/V144x90_EntMM16_lai_trimmed_scaled_ext.nc + touch ${DATA}/V144x90_EntMM16_lc_max_trimmed_scaled_nocrops.ext.nc + touch ${DATA}/Z2HX2fromZ1QX1N.BS1.nc + touch ${DATA}/ZSIfac_144x90.1876-1885avg.CMIP6.nc + touch ${DATA}/ZVAR2X25A.nc + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCA + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCB + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCdalbsn + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/DUST + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/NIT + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/O3 + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/OCA + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SSA + mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SUL + mkdir -p ${DATA}/nudging/merra2 + touch ${DATA}/nudging/merra2/uwnd.2014.MERRA2onGISSE2.nc4 + touch ${DATA}/nudging/merra2/vwnd.2014.MERRA2onGISSE2.nc4 + touch ${DATA}/nudging/merra2/uwnd.2015.MERRA2onGISSE2.nc4 + touch ${DATA}/nudging/merra2/vwnd.2015.MERRA2onGISSE2.nc4 + touch ${DATA}/nudging/merra2/uwnd.2016.MERRA2onGISSE2.nc4 + touch ${DATA}/nudging/merra2/vwnd.2016.MERRA2onGISSE2.nc4 + mkdir -p ${DATA}/gcclassic/ExtData/GEOSCHEM_RESTARTS/GC_14.3.0 + touch ${DATA}/gcclassic/ExtData/GEOSCHEM_RESTARTS/GC_14.3.0/GEOSChem.Restart.fullchem.20190701_0000z.nc4 + + - name: Build GISS-GC + run: | + . /opt/spack-environment/activate.sh + set -eu + # Environment variables for passing NetCDF-C and NetCDF-Fortran + export NETCDF_HOME=$(nc-config --prefix) + export NETCDF_F_HOME=$(nf-config --prefix) + # Environment variable for OpenMPI build + MPIF90=$(find /opt/software -name mpif90 | head -n 1) + export MPI_ROOT=${MPIF90%/bin/mpif90} + # Copy over modelErc + cp .github/modelErc ~/.modelErc + # Build the model with the provided configuration + cp .dev/utils/build.sh . + OPTS="" + if [ "${{ matrix.mode }}" = "debug" ]; then + OPTS="${OPTS} --debug" + fi + if [ "${{ matrix.model }}" = "giss-only" ]; then + OPTS="${OPTS} --giss-only" + fi + ./build.sh ${OPTS} diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..255317b0 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,49 @@ +name: Periodic Docker build + +on: + # Build the Docker container whenever commits are pushed to an open PR that changes one of the files listed + pull_request: + paths: + - .github/workflows/docker.yml + - docker/Dockerfile.devenv + - docker/spack.yaml + + # Build the Docker container at 00:00 on the first day of every 3 months + schedule: + - cron: '0 0 1 */3 *' + +# Cancel jobs running if new commits are pushed +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + docker: + name: Build Docker container + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout the repo + with: + persist-credentials: false + uses: actions/checkout@v4 + + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v3 + + - name: Log into GitHub Container Repository + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + logout: true + + - name: Build container and push to ghcr + uses: docker/build-push-action@v5 + with: + push: true + file: docker/Dockerfile.devenv + tags: ghcr.io/fetch4/giss-gc-dev-env:latest diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..feaa3101 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,72 @@ +# Workflow to run linting checks on source +name: Lint + +# Controls when the workflow will run +on: + # Triggers the workflow on pushes to the "main" branch, i.e., PR merges + push: + branches: [ "main" ] + + # Triggers the workflow on pushes to open pull requests with code changes + pull_request: + paths: + - '.dev/utils/*.sh' + - '.github/*.sh' + - '.github/workflows/lint.yml' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Cancel jobs running if new commits are pushed +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +# Workflow run - one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "lint" + lint: + # The type of runner that the job will run on + runs-on: ubuntu-latest + strategy: + fail-fast: false + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Checkout code + with: + persist-credentials: false + uses: actions/checkout@v4 + + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m venv ci_venv + . ci_venv/bin/activate + pip install zizmor==0.9.2 + sudo apt install shellcheck + + # Apply Shell linter, shellcheck + - name: shellcheck + if: always() + run: | + cd ${{ github.workspace }} + shellcheck -x .github/set_gcclassic_rundir.sh + cd .dev/utils + for FILE in $(find . -name "*.sh"); do + shellcheck -x ${FILE} + done + + # Apply GitHub Actions linter, zizmor + - name: zizmor + if: always() + run: | + cd ${{ github.workspace }} + . ci_venv/bin/activate + zizmor .github/workflows/*.yml diff --git a/.gitignore b/.gitignore index 4ee34bef..c34c425d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,46 @@ -.DS_Store -.#* -#* -#*# +# Directories +build/ +decks/ + +# Specific files +HEMCO_Config.rc +HEMCO_Diagn.rc +HISTORY.rc a.out -*.o +build.sh +clean.sh +gcclassic +gdb.sh +geoschem_config.yml +run.sh +setup.sh +spconfig.py +species_database.yml + +# File patterns +*__genmod.f90 +load_modules-*.sh +machine.file.* +spack-build.* + +# File extensions +*.DS_Store *.build +*.log *.mod -*.stamp -*.pyc -*~ -build/* -*.png -*.pdf *.nc +*.o +*.out +*.patch +*.pdf *.pik -spack-build.* -spconfig.py +*.png +*.pyc +*.slm +*.stamp +*.swp +*~ +.#* + +# Exceptions +!decks/Makefile diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..a54c1c7a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,16 @@ +[submodule "model/geos-chem/src/GEOS-Chem"] + path = model/geos-chem/src/GEOS-Chem + url = https://github.com/fetch4/geos-chem.git + branch = develop +[submodule "model/geos-chem/src/HEMCO"] + path = model/geos-chem/src/HEMCO + url = https://github.com/fetch4/HEMCO.git + branch = develop +[submodule "model/geos-chem/src/Cloud-J"] + path = model/geos-chem/src/Cloud-J + url = https://github.com/fetch4/Cloud-J.git + branch = develop +[submodule "model/geos-chem/src/HETP"] + path = model/geos-chem/src/HETP + url = https://github.com/fetch4/HETerogeneous-vectorized-or-Parallel.git + branch = geoschem/main diff --git a/README b/README deleted file mode 100644 index 792186b4..00000000 --- a/README +++ /dev/null @@ -1,95 +0,0 @@ -NOTE: The full documentation on how to run the model is in - - doc/UserGuide/index.html - -or you can read it online at - - http://simplex.giss.nasa.gov/gcm/doc/UserGuide/index.html - -This summary is not complete, and not necessarily up-to-date either. - -PLEASE READ THE FULL DOCUMENTATION - IT REALLY WILL MAKE YOUR LIFE EASIER! - -The directory tree of the modelE has the following structure: - - modelE - | - |-/model (the source code for GCM model) - | - |-/aux (auxiliary programs such as pre- and post-processing) - | - |-/exec (various scripts needed to compile and setup the model) - | - |-/doc (directory for documentation) - | - |-/decks (directory for rundecks) - | - |-.R (rundeck for the run ) - | - |-/_bin (directory for binaries for ) - | - |-/ (link to directory where you setup - | and run ) - |-.R - ................ - - Configuring the model on your local system - - Intended working directory is directory modelE/decks. The following -command will configure your system to be used with modelE (assuming -you are going to use "gfortran" fortran compiler): - - make config COMPILER=gfortran ModelE_Support=$HOME/ModelE_Support - -This will create a default ~/.modelErcfile in your home directory. -This should be edited so that run output, rundeck libraries etc. can -be properly directed, and so that the compile options (multiple -processing, compiler name , NetCDF libraries etc.) can be set -appropriately. This command also creates ModelE_Support directory -for modelE support files. - - - Compiling and running the model. - - All rundecks should be created inside this directory and all "make" -commands should be run from there. The following is a typical example -of how to compile and setup a run with the name "my_run": - - cd decks # go to directory decks - gmake rundeck RUN=my_run # create rundeck for "my_run" - -You will need to edit the rundeck in order to choose a configuration -that is appropriate. Once that is done... - - gmake setup RUN=my_run # compile the model and set up - # a run directory for "my_run" - - ../exec/runE my_run -cold-restart # Start model run from the - # initial conditions - - ../exec/runE my_run # Continue model run from - # a saved checkpoint - -Make sure that you create the rundeck with "gmake rundeck ..." before -running any other commands for this run, otherwise the Makefile will -not understand you. All the binaries created by "make" are stored in - /decks/my_run.bin . - -The following is a list of targets currently supported by Makefile: - - config - copy the default .modelErc setup to your home directory. - rundeck - create new rundeck - depend - create dependencies for specified rundeck - gcm - compile object files and build executable for specified rundeck - aux - compile standard auxiliary programs - auxqflux- compile auxiliary programs for computing qflux - auxdeep - compile auxiliary programs for setting deep ocean - setup - compile executable and prepare run directory for specified rundeck - clean - remove object files, .mod files and dependencies - newstart- remove all files in the run directory - exe - compile gcm and put executable into RUN directory - htmldoc - create web-based documentation for this RUN - -If you run "gmake" without arguments it will print a short help. - -############# end of README file ################################ diff --git a/README.md b/README.md new file mode 100644 index 00000000..10695ed5 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# GISS-GC + +## Description +This repository contains code as part of an effort in coupling Goddard Institute for Space Studies' [(GISS) Model E](https://simplex.giss.nasa.gov/gcm/) and [GEOS-Chem](https://geoschem.github.io), i.e., GISS-GC. This work was started by Lee Murray in the [GCAP 2.0 project](https://gmd.copernicus.org/articles/14/5789/2021/). The work is part of the [FETCH4](https://fetch4.github.io) project. + +GISS Model E is a general circulation model (GCM) that can simulate many earth system model configurations, including atmospheric chemistry, aerosols, carbon cycle and other tracers, as well as standard atmosphere, ocean, sea ice and land surface components. + +GEOS-Chem is a global 3D model of atmospheric chemistry traditionally driven by meteorological input from the Goddard Earth Observing System (GEOS) of the NASA Global Modeling and Assimilation Office. + +## Compiling and running the model +GISS-GC can be built and run on a laptop with a Linux operating system using the following [Linux laptop instructions](https://github.com/fetch4/GISS-GC/blob/develop/doc/GISS-GC-DOC/build_on_linux_laptop.md). A useful tutorial about running the GISS Model E GCM to drive the GEOS-Chem Chemical Transport Model (CTM) can be found [here](https://github.com/fetch4/GISS-GC/blob/develop/doc/GISS-GC-DOC/giss-gc_tutorial.md). + +## Contributing +Contributions to the code repository are welcome, particularly from anyone interested in using, or implementing this coupled model. We welcome addition of details to the model including code. + +Open tickets can be viewed under the [Issues](https://github.com/fetch4/GISS-GC/issues) tab. + +To contribute, find a relevant issue or open a new one and assign yourself to work on it. Then create a branch in which to add your contribution and open a pull request. Once ready, assign a reviewer and request a code review. Merging should only be performed once a reviewer has approved the changes. diff --git a/config/compiler.gfortran.mk b/config/compiler.gfortran.mk index d21f4fc7..d4710694 100644 --- a/config/compiler.gfortran.mk +++ b/config/compiler.gfortran.mk @@ -24,9 +24,22 @@ endif FMAKEDEP = $(SCRIPTS_DIR)/sfmakedepend CPPFLAGS += -DCOMPILER_G95 +ifeq ($(TYPE),Debug) +FFLAGS = -g -cpp -fconvert=big-endian -O0 -Wall -fcheck=bounds -fcheck=do -fcheck=mem -fcheck=recursion -fbacktrace -fallow-argument-mismatch +else FFLAGS = -g -cpp -fconvert=big-endian -O2 -fno-range-check -fallow-argument-mismatch -F90FLAGS = -g -cpp -fconvert=big-endian -O2 -fno-range-check -ffree-line-length-none -fallow-argument-mismatch +endif +F90FLAGS = $(FFLAGS) -ffree-line-length-none LFLAGS = +ifeq ($(MP),YES) +FFLAGS += -fopenmp +F90FLAGS += -fopenmp +LFLAGS += -fopenmp +endif +CTM_LFLAGS = $(LFLAGS) +ifeq ($(GC),YES) +CTM_LFLAGS += -nostartfiles +endif F90_VERSION = $(shell $(F90) --version | head -1) diff --git a/config/compiler.intel.mk b/config/compiler.intel.mk index c9b97100..f256003f 100644 --- a/config/compiler.intel.mk +++ b/config/compiler.intel.mk @@ -4,15 +4,24 @@ IFORT_RELEASE := $(shell ifort --version | perl -e \ 'while(<>){ if(/ifort.* (\d+\.\d+)/) { print "$$1"; } }') FMAKEDEP = $(SCRIPTS_DIR)/sfmakedepend CMP_MOD = $(SCRIPTS_DIR)/compare_module_file.pl -compiler INTEL-ifort-9-0-on-LINUX -FFLAGS = -fpp -O2 -ftz -convert big_endian -F90FLAGS = -fpp -O2 -ftz -convert big_endian -free +ifeq ($(TYPE),Debug) +FFLAGS = -g -fpp -O0 -warn all -check bounds -check uninit -check pointers -traceback -assume byterecl -ftz -convert big_endian +LFLAGS = -g -O0 -ftz +else +FFLAGS = -fpp -O2 -ftz -convert big_endian LFLAGS = -O2 -ftz +endif +F90FLAGS = $(FFLAGS) -free CPPFLAGS += -DCOMPILER_Intel8 -DCONVERT_BIGENDIAN -F90_VERSION = $(shell $(F90) -v 2>&1) +F90_VERSION = $(shell $(F90) --version 2>&1) ifeq ($(MP),YES) -FFLAGS += -openmp -F90FLAGS += -openmp -LFLAGS += -openmp +FFLAGS += -qopenmp +F90FLAGS += -qopenmp +LFLAGS += -qopenmp +endif +CTM_LFLAGS = $(LFLAGS) +ifeq ($(GC),YES) +CTM_LFLAGS += -nostartfiles -nofor-main endif R8 = -r8 EXTENDED_SOURCE = -extend_source diff --git a/config/mpi.openmpi.mk b/config/mpi.openmpi.mk index a4a34660..95658237 100644 --- a/config/mpi.openmpi.mk +++ b/config/mpi.openmpi.mk @@ -43,10 +43,16 @@ CPPFLAGS += -DMPITYPE_LOOKUP_HACK VER := $(subst ., ,$(word 4,$(shell $(MPIRUN) --version 2>&1))) VER_MAJOR := $(word 1,$(VER)) VER_MINOR := $(word 2,$(VER)) -ifneq (,$(filter 7 8 9 10,$(VER_MINOR))$(filter 2 3 4,$(VER_MAJOR))) + +# Check for later versions of the Intel compiler which have a different pattern +# for --version +ifeq ($(VER_MAJOR),for) +LIBS += -lmpifort -lmpi +# Check for some other versions +else ifneq (,$(filter 7 8 9 10,$(VER_MINOR))$(filter 2 3 4,$(VER_MAJOR))) LIBS += -lmpi_mpifh -lmpi else -LIBS += -lmpi_f77 -lmpi +LIBS += -lmpi # -lmpi_cxx - this library may be needed for ESMF (?) endif diff --git a/config/rules.mk b/config/rules.mk index ec415088..5f29c52b 100644 --- a/config/rules.mk +++ b/config/rules.mk @@ -62,7 +62,11 @@ I = I # by default assume that fortran compiler can do cpp EXTERNAL_CPP = NO # assume that C compiler understands basic gcc flags +ifeq ($(TYPE),Debug) +CFLAGS = -g -O0 +else CFLAGS = -O2 +endif # check if ABI was specified ifneq ($(ABI),) CFLAGS += -m$(ABI) @@ -229,36 +233,43 @@ endif ifneq ($(CUBED_SPHERE),YES) -ifdef NETCDFHOME - ifneq ($(wildcard $(NETCDFHOME)/include/netcdf.inc),) - NETCDFINCLUDEDIR ?= $(NETCDFHOME)/include - else - ifneq ($(wildcard $(NETCDFHOME)/include/netcdf-3/netcdf.inc),) - NETCDFINCLUDEDIR ?= $(NETCDFHOME)/include/netcdf-3 +ifneq ($(and $(NETCDF_HOME),$(NETCDF_F_HOME)),) + LIBS += -L$(NETCDF_HOME)/lib -lnetcdf -L$(NETCDF_F_HOME)/lib -lnetcdff + FFLAGS += -I$(NETCDF_HOME)/include -I$(NETCDF_F_HOME)/include + F90FLAGS += -I$(NETCDF_HOME)/include -I$(NETCDF_F_HOME)/include + INCS += -I$(NETCDF_HOME)/include -I$(NETCDF_F_HOME)/include +else + ifdef NETCDFHOME + ifneq ($(wildcard $(NETCDFHOME)/include/netcdf.inc),) + NETCDFINCLUDEDIR ?= $(NETCDFHOME)/include else - $(error NetCDF include files not found) + ifneq ($(wildcard $(NETCDFHOME)/include/netcdf-3/netcdf.inc),) + NETCDFINCLUDEDIR ?= $(NETCDFHOME)/include/netcdf-3 + else + $(error NetCDF include files not found) + endif endif - endif - ifneq ($(wildcard $(NETCDFHOME)/$(LIBABI)/libnetcdf*),) - NETCDFLIBDIR ?= $(NETCDFHOME)/$(LIBABI) - else - NETCDFLIBDIR ?= $(NETCDFHOME)/lib + ifneq ($(wildcard $(NETCDFHOME)/$(LIBABI)/libnetcdf*),) + NETCDFLIBDIR ?= $(NETCDFHOME)/$(LIBABI) + else + NETCDFLIBDIR ?= $(NETCDFHOME)/lib + endif endif -endif -ifdef NETCDFINCLUDEDIR - FFLAGS += -I$(NETCDFINCLUDEDIR) - F90FLAGS += -I$(NETCDFINCLUDEDIR) - INCS += -I$(NETCDFINCLUDEDIR) -endif + ifdef NETCDFINCLUDEDIR + FFLAGS += -I$(NETCDFINCLUDEDIR) + F90FLAGS += -I$(NETCDFINCLUDEDIR) + INCS += -I$(NETCDFINCLUDEDIR) + endif -ifdef NETCDFLIBDIR - LIBS += -L$(NETCDFLIBDIR) -lnetcdf - ifeq ($(wildcard $(NETCDFLIBDIR)/libnetcdff.*),) + ifdef NETCDFLIBDIR LIBS += -L$(NETCDFLIBDIR) -lnetcdf - else - LIBS += -L$(NETCDFLIBDIR) -L/opt/local/lib -lnetcdff -lnetcdf + ifeq ($(wildcard $(NETCDFLIBDIR)/libnetcdff.*),) + LIBS += -L$(NETCDFLIBDIR) -lnetcdf + else + LIBS += -L$(NETCDFLIBDIR) -L/opt/local/lib -lnetcdff -lnetcdf + endif endif endif @@ -423,7 +434,7 @@ endif $(CPP) $(CPPFLAGS) $< > $@ %.o: %.c - $(CC) -c -O2 -m64 $< + $(CC) -c $(CFLAGS) -m64 $< %.f: %.m4f -rm -f $@ diff --git a/decks/Makefile b/decks/Makefile index 895af2be..b326f6e4 100644 --- a/decks/Makefile +++ b/decks/Makefile @@ -28,6 +28,9 @@ else MODEL_E_BUILD_DIR = $(MODEL_E_ROOT) endif MODEL_DIR = $(MODEL_E_BUILD_DIR)/model +GC_HOME = $(MODEL_DIR)/geos-chem +GC_BUILD_DIR = $(GC_HOME)/build +GC_LIB_DIR = $(GC_HOME)/lib AUX_DIR = $(MODEL_E_ROOT)/aux SCRIPTS_DIR = $(MODEL_E_ROOT)/exec DECKS_DIR = $(shell pwd) @@ -121,9 +124,51 @@ $(MODEL_DIR)/Makefile: $(MODEL_E_ROOT)/model/Makefile cp $(MODEL_E_ROOT)/model/Makefile $(MODEL_DIR)/Makefile endif +ifeq ($(TYPE),Debug) + DEBUG=1 +else + DEBUG=0 +endif gcm $(BIN_DIR)/$(RUN).exe: $(RUN).mk $(BIN_DIR) depend check_vars - $(MAKE) -C $(MODEL_DIR) gcm RUN=$(RUN) DECKS_DIR=$(DECKS_DIR) $(OPTS_MAIN) +ifeq ($(GC),YES) + @echo "***************************************************************" + @echo "Compiling GEOS-Chem" + @echo "***************************************************************" + mkdir -p $(GC_BUILD_DIR) + mkdir -p $(GC_LIB_DIR) + # If CMAKE_BUILD_TYPE is not specified, it defaults to "Release". May also be set to "Debug" + # If MECH is not specified, it defaults to "fullchem". May also be "carbon". + cd $(GC_BUILD_DIR) && cmake ../ -DINSTALLCOPY=.. \ + -DCMAKE_BUILD_TYPE="$(TYPE)" -DOMP="$(MP)" -DMECH="$(MECH)" \ + -DCMAKE_Fortran_COMPILER="$(F90)" \ + -DCMAKE_Fortran_FLAGS="$(F90FLAGS)" \ + -DCMAKE_EXE_LINKER_FLAGS="$(CTM_LFLAGS)" + cd $(GC_BUILD_DIR) && make VERBOSE=$(DEBUG) -j install + cp $(GC_BUILD_DIR)/mod/*.mod $(MODEL_DIR)/mod/ + cp $(GC_BUILD_DIR)/src/HEMCO/mod/*.mod $(MODEL_DIR)/mod/ + cp $(GC_BUILD_DIR)/src/Cloud-J/mod/*.mod $(MODEL_DIR)/mod/ + cp $(GC_BUILD_DIR)/src/HETP/mod/*.mod $(MODEL_DIR)/mod/ + cp $(GC_BUILD_DIR)/src/HEMCO/src/Core/libHCO.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/HEMCO/src/Extensions/libHCOX.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/HEMCO/src/Shared/Headers/libHeadersHco.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/HEMCO/src/Shared/GeosUtil/libJulDayHco.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/HEMCO/src/Shared/GeosUtil/libGeosUtilHco.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/HEMCO/src/Shared/NcdfUtil/libNcdfUtilHco.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/HEMCO/src/Interfaces/Shared/libHCOI_Shared.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/Headers/libHeaders.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/ObsPack/libObsPack.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/History/libHistory.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/KPP/$(MECH)/libKPP_FirstPass.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/KPP/$(MECH)/libKPP.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/GeosCore/libGeosCore.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/GeosUtil/libGeosUtil.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/GeosUtil/libJulDay.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/GEOS-Chem/NcdfUtil/libNcdfUtil.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/Cloud-J/src/Core/libCloudJ_Core.a $(GC_LIB_DIR)/ + cp $(GC_BUILD_DIR)/src/HETP/src/Core/libHETP_core.a $(GC_LIB_DIR)/ +endif + $(MAKE) -C $(MODEL_DIR) gcm RUN=$(RUN) DECKS_DIR=$(DECKS_DIR) -I$(MODEL_DIR)/mod $(OPTS_MAIN) -mv $(MODEL_DIR)/$(RUN).bin $(BIN_DIR)/$(RUN).exe @echo '---- Looks like compilation finished successfully ----' @@ -217,6 +262,9 @@ ifneq ($(PFUNIT),) $(MAKE) -C $(TESTS_DIR) clean endif $(MAKE) -C $(AUX_DIR) $@ $(OPTS_MAIN) + rm -rf $(GC_HOME)/build_info + rm -rf $(GC_HOME)/gcclassic + rm -rf $(GC_BUILD_DIR) exe: $(RUN)/$(RUN) gcm @if [ ! -s $(CMRUNDIR)/$(RUN)/I ] ; then \ diff --git a/doc/GISS-GC-DOC/build_on_linux_laptop.md b/doc/GISS-GC-DOC/build_on_linux_laptop.md new file mode 100644 index 00000000..915890c5 --- /dev/null +++ b/doc/GISS-GC-DOC/build_on_linux_laptop.md @@ -0,0 +1,396 @@ +## Building GISS-GC on a laptop with a Linux operating system + +#### Step 1: Basic setup + +> [!INFO] Do this the first time only. + +Choose the location where GISS-GC will exist (e.g., `~/software/GISS-GC`) and use it to define the `${GISS_HOME}` environment variable: +```sh +export GISS_HOME=${HOME}/software/GISS-GC +``` + +Checkout the GISS-GC repository into the `${GISS_HOME}` location and set up its submodules: +```sh +git clone git@github.com:fetch4/GISS-GC.git ${GISS_HOME} +cd ${GISS_HOME} +git checkout develop +git submodule init +git submodule update +``` + +In the directory, create a script `setup.sh` for defining modules to be loaded and various paths required for the GISS-GC build. Copy and paste the following code block into the script, noting that a few entries will require modification: +```sh +#!/bin/bash + +# ============================================================================ # +# Activate the Python and Spack environments used by GISS-GC. # +# ============================================================================ # + +# Environment variables for GISS modelE +export SOFTWARE=${HOME}/software # NOTE: Edit if you're using a different location for software +export GISS_HOME=${SOFTWARE}/GISS-GC # NOTE: This should be consistent with the location you cloned GISS-GC to +export ModelE_Support=${HOME}/run/giss-gc # NOTE: Edit if you're using a different run directory location +mkdir -p ${ModelE_Support}/exec +mkdir -p ${ModelE_Support}/huge_space +mkdir -p ${ModelE_Support}/prod_decks +mkdir -p ${ModelE_Support}/prod_input_files +mkdir -p ${ModelE_Support}/prod_runs +# Environment variables for compiler +export CC=gcc # NOTE: Edit if you're using a different C compiler +export CXX=g++ # NOTE: Edit if you're using a different C++ compiler +export FC=gfortran # NOTE: Edit if you're using a different Fortran compiler +export F90=gfortran # NOTE: Edit if you're using a different Fortran compiler +export F77=gfortran # NOTE: Edit if you're using a different Fortran compiler +# Misc. environment variables +export F_UFMTENDIAN=big +export KMP_STACKSIZE=100000000 +export OMP_NUM_THREADS=36 + +# Spack environment # NOTE: Edit MPI_ROOT to match the path to your Spack-installed MPI distribution +spack env activate -p giss-gc +export MPI_ROOT=${SOFTWARE}/spack/opt/spack/linux-ubuntu22.04-skylake/gcc-11.4.0/openmpi-4.1.6-s3fu5gvaasgjy4jecnb6rvemx7oofexx + +# Environment variables for passing NetCDF-C paths to GEOS-Chem +export NETCDF_HOME=$(nc-config --prefix) +export GC_BIN=${NETCDF_HOME}/bin +export GC_INCLUDE=${NETCDF_HOME}/include +export GC_LIB=${NETCDF_HOME}/lib + +# Environment variables for passing NetCDF-Fortran paths to GEOS-Chem +export NETCDF_F_HOME=$(nf-config --prefix) +export GC_F_BIN=${NETCDF_F_HOME}/bin +export GC_F_INCLUDE=${NETCDF_F_HOME}/include +export GC_F_LIB=${NETCDF_F_HOME}/lib + +# GEOS-Chem input data # NOTE: Edit if you are storing this somewhere else +export ROOT=${ModelE_Support}/prod_input_files/ExtData/HEMCO/ + +# Add modelE tools to path +export PATH=${HOME}/software/tools/mk_diags:${PATH} +``` + +> [!WARNING] Don't `source` the script yet because we need to set up Spack first. + + +#### Step 2: Setup Spack environment for GISS-GC + +> [!INFO] Do this the first time only. + +Install the Spack package manager using the [instructions](https://spack-tutorial.readthedocs.io/en/latest/tutorial_basics.html) online, if you don't already have it. I put it in `~/software/spack`. + +Create a Spack configuration in `${GISS_HOME}/spack.yaml` and copy and paste the +following code block into it. Note that you may need to adjust the compiler, +compiler version, and operating system. +```yaml +spack: + packages: + all: + compiler: [gcc@11.4.0] + container: + images: + os: ubuntu:22.04 + spack: '0.21' + specs: + - cmake + - gmake + - hdf5 + - netcdf-c+mpi+parallel-netcdf + - netcdf-fortran + - openmpi + concretizer: + unify: true + config: + install_missing_compilers: true + compilers: + - compiler: + spec: gcc@=11.4.0 + paths: + cc: /bin/gcc + cxx: /bin/g++ + f77: /bin/gfortran + fc: /bin/gfortran + flags: {} + operating_system: ubuntu22.04 + target: x86_64 + modules: [] + environment: {} + extra_rpaths: [] +``` +Note that this will create a file `~/.spack/linux/compilers.yaml` containing the +compiler specification. + +Create a Spack environment off the YAML file with +```sh +cd ${GISS_HOME} +spack env create giss-gc spack.yaml +``` + +With the Spack environment active, install the packages required by the Spack +environment with +```sh +spack install +``` +This may take an hour or so. + +Run +```sh +source ${GISS_HOME}/setup.sh +``` +and check that `${MPI_ROOT}`, `${NETCDF_HOME}`, and `${NETCDF_F_HOME}` (for example) are valid paths. The activation of the Spack environment should result in your command line prompt being prefaced with `[giss-gc]`, possibly in a different colour. + + +#### Step 3: Build GISS tools and put them in the path + +> [!INFO] Do this the first time only. + +GISS comes with some tools (e.g., for post-processing diagnostics) which need to be compiled. +We already added this location to the path in `setup.sh`. +```sh +# source ${GISS_HOME}/setup.sh +cp -rp ${GISS_HOME}/model/mk_diags ${HOME}/software/tools +cd ${HOME}/software/tools/mk_diags +/bin/bash compscr +``` + +#### Step 4: Create `~/.modelErc` + +> [!INFO] Do this the first time only. + +GISS is configured using a global `~/.modelErc` file. This is created as follows: +```sh +# source ${GISS_HOME}/setup.sh +cd ${GISS_HOME}/decks +make config COMPILER=${FC} ModelE_Support=${ModelE_Support} +``` + +Tweak `~/.modelErc` as follows: +```diff +# This file contains global options for modelE. +# By default it assumes that the directory structure for modelE runs +# is set under /scratch/jwallwo2/run . + +## Directory structure ## + +# DECKS_REPOSITORY - a directory for permanenet storage of run info. +# All rundecks that you create will be copied to this directory. +-DECKS_REPOSITORY=/scratch/jwallwo2/run/prod_decks ++DECKS_REPOSITORY=${ModelE_Support}/prod_decks + +# CMRUNDIR - directory to which all run directories will be linked. +# This directory will be searched by most scripts for locations of +# specific runs. +-CMRUNDIR=/scratch/jwallwo2/run/prod_runs ++CMRUNDIR=${ModelE_Support}/prod_runs + +# GCMSEARCHPATH - directory to search for gcm input files. +# All necessary input files should be copied or linked to this directory. +-GCMSEARCHPATH=/scratch/jwallwo2/run/prod_input_files ++GCMSEARCHPATH=${ModelE_Support}/prod_input_files + +# EXECDIR - path to directory with modelE scripts and with some +# executables. This directory should contain the scripts from modelE/exec. +-EXECDIR=/scratch/jwallwo2/run/exec ++EXECDIR=${ModelE_Support}/exec + +# SAVEDISK - a directory where all run directories (which will contain +# all output files such as rsf, acc etc.) will be created. This should +# be big enough to accomodate all model output. +-SAVEDISK=/scratch/jwallwo2/run/huge_space ++SAVEDISK=${ModelE_Support}/huge_space + +## External libraries ## + +# Some of these options can be provided by environment modules (if you +# use them). Specify here only what is necessary. Options specified +# here will overwrite options proviided by environment modules. + +# NETCDFHOME - path to location of netcdf installation directory. +-# NETCDFHOME=/opt/netcdf/3.6.3 ++NETCDFHOME=${NETCDF_F_HOME} + +# MPI - set to YES if you want to compile the model for parallel +# execution on multiple CPU cores. Keep in mind, that functional +# MPI library should be installed on your computer and its type +# and location should be specified below. +# This option can be overwritten from the compile line. +-MPI=NO ++MPI=YES + +# MPIDISTR - the MPI distribution you are using. Currently supported +# distributions are: 'intel, 'openmpi', 'mpich2', 'mvapich2', 'SCALI', +# 'mpt' +-# MPIDISTR=openmpi ++MPIDISTR=openmpi + +# MPIDIR - path to the MPI installation directory. (Needs to be set +# only if compiler can't find correct MPI library and include files by +# default) +-# MPIDIR=/opt/openmpi ++MPIDIR=${MPI_ROOT} + +# MPILIBDIR - path to the location of MPI library. Set it only if +# it is different from the default $MPIDIR/lib +# MPILIBDIR=/opt/openmpi/lib + +# MPIINCLUDEDIR - path to location of MPI include files. Set it only +# if it is different from the default $MPIDIR/include +# MPIINCLUDEDIR=/opt/openmpi/include + +# ESMF5_DIR - path to the installation directory of ESMF (version 5) +# library. (Required only for Cubed Sphere simulations) +# ESMF5_DIR= + +# ESMF_BOPT - optimization level of ESMF library. (Should only be used +# togeteher with ESMF5_DIR) +# ESMF_BOPT=O ++ESMF=NO + +## Architecture and compiler + +# ABI - Application Binary Interfaces. This variable specifies the +# architecture you are using. The valid values are '64' and '32'. +# On most modern systems you should use '64'. Use '32' if your +# hardware or compiler support only 32-bit binaries. +ABI=64 + +# COMPILER - specifies the Fortran compiler you are using. Currently +# only 'intel' and 'gfortran' are supported. ('nag' has partial +# support on development branch.) If you are using Modules for +# Environment Management, then this variable may already be set in the +# environment. In this case you don't need to set it here. +-# COMPILER=gfortran ++COMPILER=gfortran + +## General User Preferences ## + +# MAILTO - email address of the user. When the program ends/crashes +# all notifications will be sent to this address. Leave empty +# or unset if you don't want to receive these emails +MAILTO= + +# UMASK - the value of 'umask' you want to use for model runs. The files +# inside the run directory will have permissions set according to this +# mask. +UMASK=002 + +# OVERWRITE - can "gmake rundeck" overwrite files already in repository? +# (i.e. in the directory DECKS_REPOSITORY) +OVERWRITE=NO + +# OUTPUT_TO_FILES - if set to YES all errors and warnings will be sent +# to files with the names .ERR +OUTPUT_TO_FILES=NO + +# VERBOSE_OUTPUT - if set to YES gmake will show compilation commands +# and some other information. Otherwise most of the output will be +# suppressed +VERBOSE_OUTPUT=YES +``` + +#### Step 5: Get the rundeck + +> [!INFO] Do this the first time only. + +GISS uses 'rundecks' for configuring the model, including setting up preprocessors. These should live within the `${GISS_HOME}/decks` subdirectory. Currently, we are using the `GISS_GC_14.R` rundeck. +This can be found at `.github/rundecks/GISS_GC_14.R`. + + +#### Step 6: Download the data + +> [!INFO] Do this the first time only. + +We aren't actually going to be able to run the model on our laptops, so it's sufficient to just create empty files with the expected names: + +```sh +export DATA=${ModelE_Support}/prod_input_files +touch ${DATA}/CD144X90.ext.nc +touch ${DATA}/cloud.epsilon4.72x46 +touch ${DATA}/CO2profile.Jul16-2017.txt +touch ${DATA}/CROPS_and_pastures_Pongratz_to_Hurtt_144X90N_nocasp.nc +touch ${DATA}/dH2O_by_CH4_monthly +touch ${DATA}/GHG.CMIP6.1-2014.txt +touch ${DATA}/GIC.144X90.DEC01.1.ext_1.nc +touch ${DATA}/GLMELT_144X90_gas.OCN.nc +touch ${DATA}/H2Ocont_MT_CKD +touch ${DATA}/Irrig144x90_1848to2100_FixedFuture_v3.nc +touch ${DATA}/ISCCP.tautables +touch ${DATA}/LWCorrTables33k +touch ${DATA}/LWTables33k_lowH2O_CO2_O3_planck_1-800 +touch ${DATA}/miescatpar.abcdv2 +touch ${DATA}/MSU_SSU_RSS_weights.txt +touch ${DATA}/NCARIC.144x90.D7712010_ext.nc +touch ${DATA}/o3_2010_shindell_144x90x49_April1850.nc +touch ${DATA}/oct2003.relhum.nr.Q633G633.table +touch ${DATA}/OST_144x90.1876-1885avg.CMIP6.nc +touch ${DATA}/RD_Fd.nc +touch ${DATA}/RD_Fd.names.txt +touch ${DATA}/REG2X2.5 +touch ${DATA}/S144X900098M.ext.nc +touch ${DATA}/sgpgxg.table8 +touch ${DATA}/SICE_144x90.1876-1885avg.CMIP6.nc +touch ${DATA}/soil_textures_top30cm_2x2.5 +touch ${DATA}/soilcarb_top30cm_2x2.5.nc +touch ${DATA}/solar.CMIP6official.ann1850-2299_with_E3_fastJ.nc +touch ${DATA}/STRATAER.VOL.1850-2014_CMIP6_hdr +touch ${DATA}/top_index_144x90_a.ij.ext.nc +touch ${DATA}/topcld.trscat8 +touch ${DATA}/V144x90_EntMM16_height_trimmed_scaled_ext.nc +touch ${DATA}/V144x90_EntMM16_lai_max_trimmed_scaled_ext.nc +touch ${DATA}/V144x90_EntMM16_lai_trimmed_scaled_ext.nc +touch ${DATA}/V144x90_EntMM16_lc_max_trimmed_scaled_nocrops.ext.nc +touch ${DATA}/Z2HX2fromZ1QX1N.BS1.nc +touch ${DATA}/ZSIfac_144x90.1876-1885avg.CMIP6.nc +touch ${DATA}/ZVAR2X25A.nc +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCA +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCB +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/BCdalbsn +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/DUST +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/NIT +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/O3 +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/OCA +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SSA +mkdir -p ${DATA}/cmip6_nint_inputs_E14TomaOCNf10_4av_decadal/SUL +mkdir -p ${DATA}/nudging/merra2 +touch ${DATA}/nudging/merra2/uwnd.2014.MERRA2onGISSE2.nc4 +touch ${DATA}/nudging/merra2/vwnd.2014.MERRA2onGISSE2.nc4 +touch ${DATA}/nudging/merra2/uwnd.2015.MERRA2onGISSE2.nc4 +touch ${DATA}/nudging/merra2/vwnd.2015.MERRA2onGISSE2.nc4 +touch ${DATA}/nudging/merra2/uwnd.2016.MERRA2onGISSE2.nc4 +touch ${DATA}/nudging/merra2/vwnd.2016.MERRA2onGISSE2.nc4 +``` +#### Step 7: Compile + +> [!CHECK] Do this every time. + +Create an executable `build.sh` script in `${GISS_HOME}` with the following contents: +```sh +#!/bin/bash + +# Default value for MP +MP=NO + +# Check if an argument is provided +if [ $# -gt 0 ]; then + MP=$1 +fi + +# Check the RUNID environment variable is set +if [ -z "${RUNID}" ]; then + echo "Error: RUNID environment variable is not set." + exit 1 +fi + +cd decks/ +# make clean +make -j setup RUN=${RUNID} F90=mpif90 GC=YES MP=${MP} MPI=YES +cd - +``` +and run it with `./build.sh`. + +Notes: +* Run with `./build.sh MP=YES` to compile with OpenMP shared memory parallelism +* Uncomment the `make clean` line to build from scratch. + +#### Step 8: Run the model + +> [!DANGER] Do not attempt to run the model on your laptop - it will require far too much RAM. diff --git a/docker/Dockerfile.devenv b/docker/Dockerfile.devenv new file mode 100644 index 00000000..57d950e1 --- /dev/null +++ b/docker/Dockerfile.devenv @@ -0,0 +1,52 @@ +# Build stage with Spack pre-installed and ready to be used +FROM spack/ubuntu-jammy:0.21 AS builder + +# Install software from spack.yaml +RUN mkdir /opt/spack-environment +COPY docker/spack.yaml /opt/spack-environment/spack.yaml +RUN cd /opt/spack-environment \ + && spack env activate . \ + && spack install --fail-fast \ + && spack gc -y + +# Install perl URI lib +RUN apt update \ + && apt install -y --no-install-recommends libany-uri-escape-perl \ + && rm -rf /var/lib/apt/lists/* + +# Strip all the binaries +RUN find -L /opt/views/view/* -type f -exec readlink -f '{}' \; | \ + xargs file -i | \ + grep 'charset=binary' | \ + grep 'x-executable\|x-archive\|x-sharedlib' | \ + awk -F: '{print $1}' | xargs strip + +# Modifications to the environment that are necessary to run +RUN cd /opt/spack-environment \ + && spack env activate --sh -d . > activate.sh + +# Bare OS image to run the installed executables +FROM ubuntu:22.04 + +# Copy necessary files from the builder stage +COPY --from=builder /opt/spack-environment /opt/spack-environment +COPY --from=builder /opt/software /opt/software +COPY --from=builder /usr /usr +# paths.view is a symlink, so copy the parent to avoid dereferencing and duplicating it +COPY --from=builder /opt/views /opt/views + +# Create entrypoint script +RUN { \ + echo '#!/bin/sh'; \ + echo '. /opt/spack-environment/activate.sh'; \ + echo 'exec "$@"'; \ + } > /entrypoint.sh \ + && chmod a+x /entrypoint.sh \ + && ln -s /opt/views/view /opt/view \ + && apt update \ + && apt install -y --no-install-recommends ca-certificates cpp m4 \ + && rm -rf /var/lib/apt/lists/* + +# Set entrypoint and default command +ENTRYPOINT [ "/entrypoint.sh" ] +CMD [ "/bin/bash" ] diff --git a/docker/Makefile b/docker/Makefile new file mode 100644 index 00000000..fd75b68b --- /dev/null +++ b/docker/Makefile @@ -0,0 +1,20 @@ +all: build + +DOCKERFILE = ${GISS_HOME}/docker/Dockerfile.devenv +NAMESPACE = ghcr.io/fetch4 +IMAGE_NAME = giss-gc-dev-env +TAG = latest + +IMAGE = $(NAMESPACE)/$(IMAGE_NAME):$(TAG) + +pull: + docker pull $(IMAGE) + +build: + docker build -f $(DOCKERFILE) -t $(IMAGE) . + +run: + docker run --rm -it -v ${HOME}:${HOME} $(IMAGE) + +push: + docker push $(IMAGE) diff --git a/docker/spack.yaml b/docker/spack.yaml new file mode 100644 index 00000000..97eb0d29 --- /dev/null +++ b/docker/spack.yaml @@ -0,0 +1,17 @@ +spack: + packages: + all: + compiler: [gcc@11.4.0] + specs: + - cmake + - gmake + - hdf5 + - netcdf-c+mpi+parallel-netcdf + - netcdf-fortran + - openmpi + concretizer: + unify: true + config: + install_missing_compilers: true + install_tree: /opt/software + view: /opt/views/view diff --git a/exec/setup_e.pl b/exec/setup_e.pl index 80c52b08..dd001245 100755 --- a/exec/setup_e.pl +++ b/exec/setup_e.pl @@ -392,7 +392,7 @@ opts= touch_ifile=0 if [ "\$NP"x = x ] ; then NP=1; fi - if [ "\$DEBUG_COMMAND"x = x ] ; then DEBUG_COMMAND="xterm -e gdb --args"; fi + if [ "\$DEBUG_COMMAND"x = x ] ; then DEBUG_COMMAND="gdb --args"; fi while [ \$\# -ge 1 ] ; do OPT=\$1 ; shift case \$OPT in diff --git a/model/ATMDYN.f b/model/ATMDYN.f index 39c44cb3..f1a8fee1 100644 --- a/model/ATMDYN.f +++ b/model/ATMDYN.f @@ -3180,7 +3180,8 @@ module UNRDRAG_COM !@var N_C: number of C samples in source spectrum integer, parameter :: N_C = 100 !@var dc: spectral resolution (m/s) - real(r8), parameter :: dc(N_Kh) = (C_sup - C_inf)/(N_C - 1) + real(r8), parameter :: Cdiff = C_sup(1) - C_inf(1) + real(r8), parameter :: dc(N_Kh) = (/Cdiff/(N_C - 1)/) !@var C: horizontal phase speed grid real(r8) :: C(N_C, N_Kh) !@var IZ0: vertical grid index of GW source (function of latitude) diff --git a/model/ATM_DRV.f b/model/ATM_DRV.f index 0cd31335..c1b4934e 100644 --- a/model/ATM_DRV.f +++ b/model/ATM_DRV.f @@ -36,6 +36,10 @@ subroutine atm_phase1 & ,COMPUTE_DYNAM_AIJ_DIAGNOSTICS #endif +#if defined( TRACERS_GC ) + USE CHEM_DRV, only : TrDYNAM +#endif + #if defined(TRACERS_ON) || defined(TRACERS_OCEAN) USE TRACER_COM, only: mtrace #endif @@ -143,7 +147,7 @@ subroutine atm_phase1 CALL QDYNAM ! Advection of Q by integrated fluxes CALL TIMER (NOW,MDYN) -#if defined(TRACERS_ON) +#if defined(TRACERS_ON) || defined(TRACERS_GC) CALL TrDYNAM ! tracer dynamics #endif @@ -289,7 +293,7 @@ subroutine atm_phase1 #endif call atm_phase1_exports - + return end subroutine atm_phase1 @@ -429,6 +433,9 @@ subroutine atm_phase2 USE MODEL_COM USE DYNAMICS, only : nidyn,nfiltr,mfiltr USE GETTIME_MOD +#if defined( TRACERS_GC ) + USE CHEM_DRV, only : DO_CHEM, accumGCsubdd +#endif #if (defined TRACERS_ON) || (defined TRACERS_OCEAN) USE TRACER_COM, only: mtrace #endif @@ -489,6 +496,11 @@ subroutine atm_phase2 CALL DIAGCA (8) END IF #endif + +#ifdef TRACERS_GC + CALL DO_CHEM +#endif + #ifdef TRACERS_ON #ifdef CUBED_SPHERE ! Reinitialize instantaneous consrv qtys (every timestep since @@ -520,6 +532,14 @@ subroutine atm_phase2 if (mod(Itime+1,Nsubdd).eq.0) call get_subdd end if #endif + +#ifdef TRACERS_GC +#ifdef CACHED_SUBDD + ! Accumulate diagnostics + CALL accumGCsubdd +#endif +#endif + #ifdef TRACERS_DUST call ahourly #endif @@ -779,7 +799,7 @@ SUBROUTINE INPUT_atm (istart,istart_fixup,do_IC_fixups, end subroutine INPUT_atm - subroutine alloc_drv_atm() + subroutine alloc_drv_atm(is_coldstart) #ifdef SCM use Dictionary_mod, only : sync_param #endif @@ -798,6 +818,9 @@ subroutine alloc_drv_atm() USE MOMENTS, only : initMoments #endif #endif +#if defined( TRACERS_GC ) + use CHEM_DRV, only : init_chem +#endif #if (defined TRACERS_ON) || (defined TRACERS_OCEAN) use TRACER_COM, only: initTracerCom, alloc_tracer_com #ifndef TRACERS_ATM_ONLY @@ -813,12 +836,18 @@ subroutine alloc_drv_atm() include 'mpif.h' ! Needed for GLINT2 #endif + LOGICAL, INTENT(IN) :: is_coldstart + c initialize the atmospheric domain decomposition c for now, CREATE_CAP is only relevant to the cubed sphere grid call init_grid(grid, im, jm, lm, CREATE_CAP=.true.) call geom_atm +#if defined( TRACERS_GC ) + call init_chem( grid, is_coldstart ) +#endif + #if (defined TRACERS_ON) || (defined TRACERS_OCEAN) call initTracerCom #ifndef TRACERS_ATM_ONLY @@ -921,6 +950,9 @@ subroutine def_rsf_atmvars(fid) !@sum def_rsf_atmvars defines atm prognostic array structure in rsf !@auth M. Kelley !@ver beta +#ifdef TRACERS_GC + use CHEM_DRV, only : io_chem +#endif implicit none integer :: fid call def_rsf_atm (fid) @@ -946,6 +978,9 @@ subroutine def_rsf_atmvars(fid) #endif #ifdef TRACERS_ON call tracerIO(fid, 'define') +#endif +#ifdef TRACERS_GC + call IO_CHEM(fid, 'define') #endif call def_rsf_subdd (fid) call def_rsf_fluxes (fid) @@ -954,6 +989,9 @@ end subroutine def_rsf_atmvars subroutine new_io_atmvars(fid,iorw) use model_com, only: ioread, iowrite +#ifdef TRACERS_GC + use CHEM_DRV, only : io_chem +#endif implicit none integer, intent(in) :: fid,iorw call new_io_atm (fid,iorw) @@ -987,7 +1025,14 @@ subroutine new_io_atmvars(fid,iorw) case (iowrite) call tracerIO(fid, 'write_dist') end select - +#endif +#ifdef TRACERS_GC + select case (iorw) + case (ioread) + call IO_CHEM(fid, 'read_dist') + case (iowrite) + call IO_CHEM(fid, 'write_dist') + end select #endif call new_io_subdd (fid,iorw) call new_io_fluxes (fid,iorw) @@ -1727,7 +1772,7 @@ subroutine accum_subdd_atm use atm_com, only: u,v,t,q,qcl,qci, pdsig,pmid,pedn,pk, & ualij,valij, zatmo,gz, wsave, ma,masum & ,ptropo,ltropo -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use atm_com, only : MWs use geom, only : byaxyp #endif @@ -1850,7 +1895,7 @@ subroutine accum_subdd_atm enddo; enddo call inc_subdd(subdd,k,sddarr2d) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS case ('HFLUX') ! Based on shflux sddarr2d = -atmsrf%sensht(:,:)/dtsrc ! Note: sign change for consistency with MERRA-2 call inc_subdd(subdd,k,sddarr2d) @@ -1978,7 +2023,7 @@ subroutine accum_subdd_atm sddarr(:,:,1:lm-1) = wsave sddarr(:,:,lm) = 0. call inc_subdd(subdd,k,sddarr) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS case ('T') do l=1,lmaxsubdd; do j=j_0,j_1; do i=i_0,imaxj(j) sddarr(i,j,l) = t(i,j,l)*pk(l,i,j) diff --git a/model/CHEM_COM.F90 b/model/CHEM_COM.F90 new file mode 100644 index 00000000..c6049e69 --- /dev/null +++ b/model/CHEM_COM.F90 @@ -0,0 +1,294 @@ +module CHEM_COM + + !================================================================================================ + ! Module CHEM_COM is a module that holds diagnostic arrays for + ! GEOS-Chem + ! + ! Author: Lee T. Murray (lee.murray@rochester.edu) + !=============================================================================================== + USE MDIAG_COM, ONLY : sname_strlen,lname_strlen,units_strlen + USE CDL_MOD + + IMPLICIT NONE + SAVE + + !PUBLIC :: Init_Chem_Diagnostics + + INTEGER, PUBLIC :: NSP ! Number of chemical species + INTEGER, PUBLIC :: NTM ! Number of tracers to advect + REAL*8, PUBLIC, ALLOCATABLE, DIMENSION(:,:,:,:) :: TrM ! Tracer array (kg) + REAL*8, PUBLIC, ALLOCATABLE, DIMENSION(:,:,:,:,:) :: TrMom ! Second order moments for tracers (kg) + + CHARACTER(LEN=12), PUBLIC, ALLOCATABLE, DIMENSION(:) :: SpName ! Species name + CHARACTER(LEN=8), PUBLIC, ALLOCATABLE, DIMENSION(:) :: TrName ! Advected species name + CHARACTER(LEN=163), PUBLIC, ALLOCATABLE, DIMENSION(:) :: TrFullName ! Full name + LOGICAL, PUBLIC, ALLOCATABLE, DIMENSION(:) :: IsAdvected ! Advect this tracer? + LOGICAL, PUBLIC, ALLOCATABLE, DIMENSION(:) :: t_qlimit ! Limit fluxes in QUS? + + INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:) :: TrID_to_SpcChmID + INTEGER, PUBLIC, ALLOCATABLE, DIMENSION(:) :: SpcChmID_to_TrID + + !==================== + ! Diagnostics + !==================== + + INTEGER, PARAMETER :: kgcaijl=500 + +!@var SNAME_IJLT: Names of 3D tracer IJL diagnostics + character(len=sname_strlen), dimension(kgcaijl) :: sname_ijlt +!@var DNAME_IJLT, DENOM_IJLT: Short names, indices of gcaijls denominators. +!@+ Currently, dname is specified along with the standard metadata and +!@+ the denom indices are looked up afterward. + character(len=sname_strlen), dimension(kgcaijl) :: dname_ijlt='' + integer, dimension(kgcaijl) :: denom_ijlt=0 +!@var LNAME_IJLT,UNITS_IJLT: descriptions/units of 3D tracer diagnostics + character(len=lname_strlen), dimension(kgcaijl) :: lname_ijlt = 'unused' + character(len=units_strlen), dimension(kgcaijl) :: units_ijlt +!@var SCALE_IJLT: printout scaling factor for 3D tracer diagnostics + REAL*8, dimension(kgcaijl) :: scale_ijlt +!@var IR_IJLT: range index of IJL diagnostics + integer, dimension(kgcaijl) :: ir_ijlt +!@var IA_IJLT: accumulation index for IJL diagnostics + integer, dimension(kgcaijl) :: ia_ijlt +!@var ijlt_power: power of 10 used for tracer IJL 3D diags + INTEGER, DIMENSION(kgcaijl) :: ijlt_power + +! This section declares arrays used to write tracer +! diagnostics accumulations in a format suitable for offline +! postprocessing. The size of these arrays cannot be known +! precisely a priori due to the large number of outputs not +! declared in advance. Thus, metadata arrays are declared with +! a larger-than-needed size, and acc arrays are re-allocated +! to the correct size after the size is determined. +! The "n" and "s" instances of diagnostics classes are +! merged as follows: +!@var gcaijl_out combines gcaijln and gcaijls. Distributed. +!@var gcaij_out combines gcaijn and gcaijs. Distributed. +!@var tajl_out combines tajln and tajls. +!@var tconsrv_out combines the ktcon/ntmxcon dims of tconsrv +!@+ and omits its unused elements. +! All contents of txxx_out arrays are PER UNIT AREA. +! Denominator information is stored in denom_xxx. +! Metadata for scaled outputs is consolidated in cdl_xxx. +! + ! This was NTM, but NTM is now dynamic. Introducing MAXNTM instead. + !integer, parameter :: MAXNTM = 1000 ! rather than making all kgcaij_ arrays allocatable - TLC + !integer, parameter :: kgcaij_ = (kgcaij*MAXNTM+kgcaijs)*3/2 ! make 50% larger for denoms and extra specials + !integer :: kgcaij_out ! actual number of qtys in gcaij_out + !real*8, dimension(:,:,:), allocatable :: gcaij_out + !integer, dimension(kgcaij_) :: ir_gcaij,ia_gcaij,denom_gcaij + !character(len=lname_strlen), dimension(kgcaij_) :: lname_gcaij + !character(len=sname_strlen), dimension(kgcaij_) :: sname_gcaij + !character(len=units_strlen), dimension(kgcaij_) :: units_gcaij + !real*8, dimension(kgcaij_) :: scale_gcaij + !type(cdl_type) :: cdl_gcaij,cdl_gcaij_latlon + !real*8, dimension(:,:,:), allocatable :: hemis_gcaij + + integer :: kgcaijl_ + integer :: kgcaijl_out ! actual number of qtys in gcaijl_out + real*8, dimension(:,:,:,:), allocatable :: gcaijl_out + integer, allocatable, dimension(:) ::ir_gcaijl,ia_gcaijl,denom_gcaijl,ijlt_vmr + character(len=lname_strlen),allocatable,dimension(:) ::lname_gcaijl + character(len=sname_strlen),allocatable,dimension(:) ::sname_gcaijl + character(len=units_strlen),allocatable,dimension(:) ::units_gcaijl + real*8, allocatable, dimension(:) :: scale_gcaijl + type(cdl_type) :: cdl_gcaijl,cdl_gcaijl_latlon + + !integer :: ktajl_ + !integer :: ktajl_out ! actual number of qtys in tajl_out + !real*8, dimension(:,:,:), allocatable :: tajl_out + !integer, allocatable, dimension(:) :: pow_tajl,ia_tajl,denom_tajl,& + ! jgrid_tajl,lgrid_tajl,ltop_tajl + !character(len=lname_strlen),allocatable,dimension(:) :: lname_tajl + !character(len=sname_strlen),allocatable,dimension(:) :: sname_tajl + !character(len=units_strlen),allocatable,dimension(:) :: units_tajl + !real*8, allocatable, dimension(:) :: scale_tajl + !type(cdl_type) :: cdl_tajl + !real*8, dimension(:,:,:), allocatable :: hemis_tajl,vmean_tajl + + CONTAINS + +end module CHEM_COM + + subroutine def_rsf_trdiag(fid,r4_on_disk) +!@sum def_rsf_trdiag defines tracer diag array structure in restart+acc files +!@auth M. Kelley +!@ver beta + use CHEM_COM, only : GCAIJL=>GCAIJL_out ! , & +! GCAIJLN=>GCAIJLN_loc, & +! GCAIJLS=>GCAIJLS_loc, & +! GCAIJN=>GCAIJN_loc, & +! GCAIJS=>GCAIJS_loc, & +! TAJLN, & +! TAJLS, & +! GCAIJ=>GCAIJ_out, & +! TAJL=>TAJL_out + use domain_decomp_atm, only : grid + use pario, only : defvar + implicit none + integer fid !@var fid file id + logical :: r4_on_disk !@var r4_on_disk if true, real*8 stored as real*4 + + if(r4_on_disk) then ! acc file + call defvar(grid,fid,gcaijl,'gcaijl(dist_im,dist_jm,lm,kgcaijl)',r4_on_disk=.true.) +! call defvar(grid,fid,gcaij, +! 'gcaij(dist_im,dist_jm,kgcaij)',r4_on_disk=.true.) +! call defvar(grid,fid,tajl, 'tajl(jm_budg,lm,ktajl)',r4_on_disk=.true.) +! call write_src_dist_data(fid, .true.) +! else +! call defvar(grid,fid,gcaijln,'gcaijln(dist_im,dist_jm,lm,ntm)') +! call defvar(grid,fid,gcaijls,'gcaijls(dist_im,dist_jm,lm,kgcaijl)') +! call defvar(grid,fid,gcaijs,'gcaijs(dist_im,dist_jm,kgcaijs)') +! call defvar(grid,fid,gcaijn,'gcaijn(dist_im,dist_jm,kgcaij,ntm)') +! call defvar(grid,fid,tajln,'tajln(jm_budg,lm,ktajlx,ntm)') +! call defvar(grid,fid,tajls,'tajls(jm_budg,lm,ktajls)') + endif + +! call def_rsf_tcons(fid,r4_on_disk) + + return + end subroutine def_rsf_trdiag + + subroutine new_io_trdiag(fid,iaction) +!@sum new_io_trdiag read/write tracer acc arrays from/to restart+acc files +!@auth M. Kelley +!@ver beta new_ prefix avoids name clash with the default version + use model_com, only : ioread,iowrite,iowrite_single + use CHEM_COM, only : GCAIJL=>GCAIJL_out ! , & +! GCAIJLN=>GCAIJLN_loc, & +! GCAIJLS=>GCAIJLS_loc, & +! GCAIJN=>GCAIJN_loc, & +! GCAIJS=>GCAIJS_loc, & +! TAJLN, & +! TAJLS, & +! GCAIJ=>GCAIJ_out, & +! TAJL=>TAJL_out + use domain_decomp_atm, only : grid + use pario, only : write_dist_data,read_dist_data,write_data,read_data + implicit none + integer fid !@var fid unit number of read/write + integer iaction !@var iaction flag for reading or writing to file + select case (iaction) + case (iowrite_single) ! output to acc file + call write_dist_data(grid,fid,'gcaijl',gcaijl) + !call write_dist_data(grid,fid,'gcaij',gcaij) + !call write_data(grid,fid,'tajl',tajl) + !call write_src_dist_data(fid, .false.) + case (iowrite) ! output to restart file + !call gather_zonal_trdiag + !call write_dist_data(grid,fid,'gcaijln',gcaijln) + !call write_dist_data(grid,fid,'gcaijls',gcaijls) + !call write_dist_data(grid,fid,'gcaijs',gcaijs) + !call write_dist_data(grid,fid,'gcaijn',gcaijn) + !call write_data(grid,fid,'tajln',tajln) + !call write_data(grid,fid,'tajls',tajls) + case (ioread) ! input from restart file + !call read_dist_data(grid,fid,'gcaijln',gcaijln) + !call read_dist_data(grid,fid,'gcaijls',gcaijls) + !call read_dist_data(grid,fid,'gcaijs',gcaijs) + !call read_dist_data(grid,fid,'gcaijn',gcaijn) + !call read_data(grid,fid,'tajln',tajln) + !call read_data(grid,fid,'tajls',tajls) + !call scatter_zonal_trdiag + end select + + !call new_io_tcons(fid,iaction) + + return + end subroutine new_io_trdiag + + subroutine def_meta_trdiag(fid) +!@sum def_meta_trdiag defines tracer metadata in acc files +!@auth M. Kelley +!@ver beta + use CHEM_COM + use pario, only : defvar,write_attr + use domain_decomp_atm, only : grid + use cdl_mod, only : defvar_cdl + implicit none + integer :: fid !@var fid file id + +! call write_attr(grid,fid,'gcaij','reduction','sum') +! call write_attr(grid,fid,'gcaij','split_dim',3) +! call defvar(grid,fid,ia_gcaij(1:kgcaij_out), 'ia_gcaij(kgcaij)') +! call defvar(grid,fid,denom_gcaij(1:kgcaij_out), 'denom_gcaij(kgcaij)') +! call defvar(grid,fid,scale_gcaij(1:kgcaij_out), 'scale_gcaij(kgcaij)') +! call defvar(grid,fid,sname_gcaij(1:kgcaij_out), +! 'sname_gcaij(sname_strlen,kgcaij)') +! call defvar(grid,fid,hemis_gcaij,'hemis_gcaij(one,shnhgm,kgcaij)', +! r4_on_disk=.true.) +! call write_attr(grid,fid,'hemis_gcaij','reduction','sum') +! call defvar_cdl(grid,fid,cdl_gcaij, 'cdl_gcaij(cdl_strlen,kcdl_gcaij)') +! #ifdef CUBED_SPHERE +! call defvar_cdl(grid,fid,cdl_gcaij_latlon, +! 'cdl_gcaij_latlon(cdl_strlen,kcdl_gcaij_latlon)') +! #endif + + call write_attr(grid,fid,'gcaijl','reduction','sum') + call write_attr(grid,fid,'gcaijl','split_dim',4) + call defvar(grid,fid,ia_gcaijl(1:kgcaijl_out), 'ia_gcaijl(kgcaijl)') + call defvar(grid,fid,denom_gcaijl(1:kgcaijl_out), 'denom_gcaijl(kgcaijl)') + call defvar(grid,fid,scale_gcaijl(1:kgcaijl_out), 'scale_gcaijl(kgcaijl)') + call defvar(grid,fid,sname_gcaijl(1:kgcaijl_out), 'sname_gcaijl(sname_strlen,kgcaijl)') + call defvar_cdl(grid,fid,cdl_gcaijl, 'cdl_gcaijl(cdl_strlen,kcdl_gcaijl)') +#ifdef CUBED_SPHERE + call defvar_cdl(grid,fid,cdl_gcaijl_latlon, 'cdl_gcaijl_latlon(cdl_strlen,kcdl_gcaijl_latlon)') +#endif + +! call write_attr(grid,fid,'tajl','reduction','sum') +! call write_attr(grid,fid,'tajl','split_dim',3) +! call defvar(grid,fid,ia_tajl(1:ktajl_out), 'ia_tajl(ktajl)') +! call defvar(grid,fid,denom_tajl(1:ktajl_out), 'denom_tajl(ktajl)') +! call defvar(grid,fid,scale_tajl(1:ktajl_out), 'scale_tajl(ktajl)') +! call defvar(grid,fid,sname_tajl(1:ktajl_out), +! 'sname_tajl(sname_strlen,ktajl)') +! call defvar_cdl(grid,fid,cdl_tajl, 'cdl_tajl(cdl_strlen,kcdl_tajl)') +! call defvar(grid,fid,hemis_tajl,'hemis_tajl(shnhgm,lm,ktajl)', +! r4_on_disk=.true.) +! call write_attr(grid,fid,'hemis_tajl','reduction','sum') +! call defvar(grid,fid,vmean_tajl, +! 'vmean_tajl(jm_budg_plus3,one,ktajl)',r4_on_disk=.true.) +! call write_attr(grid,fid,'vmean_tajl','reduction','sum') + + return + end subroutine def_meta_trdiag + + subroutine write_meta_trdiag(fid) +!@sum write_meta_trdiag write tracer accumulation metadata to file +!@auth M. Kelley + use CHEM_COM + use pario, only : write_dist_data,write_data + use domain_decomp_atm, only : grid + use cdl_mod, only : write_cdl + implicit none + integer :: fid !@var fid file id + +! call write_data(grid,fid,'hemis_gcaij',hemis_gcaij) +! call write_data(grid,fid,'ia_gcaij',ia_gcaij(1:kgcaij_out)) +! call write_data(grid,fid,'denom_gcaij',denom_gcaij(1:kgcaij_out)) +! call write_data(grid,fid,'scale_gcaij',scale_gcaij(1:kgcaij_out)) +! call write_data(grid,fid,'sname_gcaij',sname_gcaij(1:kgcaij_out)) +! call write_cdl(grid,fid,'cdl_gcaij',cdl_gcaij) +! #ifdef CUBED_SPHERE +! call write_cdl(grid,fid,'cdl_gcaij_latlon',cdl_gcaij_latlon) +! #endif + + call write_data(grid,fid,'ia_gcaijl',ia_gcaijl(1:kgcaijl_out)) + call write_data(grid,fid,'denom_gcaijl',denom_gcaijl(1:kgcaijl_out)) + call write_data(grid,fid,'scale_gcaijl',scale_gcaijl(1:kgcaijl_out)) + call write_data(grid,fid,'sname_gcaijl',sname_gcaijl(1:kgcaijl_out)) + call write_cdl(grid,fid,'cdl_gcaijl',cdl_gcaijl) +#ifdef CUBED_SPHERE + call write_cdl(grid,fid,'cdl_gcaijl_latlon',cdl_gcaijl_latlon) +#endif + +! call write_data(grid,fid,'hemis_tajl',hemis_tajl) +! call write_data(grid,fid,'vmean_tajl',vmean_tajl) +! call write_data(grid,fid,'ia_tajl',ia_tajl(1:ktajl_out)) +! call write_data(grid,fid,'denom_tajl',denom_tajl(1:ktajl_out)) +! call write_data(grid,fid,'scale_tajl',scale_tajl(1:ktajl_out)) +! call write_data(grid,fid,'sname_tajl',sname_tajl(1:ktajl_out)) +! call write_cdl(grid,fid,'cdl_tajl',cdl_tajl) + + return + end subroutine write_meta_trdiag diff --git a/model/CHEM_DRV.F90 b/model/CHEM_DRV.F90 new file mode 100644 index 00000000..d3791dda --- /dev/null +++ b/model/CHEM_DRV.F90 @@ -0,0 +1,3146 @@ +#include "rundeck_opts.h" +module CHEM_DRV + !================================================================================================ + ! Module CHEM_DRV is a module that enables ModelE to drive the GEOS-Chem + ! chemistry-transport model. Initial version Jul 12, 2020. + ! + ! Author: Lee T. Murray (lee.murray@rochester.edu) + !=============================================================================================== + USE QUSDEF, ONLY : nmom + USE RESOLUTION, ONLY : im, jm, lm + USE ERRCODE_MOD, ONLY : GC_SUCCESS + USE CHEM_COM, ONLY : IsAdvected, NTM, TrM, TrMom, TrName + + USE Input_Opt_Mod, ONLY: OptInput + USE State_Chm_Mod, ONLY: ChmState + USE State_Grid_Mod, ONLY: GrdState + USE State_Met_Mod, ONLY: MetState + USE State_Diag_Mod, ONLY: DgnState + USE DiagList_Mod, ONLY: DgnList, Init_DiagList, Print_DiagList + USE TaggedDiagList_Mod, ONLY: TaggedDgnList, Init_TaggedDiagList, Print_TaggedDiagList + USE HCO_Types_Mod, ONLY: ConfigObj + USE Precision_Mod, ONLY: f8, fp + + IMPLICIT NONE + PRIVATE + + PUBLIC :: INIT_CHEM + PUBLIC :: DO_CHEM + PUBLIC :: IO_CHEM + PUBLIC :: TrDYNAM + PUBLIC :: accumGCsubdd + PUBLIC :: NYMDb + PUBLIC :: NHMSb + PUBLIC :: NYMDe + PUBLIC :: NHMSe + + SAVE + + TYPE(OptInput) :: Input_Opt ! Input Options (same for all domains) + TYPE(MetState) :: State_Met ! Meteorology state + TYPE(ChmState) :: State_Chm ! Chemistry state + TYPE(DgnState) :: State_Diag ! Diagnostics state + TYPE(DgnList) :: Diag_List ! Diagnostics state + TYPE(TaggedDgnList) :: TaggedDiag_List ! Diagnostics state + TYPE(GrdState) :: State_Grid ! Grid state + + + ! Start, stop and size of main grid + INTEGER :: J_1, J_0, I_1, I_0, J_0H, J_1H, NI, NJ + ! Start and end date and time + INTEGER :: NYMDb, NHMSb, NYMDe, NHMSe + + ! Default flags for GEOS-Chem operators to use; may be overwritten by rundeck + LOGICAL :: DoGCConv = .true. + LOGICAL :: DoGCEmis = .true. + LOGICAL :: DoGCTend = .true. + LOGICAL :: DoGCTurb = .true. + LOGICAL :: DoGCChem = .true. + LOGICAL :: DoGCDryDep = .true. + LOGICAL :: DoGCWetDep = .true. + + LOGICAL :: first_chem = .true. + + !----------------------------------------------------------------- + ! 40-level GISS grid + !----------------------------------------------------------------- + + ! Ap [hPa] for 40 levels (41 edges) + REAL(fp), PARAMETER :: AP(41) = (/ & + 0.000000, 3.597122, 7.553957, 12.050360, & + 16.906475, 22.302158, 28.597122, 35.791367, & + 43.884892, 52.517986, 61.510791, 70.683453, & + 80.035971, 89.028777, 97.661871, 105.755396, & + 113.309353, 120.143885, 126.258993, 131.834532, & + 136.870504, 141.546763, 145.863309, 150.000000, & + 128.000000, 108.000000, 90.000000, 73.000000, & + 57.000000, 43.000000, 31.000000, 20.000000, & + 10.000000, 5.620000, 3.160000, 1.780000, & + 1.000000, 0.562000, 0.316000, 0.178000, & + 0.100000 /) + + ! Bp [unitless] for 40 levels (41 edges) + REAL(fp), PARAMETER :: BP(41) = (/ & + 1.00000000, 0.97601918, 0.94964029, 0.91966427, & + 0.88729017, 0.85131894, 0.80935252, 0.76139089, & + 0.70743405, 0.64988010, 0.58992806, 0.52877698, & + 0.46642686, 0.40647482, 0.34892086, 0.29496403, & + 0.24460432, 0.19904077, 0.15827338, 0.12110312, & + 0.08752998, 0.05635492, 0.02757794, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000, 0.00000000, 0.00000000, 0.00000000, & + 0.00000000 /) + +CONTAINS + + !========================================================================================================== + + SUBROUTINE DO_CHEM + + ! ModelE modules + USE DOMAIN_DECOMP_ATM, ONLY : AM_I_ROOT, GRID, getDomainBounds, hasnorthpole, hassouthpole + USE DOMAIN_DECOMP_1D, ONLY : HALO_UPDATE, SOUTH, NORTH + USE MODEL_COM, ONLY : modelEclock, itime, ItimeI, DTsrc + USE ATM_COM, ONLY : pedn, pmid, pk, ptropo, zatmo, mws, t, q, ualij, valij, qci, qcl +#ifdef CALC_MERRA2_LIKE_DIAGS + USE CLOUDS_COM, ONLY : tauss, taumc, cldmc, cldss, cldss3d, pficu, pflcu, pfilsan, pfllsan + USE CLOUDS_COM, ONLY : dtrain, dqrcu, dqrlsan, reevapcn, reevapls, cmfmc +#endif + USE FLUXES, ONLY : atmsrf, atmlnd, prec, precss, focean, fland, flice + USE GEOM, ONLY : axyp , byaxyp + USE GHY_COM, ONLY : fearth, wearth, aiearth, wfcs +#ifdef CALC_MERRA2_LIKE_DIAGS + USE GHY_COM, ONLY : lai_save, z0m_save +#endif + USE LAKES_COM, ONLY : flake +#ifdef CALC_MERRA2_LIKE_DIAGS + USE O3mod, ONLY : save_to3 + USE RAD_COM, ONLY : save_alb, taui3d, tauw3d +#endif + USE RAD_COM, ONLY : cfrac, srdn, fsrdir, srvissurf, cosz1, save_cosz2 + USE SEAICE_COM, ONLY : si_atm, si_ocn + USE CONSTANT, ONLY : bygrav, lhe, tf, teeny + + ! GEOS-Chem modules + USE HCO_Interface_Common, ONLY : SetHcoTime + USE Time_Mod, ONLY : Accept_External_Date_Time + USE Emissions_Mod, ONLY : Emissions_Run + USE State_Chm_Mod, ONLY : Ind_ + USE Calc_Met_Mod, ONLY : AirQnt + USE Pressure_Mod, ONLY : Set_Floating_Pressures + USE Pressure_Mod, ONLY : Accept_External_Pedge + USE Calc_Met_Mod, ONLY : Set_Dry_Surface_Pressure + USE Calc_Met_Mod, ONLY : GCHP_Cap_Tropopause_Prs + USE PBL_Mix_Mod, ONLY : Compute_PBL_Height + USE VDIFF_Mod, ONLY : Max_PblHt_For_Vdiff + USE ERROR_MOD, ONLY : Safe_Div, IT_IS_NAN, ERROR_STOP + USE UnitConv_Mod, ONLY : Convert_Spc_Units, KG_SPECIES, & + MOLES_SPECIES_PER_MOLES_DRY_AIR + + USE Photolysis_Mod, ONLY : Init_Photolysis + + IMPLICIT NONE + + INTEGER :: NYMD, NHMS, YEAR, MONTH, DAY + INTEGER :: DOY, HOUR, MINUTE, SECOND + INTEGER :: I, J, L, K, N, M + INTEGER :: II, JJ, III, JJJ, RC + REAL*4 :: MINUTES, hElapsed, UTC + REAL*8 :: sElapsed + LOGICAL :: IsChemTime, IsRadTime + + CHARACTER(LEN=256) :: ThisLoc + CHARACTER(LEN=512) :: ErrMsg + + ! External functions (from shared/Utilities.F90) + REAL*8 SLP + REAL*8 QSAT + + LOGICAL, SAVE :: FIRST_CHEM = .true. + + ! Assume initial success + RC = GC_SUCCESS + + !==================================== + ! Get time information + !==================================== + YEAR = modelEclock%getYear() + MONTH = modelEclock%getMonth() + DAY = modelEclock%getDate() + HOUR = modelEclock%getHour() + MINUTE = DTsrc*ITIME ! This works because model must start at top of hour + MINUTES = modulo( MINUTE, 3600 ) / 60d0 + MINUTE = floor( MINUTES ) + SECOND = 0 + + NYMD = year*10000 + month*100 + day + NHMS = hour*10000 + minute*100 + second + + UTC = HOUR + MINUTE / 60.0 + + hElapsed = (DTsrc*(ITIME-ItimeI)) / 3600d0 ! Hours elapsed + sElapsed = (DTsrc*(ITIME-ItimeI)) ! Seconds elapsed + + ! Is it time for chemistry? + IF ( ( sElapsed / DTsrc ) == FLOOR( sElapsed / DTsrc ) ) THEN + IsChemTime = .TRUE. + ELSE + IsChemTime = .FALSE. + ENDIF + + IsRadTime = .FALSE. ! Hardwire RRTMG off + + DO JJJ = J_0, J_1 + DO III = I_0, I_1 + + ! GEOS-Chem local index + II = III - I_0 + 1 + JJ = JJJ - J_0 + 1 + + ! GISS meteorology index (GISS only has one polar box) + I = III + J = JJJ + if(hassouthpole(grid) .and. JJJ .eq. J_0 ) I = 1 + if(hasnorthpole(grid) .and. JJJ .eq. J_1 ) I = 1 + + !---------------------------------------------------------------------- + ! Surface fields + !---------------------------------------------------------------------- + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Visible surface albedo [1] + State_Met%ALBD (II,JJ) = save_alb(i,j) +#endif + + ! Grid box surface area [cm2] + State_Met%AREA_M2 (II,JJ) = axyp(i,j) + + ! Chemistry grid level [1] + State_Met%ChemGridLev (II,JJ) = LM + + ! Column cloud fraction [1] + State_Met%CLDFRC (II,JJ) = cfrac(i,j) + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Max cloud top height [levels] + State_Met%CLDTOPS(II,JJ) = 1 + DO K = LM, 1, -1 + IF ( State_Met%CMFMC(II,JJ,K) > 0d0 ) THEN + State_Met%CLDTOPS(II,JJ) = K + 1 + EXIT + ENDIF + ENDDO +#endif + + ! Latent heat flux [W/m2] + State_Met%EFLUX (II,JJ) = -atmsrf%latht(i,j)/dtsrc + + ! Olson land fraction [1] + State_Met%FRCLND (II,JJ) = fland(i,j) + + ! Fraction of lake [1] + State_Met%FRLAKE (II,JJ) = flake(i,j) + + ! Fraction of land [1] + State_Met%FRLAND (II,JJ) = fland(i,j) + + ! Fraction of land ice [1] + State_Met%FRLANDICE (II,JJ) = flice(i,j) + + ! Fraction of ocean [1] + State_Met%FROCEAN (II,JJ) = focean(i,j) + + ! Sfc sea ice fraction [1] + State_Met%FRSEAICE (II,JJ) = si_atm%RSI(i,j)*focean(i,j) + + ! Surface snow fraction [1] + State_Met%FRSNOW (II,JJ) = 0.0 + if ( si_ocn%snowi(i,j) > 0. ) & + State_Met%FRSNOW(II,JJ) = si_atm%rsi(i,j)*flake(i,j) + if ( atmlnd%SNOWE(i,j) > 0. ) & + State_Met%FRSNOW(II,JJ) = State_Met%FRSNOW(II,JJ) + atmlnd%snowfr(i,j)*fearth(i,j) + State_Met%FRSNOW(II,JJ) = min( 1.0, State_Met%FRSNOW(II,JJ) ) + + ! Root soil wetness [1] + State_Met%GWETROOT (II,JJ) = 0.0 + if ( fearth(i,j) .gt. 0 ) then + State_Met%GWETROOT (II,JJ) = (wearth(i,j)+aiearth(i,j))/(wfcs(i,j)+1e-20) + else + State_Met%GWETROOT (II,JJ) = 1 ! Set to 1 over oceans to match MERRA-2 + end if + + ! Top soil moisture [1] (assume same as GWETROOT for now) + State_Met%GWETTOP (II,JJ) = 0.0 + if ( fearth(i,j) .gt. 0 ) then + State_Met%GWETROOT (II,JJ) = (wearth(i,j)+aiearth(i,j))/(wfcs(i,j)+1e-20) + else + State_Met%GWETROOT (II,JJ) = 1 ! Set to 1 over oceans to match MERRA-2 + end if + + ! Sensible heat flux [W/m2] + State_Met%HFLUX (II,JJ) = -atmsrf%sensht(i,j)/dtsrc + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Leaf area index [m2/m2] (online) + State_Met%LAI (II,JJ) = lai_save(i,j) +#endif + + ! Direct photsynthetically active radiation [W/m2] + State_Met%PARDR (II,JJ) = 0.82*srvissurf(i,j)*(fsrdir(i,j))*cosz1(i,j) + + ! Diffuse photsynthetically active radiation [W/m2] + State_Met%PARDF (II,JJ) = 0.82*srvissurf(i,j)*(1d0-fsrdir(i,j))*cosz1(i,j) + + ! PBL height [m] PBL top layer [1] + State_Met%PBLH (II,JJ) = atmsrf%dblavg(i,j) + + ! Surface geopotential height [m] + State_Met%PHIS (II,JJ) = zatmo(i,j) + + ! Anvil previp @ ground [kg/m2/s] -> mm/d + State_Met%PRECANV (II,JJ) = 0.0 + + ! Conv precip @ ground [kg/m2/s] -> mm/d + State_Met%PRECCON (II,JJ) = 86400d0*max(0.,prec(i,j)-precss(i,j))/dtsrc + + ! Total precip @ ground [kg/m2/s] -> mm/d + State_Met%PRECTOT (II,JJ) = 86400d0*prec(i,j)/dtsrc + + ! LS precip @ ground [kg/m2/s] -> mm/d + State_Met%PRECLSC (II,JJ) = 86400d0*precss(i,j)/dtsrc + + ! Wet surface pressure at start of timestep [hPa] + State_Met%PS1_WET (II,JJ) = pedn(1,i,j) + + ! Wet surface pressure at end of timestep [hPa] + State_Met%PS2_WET (II,JJ) = pedn(1,i,j) + + ! Wet interpolated surface pressure [hPa] + State_Met%PSC2_WET (II,JJ) = pedn(1,i,j) + + ! Dry surface pressure at start of timestep [hPa] + State_Met%PS1_DRY (II,JJ) = pedn(1,i,j) + + ! Dry surface pressure at end of timestep [hPa] + State_Met%PS2_DRY (II,JJ) = pedn(1,i,j) + + ! Dry interpolated surface pressure [hPa] + State_Met%PSC2_DRY (II,JJ) = pedn(1,i,j) + + ! Sea ice coverage 00-10% to 90-100% (only used by Hg) + State_Met%SEAICE00 (II,JJ) = 0.0 + State_Met%SEAICE10 (II,JJ) = 0.0 + State_Met%SEAICE20 (II,JJ) = 0.0 + State_Met%SEAICE30 (II,JJ) = 0.0 + State_Met%SEAICE40 (II,JJ) = 0.0 + State_Met%SEAICE50 (II,JJ) = 0.0 + State_Met%SEAICE60 (II,JJ) = 0.0 + State_Met%SEAICE70 (II,JJ) = 0.0 + State_Met%SEAICE80 (II,JJ) = 0.0 + State_Met%SEAICE90 (II,JJ) = 0.0 + + ! Sea level pressure [hPa] + State_Met%SLP (II,JJ) = slp(pedn(1,i,j),atmsrf%tsavg(i,j),bygrav*zatmo(i,j))*100. + + ! Snow depth [m] + State_Met%SNODP (II,JJ) = atmsrf%SNOWDP(i,j) * ( 1d0 - flice(i,j) ) + + ! Snow mass [kg/m2] + State_Met%SNOMAS (II,JJ) = atmsrf%SNOW(i,j) + + ! COS(solar zenith angle) at current time + State_Met%SUNCOS (II,JJ) = cosz1(i,j) + + ! COS(solar zenith angle) at midpoint of chem timestep + State_Met%SUNCOSmid (II,JJ) = save_cosz2(i,j) + + ! Incident radiation @ ground [W/m2] + State_Met%SWGDN (II,JJ) = srdn(i,j)*save_cosz2(i,j) + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Total overhead O3 column [DU] + State_Met%TO3 (II,JJ) = save_to3(i,j) +#endif + + ! Tropopause pressure [hPa] + State_Met%TROPP (II,JJ) = ptropo(i,j) + + ! Tropopause level [1] + State_Met%TropLev(II,JJ) = 1 + DO K = LM, 1, -1 + IF ( pedn(k,i,j) >= ptropo(i,j) ) THEN + State_Met%TropLev(II,JJ) = K + EXIT + ENDIF + ENDDO + + ! Tropopause height [km] + State_Met%TropHt (II,JJ) = 0 + DO K = 1, State_Met%TropLev(II,JJ)-1 + State_Met%TropHt(II,JJ) = State_Met%TropHt(II,JJ) + State_Met%BXHEIGHT(II,JJ,K) * 1d-3 + ENDDO + State_Met%TropHt(II,JJ) = State_Met%TropHt(II,JJ) + & + State_Met%BXHEIGHT(II,JJ,State_Met%TropLev(II,JJ)) * 0.5d-3 + + ! Surface temperature [K] + State_Met%TS (II,JJ) = atmsrf%tsavg(i,j) - tf + 273.15 + + ! Surface skin temperature [K] + State_Met%TSKIN (II,JJ) = atmsrf%gtempr(i,j) + + ! E/W wind speed @ 10m ht [m/s] + State_Met%U10M (II,JJ) = atmsrf%usavg(i,j) + + ! Friction velocity [m/s] + State_Met%USTAR (II,JJ) = atmsrf%ustar_pbl(i,j) + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! UV surface albedo [1] + State_Met%UVALBEDO (II,JJ) = save_alb(i,j) +#endif + + ! N/S wind speed @ 10m ht [m/s] + State_Met%V10M (II,JJ) = atmsrf%vsavg(i,j) + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Surface roughness height [m] + State_Met%Z0 (II,JJ) = z0m_save(i,j) +#endif + +#ifdef MODEL_GEOS + ! Convective fraction [1] (only used by GEOS) + State_Met%CNV_FRC (II,JJ) = 0.0 +#endif + + ENDDO + ENDDO + +! DO J = State_Grid%NY,1,-1 +! WRITE(6,'(144F5.2)') State_Met%SUNCOSmid(:,J) +! ENDDO +! CALL FLUSH(6) +! STOP + + !IF ( am_I_Root() ) WRITE(6,*) "SUNCOSmid", State_Met%SUNCOSmid(:,40) + + DO K=1,LM + DO JJJ=J_0,J_1 + DO III=I_0,I_1 + + ! GEOS-Chem local index + II = III - I_0 + 1 + JJ = JJJ - J_0 + 1 + + ! GISS meteorology index (GISS only has one polar box) + I = III + J = JJJ + if(hassouthpole(grid) .and. JJJ .eq. J_0 ) I = 1 + if(hasnorthpole(grid) .and. JJJ .eq. J_1 ) I = 1 + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! 3-D cloud fraction [1] + State_Met%CLDF (II,JJ,K) = min(1.0,CLDSS3D(k,i,j) + CLDMC(k,i,j)) + + ! Cloud mass flux [kg/m2/s] + State_Met%CMFMC (II,JJ,K) = cmfmc(i,j,k) + + ! Conv precip production rate [kg/kg/s] (assume per dry air) + State_Met%DQRCU (II,JJ,K) = dqrcu(i,j,k) + + ! LS precip prod rate [kg/kg/s] (assume per dry air) + State_Met%DQRLSAN (II,JJ,K) = dqrlsan(i,j,k) + + ! Detrainment flux [kg/m2/s] + State_Met%DTRAIN (II,JJ,K) = dtrain(i,j,k) +#endif + + ! Vertical pressure velocity [Pa/s] + State_Met%OMEGA (II,JJ,K) = MWs(i,j,k)*byaxyp(i,j)*100.0/dtsrc + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Visible optical depth [1] + State_Met%OPTD (II,JJ,K) = (cldss(k,i,j)*TAUSS(k,i,j) + & + cldmc(k,i,j)*TAUMC(k,i,j) ) / ( cldss(k,i,j) + cldmc(k,i,j) + teeny ) +#endif + + ! Wet air press @ level edges [hPa] + State_Met%PEDGE (II,JJ,K) = pedn(k,i,j) + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Dwn flux ice prec:conv [kg/m2/s] + State_Met%PFICU (II,JJ,K) = pficu(i,j,k) + + ! Dwn flux ice prec:LS+anv [kg/m2/s] + State_Met%PFILSAN (II,JJ,K) = pfilsan(i,j,k) + + ! Dwn flux liq prec:conv [kg/m2/s] + State_Met%PFLCU (II,JJ,K) = pflcu(i,j,k) + + ! Dwn flux ice prec:LS+anv [kg/m2/s] + State_Met%PFLLSAN (II,JJ,K) = pfllsan(i,j,k) +#endif + + ! Ice mixing ratio [kg/kg dry air] + State_Met%QI (II,JJ,K) = qci(i,j,k) + + ! Water mixing ratio [kg/kg dry air] + State_Met%QL (II,JJ,K) = qcl(i,j,k) + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Evap of precip conv [kg/kg/s] (assume per dry air) + State_Met%REEVAPCN (II,JJ,K) = reevapcn(i,j,k) + + ! Evap of precip LS+anvil [kg/kg/s] (assume per dry air) + State_Met%REEVAPLS (II,JJ,K) = reevapls(i,j,k) +#endif + + ! Relative humidity [%] + State_Met%RH (II,JJ,K) = 100.*q(i,j,k)/QSAT(t(i,j,k)*pk(k,i,j),LHE,pmid(k,i,j)) + IF ( IT_IS_NAN( State_Met%RH(II,JJ,K) ) ) THEN + WRITE(6,*) II,JJ,K, q(i,j,k), QSAT(t(i,j,k)*pk(k,i,j),LHE,pmid(k,i,j)), & + t(i,j,k), pk(k,i,j), LHE, pmid(k,i,j) + CALL STOP_MODEL("Bad RH",255) + ENDIF + + ! Specific humidity [g H2O/kg tot air] + State_Met%SPHU (II,JJ,K) = q(i,j,k) + + ! Specific humidity at start of timestep [g/kg] + State_Met%SPHU1 (II,JJ,K) = q(i,j,k) + + ! Specific humidity at end of timestep [g/kg] + State_Met%SPHU2 (II,JJ,K) = q(i,j,k) + + ! Temperature [K] + State_Met%T (II,JJ,K) = t(i,j,k)*pk(k,i,j) + +#ifdef CALC_MERRA2_LIKE_DIAGS + ! Optical depth of ice clouds [1] + State_Met%TAUCLI (II,JJ,K) = taui3d(i,j,k) + + ! Optical depth of H2O clouds [1] + State_Met%TAUCLW (II,JJ,K) = tauw3d(i,j,k) +#endif + + ! Temperature at start of timestep [K] + State_Met%TMPU1 (II,JJ,K) = t(i,j,k)*pk(k,i,j) + + ! Temperature at end of timestep [K] + State_Met%TMPU2 (II,JJ,K) = t(i,j,k)*pk(k,i,j) + + ! E/W component of wind [m s-1] + State_Met%U (II,JJ,K) = ualij(k,i,j) + +#ifdef MODEL_GEOS + ! Updraft vertical velocity [hPa/s] (only used by GEOS) + State_Met%UPDVVEL (II,JJ,K) = 0d0 +#endif + + ! N/S component of wind [m s-1] + State_Met%V (II,JJ,K) = valij(k,i,j) + + ENDDO + ENDDO + ENDDO + + ! Model top + DO J=J_0,J_1 + DO I=I_0,I_1 + + II = I - I_0 + 1 + JJ = J - J_0 + 1 + + State_Met%PEDGE (II,JJ,LM+1) = pedn(LM+1,i,j) +#ifdef CALC_MERRA2_LIKE_DIAGS + State_Met%CMFMC (II,JJ,LM+1) = cmfmc(i,j,LM+1) + State_Met%PFICU (II,JJ,LM+1) = pficu(i,j,LM+1) + State_Met%PFILSAN (II,JJ,LM+1) = pfilsan(i,j,LM+1) + State_Met%PFLCU (II,JJ,LM+1) = pflcu(i,j,LM+1) + State_Met%PFLLSAN (II,JJ,LM+1) = pfllsan(i,j,LM+1) +#endif + + ENDDO + ENDDO + + ! Set the pressure at level edges [hPa] from the GCM + CALL Accept_External_Pedge( State_Met = State_Met, & + State_Grid = State_Grid, & + RC = RC ) + + ! Set dry surface pressure (PS1_DRY) from State_Met%PS1_WET + CALL SET_DRY_SURFACE_PRESSURE( State_Grid, State_Met, 1 ) + + ! Set dry surface pressure (PS2_DRY) from State_Met%PS2_WET + CALL SET_DRY_SURFACE_PRESSURE( State_Grid, State_Met, 2 ) + + ! Initialize surface pressures to match the post-advection pressures + State_Met%PSC2_WET = State_Met%PS1_WET + State_Met%PSC2_DRY = State_Met%PS1_DRY + CALL SET_FLOATING_PRESSURES( State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) RETURN + + ! Define airmass and related quantities + CALL AirQnt( Input_Opt, State_Chm, State_Grid, State_Met, RC, .FALSE. ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "AirQnt", 255 ) + + ! Cap the polar tropopause pressures at 200 hPa, in order to avoid + ! tropospheric chemistry from happening too high up (cf. J. Logan) + CALL GCHP_Cap_Tropopause_Prs( Input_Opt = Input_Opt, & + State_Grid = State_Grid, & + State_Met = State_Met, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "GCHP_Cap_Tropopause_Prs", 255 ) + + ! Call PBL quantities. Those are always needed + CALL Compute_Pbl_Height( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "COMPUTE_PBL_HEIGHT", 255 ) + + IF ( am_I_Root() ) THEN + WRITE(6,"(I4.4,A,I2.2,A,I2.2,X,I2.2,A,I2.2,A,I2.2)") & + YEAR, '-', MONTH, '-', DAY, HOUR, ':', MINUTE, ':', SECOND + ENDIF + + IF ( FIRST_CHEM ) THEN + + ! Set species units to kg to be put into TrM + DO N=1, State_Chm%nSpecies + State_Chm%Species(N)%Units = KG_SPECIES + ENDDO + + ! Put State_Chm back in TrM + DO N=1,NTM + DO L=1,LM + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + TrM( I, J, L, N ) = State_Chm%Species(N)%Conc(II,JJ,L) + ENDDO + ENDDO + ENDDO + CALL HALO_UPDATE( GRID, TrM(:,:,:,N) ) + DO M=1,NMOM + CALL HALO_UPDATE( GRID, TrMom(M,:,:,:,N) ) + ENDDO + ENDDO + + ! Initialize PBL quantities from the initial met fields + CALL Compute_Pbl_Height( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "COMPUTE_PBL_HEIGHT" at initialization!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Once the initial met fields have been read in, we need to find + ! the maximum PBL level for the non-local mixing algorithm. + CALL Max_PblHt_For_Vdiff( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Max_PblHt_for_Vdiff"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Initialize photolysis, including reading files for optical properties + IF ( Input_Opt%ITS_A_FULLCHEM_SIM .or. & + Input_Opt%ITS_AN_AEROSOL_SIM .or. & + Input_Opt%ITS_A_MERCURY_SIM ) THEN + CALL Init_Photolysis( Input_Opt, State_Grid, State_Chm, State_Diag, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Init_Photolysis"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + ENDIF + + FIRST_CHEM = .FALSE. + ELSE + ! Convert to kg + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = KG_SPECIES, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Convert_Spc_Units", 255 ) + ENDIF + + ! Copy TrM into State_Chm + DO N=1,NTM + DO L=1,LM + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + State_Chm%Species(N)%Conc(II,JJ,L) = TrM( I, J, L, N ) + ENDDO + ENDDO + ENDDO + ENDDO + + ! Convert to v/v dry + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = MOLES_SPECIES_PER_MOLES_DRY_AIR, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Convert_Spc_Units", 255 ) + + !===================== + ! Call GEOS-Chem + !===================== + CALL CHEM_CHUNK_RUN( & + nymd, nhms, year, month, & + day, doy, hour, minute, & + second, utc, hElapsed, Input_Opt, & + State_Chm, State_Diag, State_Grid, State_Met, & + -1, IsChemTime, IsRadTime, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Chem_Chunk_Run", 255 ) + + ! Convert back to kg for GCM advection + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = KG_SPECIES, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Convert_Spc_Units", 255 ) + + ! Copy State_Chm back in TrM + DO N=1,NTM + DO L=1,LM + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + TrM( I, J, L, N ) = State_Chm%Species(N)%Conc(II,JJ,L) + ENDDO + ENDDO + ENDDO + CALL HALO_UPDATE( GRID, TrM(:,:,:,N) ) + DO M=1,NMOM + CALL HALO_UPDATE( GRID, TrMom(M,:,:,:,N) ) + ENDDO + ENDDO + + ! IF ( AM_I_ROOT() ) THEN + ! WRITE(6,*) State_Chm%Species(182)%Conc(1,:,1) + ! ENDIF + + !IF ( AM_I_ROOT() ) THEN + ! WRITE(6,*) "" + ! WRITE(6,*) 'O3:', TrM(1,:,1,182) + ! WRITE(6,*) "" + ! WRITE(6,*) "OH:", TrM(1,:,1,306) + ! WRITE(6,*) "" + !ENDIF + + RETURN + + END SUBROUTINE DO_CHEM + + !========================================================================================================== + + SUBROUTINE TrDYNAM + + USE DOMAIN_DECOMP_ATM, ONLY : AM_I_ROOT, GRID, HALO_UPDATE + USE TRACER_ADV, ONLY : AADVQ, sfbm, sfcm + + IMPLICIT NONE + + INTEGER N, M + + IF ( .not. ALLOCATED( sfbm ) ) THEN + WRITE(6,*) 'Not allocated yet' + CALL FLUSH(6) + STOP + ENDIF + + ! Uses the fluxes MUs,MVs,MWs from DYNAM and QDYNAM + DO N=1,NTM + + IF ( IsAdvected(N) ) THEN + + CALL HALO_UPDATE( GRID, TrM(:,:,:,n) ) + DO M=1,NMOM + CALL HALO_UPDATE( GRID, TrMom(M,:,:,:,N) ) + ENDDO + + CALL AADVQ( TrM(:,:,:,n), TrMom(:,:,:,:,n), .true., TrName(n) ) + + CALL HALO_UPDATE( GRID, TrM(:,:,:,n) ) + DO M=1,NMOM + CALL HALO_UPDATE( GRID, TrMom(M,:,:,:,N) ) + ENDDO + + ENDIF + + ENDDO + + RETURN + + END SUBROUTINE TrDYNAM + + !========================================================================================================== + + SUBROUTINE CHEM_Chunk_Run( nymd, nhms, year, month, & + day, dayOfYr, hour, minute, & + second, utc, hElapsed, Input_Opt, & + State_Chm, State_Diag, State_Grid, State_Met, & + Phase, IsChemTime, IsRadTime, & + RC ) + + + ! Based on GIGC_Chunk_Run + + ! GEOS-Chem state objects + USE Input_Opt_Mod, ONLY : OptInput + USE State_Chm_Mod, ONLY : ChmState + USE State_Grid_Mod, ONLY : GrdState + USE State_Met_Mod, ONLY : MetState + + ! GEOS-Chem components + USE Chemistry_Mod, ONLY : Do_Chemistry, Recompute_OD + USE Convection_Mod, ONLY : Do_Convection + USE DryDep_Mod, ONLY : Do_DryDep + USE Emissions_Mod, ONLY : Emissions_Run + USE Mixing_Mod, ONLY : Do_Tend, Do_Mixing + USE WetScav_Mod, ONLY : Setup_WetScav, Do_WetDep + + ! HEMCO components (eventually moved to a separate GridComp?) + USE HCO_State_GC_Mod, ONLY : HcoState, ExtState + USE HCO_Interface_Common, ONLY : SetHcoTime + USE HCO_Interface_GC_Mod, ONLY : Compute_Sflx_For_Vdiff + + ! Specialized subroutines + USE Calc_Met_Mod, ONLY : AirQnt + USE Calc_Met_Mod, ONLY : Set_Dry_Surface_Pressure + USE Calc_Met_Mod, ONLY : Set_Clock_Tracer + USE Calc_Met_Mod, ONLY : GCHP_Cap_Tropopause_Prs + USE Set_Global_CH4_Mod, ONLY : Set_CH4 + USE MODIS_LAI_Mod, ONLY : Compute_XLAI + USE PBL_Mix_Mod, ONLY : Compute_PBL_Height + USE Pressure_Mod, ONLY : Set_Floating_Pressures + USE TOMS_Mod, ONLY : Compute_Overhead_O3 + USE UCX_Mod, ONLY : Set_H2O_Trac + USE Vdiff_Mod, ONLY : Max_PblHt_for_Vdiff + + ! Utilities + USE Pressure_Mod, ONLY : Accept_External_Pedge + USE State_Chm_Mod, ONLY : IND_ + USE Time_Mod, ONLY : Accept_External_Date_Time + USE UnitConv_Mod, ONLY : Convert_Spc_Units, KG_SPECIES_PER_KG_DRY_AIR + + ! Diagnostics + USE Diagnostics_Mod, ONLY : Zero_Diagnostics_StartofTimestep + USE Diagnostics_Mod, ONLY : Set_Diagnostics_EndofTimestep + USE Diagnostics_Mod, ONLY : Set_AerMass_Diagnostic + + USE Calc_Met_Mod, ONLY : GET_COSINE_SZA + USE Species_Mod, ONLY : Species + +! +! !INPUT PARAMETERS: +! + INTEGER, INTENT(IN) :: nymd ! YYYY/MM/DD @ current time + INTEGER, INTENT(IN) :: nhms ! hh:mm:ss @ current time + INTEGER, INTENT(IN) :: year ! UTC year + INTEGER, INTENT(IN) :: month ! UTC month + INTEGER, INTENT(IN) :: day ! UTC day + INTEGER, INTENT(IN) :: dayOfYr ! UTC day of year + INTEGER, INTENT(IN) :: hour ! UTC hour + INTEGER, INTENT(IN) :: minute ! UTC minute + INTEGER, INTENT(IN) :: second ! UTC second + REAL*4, INTENT(IN) :: utc ! UTC time [hrs] + REAL*4, INTENT(IN) :: hElapsed ! Elapsed hours + INTEGER, INTENT(IN) :: Phase ! Run phase (-1, 1 or 2) + LOGICAL, INTENT(IN) :: IsChemTime ! Time for chemistry? + LOGICAL, INTENT(IN) :: IsRadTime ! Time for RRTMG? +! +! !INPUT/OUTPUT PARAMETERS: +! + TYPE(OptInput), INTENT(INOUT) :: Input_Opt ! Input Options obj + TYPE(ChmState), INTENT(INOUT) :: State_Chm ! Chemistry State obj + TYPE(DgnState), INTENT(INOUT) :: State_Diag ! Diagnostics State obj + TYPE(GrdState), INTENT(INOUT) :: State_Grid ! Grid State obj + TYPE(MetState), INTENT(INOUT) :: State_Met ! Meteorology State obj +! +! !OUTPUT PARAMETERS: +! + INTEGER, INTENT(OUT) :: RC ! Return code +! +! !REMARKS: +! +! !REVISION HISTORY: +! 18 Jul 2011 - M. Long - Initial Version +! See https://github.com/geoschem/geos-chem for history +!EOP +!------------------------------------------------------------------------------ +!BOC +! TYPE(ESMF_STATE) :: INTSTATE +! TYPE(MAPL_MetaComp), POINTER :: STATE +! TYPE(ESMF_VM) :: VM ! ESMF VM object +! TYPE(ESMF_Field) :: IntField + REAL*8 :: DT + CHARACTER(LEN=512) :: Iam + INTEGER :: HCO_PHASE, previous_units + + ! Local logicals to turn on/off individual components + ! The parts to be executed are based on the input options, + ! the time step and the phase. + LOGICAL :: DoConv + LOGICAL :: DoDryDep + LOGICAL :: DoEmis + LOGICAL :: DoTend + LOGICAL :: DoTurb + LOGICAL :: DoChem + LOGICAL :: DoWetDep + LOGICAL :: DoRad + + ! First call? + LOGICAL, SAVE :: FIRST = .TRUE. + + ! # of times this routine has been called. Only temporary for printing + ! processes on the first 10 calls. + INTEGER, SAVE :: NCALLS = 0 + + ! Strat. H2O settings + LOGICAL :: SetStratH2O + + ! Whether to scale mixing ratio with meteorology update in AirQnt + LOGICAL, SAVE :: scaleMR = .FALSE. + + ! Debug variables + INTEGER, parameter :: I_DBG = 6, J_DBG = 5, L_DBG=1 + + !======================================================================= + ! CHEM_CHUNK_RUN begins here + !======================================================================= + + ! Error trap + Iam = 'GCHP_CHUNK_RUN (gchp_chunk_mod.F90)' + + ! Assume success + RC = GC_SUCCESS + + !======================================================================= + ! Define processes to be covered in this phase + ! + ! In the standard GEOS-Chem, the following operator sequence is used: + ! 1. DryDep (kg) + ! 2. Emissions (kg) + ! 3. Turbulence (v/v) + ! 4. Convection (v/v) + ! 5. Chemistry (kg) + ! 6. Wetdep (kg) + ! + ! The GEOS-5 operator sequence is: + ! 1. Gravity wave drag + ! 2. Moist (convection) + ! 3. Chemistry 1 (drydep and emissions) + ! 4. Surface 1 + ! 5. Turbulence 1 + ! 6. Surface 2 + ! 7. Turbulence 2 + ! 8. Chemistry 2 (chemistry and wet deposition) + ! 9. Radiation + ! + ! Here, we use the following operator sequence: + ! + ! 1. Convection (v/v) --> Phase 1 + ! 2. DryDep (kg) --> Phase 1 + ! 3. Emissions (kg) --> Phase 1 + ! 4a. Tendencies (v/v) --> Phase 1 + ! ------------------------------- + ! 4b. Turbulence (v/v) --> Phase 2 + ! 5. Chemistry (kg) --> Phase 2 + ! 6. WetDep (kg) --> Phase 2 + ! + ! Any of the listed processes is only executed if the corresponding switch + ! in the geoschem_config.yml file is enabled. If the physics component + ! already covers convection or turbulence, they should not be applied here! + ! The tendencies are only applied if turbulence is not done within + ! GEOS-Chem (ckeller, 10/14/14). + ! + ! The standard number of phases in GCHP is 1, set in GCHP.rc, which + ! results in Phase -1 in gchp_chunk_run. This results in executing + ! all GEOS-Chem components in a single run rather than splitting up + ! across two runs as is done in GEOS-5. (ewl, 10/26/18) + !======================================================================= + + ! By default, do processes as defined in geoschem_config.yml. DoTend + ! defined below. + !DoConv = Input_Opt%LCONV ! dynamic time step + !DoDryDep = Input_Opt%LDRYD .AND. IsChemTime ! chemistry time step + !DoEmis = IsChemTime ! chemistry time step + !DoTurb = Input_Opt%LTURB ! dynamic time step + !DoChem = Input_Opt%LCHEM .AND. IsChemTime ! chemistry time step + !DoWetDep = Input_Opt%LWETD ! dynamic time step + !DoRad = Input_Opt%LRAD .AND. IsRadTime ! radiation time step + + ! By default, do processes as defined in rundeck + DoConv = DoGCConv ! dynamic time step + DoDryDep = DOGCDryDep .AND. IsChemTime ! chemistry time step + DoEmis = DoGCEmis ! chemistry time step + DoTurb = DoGCTurb ! dynamic time step + DoChem = DoGCChem .AND. IsChemTime ! chemistry time step + DoWetDep = DoGCWetDep ! dynamic time step + DoRad = .false. + + IF ( Input_Opt%ITS_A_CARBON_SIM ) THEN + DoDryDep = .false. + DoWetDep = .false. + ENDIF + + IF ( Input_Opt%AmIRoot .and. NCALLS < 10 ) THEN + write(6,*) 'DoConv : ', DoConv + write(6,*) 'DoDryDep : ', DoDryDep + write(6,*) 'DoEmis : ', DoEmis + write(6,*) 'DoTurb : ', DoTurb + write(6,*) 'DoChem : ', DoChem + write(6,*) 'DoWetDep : ', DoWetDep + write(6,*) ' ' + ENDIF + + ! If Phase is not -1, only do selected processes for given phases: + ! Phase 1: disable turbulence, chemistry and wet deposition. + IF ( Phase == 1 ) THEN + DoTurb = .FALSE. + DoChem = .FALSE. + DoWetDep = .FALSE. + + ! Phase 2: disable convection, drydep and emissions. + ELSEIF ( Phase == 2 ) THEN + DoConv = .FALSE. + DoDryDep = .FALSE. + DoEmis = .FALSE. + ENDIF + + ! Check if tendencies need be applied. The drydep and emission calls + ! only calculates the emission / drydep rates, but do not apply the + ! tendencies to the tracer array yet. If turbulence is done as part of + ! GEOS-5, we need to make sure that these tendencies are applied to the + ! tracer array. If turbulence is explicitly covered by GEOS-Chem, + ! however, the tendencies become automatically applied within the PBL + ! mixing routines (DO_MIXING), so we should never apply the tendencies + ! in this case. + DoTend = ( DoEmis .OR. DoDryDep ) .AND. .NOT. Input_Opt%LTURB + + !------------------------------------------------------------------------- + ! Pre-Run assignments + !------------------------------------------------------------------------- + + ! Zero out certain State_Diag arrays. This should not be done in a phase 2 + ! call since this can erase diagnostics filled during phase 1 (e.g., drydep) + ! (ckeller, 1/21/2022). + IF ( Phase /= 2 ) THEN + CALL Zero_Diagnostics_StartOfTimestep( Input_Opt, State_Diag, RC ) + ENDIF + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Zero_Diagnostics_StartOfTimestep", 255 ) + + ! Pass time values obtained from the ESMF environment to GEOS-Chem + CALL Accept_External_Date_Time( value_NYMD = nymd, & + value_NHMS = nhms, & + value_YEAR = year, & + value_MONTH = month, & + value_DAY = day, & + value_DAYOFYR = dayOfYr, & + value_HOUR = hour, & + value_MINUTE = minute, & + value_HELAPSED = hElapsed, & + value_UTC = utc, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Accept_External_Date_Time", 255 ) + + ! Pass time values obtained from the ESMF environment to HEMCO + CALL SetHcoTime ( HcoState, ExtState, year, month, day, & + dayOfYr, hour, minute, second, DoEmis, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "SetHcoTime", 255 ) + + ! Calculate MODIS leaf area indexes needed for dry deposition + CALL Compute_XLAI( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Compute_XLAI", 255 ) + + ! Set the pressure at level edges [hPa] from the ESMF environment + CALL Accept_External_Pedge( State_Met = State_Met, & + State_Grid = State_Grid, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Accept_External_Pedge", 255 ) + + ! Set dry surface pressure (PS1_DRY) from State_Met%PS1_WET + CALL SET_DRY_SURFACE_PRESSURE( State_Grid, State_Met, 1 ) + + ! Set dry surface pressure (PS2_DRY) from State_Met%PS2_WET + CALL SET_DRY_SURFACE_PRESSURE( State_Grid, State_Met, 2 ) + + ! Initialize surface pressures to match the post-advection pressures + State_Met%PSC2_WET = State_Met%PS1_WET + State_Met%PSC2_DRY = State_Met%PS1_DRY + CALL SET_FLOATING_PRESSURES( State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "SET_FLOATING_PRESSURES", 255 ) + IF ( RC /= GC_SUCCESS ) RETURN + + ! Define airmass and related quantities + ! Scale mixing ratio with changing met only if FV advection is off. + ! Only do this the first timestep if DELP_DRY found in restart. + IF ( FIRST .and. .not. Input_Opt%LTRAN ) THEN + CALL AirQnt( Input_Opt, State_Chm, State_Grid, State_Met, RC, scaleMR ) + scaleMR = .TRUE. + ELSE + CALL AirQnt( Input_Opt, State_Chm, State_Grid, State_Met, RC, scaleMR ) + ENDIF + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "AirQnt", 255 ) + + ! Initialize/reset wetdep after air quantities computed + IF ( DoConv .OR. DoChem .OR. DoWetDep ) THEN + CALL SETUP_WETSCAV( Input_Opt, State_Chm, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "SETUP_WETSCAV", 255 ) + ENDIF + + ! Cap the polar tropopause pressures at 200 hPa, in order to avoid + ! tropospheric chemistry from happening too high up (cf. J. Logan) + CALL GCHP_Cap_Tropopause_Prs( Input_Opt = Input_Opt, & + State_Grid = State_Grid, & + State_Met = State_Met, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "GCHP_Cap_Tropopause_Prs", 255 ) + + ! Update clock tracer if relevant + IF ( IND_('CLOCK','A') > 0 ) THEN + CALL Set_Clock_Tracer( State_Chm, State_Grid ) + ENDIF + + ! Call PBL quantities. Those are always needed + CALL Compute_Pbl_Height( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "COMPUTE_PBL_HEIGHT", 255 ) + + ! Convert to dry mixing ratio + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = KG_SPECIES_PER_KG_DRY_AIR, & + previous_units = previous_units, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "CONVERT_SPC_UNITS", 255 ) + + !======================================================================= + ! Always prescribe H2O in both the stratosphere and troposhere in GEOS. + ! This is now done right after passing the species from the internal + ! state to State_Chm (in Chem_GridCompMod.F90). It is important to do it + ! there to make sure that any H2O tendencies are properly calculated + ! cakelle2, 2023/10/14 + !======================================================================= +#if !defined( MODEL_GEOS ) + ! SDE 05/28/13: Set H2O to STT if relevant + IF ( IND_('H2O','A') > 0 ) THEN + SetStratH2O = .FALSE. + IF ( Input_Opt%LSETH2O ) THEN + SetStratH2O = .TRUE. + ENDIF + CALL SET_H2O_TRAC( SetStratH2O, Input_Opt, State_Chm, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "SET_H2O_TRAC", 255 ) + + ! Only force strat once + IF ( Input_Opt%LSETH2O ) Input_Opt%LSETH2O = .FALSE. + ENDIF +#endif + + !======================================================================= + ! EMISSIONS. Pass HEMCO Phase 1 which only updates the HEMCO clock + ! and the HEMCO data list. Should be called every time to make sure + ! that the HEMCO clock and the HEMCO data list are up to date. + !======================================================================= + HCO_PHASE = 1 + CALL EMISSIONS_RUN( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, DoEmis, HCO_PHASE, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "EMISSIONS_RUN", 255 ) + +!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +!!! PHASE 1 or -1 !!! +!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + !======================================================================= + ! 1. Convection + ! + ! Call GEOS-Chem internal convection routines if convection is enabled + ! in geoschem_config.yml. This should only be done if convection is not + ! covered by another gridded component and/or the GC species are not made + ! friendly to this component!! + !======================================================================= + IF ( DoConv ) THEN + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Do convection now' + + CALL DO_CONVECTION ( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "DO_CONVECTION", 255 ) + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Convection done!' + ENDIF + + !======================================================================= + ! 2. Dry deposition + ! + ! Calculates the deposition rates in [s-1]. + !======================================================================= + IF ( DoDryDep ) THEN + + if(Input_Opt%AmIRoot.and.NCALLS<10) THEN + write(*,*) ' --- Do drydep now' + write(*,*) ' Use FULL PBL: ', Input_Opt%PBL_DRYDEP + endif + + ! Do dry deposition + CALL Do_DryDep ( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Do_DryDep", 255 ) + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Drydep done!' + ENDIF + + !======================================================================= + ! 3. Emissions (HEMCO) + ! + ! HEMCO must be called on first time step to make sure that the HEMCO + ! data lists are all properly set up. + !======================================================================= + IF ( DoEmis ) THEN + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Do emissions now' + + ! Do emissions. Pass HEMCO Phase 2 which performs the emissions + ! calculations. + HCO_PHASE = 2 + CALL EMISSIONS_RUN( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, DoEmis, HCO_PHASE, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "EMISSIONS_RUN - 2", 255 ) + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Emissions done!' + + ENDIF + + !======================================================================= + ! If physics covers turbulence, simply add the emission and dry + ! deposition fluxes calculated above to the tracer array, without caring + ! about the vertical distribution. The tracer tendencies are only added + ! to the tracers array after emissions, drydep. So we need to use the + ! emissions time step here. + !======================================================================= + IF ( DoTend ) THEN + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) & + ' --- Add emissions and drydep to tracers' + + ! Get emission time step [s]. + !_ASSERT(ASSOCIATED(HcoState), 'Error: HcoState not associated') + DT = HcoState%TS_EMIS + + ! Apply tendencies over entire PBL. Use emission time step. + CALL DO_TEND( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, .FALSE., RC, DT=DT ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "DO_TEND", 255 ) + + ! testing only + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) & + ' Tendency time step [s]: ', DT + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) & + ' --- Fluxes applied to tracers!' + ENDIF ! Tendencies + +!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +!!! PHASE 2 or -1 !!! +!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + !======================================================================= + ! 4. Turbulence + ! + ! Call GEOS-Chem internal turbulence routines if turbulence is enabled + ! in geoschem_config.yml. This should only be done if turbulence is not + ! covered by another gridded component and/or the GC species are not made + ! friendly to this component!! + !======================================================================= + IF ( DoTurb ) THEN + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Do turbulence now' + + ! Only do the following for the non-local PBL mixing + IF ( Input_Opt%LNLPBL ) THEN + + ! Once the initial met fields have been read in, we need to find + ! the maximum PBL level for the non-local mixing algorithm. + ! This only has to be done once. (bmy, 5/28/20) + IF ( FIRST ) THEN + CALL Max_PblHt_For_Vdiff( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "MAX_PBLHT_FOR_VDIFF", 255 ) + ENDIF + + ! Compute the surface flux for the non-local mixing, + ! (which means getting emissions & drydep from HEMCO) + ! and store it in State_Chm%Surface_Flux + CALL Compute_Sflx_For_Vdiff( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "COMPUTE_SFLX_FOR_VDIFF", 255 ) + ENDIF + + ! Do mixing and apply tendencies. This will use the dynamic time step, + ! which is fine since this call will be executed on every time step. + CALL DO_MIXING ( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "DO_MIXING", 255 ) + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Turbulence done!' + ENDIF + + ! Set tropospheric CH4 concentrations and fill species array with + ! current values. + IF ( Phase /= 2 .AND. Input_Opt%ITS_A_FULLCHEM_SIM & + .AND. IND_('CH4','A') > 0 ) THEN + + CALL SET_CH4 ( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "SET_CH4", 255 ) + ENDIF + + !======================================================================= + ! 5. Chemistry + !======================================================================= + IF ( DoChem ) THEN + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Do chemistry now' + + IF ( Input_Opt%ITS_A_FULLCHEM_SIM ) THEN + ! Calculate TOMS O3 overhead. For now, always use it from the + ! Met field. State_Met%TO3 is imported from PCHEM (ckeller, 10/21/2014). + CALL COMPUTE_OVERHEAD_O3( Input_Opt, State_Grid, State_Chm, DAY, & + .TRUE., State_Met%TO3, RC ) + ENDIF + +#if !defined( MODEL_GEOS ) + ! Set H2O to species value if H2O is advected + IF ( IND_('H2O','A') > 0 ) THEN + CALL SET_H2O_TRAC( .FALSE., Input_Opt, & + State_Chm, State_Grid, State_Met, RC ) + ENDIF +#endif + + ! Do chemistry + CALL Do_Chemistry( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Do_Chemistry", 255 ) + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Chemistry done!' + + ENDIF + + !======================================================================= + ! 6. Wet deposition + !======================================================================= + IF ( DoWetDep ) THEN + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Do wetdep now' + + ! Do wet deposition + CALL DO_WETDEP( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "DO_WETDEP", 255 ) + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Wetdep done!' + ENDIF + + !======================================================================= + ! Diagnostics + !======================================================================= + + !============================================================== + ! ***** U P D A T E O P T I C A L D E P T H ***** + !============================================================== + ! Recalculate the optical depth at the wavelength(s) specified + ! in the Radiation Menu. This must be done before the call to any + ! diagnostic and only on a chemistry timestep. + ! (skim, 02/05/11) + IF ( DoChem ) THEN + CALL RECOMPUTE_OD ( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "RECOMPUTE_OD", 255 ) + ENDIF + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Do diagnostics now' + + ! Set certain diagnostics dependent on state at end of step. This + ! includes species concentration and dry deposition flux. + ! For GEOS, this is now done in Chem_GridCompMod.F90. This makes sure + ! that the diagnostics include any post-run updates (e.g., if assimilation + ! increments are being applied (ckeller, 2/7/22). +#if !defined( MODEL_GEOS ) + CALL Set_Diagnostics_EndofTimestep( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Set_Diagnostics_EndofTimestep", 255 ) +#endif + + ! Archive aerosol mass and PM2.5 diagnostics + IF ( State_Diag%Archive_AerMass ) THEN + CALL Set_AerMass_Diagnostic( Input_Opt, State_Chm, State_Diag, & + State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Set_AerMass_Diagnostic", 255 ) + ENDIF + + if(Input_Opt%AmIRoot.and.NCALLS<10) write(*,*) ' --- Diagnostics done!' + + !======================================================================= + ! Convert State_Chm%Species units + !======================================================================= + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = previous_units, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "CONVERT_SPC_UNITS", 255 ) + + !======================================================================= + ! Clean up + !======================================================================= + + ! testing only + IF ( HCO_PHASE /= 1 .AND. NCALLS < 10 ) NCALLS = NCALLS + 1 + + ! First call is done + FIRST = .FALSE. + + ! Return success + RC = GC_SUCCESS + + END SUBROUTINE CHEM_CHUNK_RUN + + !========================================================================================================== + + SUBROUTINE INIT_CHEM( grid, is_coldstart ) + + USE DOMAIN_DECOMP_1D, ONLY : getMpiCommunicator + USE DOMAIN_DECOMP_ATM, ONLY : DIST_GRID, Am_I_Root, getDomainBounds + USE GEOM, ONLY : axyp, lat2d_dg, lon2d_dg + USE CONSTANT, ONLY : Pi + USE MODEL_COM, ONLY : DTsrc, rsf_file_name + USE Dictionary_mod, ONLY : sync_param + USE CHEM_COM, ONLY : SpcChmID_to_TrID, t_qlimit, TrFullName, TrID_to_SpcChmID, NSP, SpName + USE ERROR_MOD, ONLY : Debug_Msg, Error_Stop, Init_Error + + USE GC_Environment_Mod, ONLY : GC_Allocate_All + USE State_Grid_Mod, ONLY : Init_State_Grid + USE Input_Opt_Mod, ONLY : Set_Input_Opt + USE Input_Mod, ONLY : Read_Input_File + USE Time_Mod, ONLY : GET_NHMS, GET_NHMSb, GET_NYMD, GET_NYMDb, GET_TAU, & + GET_TAUb, SET_TIMESTEPS + USE TIMERS_MOD, ONLY : Timer_End, Timer_Start + USE grid_registry_mod, ONLY : Init_Grid_Registry + USE LINOZ_MOD, ONLY : Linoz_Read + USE HISTORY_MOD, ONLY : History_Init + USE OLSON_LANDMAP_MOD, ONLY : Compute_Olson_Landmap, Init_LandTypeFrac + + USE Emissions_Mod, ONLY : Emissions_Init, Emissions_Run + USE GC_Environment_Mod, ONLY : GC_Init_StateObj, GC_Init_Extra, GC_Init_Grid + USE GC_Grid_Mod, ONLY : SetGridFromCtr + USE Pressure_Mod, ONLY : Init_Pressure, Accept_External_ApBp + USE UCX_MOD, ONLY : Init_UCX + USE PhysConstants, ONLY : PI_180 + USE State_Chm_Mod, ONLY : Ind_ + + USE LINEAR_CHEM_MOD, ONLY : Init_Linear_Chem + USE Photolysis_Mod, ONLY : Init_Photolysis + USE Vdiff_Mod, ONLY : Max_PblHt_for_Vdiff + + USE pario, ONLY : par_open, par_close + USE UnitConv_Mod, ONLY : Convert_Spc_Units, KG_SPECIES, & + MOLES_SPECIES_PER_MOLES_DRY_AIR + + IMPLICIT NONE + + TYPE (DIST_GRID), INTENT(IN) :: grid + LOGICAL, INTENT(IN) :: is_coldstart + + LOGICAL :: isRoot, prtDebug, TimeForEmis + INTEGER :: RC, previous_units + + INTEGER :: NYMD, NHMS + REAL*8 :: DT + + INTEGER :: I, J, L, N, NN, II, JJ, I_0H, I_1H + INTEGER :: NYMDb, NHMSb, NHMSe + INTEGER :: id_H2O, id_CH4, id_CLOCK + + INTEGER :: TAU, TAUb + + INTEGER :: fid + INTEGER :: KDISK + + CHARACTER(LEN=255) :: ThisLoc, historyConfigFile + CHARACTER(LEN=512) :: ErrMsg, Instr + + !-------------------------------------------------------------------------- + ! Read the user-defined options for the simulation, etc. + !-------------------------------------------------------------------------- + + isRoot = am_I_root() + + ! Initialize fields of the Input Options object (including amIRoot) + CALL Set_Input_Opt( isRoot, Input_Opt, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered within call to "Set_Input_Opt"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Initialize fields of the Grid State object + CALL Init_State_Grid( Input_Opt, State_Grid, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered within call to "Set_Grid_State"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Read GEOS-Chem input file at very beginning of simulation + CALL Read_Input_File( Input_Opt, State_Grid, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Read_Input_File"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + Input_Opt%numCPUs = grid%npes_world ! Number of MPI procs + Input_Opt%thisCPU = grid%rank ! Local MPI process handle + Input_Opt%MPIComm = getMpiCommunicator(grid) ! MPI Communicator Handle + Input_Opt%isMPI = .true. ! Is this an MPI sim? + Input_Opt%amIRoot = am_I_root() ! Is this the root cpu? + + Input_Opt%LTRAN = .false. ! Do not use GEOS-Chem for transport + + CALL sync_param( "DoGCConv", DoGCConv ) + CALL sync_param( "DoGCEmis", DoGCEmis ) + CALL sync_param( "DoGCTend", DoGCTend ) + CALL sync_param( "DoGCTurb", DoGCTurb ) + CALL sync_param( "DoGCChem", DoGCChem ) + CALL sync_param( "DoGCDryDep", DoGCDryDep ) + CALL sync_param( "DoGCWetDep", DoGCWetDep ) + + !================================================================ + ! Specify local domain + !================================================================ + + call getDomainBounds( grid, I_STRT = I_0, I_STOP = I_1, & + J_STRT = J_0, J_STOP = J_1, & + I_STRT_HALO = I_0H, I_STOP_HALO = I_1H, & + J_STRT_HALO = J_0H, J_STOP_HALO = J_1H ) + + NI = I_1 - I_0 + 1 + NJ = J_1 - J_0 + 1 + + State_Grid%DX = 2.5e+0_fp + State_Grid%DY = 2.0e+0_fp + State_Grid%XMin = lon2d_dg(i_0,lbound(lon2d_dg,dim=2)) + State_Grid%XMax = lon2d_dg(i_1,lbound(lon2d_dg,dim=2)) + State_Grid%YMin = max( lat2d_dg(1,j_0), -89.0_fp ) + State_Grid%YMax = min( lat2d_dg(1,j_1), 89.0_fp ) + + State_Grid%NX = NI + State_Grid%NY = NJ + State_Grid%NZ = LM + State_Grid%HalfPolar = .FALSE. + State_Grid%NestedGrid = .FALSE. + State_Grid%NorthBuffer = 0 + State_Grid%SouthBuffer = 0 + State_Grid%EastBuffer = 0 + State_Grid%WestBuffer = 0 + + State_Grid%GlobalNX = IM + State_Grid%GlobalNY = JM + State_Grid%NativeNZ = LM + State_Grid%MaxChemLev = LM + State_Grid%MaxStratLev = LM + State_Grid%MaxTropLev = LM + State_Grid%XMinOffset = 0 + State_Grid%XMaxOffset = 0 + State_Grid%YMinOffset = 0 + State_Grid%YMaxOffset = 0 + + State_Grid%GlobalXMid => NULL() + State_Grid%GlobalYMid => NULL() + State_Grid%XMid => NULL() + State_Grid%XEdge => NULL() + State_Grid%YMid => NULL() + State_Grid%YEdge => NULL() + State_Grid%YMid_R => NULL() + State_Grid%YEdge_R => NULL() + State_Grid%YSIN => NULL() + State_Grid%Area_M2 => NULL() + + ! Initialize GEOS-Chem horizontal grid structure + CALL GC_Init_Grid( Input_Opt, State_Grid, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error in "GC_Init_Grid"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Call the routine GC_Allocate_All (located in module file + ! GeosCore/gc_environment_mod.F90) to allocate all lat/lon + ! allocatable arrays used by GEOS-Chem. + CALL GC_Allocate_All( Input_Opt, State_Grid, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "GC_Allocate_All"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Store shadow copies of am_I_Root, Input_Opt in error_mod.F + CALL Init_Error(Input_Opt, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Init_Error"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Set grid based on passed mid-points + WRITE(6,*) "Manually Set Grid" + + ! Compute number of grid boxes on global grid + State_Grid%GlobalNX = 360.0_fp / State_Grid%DX + if ( State_Grid%HalfPolar ) then + State_Grid%GlobalNY = ( 180.0_fp / State_Grid%DY ) + 1 + else + State_Grid%GlobalNY = ( 180.0_fp / State_Grid%DY ) + endif + + !---------------------------------------------------------------------- + ! Calculate grid box centers on global grid + !---------------------------------------------------------------------- + + ! Allocate arrays + ALLOCATE( State_Grid%GlobalXMid(State_Grid%GlobalNX,State_Grid%GlobalNY), STAT=RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Allocate GlobalXMid", 255 ) + State_Grid%GlobalXMid = 0e+0_fp + + ALLOCATE( State_Grid%GlobalYMid(State_Grid%GlobalNX,State_Grid%GlobalNY), STAT=RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Allocate GlobalYMid", 255 ) + State_Grid%GlobalYMid = 0e+0_fp + + ! Loop over horizontal grid + DO J = 1, State_Grid%GlobalNY + DO I = 1, State_Grid%GlobalNX + + !-------------------------------- + ! Longitude centers [degrees] + !-------------------------------- + State_Grid%GlobalXMid(I,J) = ( State_Grid%DX * (I-1) ) - & + 180e+0_fp + State_Grid%DX / 2d0 + + !-------------------------------- + ! Latitude centers [degrees] + !-------------------------------- + IF ( State_Grid%HalfPolar ) THEN + IF ( J == 1) THEN + ! South Pole + State_Grid%GlobalYMid(I,J) = -90e+0_fp + (0.25e+0_fp * State_Grid%DY) + ELSEIF ( J == State_Grid%GlobalNY ) THEN + ! North Pole + State_Grid%GlobalYMid(I,J) = +90e+0_fp - (0.25e+0_fp * State_Grid%DY) + ELSE + State_Grid%GlobalYMid(I,J) = ( State_Grid%DY * (J-1) ) - 90e+0_fp + ENDIF + ELSE + State_Grid%GlobalYMid(I,J) = ( State_Grid%DY * (J-1) ) - 89e+0_fp + ENDIF + + ENDDO + ENDDO + + !====================================================================== + ! User-defined Horizontal Grid + !====================================================================== + + ! Determine X offsets based on global grid + DO I = 1, State_Grid%GlobalNX + IF ( State_Grid%GlobalXMid(I,1) >= State_Grid%XMin ) THEN + State_Grid%XMinOffset = I-1 + EXIT + ENDIF + ENDDO + DO I = 1, State_Grid%GlobalNX + IF ( State_Grid%GlobalXMid(I,1)+State_Grid%DX >= State_Grid%XMax ) THEN + State_Grid%XMaxOffset = I + EXIT + ENDIF + ENDDO + + ! Determine Y offsets based on global grid + DO J = 1, State_Grid%GlobalNY + IF ( State_Grid%GlobalYMid(1,J) >= State_Grid%YMin ) THEN + State_Grid%YMinOffset = J-1 + EXIT + ENDIF + ENDDO + DO J = 1, State_Grid%GlobalNY + IF ( State_Grid%GlobalYMid(1,J)+State_Grid%DY >= State_Grid%YMax ) THEN + State_Grid%YMaxOffset = J + EXIT + ENDIF + ENDDO + + !---------------------------------------------------------------------- + ! Calculate grid box centers and edges on local grid + !---------------------------------------------------------------------- + + DO J = J_0, J_1 + DO I = I_0, I_1 + + JJ = J - J_0 + 1 + II = I - I_0 + 1 + + State_Grid%XMid(II,JJ) = lon2d_dg(i,j) ! Longitude at center [degE] + State_Grid%YMid(II,JJ) = lat2d_dg(i,j) ! Latitude at center [degN] + + ! Fix polar boxes, which GISS gives wrong lat value + IF ( State_Grid%YMid(II,JJ) > 89.0 ) State_Grid%YMid (II, JJ) = 89.0 + IF ( State_Grid%YMid(II,JJ) < -89.0 ) State_Grid%YMid (II, JJ) = -89.0 + + State_Grid%XEdge(II,JJ) = & + State_Grid%XMid(II,JJ) - State_Grid%DX/2d0 ! Longitude at edge [degE] + + State_Grid%YEdge(II,JJ) = & + State_Grid%YMid(II,JJ) - State_Grid%DY/2d0 ! Latitude at edge [degN] + + State_Grid%YMid_R(II,JJ) = State_Grid%YMid(II,JJ) * PI_180 ! Latitude at center [rad] + State_Grid%YEdge_R(II,JJ) = State_Grid%YEdge(II,JJ) * PI_180 ! Latitude at edge [rad] + State_Grid%YSIN(II,JJ) = SIN( State_Grid%YEdge_R(II,JJ) ) ! sin(lat) at edge + + State_Grid%Area_M2(II,JJ) = axyp(i,j) ! Grid box area [m2] + + IF ( J .eq. J_1 ) THEN + State_Grid%YEdge(II,JJ+1) = & + State_Grid%YMid(II,JJ) + State_Grid%DY/2d0 ! Latitude at edge [degN] + State_Grid%YEdge_R(II,JJ+1) = State_Grid%YEdge(II,JJ+1) * PI_180 + State_Grid%YSIN(II,JJ+1) = SIN( State_Grid%YEdge_R(II,JJ+1) ) + ENDIF + + IF ( I .eq. IM ) THEN + State_Grid%XEdge(II+1,JJ) = lon2d_dg(i,j) + State_Grid%DX/2d0 ! Longitude at edge [degE] + ENDIF + + ! Keep latitudes to -90 to 90 range + IF ( State_Grid%YEdge(II,JJ+1) > 90.0 ) State_Grid%YEdge (II,JJ+1) = 90.0 + IF ( State_Grid%YEdge(II,JJ) < -90.0 ) State_Grid%YEdge (II, JJ) = -90.0 + IF ( State_Grid%YEdge_R(II,JJ+1) > ( Pi/2d0) ) State_Grid%YEdge_R(II,JJ+1) = Pi / 2d0 + IF ( State_Grid%YEdge_R(II,JJ) < (-Pi/2d0) ) State_Grid%YEdge_R(II, JJ) = -Pi / 2d0 + IF ( State_Grid%YSIN(II,JJ+1) > 1d0 ) State_Grid%YSIN (II,JJ+1) = 1d0 + IF ( State_Grid%YSIN(II,JJ) < -1d0 ) State_Grid%YSIN (II, JJ) = -1d0 + + ENDDO + ENDDO + + !====================================================================== + ! Echo info to stdout + !====================================================================== + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, '(a)' ) + WRITE( 6, '(''%%%%%%%%%%%%%%% GLOBAL GRID %%%%%%%%%%%%%%%'')' ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''Grid box longitude centers [degrees]: '')' ) + WRITE( 6, '(8(f8.3,1x))' ) ( State_Grid%GlobalXMid(I,1), & + I=1,State_Grid%GlobalNX ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''Grid box latitude centers [degrees]: '')' ) + WRITE( 6, '(8(f8.3,1x))' ) ( State_Grid%GlobalYMid(1,J), & + J=1,State_Grid%GlobalNY ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''%%%%%%%%%%%% USER-DEFINED GRID %%%%%%%%%%%%'')' ) + WRITE( 6, '(a)' ) + WRITE( 6, * ) ' XMinOffset : ', State_Grid%XMinOffset + WRITE( 6, * ) ' XMaxOffset : ', State_Grid%XMaxOffset + WRITE( 6, * ) ' YMinOffset : ', State_Grid%YMinOffset + WRITE( 6, * ) ' YMaxOffset : ', State_Grid%YMaxOffset + WRITE( 6, '(a)' ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''Grid box longitude centers [degrees]: '')' ) + WRITE( 6, '(8(f8.3,1x))' ) ( State_Grid%XMid(I,1), I=1,State_Grid%NX ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''Grid box longitude edges [degrees]: '')' ) + WRITE( 6, '(8(f8.3,1x))' ) ( State_Grid%XEdge(I,1), I=1,State_Grid%NX+1 ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''Grid box latitude centers [degrees]: '')' ) + WRITE( 6, '(8(f8.3,1x))' ) ( State_Grid%YMid(1,J), J=1,State_Grid%NY ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''Grid box latitude edges [degrees]: '')' ) + WRITE( 6, '(8(f8.3,1x))' ) ( State_Grid%YEdge(1,J), J=1,State_Grid%NY+1 ) + WRITE( 6, '(a)' ) + WRITE( 6, '(''SIN( grid box latitude edges )'')' ) + WRITE( 6, '(8(f8.3,1x))' ) ( State_Grid%YSIN(1,J), J=1,State_Grid%NY+1 ) + ENDIF + + ! Set a flag to denote if we should print debug output + prtDebug = am_I_Root() + + ! Debug output + IF ( prtDebug ) CALL Debug_Msg( '### MAIN: a READ_INPUT_FILE' ) + + IF ( Input_Opt%useTimers ) THEN + CALL Timer_Start( "All diagnostics", RC ) + CALL Timer_Start( "=> History (netCDF diags)", RC ) + ENDIF + + ! Initialize the Diag_List (list of all diagnostics) + historyConfigFile = 'HISTORY.rc' + CALL Init_DiagList( Input_Opt%amIroot, historyConfigFile, Diag_List, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Init_DiagList"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Initialize the TaggedDiag_List (list of wildcards/tags per diagnostic) + CALL Init_TaggedDiagList( Input_Opt%amIroot, Diag_List, & + TaggedDiag_List, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Init_TaggedDiagList"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + IF ( prtDebug ) THEN + CALL Print_DiagList( Input_Opt%amIRoot, Diag_List, RC ) + CALL Print_TaggedDiagList( Input_Opt%amIRoot, TaggedDiag_List, RC ) + ENDIF + + IF ( Input_Opt%useTimers ) THEN + CALL Timer_End( "All diagnostics", RC ) + CALL Timer_End( "=> History (netCDF diags)", RC ) + ENDIF + + !-------------------------------------------------------------------------- + ! %%%% REPLICATING GCHP FUNCTIONALITY IN EXISTING GEOS-CHEM %%%% + ! + ! To replicate the functionality of the ESMF interface, we must + ! initialize the Meteorology State (i.e. State_Met) and the + ! Chemistry State (i.e. State_Chm) objects. These objects hold + ! several individual data fields that need to be passed as + ! inputs to the chemistry routines. + ! + ! The Meteorology State has replaced all of the individual + ! met field arrays contained in module dao_mod.F. Likewise, + ! the Chemistry State has replaced the STT tracer array + ! and CSPEC chemical species array. + ! + ! The Chemistry and Meteorology State objects facilitate using + ! GEOS-Chem directly from the ESMF interface. This is the main + ! reason we are migrating towards used of these objects instead + ! of the existing ALLOCATABLE module arrays. (bmy, 10/25/12) + !-------------------------------------------------------------------------- + + ! Initialize State_Met, State_Chm, and State_Diag objects + CALL GC_Init_StateObj( Diag_List = Diag_List, & + TaggedDiag_List = TaggedDiag_List, & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Diag = State_Diag, & + State_Grid = State_Grid, & + State_Met = State_Met, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "GC_Init_StateObj!"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Copy to State_Met%AREA_M2 to avoid breaking GCHP benchmarks, + ! which require the AREA_M2 field saved out to the StateMet + ! diagnostic collection for computing emission totals. + State_Met%Area_M2 = State_Grid%Area_M2 + + CALL sync_param( "DTsrc", DTsrc ) ! GISS chemistry timestep [sec] + CALL sync_param( "DT", DT ) ! GISS dynamic timestep [sec] + Input_Opt%TS_CHEM = INT( DTsrc ) + Input_Opt%TS_EMIS = INT( DTsrc ) + Input_Opt%TS_DYN = INT( DTsrc ) + Input_Opt%TS_CONV = INT( DTsrc ) + Input_Opt%TS_RAD = INT( DTsrc ) + + ! Set start and finish time from rundeck + Input_Opt%NYMDb = 20141201 ! nymdB + Input_Opt%NHMSb = 000000 ! nhmsB + Input_Opt%NYMDe = 20141202 ! nymdE + Input_Opt%NHMSe = 000000 ! nhmsE + + ! Set GEOS-Chem timesteps on all CPUs + WRITE(6,*) "Calling SET_TIMESTEPS" + CALL SET_TIMESTEPS( Input_Opt, & + Chemistry = Input_Opt%TS_CHEM, & + Convection = Input_Opt%TS_CONV, & + Dynamics = Input_Opt%TS_DYN, & + Emission = Input_Opt%TS_EMIS, & + Radiation = Input_Opt%TS_RAD, & + Unit_Conv = MAX( Input_Opt%TS_DYN, & + Input_Opt%TS_CONV ), & + Diagnos = Input_Opt%TS_CHEM ) + + !-------------------------------------------------------------------------- + ! For regular simulations, initialize various module arrays etc. + ! This removes the init calls from the run-stage, which cannot + ! happen when connecting GEOS-Chem to external ESMs. + !-------------------------------------------------------------------------- + CALL GC_Init_Extra( Diag_List, Input_Opt, State_Chm, & + State_Diag, State_Grid, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "GC_Init_Extra"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Define advected species ID flags for use below + id_H2O = Ind_('H2O', 'A') + id_CH4 = Ind_('CH4', 'A') + id_CLOCK = Ind_('CLOCK', 'A') + + !----------------------------------------------------------------------- + ! OBSPACK Diagnostics: Get information from the species + ! database for all requested ObsPack output species + !----------------------------------------------------------------------- + ! IF ( Input_Opt%Do_ObsPack ) THEN + ! CALL ObsPack_SpeciesMap_Init( Input_Opt, State_Chm, State_Diag, RC ) + ! IF ( RC /= GC_SUCCESS ) THEN + ! ErrMsg = 'Error encountered in "ObsPack_SpeciesMap_Init"!' + ! CALL Error_Stop( ErrMsg, ThisLoc ) + ! ENDIF + ! ENDIF + + ! LTM: Skipping RRTMG initialization code + ! LTM: Skipping APM initialization code + ! LTM: Skipping BPCH_DIAG initialization code + + ! Initialize the GEOS-Chem pressure module (set Ap & Bp) + CALL Init_Pressure( Input_Opt, State_Grid, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Init_Pressure", 255 ) + + ! Set Ap and Bp + CALL Accept_External_ApBp( State_Grid, Ap, Bp, RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "Accept_External_ApBp", 255 ) + + !-------------------------------------------------------------------------- + ! Register the horizontal and vertical grid information so that + ! the History component can use it for netCDF metadata + !-------------------------------------------------------------------------- + CALL Init_Grid_Registry( Input_Opt, State_Grid, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Init_Grid_Registry"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + !-------------------------------------------------------------------------- + ! Added to read input file for Linoz O3 + !-------------------------------------------------------------------------- + IF ( Input_Opt%LLINOZ ) THEN + CALL Linoz_Read( Input_Opt, RC ) + + ! Trap potential errors + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Linoz_Read"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + ENDIF + + ! Define time variables for use below + NHMS = GET_NHMS() + NHMSb = GET_NHMSb() + NYMD = GET_NYMD() + NYMDb = GET_NYMDb() + TAU = GET_TAU() + TAUb = GET_TAUb() + + !-------------------------------------------------------------------------- + ! ***** H I S T O R Y I N I T I A L I Z A T I O N ***** + !-------------------------------------------------------------------------- + IF ( Input_Opt%useTimers ) THEN + CALL Timer_Start( "All diagnostics", RC ) + CALL Timer_Start( "=> History (netCDF diags)", RC ) + ENDIF + + ! For now, just hardwire the input file for the History component + Input_Opt%HistoryInputFile = './HISTORY.rc' + + ! LTM: This is still broken. May need to be called through to set up State_Diag + ! Initialize the GEOS-Chem history component + !CALL History_Init( Input_Opt, State_Met, State_Chm, & + ! State_Diag, State_Grid, RC ) + + ! Trap error + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "History_Init"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + IF ( Input_Opt%useTimers ) THEN + CALL Timer_End( "All diagnostics", RC ) + CALL Timer_End( "=> History (netCDF diags)", RC ) + ENDIF + + !-------------------------------------------------------------------------- + ! ***** I N I T I A L I Z A T I O N continued ***** + !-------------------------------------------------------------------------- + + ! To enable FlexGrid, need to initialize HEMCO and run phase 1 + ! before reading initial metfields. + ! (Jiawei Zhuang 2017/6) + + ! Initialize HEMCO. This reads the HEMCO configuration file + ! and creates entries for all data files needed for emission + ! calculation. + IF ( Input_Opt%useTimers ) THEN + CALL Timer_Start( "HEMCO", RC ) + ENDIF + + CALL Emissions_Init( Input_Opt, State_Chm, State_Grid, State_Met, RC ) + + ! Trap potential errors + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Emissions_Init"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Run HEMCO phase 0 as simplfied phase 1 to get initial met fields + ! and restart file fields + TimeForEmis = .FALSE. + CALL Emissions_Run( Input_Opt, State_Chm, State_Diag, State_Grid, & + State_Met, TimeForEmis, 0, RC ) + + ! Trap potential errors + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Emissions_Run", Phase 0' + Instr = 'This error can indicate a missing file. Please check '// & + 'the HEMCO log file for additional error messages! ' + CALL Error_Stop( ErrMsg, ThisLoc, Instr ) + ENDIF + + ! In the case of a cold restart, initialise GEOS-Chem from its restart file + IF (is_coldstart) THEN + CALL Get_GC_Restart( Input_Opt, State_Chm, State_Grid, State_Met, RC ) + + ! IF ( AM_I_ROOT() ) THEN + ! WRITE(6,*) State_Chm%Species(182)%Conc(1,:,1) + ! ENDIF + + ! Trap potential errors + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Get_GC_Restart"' + Instr = '' + CALL Error_Stop( ErrMsg, ThisLoc, Instr ) + ENDIF + ENDIF + + IF ( Input_Opt%useTimers ) THEN + CALL Timer_End ( "HEMCO", RC ) + ENDIF + + + ! Populate the State_Met%LandTypeFrac field with data from HEMCO + CALL Init_LandTypeFrac( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Init_LandTypeFrac"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + ! Compute the Olson landmap fields of State_Met + ! (e.g. State_Met%IREG, State_Met%ILAND, etc.) + CALL Compute_Olson_Landmap( Input_Opt, State_Grid, State_Met, RC ) + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Compute_Olson_Landmap"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + + !========================================================================== + ! ***** I N I T I A L C O N D I T I O N S ***** + !========================================================================== + + ! Initialize the UCX routines + CALL INIT_UCX( Input_Opt, State_Chm, State_Diag, State_Grid ) + IF ( isRoot ) CALL DEBUG_MSG( '### MAIN: a INIT_UCX' ) + + ! Capture initial state of atmosphere for STE flux calc (ltm, 06/10/12) + IF ( Input_Opt%LINEAR_CHEM ) THEN + CALL Init_Linear_Chem( Input_Opt, State_Chm, State_Met, State_Grid, RC ) + + ! Trap potential errors + IF ( RC /= GC_SUCCESS ) THEN + ErrMsg = 'Error encountered in "Init_Linear_Chem"!' + CALL Error_Stop( ErrMsg, ThisLoc ) + ENDIF + ENDIF + + !----------------------------------------------------------------------------- + + NSP = State_Chm%nSpecies + NTM = State_Chm%nAdvect + + ALLOCATE( TrID_to_SpcChmID(NTM) ) + ALLOCATE( SpcChmID_to_TrID(NSP) ) + TrID_to_SpcChmID = 0 + SpcChmID_to_TrID = 0 + + ALLOCATE( SpName(NSP) ) + ALLOCATE( TrName(NTM) ) + ALLOCATE( TrFullName(NTM) ) + ALLOCATE( IsAdvected(NTM) ) + ALLOCATE( t_qlimit(NTM) ) + ALLOCATE( TrM( I_0H:I_1H, J_0H:J_1H, LM, NTM ) ) + ALLOCATE( TrMom( NMOM, I_0H:I_1H, J_0H:J_1H, LM, NTM ) ) + + NN=1 + DO N = 1, NSP + SpName(N) = TRIM( State_Chm%SpcData(N)%Info%Name ) + IF ( State_Chm%SpcData(N)%Info%Is_Advected ) THEN + + TrName(NN) = TRIM( State_Chm%SpcData(N)%Info%Name ) + TrFullName(NN) = TRIM( State_Chm%SpcData(N)%Info%FullName ) // " (" // & + TRIM( State_Chm%SpcData(N)%Info%Formula ) // ")" + IsAdvected(NN) = State_Chm%SpcData(N)%Info%Is_Advected + IF ( Am_I_Root() ) WRITE(6,*) NN, N, TrName(NN) + + TrID_to_SpcChmID(NN) = N + SpcChmID_to_TrID(N) = NN + + NN = NN + 1 + ENDIF + ENDDO + t_qlimit(:) = .true. + + !----------------------------------------------------------------------------- + + TrM = 0d0 + TrMom = 0d0 + IF (is_coldstart) THEN + !------------------------------------------------------------------------ + ! In the case of a cold restart, copy State_Chm into TrM with the + ! appropriate units + !------------------------------------------------------------------------ + DO N=1,NTM + DO L=1,LM + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + TrM( I, J, L, N ) = State_Chm%Species(N)%Conc(II,JJ,L) + ENDDO + ENDDO + ENDDO + ENDDO + ELSE + !------------------------------------------------------------------------ + ! In the case of a non-cold-restart, initialise GEOS-Chem from the Model + ! E restart file + !------------------------------------------------------------------------ + + ! Determine which was the latest restart file to be written to + call find_later_rsf(KDISK) + + ! NOTE: Tried reading with io_rsf rather than the manual code below but it gave an MPI abort + ! USE MODEL_COM, only : ioread, Itime + ! INTEGER :: ioerr + ! call io_rsf(rsf_file_name(KDISK),Itime,ioread,ioerr) + + ! Read the TrM and TrMom values from the restart file in parallel + fid = par_open( grid, trim(rsf_file_name(KDISK))//'.nc', 'read' ) + CALL IO_CHEM( fid, 'read_dist' ) + call par_close( grid, fid ) + + ! Species are read from restart file in units of kg + DO N=1, State_Chm%nSpecies + State_Chm%Species(N)%Units = KG_SPECIES + ENDDO + DO N=1,NTM + DO L=1,LM + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + State_Chm%Species(N)%Conc(II,JJ,L) = TrM( I, J, L, N ) + ENDDO + ENDDO + ENDDO + ENDDO + ENDIF + + ! Return success + RC = GC_SUCCESS + + RETURN + END SUBROUTINE INIT_CHEM + + !========================================================================================================== + +#ifdef CACHED_SUBDD + SUBROUTINE accumGCsubdd + + use domain_decomp_atm, only : grid, am_i_root + use subdd_mod, only : subdd_groups,subdd_type,subdd_ngroups, & + inc_subdd,find_groups, LmaxSUBDD + ! use geom, only : byaxyp + ! use atm_com, only : byma + USE UnitConv_Mod + + implicit none + + integer :: igrp,ngroups,grpids(subdd_ngroups) + type(subdd_type), pointer :: subdd + integer :: L, n, k, RC, i, j, ii, jj + real*8, dimension(grid%i_strt_halo:grid%i_stop_halo, & + grid%j_strt_halo:grid%j_stop_halo) :: sddarr2d + real*8, dimension(grid%i_strt_halo:grid%i_stop_halo, & + grid%j_strt_halo:grid%j_stop_halo, & + LM ) :: sddarr3d + ! real*8 :: convert + integer :: previous_units + +! ! 3-D diagnostics of advected tracers on model levels +! call find_groups('taijlh',grpids,ngroups) +! do igrp=1,ngroups +! subdd => subdd_groups(grpids(igrp)) +! do k=1,subdd%ndiags +! ntm_loop: do n=1,ntm +! ! tracer 3D mixing ratios (SUBDD names are just tracer name): +! if( trim(trname(n)) .eq. trim(subdd%name(k)) ) then +! convert = 1d9 * 28.97d0 / State_Chm%SpcData( TrID_to_SpcChmID(N) )%Info%MW_g ! kg/kg -> ppbv +! do L=1,LmaxSUBDD +! sddarr3d(:,:,L) = & +! trm(:,:,L,n)*convert*byaxyp(:,:)*byma(L,:,:) +! end do +! call inc_subdd(subdd,k,sddarr3d) +! exit ntm_loop +! end if +! end do ntm_loop +! enddo ! k +! enddo ! igroup + + ! Convert from kg to dry mixing ratio + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = MOLES_SPECIES_PER_MOLES_DRY_AIR, & + previous_units = previous_units, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "CONVERT_SPC_UNITS", 255 ) + + ! 3-D diagnostics of all tracers (advected and non-advected) on model levels + call find_groups('taijlh',grpids,ngroups) + do igrp=1,ngroups + subdd => subdd_groups(grpids(igrp)) + do k=1,subdd%ndiags + ntm_loop: do n=1,State_Chm%nSpecies + ! tracer 3D mixing ratios (SUBDD names are just tracer name): + if( trim( State_Chm%SpcData(N)%Info%Name ) .eq. trim(subdd%name(k)) ) then + DO L=1,LmaxSUBDD + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + sddarr3d(I,J,L) = State_Chm%Species(N)%Conc(II,JJ,L) + ENDDO + ENDDO + ENDDO + call inc_subdd(subdd,k,sddarr3d) + exit ntm_loop + end if + end do ntm_loop + enddo ! k + enddo ! igroup + + ! Convert back to kg species + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = previous_units, & + RC = RC ) + IF ( RC /= GC_SUCCESS ) CALL STOP_MODEL( "CONVERT_SPC_UNITS", 255 ) + + ! 2-D diagnostics + call find_groups('taijh',grpids,ngroups) + do igrp=1,ngroups + subdd => subdd_groups(grpids(igrp)) + do k=1,subdd%ndiags + + if ( trim(subdd%name(k)) == "StateMet_SUNCOSmid" ) then + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + sddarr2d(I,J) = State_Met%SUNCOSmid(II,JJ) + ENDDO + ENDDO + endif + + if ( trim(subdd%name(k)) == "StateMet_PARDF" ) then + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + sddarr2d(I,J) = State_Met%PARDF(II,JJ) + ENDDO + ENDDO + endif + + if ( trim(subdd%name(k)) == "StateMet_PARDR" ) then + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + sddarr2d(I,J) = State_Met%PARDR(II,JJ) + ENDDO + ENDDO + endif + + if ( trim(subdd%name(k)) == "lat2d" ) then + DO J=J_0,J_1 + DO I=I_0,I_1 + II = I - I_0 + 1 + JJ = J - J_0 + 1 + sddarr2d(I,J) = State_Grid%YMID(II,JJ) + ENDDO + ENDDO + endif + + call inc_subdd(subdd,k,sddarr2d) + enddo ! k + enddo ! igroup + + END SUBROUTINE accumGCsubdd + +#endif + + !========================================================================================================== + + SUBROUTINE IO_CHEM( fid, action ) + + USE ParallelIo_mod, ONLY : doVar, ParallelIo + USE domain_decomp_atm, ONLY : grid + + implicit none + + integer, intent(in) :: fid + character(len=*), intent(in) :: action + type (ParallelIo) :: handle + integer :: n + + handle = ParallelIo( grid, fid ) + + do n=1,NTM + call doVar( handle, action, TrM(:,:,:,n), 'trm_' // trim(TrName(n)) // '(dist_im,dist_jm,lm)' ) + call doVar( handle, action, TrMom(:,:,:,:,n), 'trmom_' // trim(TrName(n)) // '(nmom,dist_im,dist_jm,lm)', jdim=3 ) + enddo + + RETURN + END SUBROUTINE IO_CHEM + + ! Read restart file and put into State_Chm + SUBROUTINE Get_GC_Restart( Input_Opt, State_Chm, State_Grid, State_Met, RC ) + ! + ! !USES: + ! + USE CMN_SIZE_Mod, ONLY : NDUST + USE Error_Mod, ONLY : Debug_Msg + USE HCO_Utilities_GC_Mod, ONLY : HCO_GC_GetPtr + USE PhysConstants, ONLY : AIRMW + USE Input_Opt_Mod, ONLY : OptInput + USE Species_Mod, ONLY : Species, SpcConc + USE State_Chm_Mod, ONLY : ChmState + USE State_Grid_Mod, ONLY : GrdState + USE State_Met_Mod, ONLY : MetState + USE Time_Mod, ONLY : Expand_Date + USE UnitConv_Mod, ONLY : KG_SPECIES_PER_KG_DRY_AIR, MOLECULES_SPECIES_PER_CM3, & + Convert_Spc_Units +#ifdef APM + USE APM_Init_Mod, ONLY : APMIDS +#endif + ! + ! !INPUT PARAMETERS: + ! + TYPE(OptInput), INTENT(IN) :: Input_Opt ! Input Options object + TYPE(GrdState), INTENT(IN) :: State_Grid ! Grid State object + ! + ! !INPUT/OUTPUT PARAMETERS: + ! + TYPE(MetState), INTENT(INOUT) :: State_Met ! Meteorology State object + TYPE(ChmState), INTENT(INOUT) :: State_Chm ! Chemistry State object + ! + ! !OUTPUT PARAMETERS: + ! + INTEGER, INTENT(OUT) :: RC ! Success or failure? + ! + ! !REVISION HISTORY: + ! + ! 09 Feb 2016 - E. Lundgren - Initial version + ! See https://github.com/geoschem/geos-chem for complete history + !EOP + !------------------------------------------------------------------------------ + !BOC + ! + ! !LOCAL VARIABLES: + ! + INTEGER :: I, J, L, M, N ! lon, lat, lev, indexes + INTEGER :: previous_units + LOGICAL :: FOUND ! Found in restart file? + CHARACTER(LEN=60) :: Prefix ! utility string + CHARACTER(LEN=255) :: LOC ! routine location + CHARACTER(LEN=255) :: MSG ! message + CHARACTER(LEN=255) :: v_name ! variable name + REAL(fp) :: MW_g ! species molecular weight + REAL(fp) :: SMALL_NUM ! small number threshold + + ! Temporary arrays and pointers + REAL*4, TARGET :: Temp3D(State_Grid%NX,State_Grid%NY, & + State_Grid%NZ) + REAL*4, POINTER :: Ptr2D(:,: ) + REAL*4, POINTER :: Ptr3D(:,:,:) + + ! For Hg simulation + CHARACTER(LEN=60) :: HgSpc + + ! Objects + TYPE(SpcConc), POINTER :: Spc(:) + TYPE(Species), POINTER :: SpcInfo + + !================================================================= + ! READ_GC_RESTART begins here! + !================================================================= + + ! Assume success + RC = GC_SUCCESS + + ! Initialize pointers + Ptr2D => NULL() + Ptr3D => NULL() + SpcInfo => NULL() + + ! Name of this routine + LOC = ' -> at Get_GC_Restart (in model/CHEM_DRV.F90)' + + ! Set minimum value threshold for [mol/mol] + SMALL_NUM = 1.0e-30_fp + + ! Set pointer to species concentrations + Spc => State_Chm%Species + + !================================================================= + ! Open GEOS-Chem restart file + !================================================================= + + ! Write read message to log + WRITE( 6, '(a)' ) REPEAT( '=', 79 ) + WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T' + + !================================================================= + ! Read species concentrations from NetCDF or use default + ! background [mol/mol]; store in State_Chm%Species%Conc in [kg/kg dry] + !================================================================= + + ! Print header for min/max concentration to log + WRITE( 6, 110 ) +110 FORMAT( 'Min and Max of each species in restart file [mol/mol]:' ) + + ! Loop over species + DO N = 1, State_Chm%nSpecies + + ! Initialize species concentration to all zeroes + Spc(N)%Conc = 0.e+0_fp + + ! Get info about this species from the species database + SpcInfo => State_Chm%SpcData(N)%Info + MW_g = SpcInfo%MW_g + + ! Define variable name + v_name = 'SPC_' // TRIM( SpcInfo%Name ) + + ! Initialize temporary array for this species and point to it + Temp3D = 0.0_fp + Ptr3D => Temp3D + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM(v_name), & + Ptr3D, RC, FOUND=FOUND ) + + ! Check if species data is in file + IF ( FOUND ) THEN + SpcInfo%Is_InRestart = .TRUE. + ELSE + SpcInfo%Is_InRestart = .FALSE. + ENDIF + + ! If data is in file, read in as [mol/mol] and convert to + ! [kg/kg dry]. Otherwise, set to background value [mol/mol] + ! either stored in species database (advected species all levels and + ! non-advected species levels in the chemistry grid) or a small number + ! (non-advected species levels above the chemistry grid) converted to + ! [kg/kg dry] + IF ( SpcInfo%Is_InRestart ) THEN + + ! Print the min & max of each species as it is read from + ! the restart file in mol/mol + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 120 ) N, TRIM( SpcInfo%Name ), & + MINVAL( Ptr3D ), MAXVAL( Ptr3D ), SUM ( Ptr3D(:,:,1:State_Grid%NZ) ) +120 FORMAT( 'Species ', i3, ', ', a8, ': Min = ', es15.9, & + ' Max = ',es15.9, ' Sum = ',es15.9) + ENDIF + + ! Convert file value [mol/mol] to [kg/kg dry] for storage + !$OMP PARALLEL DO & + !$OMP DEFAULT( SHARED ) & + !$OMP PRIVATE( I, J, L ) + DO L = 1, State_Grid%NZ + DO J = 1, State_Grid%NY + DO I = 1, State_Grid%NX + Spc(N)%Conc(I,J,L) = Ptr3D(I,J,L) * MW_g / AIRMW + ENDDO + ENDDO + ENDDO + !$OMP END PARALLEL DO + + ELSE + + ! Set species to the background value converted to [kg/kg dry] + !$OMP PARALLEL DO & + !$OMP DEFAULT( SHARED ) & + !$OMP PRIVATE( I, J, L ) + ! Loop over all grid boxes + DO L = 1, State_Grid%NZ + DO J = 1, State_Grid%NY + DO I = 1, State_Grid%NX + + ! For non-advected species at levels above chemistry grid, + ! use a small number for background + IF ( L > State_Grid%MaxChemLev .and. & + .NOT. SpcInfo%Is_Advected ) THEN + + Spc(N)%Conc(I,J,L) = SMALL_NUM * MW_g / AIRMW + + ! For all other cases, use the background value + ! stored in the species database + ELSE + + Spc(N)%Conc(I,J,L) = SpcInfo%BackgroundVV & + * MW_g / AIRMW + + ! Print to log if debugging is on + IF ( Input_Opt%amIRoot .AND. & + I == 1 .AND. J == 1 .AND. L == 1 ) THEN + WRITE( 6, 140 ) N, TRIM( SpcInfo%Name ), SpcInfo%BackgroundVV +140 FORMAT('Species ', i3, ', ', a9, & + ': Use background = ', es15.9) + ENDIF + + + ENDIF + + ENDDO + ENDDO + ENDDO + !$OMP END PARALLEL DO + + ENDIF + + ! Free pointer + SpcInfo => NULL() + + ENDDO + + ! Set species units + DO N=1, State_Chm%nSpecies + State_Chm%Species(N)%Units = KG_SPECIES_PER_KG_DRY_AIR + ENDDO + + ! If in debug mode, print out species min and max in [molec/cm3] + IF ( .false. ) THEN ! Input_Opt%Verbose ) THEN + + ! Convert units + PRINT *, " " + PRINT *, "Species min and max in molec/cm3" + + CALL Convert_Spc_Units( & + Input_Opt = Input_Opt, & + State_Chm = State_Chm, & + State_Grid = State_Grid, & + State_Met = State_Met, & + new_units = MOLECULES_SPECIES_PER_CM3, & + previous_units = previous_units, & + RC = RC ) + + ! Trap error + IF ( RC /= GC_SUCCESS ) THEN + Msg = 'Error returned from Convert_Spc_Units, call #1!' + CALL GC_Error( Msg, RC, Loc ) + RETURN + ENDIF + + ! Print values + DO N = 1, State_Chm%nSpecies + SpcInfo => State_Chm%SpcData(N)%Info + WRITE(6,150) N, TRIM( SpcInfo%Name ), & + MINVAL( Spc(N)%Conc(:,:,:) ), & + MAXVAL( Spc(N)%Conc(:,:,:) ) +150 FORMAT( 'Species ', i3, ', ', a9, & + ': Min = ', es15.9, ', Max = ', es15.9 ) + SpcInfo => NULL() + ENDDO + + ! ! Convert units back + ! CALL Convert_Spc_Units( & + ! Input_Opt = Input_Opt, & + ! State_Chm = State_Chm, & + ! State_Grid = State_Grid, & + ! State_Met = State_Met, & + ! new_units = previous_units, & + ! RC = RC ) + ! + ! ! Trap error + ! IF ( RC /= GC_SUCCESS ) THEN + ! Msg = 'Error returned from Convert_Spc_Units, call #2!' + ! CALL GC_Error( Msg, RC, Loc ) + ! RETURN + ! ENDIF + + ENDIF + + !========================================================================= + ! Get variables for KPP mechanisms (right now just fullchem and Hg) + !========================================================================= + IF ( ( Input_Opt%ITS_A_FULLCHEM_SIM .or. & + Input_Opt%ITS_A_MERCURY_SIM ) .and. Input_Opt%LCHEM ) THEN + + !---------------------------------------------------------------------- + ! KPP_HVALUE (count of internal timesteps at each grid box) + !---------------------------------------------------------------------- + v_name = 'KPP_HVALUE' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr3D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%KPPHvalue = Ptr3D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%KPPHvalue ), & + MAXVAL( State_Chm%KPPHvalue ), & + SUM( State_Chm%KPPHvalue ) + ENDIF + ELSE + State_Chm%KPPHvalue = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + + ! Nullify pointer + Ptr3D => NULL() + + ! FORMAT strings +500 FORMAT( a ) +510 FORMAT( a21, ': Min = ', es15.9, ' Max = ', es15.9, ' Sum = ',es15.9 ) +520 FORMAT( a21, ': not found in restart, set to zero' ) + + ENDIF + + !========================================================================= + ! Get variables for Soil NOx emissions + !========================================================================= + IF ( Input_Opt%ITS_A_FULLCHEM_SIM ) THEN + + !---------------------------------------------------------------------- + ! WETDEP_N (wet-deposited nitrogen) + !---------------------------------------------------------------------- + v_name = 'WETDEP_N' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr2D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%WetDepNitrogen = Ptr2D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%WetDepNitrogen ), & + MAXVAL( State_Chm%WetDepNitrogen ), & + SUM( State_Chm%WetDepNitrogen ) + ENDIF + ELSE + State_Chm%WetDepNitrogen = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) TRIM( v_name ) + ENDIF + + ! Nullify pointer + Ptr2D => NULL() + + !---------------------------------------------------------------------- + ! DRYDEP_N (dry-deposited nitrogen) + !---------------------------------------------------------------------- + v_name = 'DRYDEP_N' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr2D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%DryDepNitrogen = Ptr2D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%DryDepNitrogen ), & + MAXVAL( State_Chm%DryDepNitrogen ), & + SUM( State_Chm%DryDepNitrogen ) + ENDIF + ELSE + State_Chm%DryDepNitrogen = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + + ! Nullify pointer + Ptr2D => NULL() + + ENDIF + + !========================================================================= + ! Read variables for sulfate chemistry and aerosols + !========================================================================= + IF ( Input_Opt%ITS_A_FULLCHEM_SIM .or. & + Input_Opt%ITS_AN_AEROSOL_SIM ) THEN + + !---------------------------------------------------------------------- + ! H2O2_AFTERCHEM + !---------------------------------------------------------------------- + v_name = 'H2O2_AFTERCHEM' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr3D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%H2O2AfterChem = Ptr3D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%H2O2AfterChem ), & + MAXVAL( State_Chm%H2O2AfterChem ), & + SUM( State_Chm%H2O2AfterChem ) + ENDIF + ELSE + State_Chm%H2O2AfterChem = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + + ! Nullify pointer + Ptr3D => NULL() + + !---------------------------------------------------------------------- + ! SO2_AFTERCHEM + !---------------------------------------------------------------------- + v_name = 'SO2_AFTERCHEM' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr3D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%SO2AfterChem = Ptr3D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%SO2AfterChem ), & + MAXVAL( State_Chm%SO2AfterChem ), & + SUM( State_Chm%SO2AfterChem ) + ENDIF + ELSE + State_Chm%SO2AfterChem = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + + ! Nullify pointer + Ptr3D => NULL() + + !---------------------------------------------------------------------- + ! AeroH2O_SNA + !---------------------------------------------------------------------- + v_name = 'AEROH2O_SNA' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr3D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%AeroH2O(:,:,:,NDUST+1) = Ptr3D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%AeroH2O(:,:,:,NDUST+1) ), & + MAXVAL( State_Chm%AeroH2O(:,:,:,NDUST+1) ), & + SUM( State_Chm%AeroH2O(:,:,:,NDUST+1) ) + ENDIF + ELSE + State_Chm%AeroH2O(:,:,:,NDUST+1) = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + + ! Nullify pointer + Ptr3D => NULL() + + !---------------------------------------------------------------------- + ! ORVCsesq + !---------------------------------------------------------------------- + IF ( Input_Opt%LCARB .AND. Input_Opt%LSOA ) THEN + + v_name = 'ORVCSESQ' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr3D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%ORVCsesq(:,:,:) = Ptr3D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%ORVCsesq(:,:,:) ), & + MAXVAL( State_Chm%ORVCsesq(:,:,:) ), & + SUM( State_Chm%ORVCsesq(:,:,:) ) + ENDIF + ELSE + State_Chm%ORVCsesq(:,:,:) = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + + ! Nullify pointer + Ptr3D => NULL() + + ENDIF + + ENDIF + + !========================================================================= + ! Read variables for UCX and the HEMCO PARANOx extension + !========================================================================= + IF ( Input_Opt%ITS_A_FULLCHEM_SIM ) THEN + + !---------------------------------------------------------------------- + ! STATE_PSC (needed to initialize UCX) + !---------------------------------------------------------------------- + v_name = 'STATE_PSC' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr3D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%STATE_PSC = Ptr3D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%STATE_PSC ), & + MAXVAL( State_Chm%STATE_PSC ), & + SUM( State_Chm%STATE_PSC ) + + ENDIF + ELSE + IF ( Input_Opt%amIRoot ) THEN +#ifdef ESMF_ + ! ExtData and HEMCO behave ambiguously - if the file was found + ! but was full of zeros throughout the domain of interest, it + ! will result in the same output from ExtData as if the field + ! was missing from the file. As such, HEMCO cannot distinguish + ! between a missing file and a field of zeros + WRITE(6,*) 'PSC restart either all zeros in the ' + WRITE(6,*) 'root domain, or the restart file did ' + WRITE(6,*) 'not contain STATE_PSC. Root domain ' + WRITE(6,*) 'will be initialized PSC-free' + ENDIF +#else + WRITE( 6, 500 ) & + 'STATE_PSC not found in restart, initialize PSC-free' + ENDIF +#endif + ENDIF + + ! Nullify pointer + Ptr3D => NULL() + + !---------------------------------------------------------------------- + ! JOH (needed to initialize PARANOx) + !---------------------------------------------------------------------- + v_name = 'JOH' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr2D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%JOH = Ptr2D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%JOH ), & + MAXVAL( State_Chm%JOH ), & + SUM( State_Chm%JOH ) + ENDIF + ELSE + State_Chm%JOH = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + + ! Nullify pointer + Ptr2D => NULL() + + !---------------------------------------------------------------------- + ! JNO2 (needed to initialize PARANOx) + !---------------------------------------------------------------------- + v_name = 'JNO2' + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr2D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + State_Chm%JNO2 = Ptr2D + IF ( Input_Opt%amIRoot ) THEN + WRITE( 6, 510 ) ADJUSTL( v_name ), & + MINVAL( State_Chm%JNO2 ), & + MAXVAL( State_Chm%JNO2 ), & + SUM( State_Chm%JNO2 ) + ENDIF + ELSE + State_Chm%JNO2 = 0.0_fp + IF ( Input_Opt%amIRoot ) WRITE( 6, 520 ) ADJUSTL( v_name ) + ENDIF + ! Nullify pointer + Ptr2D => NULL() + + ENDIF + + !========================================================================= + ! Read ocean mercury variables + !========================================================================= + IF ( Input_Opt%ITS_A_MERCURY_SIM ) THEN + + ! Print total mass to log + WRITE( 6, 220 ) +220 FORMAT(/, 'Total mass of each ocean and snow Hg species:') + + !---------------------------------------------------------------------- + ! Total Hg in ocean + !---------------------------------------------------------------------- + DO M = 1, 3 + + ! Define variable name + SELECT CASE( M ) + CASE ( 1 ) + HgSpc = 'Hg0' + CASE ( 2 ) + HgSpc = 'Hg2' + CASE ( 3 ) + HgSpc = 'HgP' + END SELECT + v_name = 'OCEAN_' // TRIM( HgSpc ) + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr2D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + + ! Check for negative concentrations (jaf, 7/6/11) + DO I = 1, State_Grid%NX + DO J = 1, State_Grid%NY + IF ( Ptr2D(I,J) < 0.0d4 ) THEN + Ptr2D(I,J) = 0.0d4 + ENDIF + ENDDO + ENDDO + + ! Assign ocean mercury data and write total mass to log file + SELECT CASE( M ) + CASE ( 1 ) + State_Chm%OceanHg0 = Ptr2D + WRITE( 6, 240 ) TRIM( v_name ), & + SUM( State_Chm%OceanHg0 ), 'kg' + CASE ( 2 ) + State_Chm%OceanHg2 = Ptr2D + WRITE( 6, 240 ) TRIM( v_name ), & + SUM( State_Chm%OceanHg2 ), 'kg' + CASE ( 3 ) + State_Chm%OceanHgP = Ptr2D + WRITE( 6, 240 ) TRIM( v_name ), & + SUM( State_Chm%OceanHgP ), 'kg' + END SELECT + + ELSE + WRITE( 6, 230 ) TRIM( v_name ) + ENDIF + + ! Nullify pointer + Ptr2D => NULL() + + ENDDO + + !-------------------------------------------------------------- + ! Hg snowpack on land and ocean + !-------------------------------------------------------------- + DO M = 1, 4 + + ! Define variable name prefix + SELECT CASE( M ) + CASE ( 1 ) + Prefix = 'SNOW_HG_OCEAN' ! Reducible on ocean + CASE ( 2 ) + Prefix = 'SNOW_HG_OCEAN_STORED' ! Non-reducible on ocean + CASE ( 3 ) + Prefix = 'SNOW_HG_LAND' ! Reducible on land + CASE ( 4 ) + Prefix = 'SNOW_HG_LAND_STORED' ! Non-reducible on land + END SELECT + + v_name = TRIM( Prefix ) + + ! Get variable from HEMCO and store in local array + CALL HCO_GC_GetPtr( Input_Opt, State_Grid, TRIM( v_name ), & + Ptr2D, RC, FOUND=FOUND ) + + ! Check if variable is in file + IF ( FOUND ) THEN + + ! Assign ocean mercury data and write total mass to file + SELECT CASE( M ) + CASE ( 1 ) + State_Chm%SnowHgOcean = Ptr2D + WRITE( 6, 240 ) TRIM( v_name ), & + SUM( State_Chm%SnowHgOcean ), 'kg' + CASE ( 2 ) + State_Chm%SnowHgOceanStored = Ptr2D + WRITE( 6, 240 ) TRIM( v_name ), & + SUM( State_Chm%SnowHgOceanStored ),'kg' + CASE ( 3 ) + State_Chm%SnowHgLand = Ptr2D + WRITE( 6, 240 ) TRIM( v_name ), & + SUM( State_Chm%SnowHgLand ), 'kg' + CASE ( 4 ) + State_Chm%SnowHgLandStored = Ptr2D + WRITE( 6, 240 ) TRIM( v_name ), & + SUM( State_Chm%SnowHgLandStored ), 'kg' + END SELECT + + ELSE + WRITE( 6, 230 ) TRIM( v_name ) + ENDIF + + ENDDO + + ! Format strings +230 FORMAT( a24, ' not found in restart file, set to zero') +240 FORMAT( a24, ': ', es15.9, 1x, a4) + + ENDIF + + !================================================================= + ! Clean up + !================================================================= + + ! Free pointer + Spc => NULL() + + ! Mark end of section in log + IF ( Input_Opt%Verbose .AND. Input_Opt%amIRoot ) THEN + CALL DEBUG_MSG('### DONE GET_GC_RESTART') + ENDIF + WRITE( 6, '(a)' ) REPEAT( '=', 79 ) + +END SUBROUTINE Get_GC_Restart + + +END MODULE CHEM_DRV +!========================================================================================================== + +#ifdef CACHED_SUBDD + +SUBROUTINE tijlh_defs(arr,nmax,decl_count) + ! Needs to be outside the module to prevent circular dependencies with SUBDD + ! 3D tracer outputs (model horizontal grid and layers). +use subdd_mod, only : info_type +! info_type_ is a homemade structure constructor for older compilers +use subdd_mod, only : info_type_ +use chem_com, only : ntm, trname, nsp, spname +implicit none +integer :: nmax,decl_count +integer :: n +type(info_type) :: arr(nmax) + +decl_count = 0 + +! First, diagnostics available for all tracers: +do n=1,nsp + ! 3D mixing ratios (SUBDD string is just tracer name): + arr(next()) = info_type_( & + sname = trim(spname(n)), & + lname = trim(spname(n))//' mixing ratio', & + units = 'mol mol-1' & + ) +end do ! tracers loop + +return +contains +integer function next() + decl_count = decl_count + 1 + next = decl_count +end function next +END SUBROUTINE tijlh_defs + +SUBROUTINE tijh_defs(arr,nmax,decl_count) + ! Needs to be outside the module to prevent circular dependencies with SUBDD + ! 3D tracer outputs (model horizontal grid and layers). +use subdd_mod, only : info_type +! info_type_ is a homemade structure constructor for older compilers +use subdd_mod, only : info_type_ +implicit none +integer :: nmax,decl_count +integer :: n +character*80 :: unitString +type(info_type) :: arr(nmax) + +decl_count = 0 + +!do n=1,1 + + arr(next()) = info_type_( & + sname = 'StateMet_SUNCOSmid', & + lname = 'StateMet_SUNCOSmid', & + units = '1' & + ) + + arr(next()) = info_type_( & + sname = 'StateMet_PARDF', & + lname = 'StateMet_PARDF', & + units = 'W m-2' & + ) + + arr(next()) = info_type_( & + sname = 'StateMet_PARDR', & + lname = 'StateMet_PARDR', & + units = 'W m-2' & + ) + + arr(next()) = info_type_( & + sname = 'lat2d', & + lname = 'lat2d', & + units = 'degrees_north' & + ) + +!end do ! tracers loop + +return +contains +integer function next() + decl_count = decl_count + 1 + next = decl_count +end function next +END SUBROUTINE tijh_defs + +#endif diff --git a/model/CLOUDS2.F90 b/model/CLOUDS2.F90 index 993614e6..7510cf5c 100644 --- a/model/CLOUDS2.F90 +++ b/model/CLOUDS2.F90 @@ -239,7 +239,7 @@ module CLOUDS !@var CLDSSL large-scale cloud cover !@var SM,QM Vertical profiles of (T/p**kappa)*AIRM, q*AIRM real*8, dimension(LM) :: SSHR,DCTEI,TAUSSL,CLDSSL,TAUSSLIP -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS real*8, dimension(LM) :: TAUSSL3D,CLDSSL3D #endif real*8, dimension(LM) :: SM,QM @@ -407,7 +407,7 @@ module CLOUDS !@var ccp_cosp Mixing ratio of convective precipitation [kg/kg] REAL*8 ccp_cosp(LM+1) #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS real*8 mc_up_mf(LM+1,2), & ! Plume updraft mass flux along edge (kg/m2/s) mc_dd_mf(LM+1,2), & ! Plume downdraft mass flux alonge edge (kg/m2/s) mc_up_ent(LM,2), & ! Plume updraft entrainment flux (kg/m2/s) @@ -429,7 +429,7 @@ module CLOUDS ! 4 = downdraft mass flux ! 5 = downdraft entrain ! 6 = downdraft detrain - real*8 :: dZ(LM), dZm(LM+1) + real*8 :: dZ(LM), dZm(LM) #endif #endif @@ -632,7 +632,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) TADJ,TEMWM,TEM,TIG,TNX1,TP,TVP,TOLD,TOLD1,TTURB,TRATIO, & UMTEMP,VMTEMP,VT, & WMDN,WMUP,WMEDG,WMIX,W2TEM,WTEM,WCONST,WCUFRZ,WORK,WMAX,WV -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS real*8, dimension(LM) :: bykg real*8 :: ccm_ref, kg_plume #endif @@ -918,7 +918,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) ccp_cosp(:) = 0. ccl_cosp(:) = 0. #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Reset arrays that track the convective mass fluxes mc_up_mf(:,:) = 0d0 mc_dd_mf(:,:) = 0d0 @@ -940,8 +940,8 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) ! Calculate distance layer midpoints [m] (with special treatment at surface) for ! precipitation flux calculation dZm(1) = 0.5 * dZ(1) - DO L=2,LM+1 - dZm(L) = 0.5 * ( dZm(L-1) + dZm(L) ) + DO L=2,LM + dZm(L) = 0.5 * ( dZ(L-1) + dZ(L) ) ENDDO ! Calculate inverse mass in each layer (1/kg) DO L=1,LM @@ -1126,7 +1126,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) If (NPPL==2 .and. (.not.MC1 .or. MCCONT.lt.2)) Cycle AREA_PARTITION !**** Convection rose 2 or more layers for first AREA PARTITION -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Reset aggregators mc_dqevap(:,IC) = 0. mc_dqcond(:,IC) = 0. @@ -1401,7 +1401,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) !**** CONDENSE VAPOR IN THE PLUME AND ADD LATENT HEAT call get_dq_cond(smp,qmp,plk(l),mplume,lhx,pl(l),dqsum,fqcond) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Save rainwater production rate (kg/kg/s) ! Convert dqsum ( kg H2O / kg plume * hPa plume ) to ( kg H2O / kg air / s ) ! This may be overwritten in NPPL=2 @@ -1428,7 +1428,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) CDHEAT(L)=SLH*COND(L) ! calculate CDHEAT before add CONDV CDHSUM=CDHSUM+CDHEAT(L) COND(L)=COND(L)+CONDV(L-1) ! add in the vertical transported COND -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Convert (kg/kg)*mb to kg/m2/s; flip sign since in updraft IF ( TL(L-1) .gt. TF ) THEN mc_pflx_l(L) = mc_pflx_l(L) - ( ( CONDV(L-1) / CCM(L-1) ) * ( PL(L) * 1d2 / ( RGAS * TL(L) ) ) ) / dZm(L) @@ -1798,7 +1798,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) DVM(K,L)=DVM(K,L)-V_0(K,L)*EPLUME-VMTEMP end do -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !==================================================================== ! Archive mass that entrains into the upward plume (kg/m2/s) !==================================================================== @@ -1829,7 +1829,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) DETALL(L,IC,LM) = DET(L)*100.*1000. endif #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !========================================================================= ! Archive mass that detrains from upward plumes (occurs at cloud tops; kg/m2/s) !========================================================================= @@ -2141,7 +2141,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) if(DQEVP.gt.SMDN*PLK(L)/SLH) DQEVP=SMDN*PLK(L)/SLH if (L.lt.LMIN) DQEVP=0. -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Save re-evaporation rate (kg/kg/s) ! Convert from ( kg H2O/kg plume * mb plume ) -> ( kg H2O / kg air / s ) kg_plume = 1d2 * ddraft * FMC1 * DXYP(j_debug) * bygrav @@ -2252,7 +2252,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) DTMOMR(:,L,1:NTX)=DTMOMR(:,L,1:NTX)-TMOM(:,L,1:NTX)*FENTRA #endif /* TRACERS_ON */ -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !======================================================================== ! Archive mass flux entrained to the downdraft (kg/m2/s) !======================================================================== @@ -2287,7 +2287,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) TMOMDN(xymoms,1:NTX)= TMOMDN(xymoms,1:NTX)*(1.+FENTRA) #endif /* TRACERS_ON */ -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !======================================================================== ! Archive mass flux detrained from the downdraft (kg/m2/s) !======================================================================== @@ -2659,7 +2659,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) DWNFLX(L,IC,LMIN) = 100.*DDMFLX(L)*bygrav/dtsrc endif #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Archive plume mass fluxes (kg/m2/s) ! MCMFLX is the plume mass (CCM; mb) times fraction of plume area/gridbox area (FMC1) @@ -2785,7 +2785,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) call stop_model("MSTCNV: negative cloud cover", 255) END IF -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS IF ( CCM(L) > 0 ) CCM_REF = CCM(L) #endif @@ -2823,7 +2823,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) if (mcloud.gt.0) call get_dq_evap (smold(l),qmold(l),plk(l),airm(l),lhx,pl(l),prcp*AIRM(L)/MCLOUD, dqsum,fprcp) dqsum=dqsum*MCLOUD*BYAM(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Re-evaporated precipitation [kg/kg/s] kg_plume = 1d2 * mcloud * fevap * DXYP(j_debug) * bygrav if (mcloud.gt.0) mc_dqevap(L,IC) = mc_dqevap(L,IC) + (dqsum/mcloud) * kg_plume * bykg(L) * bydtsrc @@ -3008,7 +3008,7 @@ subroutine MSTCNV(IERR,LERR,i_debug,j_debug) #endif #endif /* TRACERS_WATER */ -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Convert (kg/kg)*mb to kg/m2/s ! Use CCM_REF set to the last positive CCM(L) in the column to prevent ! floating overflows for precipitation beneath the cloud base @@ -3537,7 +3537,7 @@ subroutine LSCOND(IERR,WMERR,LERR,i_debug,j_debug) QHEATI=0. CLDSSL=0 TAUSSL=0 -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS CLDSSL3D=0. TAUSSL3D=0. ! Reset arrays that track the condensation/evaporation fluxes @@ -4061,7 +4061,7 @@ subroutine LSCOND(IERR,WMERR,LERR,i_debug,j_debug) call get_dq_evap (tl(l)*rh00(l)/plk(l),ql(l)*rh00(l),plk(l),rh00(l),lhx,pl(l),qclx(l)/(fssl(l)*rh00(l)), dqsum,fqcond1) DWDT=DQSUM*RH00(L)*FSSL(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ls_dqevap(l) = ls_dqevap(l) + dwdt / dtsrc #endif @@ -4075,7 +4075,7 @@ subroutine LSCOND(IERR,WMERR,LERR,i_debug,j_debug) call get_dq_evap (tl(l)*rh00(l)/plk(l),ql(l)*rh00(l),plk(l),rh00(l),lhx,pl(l),qcix(l)/(fssl(l)*rh00(l)), dqsum,fqcond1) DWDT=DQSUM*RH00(L)*FSSL(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ls_dqevap(l) = ls_dqevap(l) + dwdt / dtsrc #endif @@ -4485,7 +4485,7 @@ subroutine LSCOND(IERR,WMERR,LERR,i_debug,j_debug) SLH=LHX*BYSHA call get_dq_cond(tl(l),ql(l),1d0,1d0,lhx,pl(l),dqsum,fcond) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ls_dqcond(l) = ls_dqcond(l) + dqsum * fssl(l) / dtsrc #endif @@ -4692,7 +4692,7 @@ subroutine LSCOND(IERR,WMERR,LERR,i_debug,j_debug) SSHR(L)=SSHR(L)+FSSL(L)*(TL(L)-TOLD)*AIRM(L) DQLSC(L)=DQLSC(L)+FSSL(L)*(QL(L)-QOLD) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Convert to kg/m2/s and from top edge (prebar) to bottom edge (ls_pflx*) ls_pflx_l(l+1) = (prebar(l)-preice(l)) * 100. ls_pflx_i(l+1) = preice(l) * 100. @@ -5180,7 +5180,7 @@ subroutine LSCOND(IERR,WMERR,LERR,i_debug,j_debug) #endif end do OPTICAL_THICKNESS -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Archive these 3-D cloud fractions before converting to areal 2-D cloud fraction DO L=1,LMCLD IF ( TAUSSL(L) .lt. 0 ) THEN diff --git a/model/CLOUDS2_DRV.F90 b/model/CLOUDS2_DRV.F90 index ae0baeee..d73f4c17 100644 --- a/model/CLOUDS2_DRV.F90 +++ b/model/CLOUDS2_DRV.F90 @@ -195,9 +195,11 @@ subroutine CONDSE ,wmclwp,wmctwp,CDNC_TOMAS #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use CLOUDS_COM, only : cldss3d use CLOUDS, only : taussl3d, cldssl3d + use CLOUDS_COM, only : pficu, pflcu, pfilsan, pfllsan + use CLOUDS_COM, only : dtrain, dqrcu, dqrlsan, reevapcn, reevapls, cmfmc #endif #if (defined CLD_AER_CDNC) || (defined CLD_SUBDD) use CLOUDS, only : cteml,cd3dl,cl3dl,ci3dl @@ -209,10 +211,12 @@ subroutine CONDSE use CLOUDS, only : CUMFLX,DWNFLX,WCUALL,ENTALL,DETALL, & MPLUMEALL,PLUME_MAX,PLUME_MIN #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use CLOUDS, only : mc_up_mf, mc_dd_mf, mc_up_ent, mc_dd_ent, mc_up_det, mc_dd_det use CLOUDS, only : mc_dqcond, mc_dqevap, ls_dqcond, ls_dqevap use CLOUDS, only : mc_pflx_l, mc_pflx_i, ls_pflx_l, ls_pflx_i + use CLOUDS_COM, only : pficu, pflcu, pfilsan, pfllsan + use CLOUDS_COM, only : dtrain, dqrcu, dqrlsan, reevapcn, reevapls, cmfmc #endif use PBLCOM, only : dclev,egcm,w2gcm,pblht,pblptop use ATM_COM, only : pk,pek,pmid,pedn,gz,PMIDOLD,pdsig,MWs, & @@ -303,26 +307,6 @@ subroutine CONDSE integer LMIN #endif -#ifdef GCAP - real*8, & - dimension(GRID%I_STRT_HALO:GRID%I_STOP_HALO, & - GRID%J_STRT_HALO:GRID%J_STOP_HALO,LM) :: & - dtrain, & ! Updraft detrainment flux in layer [kg/m2/s] - dqrcu, & ! Convective rainwater source in layer [kg/kg/s] - dqrlsan, & ! Stratiform rainwater source in layer [kg/kg/s] - reevapcn, & ! Evap./subl. of convective precip in layer [kg/kg/s] - reevapls ! Evap./subl. of stratiform precip in layer [kg/kg/s] - real*8, & - dimension(GRID%I_STRT_HALO:GRID%I_STOP_HALO, & - GRID%J_STRT_HALO:GRID%J_STOP_HALO,LM+1) :: & - cmfmc, & ! Upward cloud mass flux [kg/m2/s] - pficu, & ! Downward flux of convective ice precipitation [kg/m2/s] - pflcu, & ! Downward flux of convective liq precipitation [kg/m2/s] - pfilsan, & ! Downward flux of large-scale ice precipitation [kg/m2/s] - pfllsan ! Downward flux of large-scale liq precipitation [kg/m2/s] - integer LMIN -#endif - #ifdef CACHED_SUBDD #ifdef TRACERS_WATER !tracer precipitation variable name @@ -571,7 +555,7 @@ subroutine CONDSE ! isccp frequency diags save_fq_isccp=0.d0 #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! plume diagnostics dtrain = 0.d0 dqrcu = 0.d0 @@ -651,6 +635,7 @@ subroutine CONDSE numThreads = 1 ! no openmp +#if (defined CALCULATE_LIGHTNING) || (defined TRACERS_SPECIAL_Shindell) #ifdef AUTOTUNE_LIGHTNING IF ( SUM(CNT_FR) .gt. 0 ) THEN TUNE_LT_LAND = LAND_FR_LIS*SUM(CNT_FR)/SUM(LAND_FR_UNC) @@ -667,10 +652,11 @@ subroutine CONDSE 'CLOUDS2_DRV: Calculating land/sea tuning parameters:', & TUNE_LT_LAND, TUNE_LT_SEA !CALL STOP_MODEL( 'LTM Testing',17) - FLASH_DENS = 0d0 - !CG_DENS = 0d0 FLASH_UNC = 0d0 #endif + FLASH_DENS = 0d0 + ! CG_DENS = 0d0 ! TODO: Should this variable be dropped? +#endif !**** !**** MAIN J LOOP @@ -1052,7 +1038,7 @@ subroutine CONDSE call inc_ajl(i,j,l,jl_mcdflx,DDMFLX(L)) call inc_ajl(i,j,l,jl_csizmc,CSIZEL(L)*CLDMCL(L)*AIRM(L)) aijl(i,j,l,ijl_MCamFX) = aijl(i,j,l,ijl_MCamFX) + MCFLX(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS CMFMC(i,j,l+1) = MCFLX(l) * 100 * bygrav * bydtsrc ! mb -> kg m-2 s-1 #endif end do @@ -1223,7 +1209,7 @@ subroutine CONDSE mc_pl_min_p2(I,J,:) = PLUME_MIN(2,:) endif #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! plume diagnostics (kg/m2/s) !--------------------- @@ -1390,7 +1376,7 @@ subroutine CONDSE Itime,I,J,LERR,' CONDSE:H2O<0',WMERR,' ->0' !**** Accumulate diagnostics of LSCOND -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !--------------------- ! Mimic MERRA2 !--------------------- @@ -1469,7 +1455,7 @@ subroutine CONDSE end do #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS pflcu(i,j,:) = mc_pflx_l(:) ! kg m-2 s-1 pfllsan(i,j,:) = ls_pflx_l(:) ! kg m-2 s-1 pficu(i,j,:) = mc_pflx_i(:) ! kg m-2 s-1 @@ -1960,7 +1946,7 @@ subroutine CONDSE TAUSS(:,I,J)=TAUSSL(:) CLDSS(:,I,J)=CLDSSL(:) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS CLDSS3D(:,I,J)=CLDSSL3D(:) #endif CLDSAV(:,I,J)=CLDSAVL(:) @@ -2534,7 +2520,7 @@ subroutine CONDSE enddo; enddo call inc_subdd(subdd,k,sddarr) #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS case('PRECANV') sddarr(:,:) = 0 call inc_subdd(subdd,k,sddarr) @@ -2583,7 +2569,7 @@ subroutine CONDSE case ('mcamfx') call inc_subdd(subdd,k,cfmip_mcamfx) #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS case ('QL') call inc_subdd(subdd,k,qcl) case ('QI') @@ -2734,7 +2720,7 @@ subroutine CONDSE endif #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Plume diagnostics in aijl file call find_groups('aijlh',grpids,ngroups) do igrp=1,ngroups diff --git a/model/CLOUDS_COM.F90 b/model/CLOUDS_COM.F90 index 5bb98cca..6a1ce184 100644 --- a/model/CLOUDS_COM.F90 +++ b/model/CLOUDS_COM.F90 @@ -59,9 +59,21 @@ module CLOUDS_COM real*8, allocatable, dimension(:,:,:) :: TAUMC !@var CLDSS super-saturated cloud cover area (percent) real*8, allocatable, dimension(:,:,:) :: CLDSS -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !@var CLDSS3D super-saturated cloud cover volume 3-D fraction real*8, allocatable, dimension(:,:,:) :: CLDSS3D + real*8, allocatable, dimension(:,:,:) :: & + dtrain, & ! Updraft detrainment flux in layer [kg/m2/s] + dqrcu, & ! Convective rainwater source in layer [kg/kg/s] + dqrlsan, & ! Stratiform rainwater source in layer [kg/kg/s] + reevapcn, & ! Evap./subl. of convective precip in layer [kg/kg/s] + reevapls, & ! Evap./subl. of stratiform precip in layer [kg/kg/s] + cmfmc, & ! Upward cloud mass flux [kg/m2/s] + pficu, & ! Downward flux of convective ice precipitation [kg/m2/s] + pflcu, & ! Downward flux of convective liq precipitation [kg/m2/s] + pfilsan, & ! Downward flux of large-scale ice precipitation [kg/m2/s] + pfllsan ! Downward flux of large-scale liq precipitation [kg/m2/s] + integer LMIN #endif !@var CLDMC moist convective cloud cover area (percent) real*8, allocatable, dimension(:,:,:) :: CLDMC @@ -223,8 +235,10 @@ subroutine ALLOC_CLOUDS_COM(grid) ULS,VLS,UMC,VMC,TLS,QLS,TAUSSIP,CSIZSSIP, & QLss,QIss,QLmc,QImc, & TMC,QMC,DDM1,AIRX,LMC,DDMS,TDN1,QDN1,DDML -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use CLOUDS_COM, only : CLDSS3D + use CLOUDS_COM, only : dtrain, dqrcu, dqrlsan, reevapcn, reevapls, cmfmc + use CLOUDS_COM, only : pficu, pflcu, pfilsan, pfllsan #endif #if (defined mjo_subdd) || (defined etc_subdd) use CLOUDS_COM, only : CLWC3D,CIWC3D,TLH3D,SLH3D,DLH3D,LLH3D @@ -300,9 +314,29 @@ subroutine ALLOC_CLOUDS_COM(grid) QLmc(LM,I_0H:I_1H,J_0H:J_1H), & QImc(LM,I_0H:I_1H,J_0H:J_1H), & STAT=IER) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS allocate( CLDSS3D(LM,I_0H:I_1H,J_0H:J_1H) ) CLDSS3D = 0d0 + allocate( dtrain(I_0H:I_1H,J_0H:J_1H,LM) ) + dtrain = 0d0 + allocate( dqrcu(I_0H:I_1H,J_0H:J_1H,LM) ) + dqrcu = 0d0 + allocate( dqrlsan(I_0H:I_1H,J_0H:J_1H,LM) ) + dqrlsan = 0d0 + allocate( reevapcn(I_0H:I_1H,J_0H:J_1H,LM) ) + reevapcn = 0d0 + allocate( reevapls(I_0H:I_1H,J_0H:J_1H,LM) ) + reevapls = 0d0 + allocate( cmfmc(I_0H:I_1H,J_0H:J_1H,(LM+1)) ) + cmfmc = 0d0 + allocate( pficu(I_0H:I_1H,J_0H:J_1H,(LM+1)) ) + pficu = 0d0 + allocate( pflcu(I_0H:I_1H,J_0H:J_1H,(LM+1)) ) + pflcu = 0d0 + allocate( pfilsan(I_0H:I_1H,J_0H:J_1H,(LM+1)) ) + pfilsan = 0d0 + allocate( pfllsan(I_0H:I_1H,J_0H:J_1H,(LM+1)) ) + pfllsan = 0d0 #endif #ifdef mjo_subdd allocate( & diff --git a/model/DEFACC.f b/model/DEFACC.f index f9b62c5d..f5d54210 100644 --- a/model/DEFACC.f +++ b/model/DEFACC.f @@ -4854,7 +4854,79 @@ subroutine ij_defs ia_ij(k) = ia_rad_frc scale_ij(k) = 1. #endif /* ACCMIP_LIKE_DIAGS */ - +#ifdef TRACERS_GC + k=k+1 + ij_fcghg(1,1) = k + lname_ij(k) = 'SW TOA CH4 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'swf_ch4_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(2,1) = k + lname_ij(k) = 'LW TOA CH4 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'lwf_ch4_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(1,2) = k + lname_ij(k) = 'SW TOA N2O RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'swf_n2o_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(2,2) = k + lname_ij(k) = 'LW TOA N2O RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'lwf_n2o_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(1,3) = k + lname_ij(k) = 'SW TOA CFC11 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'swf_cfc11_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(2,3) = k + lname_ij(k) = 'LW TOA CFC11 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'lwf_cfc11_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(1,4) = k + lname_ij(k) = 'SW TOA CFC12 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'swf_cfc12_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(2,4) = k + lname_ij(k) = 'LW TOA CFC12 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'lwf_cfc12_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(1,5) = k + lname_ij(k) = 'SW TOA O3 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'swf_o3_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. + k=k+1 + ij_fcghg(2,5) = k + lname_ij(k) = 'LW TOA O3 RADIATIVE FORCING' + units_ij(k) = 'W/m^2' + name_ij(k) = 'lwf_o3_toa' + ia_ij(k) = ia_rad_frc + scale_ij(k) = 1. +#endif /* TRACERS_GC */ + c c the following are not accumulated c diff --git a/model/DIAG_COM.f b/model/DIAG_COM.f index 14a7feaa..787c2a97 100644 --- a/model/DIAG_COM.f +++ b/model/DIAG_COM.f @@ -1463,7 +1463,11 @@ Subroutine Gather_Diagnostics() End Subroutine Gather_Diagnostics Subroutine Collect_Scalars() +#ifdef TRACERS_GC + use praecisionem_mod +#else use precision_mod +#endif use domain_decomp_atm, only : grid,sumxpe,am_i_root use diag_com implicit none diff --git a/model/DIAG_ZONALcs.f b/model/DIAG_ZONALcs.f index f1df4a24..bd9429d3 100644 --- a/model/DIAG_ZONALcs.f +++ b/model/DIAG_ZONALcs.f @@ -7,7 +7,11 @@ module diag_zonal USE CONSTANT, only : twopi USE RESOLUTION, only : im,jm USE DOMAIN_DECOMP_ATM, only : dist_grid,sumxpe,am_i_root +#ifdef TRACERS_GC + use praecisionem_mod, only : reduce_precision +#else use precision_mod, only : reduce_precision +#endif implicit none private diff --git a/model/GCDIAGb.f b/model/GCDIAGb.f index dbef8846..185936f7 100644 --- a/model/GCDIAGb.f +++ b/model/GCDIAGb.f @@ -1338,7 +1338,11 @@ SUBROUTINE DIAGB USE DOMAIN_DECOMP_1D, only : HALO_UPDATEj, HALO_UPDATE_COLUMN USE DOMAIN_DECOMP_1D, only : SOUTH, NORTH, GLOBALSUM USE DOMAIN_DECOMP_1D, only : SUMXPE, broadcast, AM_I_ROOT +#ifdef TRACERS_GC + use praecisionem_mod +#else USE PRECISION_MOD +#endif USE GETTIME_MOD IMPLICIT NONE @@ -2326,7 +2330,11 @@ SUBROUTINE DIAG5A (M5,NDT) USE DOMAIN_DECOMP_1D, only : HALO_UPDATE, AM_I_ROOT USE DOMAIN_DECOMP_1D, only : GLOBALSUM, SOUTH, WRITE_PARALLEL USE DOMAIN_DECOMP_1D, only : SUMXPE, broadcast +#ifdef TRACERS_GC + use praecisionem_mod +#else USE PRECISION_MOD +#endif IMPLICIT NONE INTEGER :: M5,NDT diff --git a/model/GHY_COM.f b/model/GHY_COM.f index 1e20a605..89fed23c 100644 --- a/model/GHY_COM.f +++ b/model/GHY_COM.f @@ -137,7 +137,7 @@ MODULE GHY_COM !@var soil_surf_moist near surf soil moisture (kg/m^3) for subdd real*8, ALLOCATABLE, dimension(:,:) :: soil_surf_moist -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !@var Surface roughness height for diagnostics REAL*8, allocatable, dimension(:,:) :: z0m_save !@var LAI for diagnostics @@ -268,7 +268,7 @@ SUBROUTINE ALLOC_GHY_COM(grid) ALLOCATE( soil_surf_moist(I_0H:I_1H,J_0H:J_1H) ) soil_surf_moist(:,:) = 0.d0 -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ALLOCATE( z0m_save(I_0H:I_1H,J_0H:J_1H) ) z0m_save = 0d0 ALLOCATE( lai_save(I_0H:I_1H,J_0H:J_1H) ) diff --git a/model/GHY_DRV.f b/model/GHY_DRV.f index 777c1119..761c6f76 100644 --- a/model/GHY_DRV.f +++ b/model/GHY_DRV.f @@ -823,7 +823,7 @@ subroutine earth (ns,moddsf,moddd) #ifdef TRACERS_GASEXCH_land_CO2 use tracer_com, only : n_CO2n #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use ghy_com, only : wfcs, z0m_save, lai_save #endif use TimeConstants_mod, only: SECONDS_PER_YEAR @@ -1467,7 +1467,7 @@ subroutine earth (ns,moddsf,moddd) sddarr2d(i,j) = atmlnd%runo(i,j)*fearth(i,j) enddo; enddo call inc_subdd(subdd,k,sddarr2d) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS case ('GWETTOP') do j=j_0,j_1; do i=i_0,i_1 sddarr2d(i,j)=0.0 @@ -1678,7 +1678,7 @@ subroutine ghy_diag(i,j,jr,kr,ns,moddsf & ,airrig,aeirrig,alandC use ent_com, only : excess_C use ghy_com, only : gdeep, gsaveL, fearth -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use ghy_com, only : lai_save #endif USE CLOUDS_COM, only : DDMS @@ -1791,7 +1791,7 @@ subroutine ghy_diag(i,j,jr,kr,ns,moddsf aij(i,j,ij_rauto)=aij(i,j,ij_rauto)+arauto*ptype aij(i,j,ij_clab)=aij(i,j,ij_clab)+(aclab/nisurf)*ptype aij(i,j,ij_lai)=aij(i,j,ij_lai)+(alai/nisurf)*ptype -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS lai_save(i,j) = (alai/nisurf)*ptype #endif aij(i,j,ij_soilresp)=aij(i,j,ij_soilresp)+asoilresp*ptype diff --git a/model/IORSF.f b/model/IORSF.f index 080825a7..7ee242fb 100644 --- a/model/IORSF.f +++ b/model/IORSF.f @@ -11,6 +11,9 @@ SUBROUTINE io_rsf(filenm,it,iaction,ioerr) USE ATM_COM, only: Kradia USE MODEL_COM, only : ioread_single,iowrite_single * ,ioread,ioread_nodiag,iowrite +#ifdef TRACERS_GC + USE CHEM_DRV, only : io_chem +#endif IMPLICIT NONE !@var filenm name of file to be read or written @@ -87,6 +90,9 @@ SUBROUTINE io_rsf(filenm,it,iaction,ioerr) #ifdef CALCULATE_FLAMMABILITY call io_flammability(kunit,iact,ioerr) #endif +#ifdef TRACERS_GC + call io_chem(kunit,iact,ioerr) +#endif #ifdef TRACERS_ON call io_tracer (kunit,iact,ioerr) #endif diff --git a/model/LANDICE_DRV.f b/model/LANDICE_DRV.f index c609df00..1f8013a2 100644 --- a/model/LANDICE_DRV.f +++ b/model/LANDICE_DRV.f @@ -1008,7 +1008,11 @@ SUBROUTINE daily_LI USE Dictionary_mod USE DOMAIN_DECOMP_ATM, only : GRID, getDomainBounds, & GLOBALSUM, AM_I_ROOT +#ifdef TRACERS_GC + use Tempus_mod, only: Time +#else use Time_mod, only: Time +#endif use Rational_mod IMPLICIT NONE diff --git a/model/MODELE.f b/model/MODELE.f index c9a3bde1..b6ce0988 100644 --- a/model/MODELE.f +++ b/model/MODELE.f @@ -236,7 +236,7 @@ subroutine GISS_modelE(qcRestart,coldRestart,iFile,max_wall_time) call parse_params(iu_IFILE) call closeunit(iu_IFILE) - call initializeModelE() + call initializeModelE(coldRestart) ! Only the root node pays attention to allotted wall time if (AM_I_ROOT()) then @@ -546,7 +546,7 @@ subroutine GISS_modelE(qcRestart,coldRestart,iFile,max_wall_time) contains - subroutine initializeModelE() + subroutine initializeModelE(is_coldstart) USE DOMAIN_DECOMP_1D, ONLY : init_app, am_i_root use Model_com, only: orbit, calendar, makeOrbit use Dictionary_mod @@ -554,6 +554,8 @@ subroutine initializeModelE() use AbstractOrbit_mod, only: AbstractOrbit implicit none + LOGICAL, INTENT(IN) :: is_coldstart + call initializeSysTimers() #ifdef USE_MPP @@ -577,7 +579,7 @@ subroutine initializeModelE() if (am_i_root()) call calendar%print(2000) - call alloc_drv_atm() + call alloc_drv_atm(is_coldstart) call alloc_drv_ocean() end subroutine initializeModelE @@ -857,10 +859,17 @@ SUBROUTINE INPUT (istart,ifile,coldRestart) USE RESOLUTION, only : LM ! atm reference for init_tracer hack #endif #endif - +#ifdef TRACERS_GC + USE CHEM_DRV, only : nymdB, nymdE, nhmsB, nhmsE +#endif + use TimeConstants_mod, only: INT_HOURS_PER_DAY use ModelClock_mod, only: ModelClock +#ifdef TRACERS_GC + use Tempus_mod, only: Time, newTime +#else use Time_mod, only: Time, newTime +#endif use MODEL_COM, only: calendar, orbit use CalendarMonth_mod, only: LEN_MONTH_ABBREVIATION use TimeInterval_mod @@ -1160,6 +1169,12 @@ SUBROUTINE INPUT (istart,ifile,coldRestart) end if ITimeE = nint((modelEtimeE - modelEtime0) / dtSrcUsed) +#ifdef TRACERS_GC + nymdB = 10000*YEARI + 10*MONTHI + DATEI + nymdE = 10000*YEARE + 10*MONTHE + DATEE + nhmsB = 10000*HOURI + nhmsE = 10000*HOURE +#endif C**** Check consistency of DTsrc with NDAY if (is_set_param("DTsrc") .and. diff --git a/model/MPI_Support/gs_setup.inc b/model/MPI_Support/gs_setup.inc index 12ec0088..7618f904 100644 --- a/model/MPI_Support/gs_setup.inc +++ b/model/MPI_Support/gs_setup.inc @@ -136,6 +136,8 @@ c calculate gatherv/scatterv info #endif if (.not. allocated(cntsij)) allocate(cntsij(1)) if (.not. allocated(displsij)) allocate(displsij(1)) + if (.not. allocated(cntslij)) allocate(cntslij(1)) + if (.not. allocated(displslij)) allocate(displslij(1)) #ifdef _GATHER_ c diff --git a/model/Makefile b/model/Makefile index f425ad32..6258adcb 100644 --- a/model/Makefile +++ b/model/Makefile @@ -96,8 +96,18 @@ do_main $(RUN).bin: main.o $(OBJS) # $(COMPONENTS:=_dir) -rm -f libmodel.a ar rcs libmodel.a $(OBJS) @echo "===> linking" +ifeq ($(GC),YES) + $(F90) -I./mod main.o $(LFLAGS) $(EXTRA_LFLAGS) $(OBJS) $(F90OBJS) \ + $(ESMF_OBJS) -L./geos-chem/lib -lGeosCore -lObsPack -lHistory \ + -lHETP_core -lKPP -lGeosUtil -lJulDay -lHeaders -lKPP_FirstPass \ + -lCloudJ_Core -lHCOI_Shared -lHCOX -lHCO -lGeosUtilHco -lJulDayHco \ + -lNcdfUtil -lNcdfUtilHco -lHeadersHco \ + $(COMPLIBS) $(LIBS) \ + -o $(RUN).bin $(LINK_OUTPUT) +else $(F90) main.o $(LFLAGS) $(EXTRA_LFLAGS) $(OBJS) $(F90OBJS) $(ESMF_OBJS) \ $(COMPLIBS) $(LIBS) -o $(RUN).bin $(LINK_OUTPUT) +endif @echo "===> linking ok" @echo diff --git a/model/PBL_DRV.f b/model/PBL_DRV.f index 9d25732d..dfbd988a 100644 --- a/model/PBL_DRV.f +++ b/model/PBL_DRV.f @@ -68,7 +68,7 @@ SUBROUTINE PBL(I,J,IHC,ITYPE,PTYPE,pbl_args,atm) #ifdef SCM USE SCM_COM, only : SCMopt,SCMin #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS USE GHY_COM, only : z0m_save #endif @@ -247,7 +247,7 @@ SUBROUTINE PBL(I,J,IHC,ITYPE,PTYPE,pbl_args,atm) IF (ITYPE.GT.2) THEN Z0M=ROUGHL(I,J) ! 30./(10.**ROUGHL(I,J)) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS z0m_save(I,J) = Z0M #endif ENDIF @@ -353,7 +353,7 @@ SUBROUTINE PBL(I,J,IHC,ITYPE,PTYPE,pbl_args,atm) & ,tr,trnradius,trndens,trnmm #endif & ) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS z0m_save(i,j) = z0m #endif diff --git a/model/RAD2_COM.F90 b/model/RAD2_COM.F90 new file mode 100644 index 00000000..712f775e --- /dev/null +++ b/model/RAD2_COM.F90 @@ -0,0 +1,882 @@ +#include "rundeck_opts.h" + +#ifdef SKIP_TRACERS_RAD +#undef TRACERS_ON +#endif + MODULE RAD_COM +!@sum RAD_COM Model radiation arrays and parameters +!@auth Original Development Team + USE RESOLUTION, ONLY : IM, JM, LM + USE ATM_COM, ONLY : LM_REQ + USE RADPAR, ONLY : S0, NRAERO_AOD => NTRACE + USE ABSTRACTORBIT_MOD, ONLY : ABSTRACTORBIT +#ifdef TRACERS_AMP + USE AERO_CONFIG, ONLY : NMODES +#endif +#ifdef TRACERS_TOMAS + USE TOMAS_AEROSOL, ONLY : ICOMP +#endif +#if (defined TRACERS_DUST) || (defined TRACERS_MINERALS) + USE TRDUST_MOD, ONLY : NSUBCLAYS + USE TRACER_COM, ONLY : NTM_DUST, NTM_CLAY, NTM_SIL1, NTM_SIL2, & + NTM_SIL3, NTM_SIL4, NTM_SIL5 +#endif +!@var S0 solar 'constant' needs to be saved between calls to radiation + IMPLICIT NONE + SAVE + +!@dbparam NRad : DT_Rad = NRad*DTsrc +#ifdef GCAP + INTEGER :: NRad = 1 +#else + INTEGER :: NRad = 5 +#endif +!@var MODRD : if MODRD=0 do radiation, else skip + INTEGER :: MODRD + +!**** DEFAULT ORBITAL PARAMETERS FOR EARTH +!**** Note PMIP runs had specified values that do not necesarily +!**** coincide with those used as the default, or the output of ORBPAR. +!**** OMEGT OBLIQ ECCEN +!**** DEFAULT (2000 AD) : 282.9 23.44 0.0167 +!**** PMIP CONTROL : 282.04 23.446 0.016724 +!**** PMIP 6kyr BP : 180.87 24.105 0.018682 +!**** PMIP LGM (21k) : 294.42 22.949 0.018994 +!@param OMEGT_def precession angle (degrees from vernal equinox) + REAL*8, PARAMETER :: OMEGT_DEF = 282.9D0 +!@param OBLIQ_def obliquity angle (degrees) + REAL*8, PARAMETER :: OBLIQ_DEF = 23.44D0 +!@param ECCN_def eccentricity + REAL*8, PARAMETER :: ECCN_DEF = .0167D0 +!@var OMEGT,OBLIQ,ECCN actual orbital parameters used + REAL*8 OMEGT, OBLIQ, ECCN + +!**** Database parameters to control orbital parameter calculation +!**** Note : setting variable_orb_par=0, orb_par_year_bp=-50 (=year 2000) +!**** does not produce exactly the same as the default values. +!@dbparam variable_orb_par 1 if orbital parameters are time dependent +!@+ 1 : use orb par from year "JYEAR - orb_par_year_bp" +!@+ 0 : use orb par from year orb_par_year_bp (BP=before 1950) +!@+ -1 : set eccn/obliq/omegt to orb_par(1 : 3) +!@+ else : set eccn/obliq/omegt to defaults of orb_par + INTEGER :: variable_orb_par = -2 +!@dbparam orb_par_year_bp = offset from model_year or 1950 (fixed case) + INTEGER :: orb_par_year_bp = 0 +!@dbparam orb_par :: directly specifies orbital parameters + REAL*8, DIMENSION(3) :: orb_par = (/ECCN_DEF,OBLIQ_DEF, & + OMEGT_DEF/) + +!@var dimrad_sv dimension sum of input fields saved for radia_only runs + INTEGER, PARAMETER :: DIMRAD_SV = IM*JM*(7*LM+3*LM_REQ+24) +!@var RQT Radiative equilibrium temperatures above model top + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: RQT +!@var Tchg Total temperature change in adjusted forcing runs + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: Tchg +!@var SRHR(0) Solar raditive net flux into the ground (W/m^2) +!@var TRHR(0) Thermal raditive downward flux into ground(W/O -StB*T^4)(W/m^2) +!@* Note : -StB*T^4 is added in SURFACE, since T varies betw. rad. calls +!@var SRHR(1->LM) Solar raditive heating rate (W/m^2) (short wave) +!@var TRHR(1->LM) Thermal raditive heating rate (W/m^2) (long wave) + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: SRHR, TRHR +!@var TRSURF upward thermal radiation at the surface from rad step W/m2 + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: TRSURF +!@var FSF Solar Forcing over each type (W/m^2) + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: FSF +!@var FSRDIR Solar incident at surface, direct fraction (1) +!@var DIRVIS Direct beam solar incident at surface (W/m^2) + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: FSRDIR, DIRVIS +!@var SRVISSURF Incident solar direct+diffuse visible at surface (W/m^2) + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: SRVISSURF +!@var SRDN Total incident solar at surface (W/m^2) + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: SRDN + ! saved in rsf +!@var FSRDIF diffuse visible incident solar at surface + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: FSRDIF +!@var DIRNIR direct nir incident solar at surface + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: DIRNIR +!@var DIFNIR diffuse nir incident solar at surface + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: DIFNIR +!@var srnflb_save Net solar radiation (W/m^2) +!@var trnflb_save Net thermal radiation (W/m^2) + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: srnflb_save, & + trnflb_save +#ifdef GCAP +!@var save_alb Surface albedo (unitless) + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: save_alb +!@var TAUW3D,TAUI3D water,ice cloud opt. depths (for diags) + REAL*8, DIMENSION( : , : , : ), ALLOCATABLE :: TAUW3D, TAUI3D +#endif +!@var TAUSUMW,TAUSUMI column-sum water,ice cloud opt. depths (for diags) + REAL*8, DIMENSION(:,:), ALLOCATABLE :: TAUSUMW, TAUSUMI +#ifdef mjo_subdd +!@var OLR_acc, OLR_cnt -- Net thermal radiation at TOA (W/m^2) for SUBDD + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: OLR_acc + REAL*8 :: OLR_cnt = 0.D0 +!@var SWHR,LWHR,SWHR_cnt,LWHR_cnt -- shortwave/longwave heating rates for SUBDD (C/d) + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: SWHR, LWHR + REAL*8 :: SWHR_cnt = 0.D0 + REAL*8 :: LWHR_cnt = 0.D0 +!@var swu_avg,swu_cnt -- upward shortwave fluxes at srf for SUBDD (C/d) + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: swu_avg + REAL*8 :: swu_cnt = 0.D0 +#endif +#ifdef TRACERS_ON + +!@var DIAG_FC Controls the number of radiation calls for the calculation of +!@+ aerosol radiative forcing. One call if =1, multiple calls if +!@+ =2, with their number depending on the aerosol scheme used. +!@+ Use =2 sparingly, it is s l o w. Default is 1. No calls if zero. + INTEGER :: diag_fc = 1 +! nraero_xxxx are the aerosol-specific nraero_aod (old ntrace) components of +! aerosol-active species in radiation. nraero_aod=sum(nraero_xxxx) +!@var nraero_aod Number of aerosol types in optical depth calculations +!@var nraero_rf Number of aerosol types in forcing calculations, which is +!@+ different from nraero_aod when DIAG_FC=1 (default) + INTEGER :: nraero_rf = 0 +#ifdef TRACERS_AEROSOLS_Koch +#ifdef SULF_ONLY_AEROSOLS + INTEGER, PARAMETER :: NRAERO_KOCH = 1 +#else +#ifdef TRACERS_AEROSOLS_VBS +#ifdef TRACERS_AEROSOLS_SOA + INTEGER, PARAMETER :: NRAERO_KOCH = 5 +#else + INTEGER, PARAMETER :: NRAERO_KOCH = 4 +#endif /* TRACERS_AEROSOLS_SOA */ +#else +#ifdef TRACERS_AEROSOLS_SOA + INTEGER, PARAMETER :: NRAERO_KOCH = 6 +#else + INTEGER, PARAMETER :: NRAERO_KOCH = 5 +#endif /* TRACERS_AEROSOLS_SOA */ +#endif /* TRACERS_AEROSOLS_VBS */ +#endif /* SULF_ONLY_AEROSOLS */ +#else + INTEGER, PARAMETER :: NRAERO_KOCH = 0 +#endif /* TRACERS_AEROSOLS_Koch */ + +#ifdef TRACERS_NITRATE + INTEGER, PARAMETER :: NRAERO_NITRATE = 1 +#else + INTEGER, PARAMETER :: NRAERO_NITRATE = 0 +#endif /* TRACERS_NITRATE */ + +#if (defined TRACERS_DUST) || (defined TRACERS_MINERALS) + INTEGER, PARAMETER :: NRAERO_CLAY = NSUBCLAYS*NTM_CLAY + INTEGER, PARAMETER :: NRAERO_DUST = NRAERO_CLAY + NTM_SIL1 + & + NTM_SIL2 + NTM_SIL3 + NTM_SIL4 + NTM_SIL5 +!@var nr_soildust First index of dust tracers in radiation (nraero_aod) + INTEGER :: nr_soildust = 0 +#else + INTEGER, PARAMETER :: NRAERO_CLAY = 0 + INTEGER, PARAMETER :: NRAERO_DUST = 0 +#endif /* TRACERS_DUST */ + +!@var nraero_OMA Number of OMA tracers that have an AOD value +!@var nraero_AMP Number of AMP tracers that have an AOD value +!@var nraero_TOMAS Number of TOMAS tracers that have an AOD value + INTEGER :: nraero_OMA = 0 + INTEGER :: nraero_AMP = 0 + INTEGER :: nraero_TOMAS = 0 + +#ifdef TRACERS_AEROSOLS_SEASALT + INTEGER, PARAMETER :: NRAERO_SEASALT = 2 +#else + INTEGER, PARAMETER :: NRAERO_SEASALT = 0 +#endif /* TRACERS_AEROSOLS_SEASALT */ + +#ifdef TRACERS_ON +!@var njaero max expected rad code tracers passed to photolysis +!@var nraero_aod_rsf value of nraero_aod found in the rsf file +!@var nraero_rf_rsf value of nraero_rf found in the rsf file +!@var save_dry_aod_rsf value of save_dry_aod found in the rsf file +!@var tau_as All-sky aerosol optical saved 1 : nraero_aod not 1 : ntm +!@+ This is so clays are separate. Now also used for old parameter +!@+ mxfastj : Number of aerosol/cloud types currently active in the model +!@var tau_cs Same as tau_as for clear-sky +!@var tau_dry Same as tau_as for dry aerosol (RH=0%) + INTEGER :: njaero + ! nraero_aod+2 cloud types (water/ice) + INTEGER :: nraero_aod_rsf = 0 + INTEGER :: nraero_rf_rsf = 0 + INTEGER :: save_dry_aod_rsf = 0 + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: tau_as + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: tau_cs + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: tau_dry +#ifdef CACHED_SUBDD +!@var abstau_as Same as tau_as for absorption +!@var abstau_cs Same as tau_cs for absorption +!@var abstau_dry Same as tau_dry for absorption +!@var swfrc Shortwave aerosol radiative forcing +!@var lwfrc Shortwave aerosol radiative forcing + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: abstau_as + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: abstau_cs + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: abstau_dry + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: swfrc, lwfrc +#endif /* CACHED_SUBDD */ +#endif +#endif +!@var CFRAC Total cloud fraction as seen be radiation + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: CFRAC + ! saved in rsf +!@var RCLD Total cloud optical depth as seen be radiation + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: RCLD + ! saved in rsf +!@var chem_tracer_save 3D O3, CH4 saved elsewhere for use in radiation + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: chem_tracer_save + !saved rsf +#ifdef GCC_COUPLE_RAD +!@var GCCco2_tracer_save 3D CO2 saved elsewhere for use in radiation + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: GCCco2_tracer_save + !saved rsf +#endif +#if (defined SHINDELL_STRAT_EXTRA) && (defined ACCMIP_LIKE_DIAGS) +!@var stratO3_tracer_save 3D stratOx saved elsewhere for use in rad code + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: stratO3_tracer_save + !saved rsf +#endif +!@var rad_to_chem save 3D quantities from radiation code for use in +!@+ chemistry (or rest of model). 1=Ozone, 2=aerosol ext, 3=N2O, 4=CH4, +!@+ 5=CFC11+CFC12 + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: rad_to_chem + !saved in rsf + REAL*8, ALLOCATABLE, DIMENSION( : , : , : , : ) :: rad_to_file +#ifdef GCC_COUPLE_RAD +!@var GCCco2rad_to_chem save 3D quantities from radiation code + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: GCCco2rad_to_chem + !saved in rsf + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: GCCco2rad_to_file +#endif +!@var KLIQ Flag indicating dry(0)/wet(1) atmosphere (memory feature) + INTEGER, ALLOCATABLE, DIMENSION( : , : , : , : ) :: KLIQ + ! saved in rsf +!@dbparam Ikliq 0,1,-1 initialize kliq as dry,equil,current model state + INTEGER :: Ikliq = -1 + ! get kliq-array from restart file +!@dbparam RHfix const.rel.humidity passed to radiation for aeros. tests + REAL*8 :: RHfix = -1. + ! pass the current model rel.humidity +!@dbparam dalbsnX global coeff for snow alb change by black carbon depos + REAL*8 :: dalbsnX = 0. +!@dbparam albsn_yr year of blk carb depos used for snow alb. reduction + INTEGER :: albsn_yr = 1951 + +! variables related to aerosol indirect effects : +! (CDNC=cloud droplet number concentration) +!@dbparam CC_CDNCx scaling factor relating cld cvr change and CDNC change + REAL*8 :: CC_CDNCX = .0000D0 + ! .0036d0 +!@dbparam OC_CDNCx scaling factor relating cld opt depth and CDNC change + REAL*8 :: OD_CDNCX = .0000D0 + ! .007d0 +!@var pcdnc,vcdnc pressure,vertical profile for cld.cvr change + REAL*8, PARAMETER, DIMENSION(7) & + :: PCDNC = (/984.D0,964.D0,934.D0, & + 884.D0,810.D0,710.D0,550.D0/), & + VCDNC = (/.35D0,.20D0,.10D0,.17D0, & + .10D0,.08D0,0.D0/) +!@var cdncl = vcdnc interpolated to current vertical resolution + REAL*8 cdncl(LM) + +!@var COSZ1 Mean Solar Zenith angle for curr. physics(not rad) time step + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: COSZ1 + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: save_COSZ2 + REAL*8, ALLOCATABLE, DIMENSION(:,:,:,:) :: save_RF + REAL*8, ALLOCATABLE, DIMENSION(:,:,:,:) :: save_RF_TP + REAL*8, ALLOCATABLE, DIMENSION(:,:,:,:,:) :: save_RF_3D +!@var COSZ_day Mean Solar Zenith angle for current day + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: COSZ_day +!@var SUNSET Time of sunset for current day (radians from local noon) + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: SUNSET +!@dbparam S0X solar constant multiplication factor + REAL*8 :: S0X = 1. +!@dbparam S0_yr,S0_day obs.date of solar constant (if 0 : time var) + INTEGER :: S0_yr = 1951, S0_day = 182 +!@dbparam CO2X,... scaling factors for CO2 N2O CH4 CFC11 CFC12 XGHG + REAL*8 :: CO2X = 1., N2OX = 1., CH4X = 1., CFC11X = 1., & + CFC12X = 1., XGHGX = 1., O2X = 1., NO2X = 1., & + N2CX = 1., YGHGX = 2., SO2X = 0., & + CH4X_RADoverCHEM = 1.D0 +!@dbparm ref_mult factor to control REFDRY from rundeck + REAL*8 :: ref_mult = 1. +!@dbparam GHG_yr,GHG_day obs.date of well-mixed GHgases (if 0 : time var) + INTEGER :: GHG_yr = 1951, GHG_day = 182 +!@dbparam Volc_yr,Volc_day obs.date of Volc.Aerosols (if 0 : time var) +!@+ special cases : Volc_yr=-1 : 150-yr mean 1850-1999 +!@+ Volc_yr=-2010 : current year up to 2010 then +!@+ repeat volcanos from 100 yrs ago +!@+ Volc_yr=-2000 : older way of creating future volc + INTEGER :: Volc_yr = 1951, Volc_day = 182 +!@dbparam Aero_yr obs.year of troposph.Aerosols (if 0 : use current yr) + INTEGER :: Aero_yr = 1951 ! always use annual cycle +!@dbparam dust_yr nominal year for prescribed dust climatology (if 0 : use current yr) + INTEGER :: dust_yr = 1951 ! always use annual cycle +!@dbparam O3_yr obs.year of Ozone (if 0 : use current year) + INTEGER :: O3_yr = 1951 ! always use annual cycle +!@dbparam H2OstratX strat_water_vapor, cloud, Ozone scaling factor + REAL*8 :: H2OstratX = 1., cldX = 1., O3X = 1. +!@dbparam H2ObyCH4 if not 0 : add CH4 produced H2O into layers 1->LM + REAL*8 :: H2ObyCH4 = 1. +!@var dH2O zonal H2O-prod.rate in kg/m^2/ppm_CH4/second in layer L + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: dH2O +!@var RSDIST,SIND,COSD orbit related variables computed once a day + REAL*8 :: RSDIST, SIND, COSD +!@var ALB is SRNFLB(1)/(SRDFLB(1)+1.D-20),PLAVIS,PLANIR,ALBVIS,ALBNIR, +!@+ SRRVIS,SRRNIR,SRAVIS,SRANIR (see RADIATION) + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ), TARGET :: ALB + +!@var SALB (1.-broadband surface albedo) - saved in rsf + REAL*8, POINTER, DIMENSION(:,:) :: SALB ! = ALB( : , : ,1) +! EQUIVALENCE (SALB,ALB) + +#ifdef ALTER_RADF_BY_LAT +!@var FULGAS_lat multiplicative factors for altering FULGAS by latitude +!@+ for non-transient runs. (greenhouse gas regional forcing) + REAL*8, DIMENSION(13,46) :: FULGAS_lat + !rad not model grid, 13 gasses +!@var FS8OPX_lat multiplicative factors for altering FS8OPX by latitude +!@+ for non-transient runs. (aerosol regional forcing) SOLAR +!@var FT8OPX_lat multiplicative factors for altering FT8OPX by latitude +!@+ for non-transient runs. (aerosol regional forcing) THERMAL + REAL*8, DIMENSION(8,46) :: FS8OPX_lat, FT8OPX_lat + !rad not model grid + !8 groups of aerosols +#endif +!@dbparam rad_interact_aer =1 for radiatively active non-chem tracers + INTEGER :: rad_interact_aer = 0 + ! defaults to 0 +!@dbparam clim_interact_chem=1 for radiatively active chem tracers +!@+ also affects chemisty to humidity feedback + INTEGER :: clim_interact_chem = 0 + ! defaults to 0 + +!@dbparam nradfrc sets frequency of inst. rad. forcing calculations + INTEGER :: nradfrc = 1 + ! do them every nrad*nradfrc physics steps +! nradfrc=0 : skip all, no repeated radiation calculations +!**** the radiative forcing level for instantaneous forcing calcs is set +!**** using the rad_forc_lev parameter. +!@dbparam rad_forc_lev = 0 for TOA, 1 for LTROPO (default=0) + INTEGER :: rad_forc_lev = 0 + +!@dbparam cloud_rad_forc = 1 for calculation of cloud radiative forcing + INTEGER :: cloud_rad_forc = 0 + +!@dbparam TAero_aod_diag = 1 outputs offline aerosol optical properties, +!@+ = 2 outputs band 6 only. Note this only works for background aerosols, +!@+ not tracers. + INTEGER :: TAero_aod_diag = 0 +!@dbparam aer_rad_forc = 1 for calculation of aerosol radiative forcing +!@+ note this only works for background aerosols, not tracers + INTEGER :: aer_rad_forc = 0 + +!@var co2ppm Current CO2 level as seen by radiation + REAL*8 :: co2ppm = 280. ! set a reasonable default value + +!**** Local variables initialised in init_RAD +!@var PLB0,QL0 global parts of local arrays (to avoid OMP-copyin) + REAL*8, DIMENSION(LM_REQ) :: PLB0, SHL0 +!@var ntrix_aod Indexing array for aerosol optical depth tracer names +!@var ntrix_rf Indexing array for aerosol radiative forcing tracer names + INTEGER, ALLOCATABLE, DIMENSION( : ) :: ntrix_aod, ntrix_rf +!@var WTTR weighting array for optional aerosol-ratiation interactions + REAL*8, ALLOCATABLE, DIMENSION( : ) :: WTTR + +#ifdef CUBED_SPHERE +!@var JM_DH2O number of latitudes in CH4->H2O input file +!@var LAT_DH2O latitudes in CH4->H2O input file (converted to radians) + INTEGER, PARAMETER :: JM_DH2O = 18 + REAL*8 :: lat_dh2o(JM_DH2O) +#endif + +!@dbparam snoage_def determines how snowage is calculated : +!@+ = 0 independent of temperature +!@+ = 1 only when max daily local temp. over type > 0 + INTEGER :: snoage_def = 0 + REAL*8, ALLOCATABLE, DIMENSION( : , : , : ) :: SNOAGE + class (AbstractOrbit), allocatable :: orbit + +!@dbparam chl_from_obio =1 to use chl from obio when computing ocean albedo + INTEGER :: chl_from_obio = 0 +!@dbparam chl_from_seawifs =1 to use chl from SeaWIFs when computing ocn albedo + INTEGER :: chl_from_seawifs = 0 + + CONTAINS + + SUBROUTINE RADIATIONSETORBIT(anOrbit) + class (AbstractOrbit), intent(in) :: anOrbit + ALLOCATE( orbit,SOURCE=anOrbit) + END SUBROUTINE RADIATIONSETORBIT + + END MODULE RAD_COM + + SUBROUTINE ALLOC_RAD_COM(grid) +!@sum To allocate arrays who sizes now need to be determined at +!@+ run-time +!@auth Rodger Abel + + USE DOMAIN_DECOMP_ATM, ONLY : DIST_GRID + USE DOMAIN_DECOMP_ATM, ONLY : GETDOMAINBOUNDS + USE RESOLUTION, ONLY : IM, JM, LM + USE ATM_COM, ONLY : LM_REQ +#ifdef TRACERS_ON + USE TRACER_COM, ONLY : NTM +#endif + USE RAD_COM, ONLY : RQT, Tchg, SRHR, TRHR, FSF, FSRDIR, SRVISSURF, & + TRSURF, SRDN, CFRAC, RCLD, chem_tracer_save, rad_to_chem, & + rad_to_file, KLIQ, COSZ1, COSZ_day, SUNSET, dH2O, ALB, SALB, & + SNOAGE, srnflb_save, trnflb_save, FSRDIF, DIRNIR, DIFNIR, & + TAUSUMW, TAUSUMI, DIRVIS +#ifdef GCC_COUPLE_RAD + USE RAD_COM, ONLY : GCCco2_tracer_save, GCCco2rad_to_chem, & + GCCco2rad_to_file +#endif +#ifdef GCAP + USE RAD_COM, ONLY : save_alb, tauw3d, taui3d, save_cosz2, save_rf, save_rf_TP, save_rf_3D +#endif +#ifdef mjo_subdd + USE RAD_COM, ONLY : SWHR_cnt, LWHR_cnt, SWHR, LWHR, OLR_acc, & + OLR_cnt, swu_avg, swu_cnt +#endif +#ifdef CUBED_SPHERE + USE RAD_COM, ONLY : JM_DH2O +#endif +#if (defined SHINDELL_STRAT_EXTRA) & (defined ACCMIP_LIKE_DIAGS) + USE RAD_COM, ONLY : stratO3_tracer_save +#endif + IMPLICIT NONE + TYPE (DIST_GRID), INTENT(IN) :: grid + + INTEGER :: I_0H, I_1H, J_0H, J_1H + INTEGER :: IER + + CALL GETDOMAINBOUNDS(grid,J_STRT_HALO=J_0H,J_STOP_HALO=J_1H) + I_0H = grid%I_STRT_HALO + I_1H = grid%I_STOP_HALO + + ALLOCATE( RQT(LM_REQ,I_0H:I_1H,J_0H:J_1H), & + Tchg(LM+LM_REQ,I_0H:I_1H,J_0H:J_1H), & + SRHR(0 : LM,I_0H:I_1H,J_0H:J_1H), & + TRHR(0 : LM,I_0H:I_1H,J_0H:J_1H), & + TRSURF(4,I_0H:I_1H,J_0H:J_1H),FSF(4,I_0H:I_1H,J_0H:J_1H)& + ,FSRDIR( I_0H:I_1H, J_0H:J_1H ),DIRVIS( I_0H:I_1H, J_0H:J_1H )& + ,SRVISSURF( I_0H:I_1H, J_0H:J_1H ), & + FSRDIF( I_0H:I_1H, J_0H:J_1H ),DIRNIR( I_0H:I_1H, J_0H:J_1H ),& + DIFNIR( I_0H:I_1H, J_0H:J_1H ),TAUSUMW( I_0H:I_1H, J_0H:J_1H )& + ,TAUSUMI( I_0H:I_1H, J_0H:J_1H ), STAT=IER ) +#ifdef GCAP + ALLOCATE( TAUW3D(I_0H:I_1H,J_0H:J_1H,LM), & + TAUI3D(I_0H:I_1H,J_0H:J_1H,LM), STAT=IER ) +#endif + ALLOCATE( SRDN( I_0H:I_1H, J_0H:J_1H ),CFRAC( I_0H:I_1H, J_0H:J_1H ), & + RCLD(LM,I_0H:I_1H,J_0H:J_1H), STAT=IER ) +#ifdef GCC_COUPLE_RAD + ALLOCATE( GCCco2_tracer_save(LM,I_0H:I_1H,J_0H:J_1H), & + GCCco2rad_to_chem(LM,I_0H:I_1H,J_0H:J_1H), & + GCCco2rad_to_file(LM,I_0H:I_1H,J_0H:J_1H), STAT=IER ) +#endif + ALLOCATE( chem_tracer_save(2,LM,I_0H:I_1H,J_0H:J_1H), & + rad_to_chem(5,LM,I_0H:I_1H,J_0H:J_1H), & + rad_to_file(5,LM,I_0H:I_1H,J_0H:J_1H), & + SNOAGE(3,I_0H:I_1H,J_0H:J_1H), STAT=IER ) +#if (defined SHINDELL_STRAT_EXTRA) & (defined ACCMIP_LIKE_DIAGS) + ALLOCATE( stratO3_tracer_save(LM,I_0H:I_1H,J_0H:J_1H), STAT=IER ) +#endif + ALLOCATE( KLIQ(LM,4,I_0H:I_1H,J_0H:J_1H), & + COSZ1( I_0H:I_1H, J_0H:J_1H ), STAT=IER ) + +#ifdef TRACERS_GC + ALLOCATE( save_COSZ2( I_0H:I_1H, J_0H:J_1H ), STAT=IER ) + ! Instantaneous radiative forcing arrays ! 21 species + clouds, 2 bands (SW/LW) + ! TOA + ALLOCATE( save_RF(I_0H:I_1H,J_0H:J_1H, 21, 2 ), STAT=IER ) + save_RF(:,:,:,:) = 0d0 + ! Tropopause + ALLOCATE( save_RF_TP(I_0H:I_1H,J_0H:J_1H, 21, 2 ), STAT=IER ) + save_RF_TP(:,:,:,:) = 0d0 + ! 3D (add extra index @ 0 for total flux) + ALLOCATE( save_RF_3D(I_0H:I_1H,J_0H:J_1H, 1:LM, 0:21, 2 ), STAT=IER ) + save_RF_3D(:,:,:,:,:) = 0d0 +#endif + + ALLOCATE( COSZ_day( I_0H:I_1H, J_0H:J_1H ), & + SUNSET( I_0H:I_1H, J_0H:J_1H ), STAT=IER ) +#ifdef CUBED_SPHERE + ALLOCATE( dH2O(JM_DH2O,LM,12), STAT=IER ) +#else + ALLOCATE( dH2O(J_0H:J_1H,LM,12), STAT=IER ) +#endif + ALLOCATE( ALB(I_0H:I_1H,J_0H:J_1H,9), & + srnflb_save(I_0H:I_1H,J_0H:J_1H,Lm), & + trnflb_save(I_0H:I_1H,J_0H:J_1H,Lm), STAT=IER ) +#ifdef mjo_subdd + ALLOCATE( OLR_acc( I_0H:I_1H, J_0H:J_1H ), & + SWHR(I_0H:I_1H,J_0H:J_1H,Lm), & + LWHR(I_0H:I_1H,J_0H:J_1H,Lm), & + swu_avg( I_0H:I_1H, J_0H:J_1H ), STAT=IER ) +#endif + +#ifdef GCAP +! Allocate and initialize array for holding surface albedo, which is only +! updated during daytime. + ALLOCATE( save_alb( I_0H:I_1H, J_0H:J_1H ), STAT=IER ) + save_alb = 0. +#endif + +#ifdef mjo_subdd + OLR_acc = 0. + OLR_cnt = 0. + SWHR = 0. + LWHR = 0. + SWHR_cnt = 0. + LWHR_cnt = 0. + swu_avg = 0. + swu_cnt = 0. +#endif + KLIQ = 1 + dH2O = 0. + SALB => ALB( : , : ,1) + SRVISSURF = 0 + FSF = 0 + TRSURF = 0 + END SUBROUTINE ALLOC_RAD_COM + + SUBROUTINE DEF_RSF_RAD(fid) +!@sum def_rsf_rad defines radiation array structure in restart files +!@auth M. Kelley +!@ver beta + USE RAD_COM + USE DOMAIN_DECOMP_ATM, ONLY : grid + USE PARIO, ONLY : DEFVAR +#ifdef TRACERS_ON + USE TRDIAG_COM, ONLY : save_dry_aod +#endif + IMPLICIT NONE + INTEGER fid !@var fid file id + + CALL DEFVAR(grid,fid,s0,'s0') + CALL DEFVAR(grid,fid,rqt,'rqt(lm_req,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,kliq,'kliq(lm,four,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,srhr,'srhr(zero_to_lm,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,trhr,'trhr(zero_to_lm,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,trsurf,'trsurf(nstype,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,fsf,'fsf(nstype,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,fsrdir,'fsrdir(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,srvissurf,'srvissurf(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,srdn,'srdn(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,cfrac,'cfrac(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,salb,'salb(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,fsrdif,'fsrdif(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,dirnir,'dirnir(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,difnir,'difnir(dist_im,dist_jm)') + CALL DEFVAR(grid,fid,rcld,'rcld(lm,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,snoage,'snoage(d3,dist_im,dist_jm)') + +#ifdef TRACERS_ON + IF ( nraero_aod>0 ) THEN + CALL DEFVAR(grid,fid,nraero_aod,'nraero_aod') + CALL DEFVAR(grid,fid,save_dry_aod,'save_dry_aod') + CALL DEFVAR(grid,fid,tau_as, & + 'tau_as(dist_im,dist_jm,lm,nraero_aod)') + CALL DEFVAR(grid,fid,tau_cs, & + 'tau_cs(dist_im,dist_jm,lm,nraero_aod)') + IF ( save_dry_aod>0 ) CALL DEFVAR(grid,fid,tau_dry, & + 'tau_dry(dist_im,dist_jm,lm,nraero_aod)') +#ifdef CACHED_SUBDD + CALL DEFVAR(grid,fid,abstau_as, & + 'abstau_as(dist_im,dist_jm,lm,nraero_aod)') + CALL DEFVAR(grid,fid,abstau_cs, & + 'abstau_cs(dist_im,dist_jm,lm,nraero_aod)') + IF ( save_dry_aod>0 ) CALL DEFVAR(grid,fid,abstau_dry, & + 'abstau_dry(dist_im,dist_jm,lm,nraero_aod)') + CALL DEFVAR(grid,fid,nraero_rf,'nraero_rf') + IF ( nraero_rf>0 ) THEN + CALL DEFVAR(grid,fid,swfrc, & + 'swfrc(dist_im,dist_jm,nraero_rf)') + CALL DEFVAR(grid,fid,lwfrc, & + 'lwfrc(dist_im,dist_jm,nraero_rf)') + ENDIF +#endif /* CACHED_SUBDD */ + ENDIF +#ifdef GCC_COUPLE_RAD + CALL DEFVAR(grid,fid,GCCco2_tracer_save, & + 'GCCco2_tracer_save(lm,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,GCCco2rad_to_chem, & + 'GCCco2rad_to_chem(lm,dist_im,dist_jm)') +#endif + +#if (defined TRACERS_SPECIAL_Shindell) + CALL DEFVAR(grid,fid,chem_tracer_save, & + 'chem_tracer_save(two,lm,dist_im,dist_jm)') + CALL DEFVAR(grid,fid,rad_to_chem, & + 'rad_to_chem(five,lm,dist_im,dist_jm)') +#if (defined SHINDELL_STRAT_EXTRA) & (defined ACCMIP_LIKE_DIAGS) + CALL DEFVAR(grid,fid,strato3_tracer_save, & + 'strato3_tracer_save(lm,dist_im,dist_jm)') +#endif +#endif +#ifdef TRACERS_DUST + CALL DEFVAR(grid,fid,srnflb_save, & + 'srnflb_save(dist_im,dist_jm,lm)') + CALL DEFVAR(grid,fid,trnflb_save, & + 'trnflb_save(dist_im,dist_jm,lm)') +#endif +#endif /* TRACERS_ON */ + END SUBROUTINE DEF_RSF_RAD + + SUBROUTINE NEW_IO_RAD(fid,iaction) +!@sum new_io_rad read/write radiation arrays from/to restart files +!@auth M. Kelley +!@ver beta new_ prefix avoids name clash with the default version + USE MODEL_COM, ONLY : IOREAD, IOWRITE +#ifdef TRACERS_ON + USE TRACER_COM, ONLY : NTM + USE TRDIAG_COM, ONLY : save_dry_aod +#endif + USE RAD_COM + USE DOMAIN_DECOMP_ATM, ONLY : grid, GETDOMAINBOUNDS + USE PARIO, ONLY : WRITE_DIST_DATA, READ_DIST_DATA, WRITE_DATA, & + READ_DATA + IMPLICIT NONE + INTEGER fid !@var fid unit number of read/write + INTEGER iaction !@var iaction flag for reading or writing to file + + INTEGER :: I_0H, I_1H + INTEGER :: J_0H, J_1H + + CALL GETDOMAINBOUNDS(grid,J_STRT_HALO=J_0H,J_STOP_HALO=J_1H) + I_0H = grid%I_STRT_HALO + I_1H = grid%I_STOP_HALO + + SELECT CASE (iaction) + CASE (IOWRITE) ! output to restart file + CALL WRITE_DATA(grid,fid,'s0',s0) + CALL WRITE_DIST_DATA(grid,fid,'rqt',rqt,JDIM=3) + CALL WRITE_DIST_DATA(grid,fid,'kliq',kliq,JDIM=4) + CALL WRITE_DIST_DATA(grid,fid,'srhr',srhr,JDIM=3) + CALL WRITE_DIST_DATA(grid,fid,'trhr',trhr,JDIM=3) + CALL WRITE_DIST_DATA(grid,fid,'trsurf',trsurf,JDIM=3) + CALL WRITE_DIST_DATA(grid,fid,'fsf',fsf,JDIM=3) + CALL WRITE_DIST_DATA(grid,fid,'salb',salb) + CALL WRITE_DIST_DATA(grid,fid,'fsrdir',fsrdir) + CALL WRITE_DIST_DATA(grid,fid,'srvissurf',srvissurf) + CALL WRITE_DIST_DATA(grid,fid,'fsrdif',fsrdif) + CALL WRITE_DIST_DATA(grid,fid,'dirnir',dirnir) + CALL WRITE_DIST_DATA(grid,fid,'difnir',difnir) + CALL WRITE_DIST_DATA(grid,fid,'srdn',srdn) + CALL WRITE_DIST_DATA(grid,fid,'cfrac',cfrac) + CALL WRITE_DIST_DATA(grid,fid,'rcld',rcld,JDIM=3) + CALL WRITE_DIST_DATA(grid,fid,'snoage',snoage,JDIM=3) +#if (defined GCC_COUPLE_RAD) + CALL WRITE_DIST_DATA(grid,fid,'GCCco2_tracer_save', & + GCCco2_tracer_save,JDIM=3) + CALL WRITE_DIST_DATA(grid,fid,'GCCco2rad_to_chem', & + GCCco2rad_to_chem,JDIM=3) +#endif +#if (defined TRACERS_SPECIAL_Shindell) + CALL WRITE_DIST_DATA(grid,fid,'chem_tracer_save', & + chem_tracer_save,JDIM=4) + CALL WRITE_DIST_DATA(grid,fid,'rad_to_chem',rad_to_chem,JDIM=4) +#if (defined SHINDELL_STRAT_EXTRA) & (defined ACCMIP_LIKE_DIAGS) + CALL WRITE_DIST_DATA(grid,fid,'strato3_tracer_save', & + strato3_tracer_save,JDIM=3) +#endif +#endif +#ifdef TRACERS_DUST + CALL WRITE_DIST_DATA(grid,fid,'srnflb_save',srnflb_save) + CALL WRITE_DIST_DATA(grid,fid,'trnflb_save',trnflb_save) +#endif +#ifdef TRACERS_ON + IF ( nraero_aod>0 ) THEN + CALL WRITE_DATA(grid,fid,'nraero_aod',nraero_aod) + CALL WRITE_DATA(grid,fid,'save_dry_aod',save_dry_aod) + CALL WRITE_DIST_DATA(grid,fid,'tau_as',tau_as) + CALL WRITE_DIST_DATA(grid,fid,'tau_cs',tau_cs) + IF ( save_dry_aod>0 ) & + CALL WRITE_DIST_DATA(grid,fid,'tau_dry',tau_dry) +#ifdef CACHED_SUBDD + CALL WRITE_DIST_DATA(grid,fid,'abstau_as',abstau_as) + CALL WRITE_DIST_DATA(grid,fid,'abstau_cs',abstau_cs) + IF ( save_dry_aod>0 ) & + CALL WRITE_DIST_DATA(grid,fid,'abstau_dry',abstau_dry) + CALL WRITE_DATA(grid,fid,'nraero_rf',nraero_rf) + IF ( nraero_rf>0 ) THEN + CALL WRITE_DIST_DATA(grid,fid,'swfrc',swfrc) + CALL WRITE_DIST_DATA(grid,fid,'lwfrc',lwfrc) + ENDIF +#endif /* CACHED_SUBDD */ + ENDIF +#endif /* TRACERS_ON */ + CASE (IOREAD) + CALL READ_DATA(grid,fid,'s0',s0,BCAST_ALL=.TRUE.) + CALL READ_DIST_DATA(grid,fid,'rqt',rqt,JDIM=3) + CALL READ_DIST_DATA(grid,fid,'kliq',kliq,JDIM=4) + CALL READ_DIST_DATA(grid,fid,'srhr',srhr,JDIM=3) + CALL READ_DIST_DATA(grid,fid,'trhr',trhr,JDIM=3) + CALL READ_DIST_DATA(grid,fid,'trsurf',trsurf,JDIM=3) + CALL READ_DIST_DATA(grid,fid,'fsf',fsf,JDIM=3) + CALL READ_DIST_DATA(grid,fid,'salb',salb) + fsrdir = 0. + srvissurf = 0. + CALL READ_DIST_DATA(grid,fid,'fsrdir',fsrdir) + CALL READ_DIST_DATA(grid,fid,'srvissurf',srvissurf) + dirvis = fsrdir*srvissurf + ! reconstruct when restarting. + CALL READ_DIST_DATA(grid,fid,'fsrdif',fsrdif) + CALL READ_DIST_DATA(grid,fid,'dirnir',dirnir) + CALL READ_DIST_DATA(grid,fid,'difnir',difnir) + CALL READ_DIST_DATA(grid,fid,'srdn',srdn) + CALL READ_DIST_DATA(grid,fid,'cfrac',cfrac) + CALL READ_DIST_DATA(grid,fid,'rcld',rcld,JDIM=3) + CALL READ_DIST_DATA(grid,fid,'snoage',snoage,JDIM=3) +#ifdef GCC_COUPLE_RAD + CALL READ_DIST_DATA(grid,fid,'GCCco2_tracer_save', & + GCCco2_tracer_save,JDIM=3) + CALL READ_DIST_DATA(grid,fid,'GCCco2rad_to_chem', & + GCCco2rad_to_chem,JDIM=3) +#endif +#if (defined TRACERS_SPECIAL_Shindell) + CALL READ_DIST_DATA(grid,fid,'chem_tracer_save', & + chem_tracer_save,JDIM=4) + CALL READ_DIST_DATA(grid,fid,'rad_to_chem',rad_to_chem,JDIM=4) +#if (defined SHINDELL_STRAT_EXTRA) & (defined ACCMIP_LIKE_DIAGS) + CALL READ_DIST_DATA(grid,fid,'strato3_tracer_save', & + strato3_tracer_save,JDIM=3) +#endif +#endif +#ifdef TRACERS_DUST + CALL READ_DIST_DATA(grid,fid,'srnflb_save',srnflb_save) + CALL READ_DIST_DATA(grid,fid,'trnflb_save',trnflb_save) +#endif +#ifdef TRACERS_ON + IF ( .NOT.ALLOCATED(tau_as) ) THEN + CALL READ_DATA(grid,fid,'nraero_aod',nraero_aod_rsf, & + BCAST_ALL=.TRUE.) + CALL READ_DATA(grid,fid,'save_dry_aod',save_dry_aod_rsf, & + BCAST_ALL=.TRUE.) + IF ( nraero_aod_rsf/=0 ) THEN + ALLOCATE( tau_as(I_0H:I_1H,J_0H:J_1H,LM,nraero_aod_rsf)) + ALLOCATE( tau_cs(I_0H:I_1H,J_0H:J_1H,LM,nraero_aod_rsf)) + IF ( save_dry_aod_rsf>0 ) & + ALLOCATE( tau_dry(I_0H:I_1H,J_0H:J_1H,LM, & + nraero_aod_rsf)) +#ifdef CACHED_SUBDD + ALLOCATE( abstau_as(I_0H:I_1H,J_0H:J_1H,LM,nraero_aod_rsf& + )) + ALLOCATE( abstau_cs(I_0H:I_1H,J_0H:J_1H,LM,nraero_aod_rsf& + )) + IF ( save_dry_aod_rsf>0 ) & + ALLOCATE( abstau_dry(I_0H:I_1H,J_0H:J_1H,LM, & + nraero_aod_rsf)) + CALL READ_DATA(grid,fid,'nraero_rf',nraero_rf_rsf, & + BCAST_ALL=.TRUE.) + IF ( nraero_rf_rsf>0 ) THEN + ALLOCATE( swfrc(I_0H:I_1H,J_0H:J_1H,nraero_rf_rsf)) + ALLOCATE( lwfrc(I_0H:I_1H,J_0H:J_1H,nraero_rf_rsf)) + ENDIF +#endif /* CACHED_SUBDD */ + ENDIF + ENDIF + IF ( ALLOCATED(tau_as) ) THEN + ! needs to be separate from previous if + CALL READ_DIST_DATA(grid,fid,'tau_as',tau_as) + CALL READ_DIST_DATA(grid,fid,'tau_cs',tau_cs) + IF ( save_dry_aod_rsf>0 ) & + CALL READ_DIST_DATA(grid,fid,'tau_dry',tau_dry) +#ifdef CACHED_SUBDD + CALL READ_DIST_DATA(grid,fid,'abstau_as',abstau_as) + CALL READ_DIST_DATA(grid,fid,'abstau_cs',abstau_cs) + IF ( save_dry_aod_rsf>0 ) & + CALL READ_DIST_DATA(grid,fid,'abstau_dry',abstau_dry) + IF ( nraero_rf_rsf>0 ) THEN + CALL READ_DIST_DATA(grid,fid,'swfrc',swfrc) + CALL READ_DIST_DATA(grid,fid,'lwfrc',lwfrc) + ENDIF +#endif /* CACHED_SUBDD */ + ENDIF +#endif /* TRACERS_ON */ + ENDSELECT + END SUBROUTINE NEW_IO_RAD + + SUBROUTINE READ_RAD_IC +!@sum read_rad_ic read radiation coldstart initial conditions file. + USE RAD_COM, ONLY : snoage + USE DOMAIN_DECOMP_ATM, ONLY : grid + USE PARIO, ONLY : PAR_OPEN, PAR_CLOSE, READ_DIST_DATA + USE FILEMANAGER, ONLY : FILE_EXISTS + IMPLICIT NONE + INTEGER fid !@var fid unit number of read/write + + IF ( FILE_EXISTS('GIC') ) THEN + ! Read snow age using old-style IC (from rsf) + fid = PAR_OPEN(grid,'GIC','read') + CALL READ_DIST_DATA(grid,fid,'snoage',snoage,JDIM=3) + CALL PAR_CLOSE(grid,fid) + ELSE + ! Newer cold-start IC files contain only the fundamental state variables. + ! Set snow age to zero (Initial snow albedo irrelevant for cold starts). + snoage = 0D0 + ENDIF + END SUBROUTINE READ_RAD_IC + + MODULE DIAG_COM_RAD + IMPLICIT NONE + + INTEGER :: j_h2och4 = 1, j_pcldss = 1, j_pcldmc = 1, & + j_clddep = 1, j_pcld = 1, j_srincp0 = 1, & + j_srnfp0 = 1, j_srnfp1 = 1, j_srincg = 1, & + j_srnfg = 1, j_brtemp = 1, j_trincg = 1, j_hsurf = 1, & + j_hatm = 1, j_plavis = 1, j_planir = 1, j_albvis = 1, & + j_albnir = 1, j_srrvis = 1, j_srrnir = 1, & + j_sravis = 1, j_sranir = 1, j_trnfp0 = 1, & + j_trnfp1 = 1, j_clrtoa = 1, j_clrtrp = 1, & + j_tottrp = 1, jl_srhr = 1, jl_trcr = 1, & + jl_totcld = 1, jl_sscld = 1, jl_mccld = 1, & + jl_wcld = 1, jl_icld = 1, jl_wcod = 1, jl_icod = 1, & + jl_wcsiz = 1, jl_icsiz = 1, jl_wcldwt = 1, & + jl_icldwt = 1, ij_pmccld = 1, ij_trnfp0 = 1, & + ij_cldcv = 1, ij_pcldl = 1, ij_pcldm = 1, & + ij_pcldh = 1, ij_pcldl_ss = 1, ij_cldtppr = 1, & + ij_srvis = 1, ij_rnfp1 = 1, ij_srnfp0 = 1, & + ij_srincp0 = 1, ij_srnfg = 1, ij_srincg = 1, & + ij_btmpw = 1, ij_srref = 1, ij_frmp = 1, & + ij_clr_srincg = 1, ij_CLDTPT = 1, ij_cldt1t = 1, & + ij_cldt1p = 1, ij_cldcv1 = 1, ij_wtrcld = 1, & + ij_icecld = 1, ij_optdw = 1, ij_optdi = 1, & + ij_swcrf = 1, ij_lwcrf = 1, ij_srntp = 1, & + ij_trntp = 1, ij_clr_srntp = 1, ij_clr_trntp = 1, & + ij_clr_srnfg = 1, ij_clr_trdng = 1, & + ij_clr_sruptoa = 1, ij_clr_truptoa = 1, & + ij_swdcls = 1, ij_swncls = 1, ij_lwdcls = 1, & + ij_swnclt = 1, ij_lwnclt = 1, ij_srvdir = 1, & + ij_srvissurf = 1, ij_chl = -1, ij_swaerrf = 1, & + ij_lwaerrf = 1, ij_swaersrf = 1, ij_lwaersrf = 1, & + ij_swaerrfnt = 1, ij_lwaerrfnt = 1, & + ij_swaersrfnt = 1, ij_lwaersrfnt = 1, ij_swcrf2 = 1, & + ij_lwcrf2 = 1, ij_siswd = 1, ij_siswu = 1, & + ij_lwprad = 1, ij_iwprad = 1, ij_h2och4 = 1, & + ij_sw_cs_noa = 1, ij_lw_cs_noa = 1, ij_sw_as_noa = 1, & + ij_lw_as_noa = 1, ijl_rc = 1, ijl_cf = 1, & + ijl_QLrad = 1, ijl_QIrad = 1, ijl_wtrtau = 1, & + ijl_icetau = 1, idd_cl7 = 1, idd_ccv = 1, & + idd_isw = 1, idd_palb = 1, idd_galb = 1, idd_aot = 1, & + idd_aot2 = 1, idd_absa = 1 + +#ifdef HEALY_LM_DIAGS + INTEGER :: j_vtau = 1, j_ghg = 1 +#endif + +#if ( defined TRACERS_GC ) +!@var GEOS-Chem radiative forcing diagnostics +! First index is: +! 1=SW, 2=LW +! Second index is: +! 1 = CH4; 2 = N2O; 3 = CFC11; 4 = CFC12 +! 5 = O3; 6 = SO4; 7 = NIT; 8 = BCO; 9 = BCI +! 10 = OCO; 11 = OCI; 12 = SOA + INTEGER, DIMENSION(2,5) :: ij_fcghg +#elif ( defined ACCMIP_LIKE_DIAGS ) +!@var IJ_fcghg GHG forcing diagnostics (2=LW,SW, 4=CH4,N2O,CFC11,CFC12) + INTEGER, DIMENSION(2,4) :: ij_fcghg +#endif + END MODULE DIAG_COM_RAD diff --git a/model/RAD2_DRV.F90 b/model/RAD2_DRV.F90 new file mode 100644 index 00000000..020c7900 --- /dev/null +++ b/model/RAD2_DRV.F90 @@ -0,0 +1,7000 @@ +#include "rundeck_opts.h" + +#ifdef SKIP_TRACERS_RAD +#undef TRACERS_ON +#endif + +!@sum RAD_DRV contains drivers for the radiation related routines +!@ver 2009/05/11 +!@cont init_RAD, RADIA +!**** semi-random cloud overlap (computed opt.d+diagn) +!**** to be used with R99E or later radiation routines. carbon/2 +!**** + +SUBROUTINE CALC_ZENITH_ANGLE + !@sum calculate zenith angle for current time step + !@auth Gavin Schmidt (from RADIA) + USE CONSTANT, ONLY : twopi + USE MODEL_COM, ONLY : itime, nday, dtsrc, calendar + USE TIMECONSTANTS_MOD, ONLY : SECONDS_PER_DAY + USE RAD_COM, ONLY : cosz1 + USE RAD_COSZ0, ONLY : COSZT + USE TIMEINTERVAL_MOD + + IMPLICIT NONE + + INTEGER JTIME + REAL*8 ROT1, ROT2 + TYPE (TIMEINTERVAL) :: sPerDay + + JTIME = MOD(ITIME,NDAY) + ROT1 = (TWOPI*JTIME)/NDAY + sPerDay = calendar%GETSECONDSPERDAY() + ROT2 = ROT1 + TWOPI*DTsrc/REAL(sPerDay) + + CALL COSZT(ROT1,ROT2,COSZ1) + +END SUBROUTINE CALC_ZENITH_ANGLE + +SUBROUTINE INIT_RAD( istart ) + !@sum init_RAD initialises radiation code + !@auth Original Development Team + !@calls RADPAR : RCOMP1, ORBPAR + USE FILEMANAGER + USE RUNTIMECONTROLS_MOD, ONLY : tracers_minerals + USE DICTIONARY_MOD + USE CONSTANT, ONLY : GRAV, BYSHA, TWOPI, planet_name + USE RESOLUTION, ONLY : jm, lm, psf + USE ATM_COM, ONLY : t, pk, kradia, lm_req + USE MODEL_COM, ONLY : DTSRC, IYEAR1, MODELECLOCK, master_yr + USE MODEL_COM, ONLY : orbit + USE ATM_COM, ONLY : pednl00 + USE DOMAIN_DECOMP_ATM, ONLY : grid, WRITE_PARALLEL, AM_I_ROOT, & + READT_PARALLEL, GETDOMAINBOUNDS +#ifndef CUBED_SPHERE + USE GEOM, ONLY : lat_dg +#endif + + USE RADPAR, ONLY : PTLISO, KTREND, LMR => NL, PLB, & + LS1_loc, planck_tmin, planck_tmax, & + transmission_corrections, KCLDEM, & + KSIALB, KSOLAR, SHL, snoage_fac_max, & + KZSNOW, KYEARS, KJDAYS, MADLUV, & + KYEARG, KJDAYG, MADGHG, KYEARO, & + KJDAYO, MADO3M, KYEARA, KJDAYA, & + MADAER, KYEARD, KJDAYD, MADDST, & + KYEARV, KJDAYV, MADVOL, KYEARE, & + KJDAYE, MADEPS, KYEARR, KJDAYR, & + ITR, nraero_aod => NTRACE, FS8OPX, & + FT8OPX, TRRDRY, KRHTRA, TRADEN, & + REFDRY, RCOMP1, WRITER, WRITET, & + FSTASC, FTTASC + + ! turning on options for extra aerosols +#ifdef ALTER_RADF_BY_LAT + USE RADPAR, ONLY : FS8OPX_orig, FT8OPX_orig +#endif + +#ifdef TRACERS_SPECIAL_Shindell + USE PHOTOLYSIS, ONLY : aer2, miedx2, nbfastj +#endif + +#ifdef TRACERS_ON + USE RAD_COM, ONLY : nraero_rf, nraero_seasalt, nraero_koch, & + nraero_nitrate, nraero_dust, & + nraero_OMA, nraero_AMP, nraero_TOMAS +#endif + + USE RAD_COM, ONLY : rqt, s0x, co2x, n2ox, ch4x, cfc11x, & + cfc12x, xGHGx, o2x, no2x, n2cx, yGHGx, & + so2x, CH4X_RADoverCHEM, snoage_def, & + s0_yr, s0_day, ghg_yr, ghg_day, volc_yr,& + volc_day, aero_yr, dust_yr, O3_yr, & + H2ObyCH4, dH2O, h2ostratx, O3x, RHfix, & + CLDx, ref_mult, COSZ1, OBLIQ, ECCN, & + OMEGT, OBLIQ_DEF, ECCN_DEF, OMEGT_DEF, & + CC_cdncx, OD_cdncx, cdncl, pcdnc, vcdnc,& + cloud_rad_forc, TAero_aod_diag, & + aer_rad_forc, PLB0, SHL0, albsn_yr, & + dALBsnX, nradfrc, rad_interact_aer, & + clim_interact_chem, rad_forc_lev, & + ntrix_aod, ntrix_rf, wttr, & + variable_orb_par, orb_par_year_bp, & + orb_par, nrad, RADIATIONSETORBIT, & + chl_from_obio, chl_from_seawifs + +#ifdef TRACERS_ON + USE RAD_COM, ONLY : njaero, nraero_aod_rsf, nraero_rf_rsf, & + tau_as, tau_cs, tau_dry +#ifdef CACHED_SUBDD + USE RAD_COM, ONLY : abstau_as, abstau_cs, abstau_dry, & + swfrc, lwfrc +#endif +#endif + + USE RAD_COSZ0, ONLY : COSZ_INIT + USE CLOUDS_COM, ONLY : llow + USE DIAG_COM, ONLY : IWRITE, JWRITE, ITWRITE + +#ifdef ALTER_RADF_BY_LAT + USE RAD_COM, ONLY : FULGAS_lat, FS8OPX_lat, FT8OPX_lat +#endif + +#ifdef TRACERS_ON + USE DIAG_COM, ONLY : save3dAOD + USE TRACER_COM, ONLY : NTM + USE TRACER_COM, ONLY : n_BCIA, n_BCB, n_NO3p + USE TRACER_COM, ONLY : n_Clay, n_Silt1, n_Silt2, n_Silt3, & + n_Silt4, n_Silt5 + USE TRACER_COM, ONLY : n_SO4, n_Seasalt1, n_Seasalt2 + USE TRACER_COM, ONLY : n_OCB, n_OCIA, n_Isopp1a, n_SO4 + USE TRACER_COM, ONLY : n_vbsAm2 + USE RAD_COM, ONLY : diag_fc + USE TRDIAG_COM, ONLY : save_dry_aod +#ifdef TRACERS_TOMAS + USE TRACER_COM, ONLY : N_ASO4, N_ANACL, N_AECOB, N_AECIL, & + N_AOCOB, N_AOCIL, N_ADUST +#endif +#endif + +#if (defined TRACERS_DUST) || (defined TRACERS_MINERALS) + USE OLDTRACER_MOD, ONLY : TRPDENS + USE TRDUST_MOD, ONLY : imDust, nSubClays, dryEffRadMinerals, & + SUBCLAYWEIGHTS + USE TRDUST_DRV, ONLY : CALCSUBCLAYWEIGHTS + USE TRACER_COM, ONLY : ntm_clay, ntm_sil1, ntm_sil2, ntm_sil3, & + ntm_sil4, ntm_sil5, N_SOILDUST + USE RAD_COM, ONLY : nr_soildust +#endif + +#ifdef TRACERS_MINERALS + USE TRACER_COM, ONLY : n_clayilli, n_claykaol, n_claysmec, & + n_claycalc, n_clayquar, n_clayfeld, & + n_clayhema, n_claygyps, n_clayilhe, & + n_claykahe, n_claysmhe, n_claycahe, & + n_clayquhe, n_clayfehe, n_claygyhe, & + n_sil1quar, n_sil1feld, n_sil1calc, & + n_sil1illi, n_sil1kaol, n_sil1smec, & + n_sil1hema, n_sil1gyps, n_sil1quhe, & + n_sil1fehe, n_sil1cahe, n_sil1gyhe, & + n_sil1ilhe, n_sil1kahe, n_sil1smhe, & + n_sil2quar, n_sil2feld, n_sil2calc, & + n_sil2hema, n_sil2gyps, n_sil2illi, & + n_sil2kaol, n_sil2smec, n_sil2quhe, & + n_sil2fehe, n_sil2cahe, n_sil2gyhe, & + n_sil2ilhe, n_sil2kahe, n_sil2smhe, & + n_sil3quar, n_sil3feld, n_sil3calc, & + n_sil3hema, n_sil3gyps, n_sil3illi, & + n_sil3kaol, n_sil3smec, n_sil3quhe, & + n_sil3fehe, n_sil3cahe, n_sil3gyhe, & + n_sil3ilhe, n_sil3kahe, n_sil3smhe, & + n_sil4quar, n_sil4feld, n_sil4calc, & + n_sil4hema, n_sil4gyps, n_sil4illi, & + n_sil4kaol, n_sil4smec, n_sil4quhe, & + n_sil4fehe, n_sil4cahe, n_sil4gyhe, & + n_sil4ilhe, n_sil4kahe, n_sil4smhe, & + n_sil5quar, n_sil5feld, n_sil5calc, & + n_sil5hema, n_sil5gyps, n_sil5illi, & + n_sil5kaol, n_sil5smec, n_sil5quhe, & + n_sil5fehe, n_sil5cahe, n_sil5gyhe, & + n_sil5ilhe, n_sil5kahe, n_sil5smhe +#endif + +#ifdef TRACERS_AMP + USE AERO_CONFIG, ONLY : nmodes + USE TRACER_COM, ONLY : n_N_AKK_1, n_N_ACC_1, n_N_DD1_1, & + n_N_DS1_1, n_N_DD2_1, n_N_DS2_1, & + n_N_SSA_1, n_N_SSC_1, n_N_OCC_1, & + n_N_BC1_1, n_N_BC2_1, n_N_BC3_1, & + n_N_DBC_1, n_N_BOC_1, n_N_BCS_1, & + n_N_MXX_1 +#endif + +#ifdef TRACERS_TOMAS + USE TOMAS_AEROSOL, ONLY : icomp +#endif + + USE AERPARAM_MOD, ONLY : aermix + +#ifdef OLD_BCdalbsn + USE AERPARAM_MOD, ONLY : depoBC, depoBC_1990 +#endif + + USE ABSTRACTORBIT_MOD, ONLY : ABSTRACTORBIT + + ! begin section for radiation-only SCM + USE CONSTANT, ONLY : gasc, tf, mair, mwat, pi, lhe, lhs, & + mb2kg, kg2mb, kapa + USE ATM_COM, ONLY : q, p, PMID, pedn, PDSIG, pek, MA, BYMA, & + ltropo + USE ATM_COM, ONLY : AML00, BYAML00, req_fac, kradia, lm_req + USE RESOLUTION, ONLY : im, plbot, ls1 => LS1_NOMINAL + USE RESOLUTION, ONLY : MFIX, MFRAC + +#ifndef STDHYB + USE RESOLUTION, ONLY : mfixs, mtop +#endif + + USE RAD_COM, ONLY : modrd + USE RADPAR, ONLY : u0gas, ulgas, set_gases_internally + USE RADPAR, ONLY : set_aerosols_internally, sraext, srasct, & + sragcb, srdext, srdsct, srdgcb, srvext, & + srvsct, srvgcb, srbext, srbsct, srbgcb, & + traalk, trdalk, trvalk, trbalk + USE RADPAR, ONLY : keepal, srbalb, srxalb, FSTOPX, FTTOPX + USE RADPAR, ONLY : skip_AOD_in_rad + USE PARIO, ONLY : PAR_OPEN, PAR_CLOSE, READ_DATA, READ_DIST_DATA + USE FLUXES, ONLY : atmsrf, ASFLX4, focean, fland, flice + USE FLUXES, ONLY : atmocn, atmice, atmgla, atmlnd + USE GHY_COM, ONLY : fearth + USE LAKES_COM, ONLY : flake + USE SEAICE_COM, ONLY : si_atm + USE CLOUDS_COM, ONLY : SVLHX, SVLAT, RHSAV + ! end section for radiation-only SCM + +#ifdef GCAP + USE RAD_COM, ONLY : SAVE_COSZ2 +#endif + + IMPLICIT NONE + + INTEGER, INTENT(IN) :: istart + + INTEGER L, LR, n1, n, nn, iu2 + REAL*8 PLBx(LM+1), pyear + + !@var NRFUN indices of unit numbers for radiation routines + INTEGER NRFUN(14), IU, DONOTREAD + + !@var RUNSTR names of files for radiation routines + CHARACTER*5 :: RUNSTR(14) = & + (/ "RADN1", "RADN2", "RADN3", "RADN4", "RADN5", & + "RADN6", "RADN7", "RADN8", "RADN9", "RADNA", & + "RADNB", "RADNC", "RADND", "RADNE" /) + + !@var QBIN true if files for radiation input files are binary + LOGICAL :: QBIN(14) = & + (/ .TRUE., .TRUE., .FALSE., .TRUE., .TRUE., & + .TRUE., .TRUE., .TRUE., .FALSE., .TRUE., & + .TRUE., .TRUE., .TRUE., .TRUE. /) + +#ifdef TRACERS_MINERALS + REAL(KIND=8) :: densclay(4*ntm_clay), denssil1(ntm_sil1), & + denssil2(ntm_sil2), denssil3(ntm_sil3), & + denssil4(ntm_sil4), denssil5(ntm_sil5) +#endif + + CHARACTER(LEN=300) :: out_line + CHARACTER*6 :: skip + + ! begin section for radiation-only SCM + REAL*8 :: cosz_const, mvar + CHARACTER(LEN=6) :: gasnames(13) + INTEGER :: fid, igas + REAL*8 :: szadeg, s0cosz, s0_tmp, cosz_tmp, tloc + INTEGER :: rad_scm_int + LOGICAL :: rad_scm = .FALSE. + + REAL*8 QSAT ! external function + ! end section for radiation-only SCM + + INTEGER :: I, J + INTEGER :: I_0, I_1, J_0, J_1 + INTEGER :: I_0H, I_1H + INTEGER :: J_0H, J_1H + + !**** sync radiation parameters from input + CALL SYNC_PARAM("NRAD",NRAD) + + IF ( IS_SET_PARAM("variable_orb_par") ) THEN + CALL GET_PARAM("variable_orb_par",variable_orb_par) + ELSEIF ( master_yr==0 ) THEN + variable_orb_par = 1 + ELSE + variable_orb_par = 0 + ENDIF + + IF ( IS_SET_PARAM("orb_par_year_bp") ) THEN + CALL GET_PARAM("orb_par_year_bp",orb_par_year_bp) + ELSEIF ( master_yr==0 ) THEN + orb_par_year_bp = 0 + ELSE + orb_par_year_bp = 1950 - master_yr + ENDIF + + CALL SYNC_PARAM("orb_par",orb_par,3) + CALL SYNC_PARAM("S0X",S0X) + CALL SYNC_PARAM("CO2X",CO2X) ! fulgas(2) + CALL SYNC_PARAM("O2X",O2X) ! fulgas(4) + CALL SYNC_PARAM("NO2X",NO2X) ! fulgas(5) + CALL SYNC_PARAM("N2OX",N2OX) ! fulgas(6) + CALL SYNC_PARAM("CH4X",CH4X) ! fulgas(7) + CALL SYNC_PARAM("CH4X_RADoverCHEM",CH4X_RADoverCHEM) + CALL SYNC_PARAM("CFC11X",CFC11X) ! fulgas(8) + CALL SYNC_PARAM("CFC12X",CFC12X) ! fulgas(9) + CALL SYNC_PARAM("N2CX",N2CX) ! fulgas(10) + CALL SYNC_PARAM("XGHGX",XGHGX) ! fulgas(11) + CALL SYNC_PARAM("YGHGX",YGHGX) ! fulgas(12) + CALL SYNC_PARAM("SO2X",SO2X) ! fulgas(13) + CALL SYNC_PARAM("H2OstratX",H2OstratX) ! fulgas(1) + CALL SYNC_PARAM("O3X",O3X) ! fulgas(3) + CALL SYNC_PARAM("CLDX",CLDX) + CALL SYNC_PARAM("H2ObyCH4",H2ObyCH4) + CALL GET_PARAM("S0_yr",S0_yr,DEFAULT=master_yr) + + IF ( IS_SET_PARAM("S0_day") ) THEN + CALL GET_PARAM("S0_day",S0_day) + ELSE + IF ( s0_yr==0 ) s0_day = 0 + ! else use default value + ENDIF + + CALL GET_PARAM("ghg_yr",ghg_yr,DEFAULT=master_yr) + IF ( IS_SET_PARAM("ghg_day") ) THEN + CALL GET_PARAM("ghg_day",ghg_day) + ELSE + IF ( ghg_yr==0 ) ghg_day = 0 + ! else use default value + ENDIF + + CALL GET_PARAM("volc_yr",volc_yr,DEFAULT=master_yr) + IF ( IS_SET_PARAM("volc_day") ) THEN + CALL GET_PARAM("volc_day",volc_day) + ELSE + IF ( volc_yr==0 ) volc_day = 0 + ! else use default value + ENDIF + + CALL GET_PARAM("aero_yr",aero_yr,DEFAULT=master_yr) + CALL GET_PARAM("dust_yr",dust_yr,DEFAULT=master_yr) + CALL SYNC_PARAM("dALBsnX",dALBsnX) + CALL GET_PARAM("albsn_yr",albsn_yr,DEFAULT=master_yr) + CALL SYNC_PARAM("aermix",aermix,13) + CALL SYNC_PARAM("REFdry",REFdry,8) + CALL SYNC_PARAM("FS8OPX",FS8OPX,8) + CALL SYNC_PARAM("FT8OPX",FT8OPX,8) + CALL SYNC_PARAM("RHfix",RHfix) + CALL SYNC_PARAM("CC_cdncx",CC_cdncx) + CALL SYNC_PARAM("OD_cdncx",OD_cdncx) + CALL GET_PARAM("O3_yr",O3_yr,DEFAULT=master_yr) + + IF ( planet_name/='Earth' ) PTLISO = .015D0*psf + ! reasonable default + + CALL SYNC_PARAM("PTLISO",PTLISO) + CALL SYNC_PARAM("KSOLAR",KSOLAR) + CALL SYNC_PARAM("KSIALB",KSIALB) + CALL SYNC_PARAM("KZSNOW",KZSNOW) + CALL SYNC_PARAM("snoage_def",snoage_def) + CALL SYNC_PARAM("snoage_fac_max",snoage_fac_max) + CALL SYNC_PARAM("nradfrc",nradfrc) + IF ( snoage_fac_max<0. .OR. snoage_fac_max>1. ) THEN + WRITE (out_line,*) 'set 00 .AND. chl_from_seawifs>0 ) & + CALL STOP_MODEL("Make your mind which chl to use",255) + + IF ( istart == 2 ) THEN + ! replace with cold vs warm start logic + !**** SET RADIATION EQUILIBRIUM TEMPERATURES FROM LAYER LM TEMPERATURE + DO J = J_0, J_1 + DO I = I_0, I_1 + RQT( : ,I,J) = T(I,J,LM)*PK(LM,I,J) + ENDDO + ENDDO + ENDIF + + + !**** + !**** SET THE CONTROL PARAMETERS FOR THE RADIATION (need mean pressures) + !**** + LMR = LM + LM_REQ + PLB(1:LMR+1) = PEDNL00(1:LMR+1) + DO L = 1, LM + PLBx(L) = PLB(L) ! needed for CH4 prod. H2O + ENDDO + PLBx(LM+1) = 0. + DO LR = LM + 1, LMR + PLB0(LR-LM) = PLB(LR+1) + ENDDO + cdncl = 0 + CALL RETERP(vcdnc,pcdnc,7,cdncl,plb,llow+2) + + KTREND = 1 ! GHgas trends are determined by input file + !note KTREND=0 is a possible but virtually obsolete option + !**** + ! Model Add-on Data of Extended Climatology Enable Parameter + ! MADO3M = -1 Reads Ozone data the GCM way + ! MADAER = 1 Reads Tropospheric Aerosol climatology 1850-2050 + ! MADAER = 3 uses Koch,Bauer 2008 aerosol climatology 1890-2000 + ! MADDST = 1 Reads Dust-windblown mineral climatology RFILE6 + ! MADVOL = 1 Reads Volcanic 1950-00 aerosol climatology RFILE7 + ! MADEPS = 1 Reads Epsilon cloud heterogeniety data RFILE8 + ! MADLUV = 1 Reads Lean''s SolarUV 1882-1998 variability RFILE9 + !**** Radiative forcings are either constant = obs.value at given yr/day + !**** or time dependent (year=0); if day=0 an annual cycle is used + !**** even if the year is fixed + KYEARS = s0_yr + KJDAYS = s0_day + MADLUV = 1 ! solar 'constant' + KYEARG = ghg_yr + KJDAYG = ghg_day ! well-mixed GHGases + +#ifndef ALTER_RADF_BY_LAT + IF ( ghg_yr>0 ) MADGHG = 0 ! skip GHG-updating +#endif + + KYEARO = O3_yr + KJDAYO = 0 + MADO3M = -1 ! ozone (ann.cycle) + IF ( KYEARO>0 ) KYEARO = -KYEARO ! use ONLY KYEARO-data + KYEARA = Aero_yr + KJDAYA = 0 ! MADAER=1 or 3, trop.aeros (ann.cycle) + IF ( KYEARA>0 ) KYEARA = -KYEARA ! use ONLY KYEARA-data + IF ( FILE_EXISTS('TAero_SSA') ) MADAER = 3 + ! one of the TAero_XXX set + KYEARD = Dust_yr + IF ( KYEARD>0 ) KYEARD = -KYEARD ! use ONLY KYEARD-data + KYEARV = Volc_yr + KJDAYV = Volc_day + IF ( FILE_EXISTS('RADN7') ) MADVOL = 1 + ! Volc. Aerosols + CALL SYNC_PARAM("MADVOL",MADVOL) + !*** KYEARV=0 : use current year + !*** KYEARV<0 : use long term mean stratospheric aerosols (use -1) + ! Hack : KYEARV= -2000 and -2010 were used for 2 specific runs that + ! ended in 2100 and repeated some 20th century volcanos + !*** KYEARV=-2000 : use volcanos from 100 yrs ago after 2000 + !*** KYEARV=-2010 : repeat 2nd half, then first half of 20th century + IF ( KYEARV<=-2000 ) KYEARV = 0 + ! use current year (before 2000) + !**** NO time history (yet), except for ann.cycle, for forcings below; + !**** if KJDAY?=day0 (1->365), data from that day are used all year + KYEARE = 0 + KJDAYE = 0 + KYEARR = 0 + KJDAYR = 0 ! surf.reflectance (ann.cycle) + KCLDEM = 1 ! 0 : old 1 : new LW cloud scattering scheme + + IF ( FILE_EXISTS('DUSTaer') ) MADDST = 1 + ! Desert dust + IF ( FILE_EXISTS('RADN8') ) MADEPS = 1 ! cloud Epsln - KCLDEP + transmission_corrections = FILE_EXISTS('RADN4') + + !**** Aerosols : + !**** Currently there are five different default aerosol controls + !**** 1 : total 2 : background+tracer 3 : Climatology 4 : dust 5 : volcanic + !**** By adjusting FSXAER,FTXAER you can remove the default + !**** aerosols and replace them with your version if required + !**** (through TRACER in RADIA). + !**** FSXAER is for the shortwave, FTXAER is for the longwave effects + !aer FSXAER = (/ 1.,1.,1.,1.,1. /) ; FTXAER = (/ 1.,1.,1.,1.,1. /) + + !**** climatology aerosols are grouped into 6 types from 13 sources : + !**** Pre-Industrial+Natural 1850 Level Industrial Process BioMBurn + !**** --------------------------------- ------------------ -------- + !**** 1 2 3 4 5 6 7 8 9 10 11 12 13 + !**** SNP SBP SSP ANP ONP OBP BBP SUI ANI OCI BCI OCB BCB + !**** using the following default scaling/tuning factors AERMIX(1-13) + !**** 1.0, 1.0, .26, 1.0, 2.5, 2.5, 1.9, 1.0, 1.0, 2.5, 1.9, 2.5, 1.9 + !**** The 8 groups are (adding dust and volcanic aerosols as 7. and 8.) + !**** 1. Sulfates (industr and natural), 2. Sea Salt, 3. Nitrates + !**** 4. Organic Carbons, 5. industr Black Carbons(BC), 6. Biomass BC + !**** 7. Dust aerosols, 8. Volcanic aerosols + !**** use FS8OPX and FT8OPX to enhance the optical effect; defaults : + !aer FS8OPX = (/1., 1., 1., 1., 2., 2., 1. , 1./) solar + !aer FT8OPX = (/1., 1., 1., 1., 1., 1., 1.3d0, 1./) thermal +!!!!! Note : FS|T8OPX(7-8) makes FS|TXAER(4-5) redundant. + !**** Particle sizes of the first 4 groups have RelHum dependence + + !**** To add up to 8 further aerosols : + !**** 1) set nraero_aod to the number of extra aerosol fields + !**** 2) ITR defines which set of Mie parameters get used, choose + !**** from the following : + !**** 1 SO4, 2 seasalt, 3 nitrate, 4 OCX organic carbons + !**** 5 BCI, 6 BCB, 7 dust, 8 H2SO4 volc + !**** 2b) set up the indexing array ntrix_aod to map the RADIATION tracers + !**** to the main model tracers + !**** 2c) set up the weighting array WTTR to weight main model tracers, + !**** if needed (default value is 1). + !**** + !**** 3) Use FSTOPX/FTTOPX(1 : nraero_aod) to scale them in RADIA + !**** 4) Set TRRDRY to dry radius + !**** 5) Set KRHTRA=1 if aerosol has RH dependence, 0 if not + !**** Note : whereas FSXAER/FTXAER are global (shared), FSTOPX/FTTOPX + !**** have to be reset for each grid box to allow for the way it + !**** is used in RADIA (TRACERS_AEROSOLS_Koch) + !aer nraero_aod = 0 + !aer ITR = (/ 0,0,0,0, 0,0,0,0 /) + !aer TRRDRY=(/ .1d0, .1d0, .1d0, .1d0, .1d0, .1d0, .1d0, .1d0/) + !aer KRHTRA=(/1,1,1,1,1,1,1,1/) + +#if defined( TRACERS_ON ) + +#if defined( TRACERS_AMP ) + nraero_AMP = nmodes + IF ( diag_fc==2 ) THEN + nraero_rf = nraero_rf + nraero_AMP + ELSEIF ( diag_fc==1 ) THEN + IF ( nraero_AMP>0 ) nraero_rf = nraero_rf + 1 + ENDIF +#elif defined( TRACERS_TOMAS ) + !TOMAS does not include NO3 AND VOL, which use its default radiation. +#ifndef TRACERS_NITRATE + nraero_TOMAS = icomp - 2 +#else + nraero_TOMAS = icomp - 1 +#endif + IF ( diag_fc==2 ) THEN + nraero_rf = nraero_rf + nraero_TOMAS + ELSEIF ( diag_fc==1 ) THEN + IF ( nraero_TOMAS>0 ) nraero_rf = nraero_rf + 1 + ENDIF +#else + nraero_OMA = nraero_seasalt + nraero_koch + nraero_nitrate + & + nraero_dust + IF ( diag_fc==2 ) THEN + nraero_rf = nraero_rf + nraero_OMA + ELSEIF ( diag_fc==1 ) THEN + IF ( nraero_OMA>0 ) nraero_rf = nraero_rf + 1 + ENDIF +#endif + + nraero_aod = nraero_OMA + nraero_AMP + nraero_TOMAS + + IF ( nraero_aod_rsf>0 ) THEN + IF ( nraero_aod_rsf/=nraero_aod ) & + CALL STOP_MODEL('nraero_aod_rsf /= nraero_aod',255) + ENDIF + + IF ( nraero_rf_rsf>0 ) THEN + IF ( nraero_rf_rsf/=nraero_rf ) & + CALL STOP_MODEL('nraero_rf_rsf /= nraero_rf',255) + ENDIF + + IF ( nraero_aod>0 ) THEN + ALLOCATE (ntrix_aod(nraero_aod)) + ntrix_aod = 0 + IF ( nraero_rf>0 ) ALLOCATE (ntrix_rf(nraero_rf)) + ntrix_rf = 0 + ALLOCATE (wttr(nraero_aod)) + wttr = 1. + + IF ( .NOT.ALLOCATED(tau_as) ) THEN + ALLOCATE (tau_as(I_0H : I_1H,J_0H : J_1H,lm,nraero_aod)) + ALLOCATE (tau_cs(I_0H : I_1H,J_0H : J_1H,lm,nraero_aod)) + tau_as = 0.D0 + tau_cs = 0.D0 + IF ( save_dry_aod>0 ) THEN + ALLOCATE (tau_dry(I_0H : I_1H,J_0H : J_1H,lm,nraero_aod)) + tau_dry = 0.D0 + ENDIF +#ifdef CACHED_SUBDD + ALLOCATE (abstau_as(I_0H : I_1H,J_0H : J_1H,lm,nraero_aod)) + ALLOCATE (abstau_cs(I_0H : I_1H,J_0H : J_1H,lm,nraero_aod)) + abstau_as = 0.D0 + abstau_cs = 0.D0 + IF ( save_dry_aod>0 ) THEN + ALLOCATE (abstau_dry(I_0H : I_1H,J_0H : J_1H,lm,nraero_aod)) + abstau_dry = 0.D0 + ENDIF + IF ( nraero_rf>0 ) THEN + ALLOCATE (swfrc(I_0H : I_1H,J_0H : J_1H,nraero_rf)) + ALLOCATE (lwfrc(I_0H : I_1H,J_0H : J_1H,nraero_rf)) + swfrc = 0.D0 + lwfrc = 0.D0 + ENDIF +#endif /* CACHED_SUBDD */ + ENDIF + ENDIF +#ifdef TRACERS_SPECIAL_Shindell +#if (! defined(TRACERS_AMP)) & (! defined(TRACERS_TOMAS)) + njaero = nraero_aod + 2 +#else + njaero = 2 +#endif + ALLOCATE (miedx2(nbfastj,njaero)) + ALLOCATE (aer2(nbfastj,njaero)) +#endif /* TRACERS_SPECIAL_Shindell */ + + !======================================================================= + ! Define indices to map model aerosol tracer arrays to radiation arrays + ! and other radiation-related aerosol properties + !======================================================================= + n = 0 + !----------------------------------------------------------------------- +#ifdef TRACERS_AEROSOLS_SEASALT + IF ( nraero_seasalt>0 ) THEN + IF ( rad_interact_aer>0 ) THEN + FS8OPX(2) = 0.D0 + FT8OPX(2) = 0.D0 + ENDIF + ntrix_aod(n+1 : n+nraero_seasalt) = (/n_seasalt1,n_seasalt2/) + trrdry(n+1 : n+nraero_seasalt) = (/0.44D0,1.7D0/) + itr(n+1 : n+nraero_seasalt) = (/2,2/) + ENDIF + n = n + nraero_seasalt +#endif /* TRACERS_AEROSOLS_SEASALT */ + !----------------------------------------------------------------------- +#ifdef TRACERS_AEROSOLS_Koch + IF ( nraero_koch>0 ) THEN + IF ( rad_interact_aer>0 ) THEN ! if BC''s sol.effect are doubled : + FS8OPX(1) = 0.D0 + FT8OPX(1) = 0.D0 +#ifndef SULF_ONLY_AEROSOLS + FS8OPX(4 : 6) = 0.D0 + FT8OPX(4 : 6) = 0.D0 +#endif + ENDIF + ntrix_aod(n+1) = n_SO4 + trrdry(n+1) = 0.15D0 + itr(n+1) = 1 + +#ifndef SULF_ONLY_AEROSOLS + +#if defined( TRACERS_AEROSOLS_VBS ) & defined( TRACERS_AEROSOLS_SOA ) + + ntrix_aod(n+2 : n+nraero_koch) = (/n_vbsAm2,n_isopp1a,n_BCIA, & + n_BCB/) + trrdry(n+2 : n+nraero_koch) = (/0.2D0,0.2D0,0.08D0,0.08D0/) + itr(n+2 : n+nraero_koch) = (/4,5,6/) + krhtra(n+2 : n+nraero_koch) = (/1,0,0/) + ! Augment BC by 50 % + fstasc(n+2 : n+nraero_koch) = (/1.D0,1.5D0,1.5D0/) + +#elif defined( TRACERS_AEROSOLS_VBS ) + + ntrix_aod(n+2 : n+nraero_koch) = (/n_vbsAm2,n_BCIA,n_BCB/) + trrdry(n+2 : n+nraero_koch) = (/0.2D0,0.08D0,0.08D0/) + itr(n+2 : n+nraero_koch) = (/4,5,6/) + krhtra(n+2 : n+nraero_koch) = (/1,0,0/) + ! Augment BC by 50 % + fstasc(n+2 : n+nraero_koch) = (/1.D0,1.5D0,1.5D0/) + +#elif defined( TRACERS_AEROSOLS_SOA ) + + ntrix_aod(n+2 : n+nraero_koch) = (/n_OCIA,n_OCB,n_isopp1a,n_BCIA,& + n_BCB/) + trrdry(n+2 : n+nraero_koch) = (/0.2D0,0.2D0,0.2D0,0.08D0,0.08D0/) + itr(n+2 : n+nraero_koch) = (/4,4,5,6/) + krhtra(n+2 : n+nraero_koch) = (/1,1,0,0/) + ! Augment BC by 50 % + fstasc(n+2 : n+nraero_koch) = (/1.D0,1.D0,1.5D0,1.5D0/) + +#else + + ntrix_aod(n+2 : n+nraero_koch) = (/n_OCIA,n_OCB,n_BCIA,n_BCB/) + trrdry(n+2 : n+nraero_koch) = (/0.2D0,0.2D0,0.08D0,0.08D0/) + itr(n+2 : n+nraero_koch) = (/4,4,5,6/) + krhtra(n+2 : n+nraero_koch) = (/1,1,0,0/) + ! Augment BC by 50 % + fstasc(n+2 : n+nraero_koch) = (/1.D0,1.D0,1.5D0,1.5D0/) + +#endif + +#endif /* SULF_ONLY_AEROSOLS */ + ENDIF + n = n + nraero_koch +#endif /* TRACERS_AEROSOLS_Koch */ + !----------------------------------------------------------------------- +#ifdef TRACERS_NITRATE + IF ( nraero_nitrate>0 ) THEN +#ifdef SULF_ONLY_AEROSOLS + CALL STOP_MODEL('SULF_ONLY_AEROSOLS and TRACERS_NITRATE on', & + 255) +#endif /* OFF : SULF_ONLY_AEROSOLS */ + IF ( rad_interact_aer>0 ) THEN + ! turn off default nitrate + FS8OPX(3) = 0.D0 + FT8OPX(3) = 0.D0 + ENDIF + ntrix_aod(n+1 : n+nraero_nitrate) = (/n_NO3p/) + trrdry(n+1 : n+nraero_nitrate) = (/0.15D0/) + itr(n+1 : n+nraero_nitrate) = (/3/) + ENDIF + n = n + nraero_nitrate +#endif /* TRACERS_NITRATE */ + !----------------------------------------------------------------------- +#if (defined TRACERS_DUST) || (defined TRACERS_MINERALS) + IF ( nraero_dust>0 ) THEN + IF ( rad_interact_aer>0 ) THEN + ! turn off default dust + FS8OPX(7) = 0.D0 + FT8OPX(7) = 0.D0 + ENDIF + nr_soildust = n + 1 + +#ifdef TRACERS_MINERALS + +#if defined( TRACERS_DUST_Silt4 ) & defined( TRACERS_DUST_Silt5 ) + + ! Adjust if number of dust tracers changes. + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clayilli,i=1,nSubClays),( & + n_claykaol,i=1,nSubClays), & + (n_claysmec,i=1,nSubClays), & + (n_claycalc,i=1,nSubClays), & + (n_clayquar,i=1,nSubClays), & + (n_clayfeld,i=1,nSubClays), & + (n_clayhema,i=1,nSubClays), & + (n_claygyps,i=1,nSubClays), & + (n_clayilhe,i=1,nSubClays), & + (n_claykahe,i=1,nSubClays), & + (n_claysmhe,i=1,nSubClays), & + (n_claycahe,i=1,nSubClays), & + (n_clayquhe,i=1,nSubClays), & + (n_clayfehe,i=1,nSubClays), & + (n_claygyhe,i=1,nSubClays), & + n_sil1illi,n_sil1kaol, & + n_sil1smec,n_sil1calc, & + n_sil1quar,n_sil1feld, & + n_sil1hema,n_sil1gyps, & + n_sil1ilhe,n_sil1kahe, & + n_sil1smhe,n_sil1cahe, & + n_sil1quhe,n_sil1fehe, & + n_sil1gyhe,n_sil2illi, & + n_sil2kaol,n_sil2smec, & + n_sil2calc,n_sil2quar, & + n_sil2feld,n_sil2hema, & + n_sil2gyps,n_sil2ilhe, & + n_sil2kahe,n_sil2smhe, & + n_sil2cahe,n_sil2quhe, & + n_sil2fehe,n_sil2gyhe, & + n_sil3illi,n_sil3kaol, & + n_sil3smec,n_sil3calc, & + n_sil3quar,n_sil3feld, & + n_sil3hema,n_sil3gyps, & + n_sil3ilhe,n_sil3kahe, & + n_sil3smhe,n_sil3cahe, & + n_sil3quhe,n_sil3fehe, & + n_sil3gyhe,n_sil4illi, & + n_sil4kaol,n_sil4smec, & + n_sil4calc,n_sil4quar, & + n_sil4feld,n_sil4hema, & + n_sil4gyps,n_sil4ilhe, & + n_sil4kahe,n_sil4smhe, & + n_sil4cahe,n_sil4quhe, & + n_sil4fehe,n_sil4gyhe, & + n_sil5illi,n_sil5kaol, & + n_sil5smec,n_sil5calc, & + n_sil5quar,n_sil5feld, & + n_sil5hema,n_sil5gyps, & + n_sil5ilhe,n_sil5kahe, & + n_sil5smhe,n_sil5cahe, & + n_sil5quhe,n_sil5fehe, & + n_sil5gyhe/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + , & + (dryEffRadMinerals(8),i=1,ntm_sil4)& + , & + (dryEffRadMinerals(9),i=1,ntm_sil5)& + /) + + +#elif defined( TRACERS_DUST_Silt5 ) + + ! Adjust if number of dust tracers changes. + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clayilli,i=1,nSubClays),( & + n_claykaol,i=1,nSubClays), & + (n_claysmec,i=1,nSubClays), & + (n_claycalc,i=1,nSubClays), & + (n_clayquar,i=1,nSubClays), & + (n_clayfeld,i=1,nSubClays), & + (n_clayhema,i=1,nSubClays), & + (n_claygyps,i=1,nSubClays), & + (n_clayilhe,i=1,nSubClays), & + (n_claykahe,i=1,nSubClays), & + (n_claysmhe,i=1,nSubClays), & + (n_claycahe,i=1,nSubClays), & + (n_clayquhe,i=1,nSubClays), & + (n_clayfehe,i=1,nSubClays), & + (n_claygyhe,i=1,nSubClays), & + n_sil1illi,n_sil1kaol, & + n_sil1smec,n_sil1calc, & + n_sil1quar,n_sil1feld, & + n_sil1hema,n_sil1gyps, & + n_sil1ilhe,n_sil1kahe, & + n_sil1smhe,n_sil1cahe, & + n_sil1quhe,n_sil1fehe, & + n_sil1gyhe,n_sil2illi, & + n_sil2kaol,n_sil2smec, & + n_sil2calc,n_sil2quar, & + n_sil2feld,n_sil2hema, & + n_sil2gyps,n_sil2ilhe, & + n_sil2kahe,n_sil2smhe, & + n_sil2cahe,n_sil2quhe, & + n_sil2fehe,n_sil2gyhe, & + n_sil3illi,n_sil3kaol, & + n_sil3smec,n_sil3calc, & + n_sil3quar,n_sil3feld, & + n_sil3hema,n_sil3gyps, & + n_sil3ilhe,n_sil3kahe, & + n_sil3smhe,n_sil3cahe, & + n_sil3quhe,n_sil3fehe, & + n_sil3gyhe,n_sil5illi, & + n_sil5kaol,n_sil5smec, & + n_sil5calc,n_sil5quar, & + n_sil5feld,n_sil5hema, & + n_sil5gyps,n_sil5ilhe, & + n_sil5kahe,n_sil5smhe, & + n_sil5cahe,n_sil5quhe, & + n_sil5fehe,n_sil5gyhe/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + , & + (dryEffRadMinerals(9),i=1,ntm_sil5)& + /) + + ! +#elif defined( TRACERS_DUST_Silt4 ) + + ! Adjust if number of dust tracers changes. + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clayilli,i=1,nSubClays),( & + n_claykaol,i=1,nSubClays), & + (n_claysmec,i=1,nSubClays), & + (n_claycalc,i=1,nSubClays), & + (n_clayquar,i=1,nSubClays), & + (n_clayfeld,i=1,nSubClays), & + (n_clayhema,i=1,nSubClays), & + (n_claygyps,i=1,nSubClays), & + (n_clayilhe,i=1,nSubClays), & + (n_claykahe,i=1,nSubClays), & + (n_claysmhe,i=1,nSubClays), & + (n_claycahe,i=1,nSubClays), & + (n_clayquhe,i=1,nSubClays), & + (n_clayfehe,i=1,nSubClays), & + (n_claygyhe,i=1,nSubClays), & + n_sil1illi,n_sil1kaol, & + n_sil1smec,n_sil1calc, & + n_sil1quar,n_sil1feld, & + n_sil1hema,n_sil1gyps, & + n_sil1ilhe,n_sil1kahe, & + n_sil1smhe,n_sil1cahe, & + n_sil1quhe,n_sil1fehe, & + n_sil1gyhe,n_sil2illi, & + n_sil2kaol,n_sil2smec, & + n_sil2calc,n_sil2quar, & + n_sil2feld,n_sil2hema, & + n_sil2gyps,n_sil2ilhe, & + n_sil2kahe,n_sil2smhe, & + n_sil2cahe,n_sil2quhe, & + n_sil2fehe,n_sil2gyhe, & + n_sil3illi,n_sil3kaol, & + n_sil3smec,n_sil3calc, & + n_sil3quar,n_sil3feld, & + n_sil3hema,n_sil3gyps, & + n_sil3ilhe,n_sil3kahe, & + n_sil3smhe,n_sil3cahe, & + n_sil3quhe,n_sil3fehe, & + n_sil3gyhe,n_sil4illi, & + n_sil4kaol,n_sil4smec, & + n_sil4calc,n_sil4quar, & + n_sil4feld,n_sil4hema, & + n_sil4gyps,n_sil4ilhe, & + n_sil4kahe,n_sil4smhe, & + n_sil4cahe,n_sil4quhe, & + n_sil4fehe,n_sil4gyhe/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + , & + (dryEffRadMinerals(8),i=1,ntm_sil4)& + /) + ! +#else + + ! Adjust if number of dust tracers changes. + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clayilli,i=1,nSubClays),( & + n_claykaol,i=1,nSubClays), & + (n_claysmec,i=1,nSubClays), & + (n_claycalc,i=1,nSubClays), & + (n_clayquar,i=1,nSubClays), & + (n_clayfeld,i=1,nSubClays), & + (n_clayhema,i=1,nSubClays), & + (n_claygyps,i=1,nSubClays), & + (n_clayilhe,i=1,nSubClays), & + (n_claykahe,i=1,nSubClays), & + (n_claysmhe,i=1,nSubClays), & + (n_claycahe,i=1,nSubClays), & + (n_clayquhe,i=1,nSubClays), & + (n_clayfehe,i=1,nSubClays), & + (n_claygyhe,i=1,nSubClays), & + n_sil1illi,n_sil1kaol, & + n_sil1smec,n_sil1calc, & + n_sil1quar,n_sil1feld, & + n_sil1hema,n_sil1gyps, & + n_sil1ilhe,n_sil1kahe, & + n_sil1smhe,n_sil1cahe, & + n_sil1quhe,n_sil1fehe, & + n_sil1gyhe,n_sil2illi, & + n_sil2kaol,n_sil2smec, & + n_sil2calc,n_sil2quar, & + n_sil2feld,n_sil2hema, & + n_sil2gyps,n_sil2ilhe, & + n_sil2kahe,n_sil2smhe, & + n_sil2cahe,n_sil2quhe, & + n_sil2fehe,n_sil2gyhe, & + n_sil3illi,n_sil3kaol, & + n_sil3smec,n_sil3calc, & + n_sil3quar,n_sil3feld, & + n_sil3hema,n_sil3gyps, & + n_sil3ilhe,n_sil3kahe, & + n_sil3smhe,n_sil3cahe, & + n_sil3quhe,n_sil3fehe, & + n_sil3gyhe/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + /) + +#endif + + IF ( tracers_minerals ) CALL CALCSUBCLAYWEIGHTS + + wttr(n+1 : n+nraero_dust) = (/((SUBCLAYWEIGHTS(i,j),i=1,nSubClays& + ),j=1,ntm_clay), & + (1.D0,i=1,ntm_sil1+ntm_sil2+ntm_sil3+& + ntm_sil4+ntm_sil5)/) + + densclay = (/(TRPDENS(n_clayilli),i=1,nSubClays), & + (TRPDENS(n_claykaol),i=1,nSubClays), & + (TRPDENS(n_claysmec),i=1,nSubClays), & + (TRPDENS(n_claycalc),i=1,nSubClays), & + (TRPDENS(n_clayquar),i=1,nSubClays), & + (TRPDENS(n_clayfeld),i=1,nSubClays), & + (TRPDENS(n_clayhema),i=1,nSubClays), & + (TRPDENS(n_claygyps),i=1,nSubClays), & + (TRPDENS(n_clayilhe),i=1,nSubClays), & + (TRPDENS(n_claykahe),i=1,nSubClays), & + (TRPDENS(n_claysmhe),i=1,nSubClays), & + (TRPDENS(n_claycahe),i=1,nSubClays), & + (TRPDENS(n_clayquhe),i=1,nSubClays), & + (TRPDENS(n_clayfehe),i=1,nSubClays), & + (TRPDENS(n_claygyhe),i=1,nSubClays)/) + denssil1 = (/TRPDENS(n_sil1illi),TRPDENS(n_sil1kaol), & + TRPDENS(n_sil1smec),TRPDENS(n_sil1calc), & + TRPDENS(n_sil1quar),TRPDENS(n_sil1feld), & + TRPDENS(n_sil1hema),TRPDENS(n_sil1gyps), & + TRPDENS(n_sil1ilhe),TRPDENS(n_sil1kahe), & + TRPDENS(n_sil1smhe),TRPDENS(n_sil1cahe), & + TRPDENS(n_sil1quhe),TRPDENS(n_sil1fehe), & + TRPDENS(n_sil1gyhe)/) + denssil2 = denssil1 + denssil3 = denssil1 +#ifdef TRACERS_DUST_Silt4 + denssil4 = denssil1 +#endif /* TRACERS_DUST_Silt4 */ +#ifdef TRACERS_DUST_Silt5 + denssil5 = denssil1 +#endif /* TRACERS_DUST_Silt5 */ + + +#if defined( TRACERS_DUST_Silt4 ) & defined( TRACERS_DUST_Silt5 ) + + traden(n+1 : n+nraero_dust) = (/densclay( : ),denssil1( : ),denssil2(& + : ),denssil3( : ),denssil4( : ), & + denssil5( : )/)*1D-3 + ! Convert from kg/m^3 to g/cm^3 + +#elif defined( TRACERS_DUST_Silt5 ) + + traden(n+1 : n+nraero_dust) = (/densclay( : ),denssil1( : ),denssil2(& + : ),denssil3( : ),denssil5( : )/)*1D-3 + ! Convert from kg/m^3 to g/cm^3 + +#elif defined( TRACERS_DUST_Silt4 ) + + traden(n+1 : n+nraero_dust) = (/densclay( : ),denssil1( : ),denssil2(& + : ),denssil3( : ),denssil4( : )/)*1D-3 + ! Convert from kg/m^3 to g/cm^3 + +#else + ! + traden(n+1 : n+nraero_dust) = (/densclay( : ),denssil1( : ),denssil2(& + : ),denssil3( : )/)*1D-3 + ! Convert from kg/m^3 to g/cm^3 + +#endif + +#else /* not TRACERS_MINERALS */ + + +#if defined( TRACERS_DUST_Silt4 ) & defined( TRACERS_DUST_Silt5 ) + + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clay,i=1,nSubClays),n_silt1& + ,n_silt2,n_silt3,n_silt4, & + n_silt5/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + , & + (dryEffRadMinerals(8),i=1,ntm_sil4)& + , & + (dryEffRadMinerals(9),i=1,ntm_sil5)& + /) + +#elif defined( TRACERS_DUST_Silt5 ) + + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clay,i=1,nSubClays),n_silt1& + ,n_silt2,n_silt3,n_silt5/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + , & + (dryEffRadMinerals(9),i=1,ntm_sil5)& + /) + ! +#elif defined( TRACERS_DUST_Silt4 ) + + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clay,i=1,nSubClays),n_silt1& + ,n_silt2,n_silt3,n_silt4/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + , & + (dryEffRadMinerals(8),i=1,ntm_sil4)& + /) + ! +#else + + ntrix_aod(n+1 : n+nraero_dust) = (/(n_clay,i=1,nSubClays),n_silt1& + ,n_silt2,n_silt3/) + + trrdry(n+1 : n+nraero_dust) = (/(dryEffRadMinerals(1 : nSubClays),i& + =1,ntm_clay), & + (dryEffRadMinerals(5),i=1,ntm_sil1)& + , & + (dryEffRadMinerals(6),i=1,ntm_sil2)& + , & + (dryEffRadMinerals(7),i=1,ntm_sil3)& + /) + ! +#endif + + IF ( imDust>=4 ) CALL CALCSUBCLAYWEIGHTS + + wttr(n+1 : n+nraero_dust) = (/((SUBCLAYWEIGHTS(i,j),i=1,nSubClays& + ),j=1,ntm_clay), & + (1.D0,i=1,ntm_sil1+ntm_sil2+ntm_sil3+& + ntm_sil4+ntm_sil5)/) + + ! Particle density of dust +#if defined( TRACERS_DUST_Silt4 ) & defined( TRACERS_DUST_Silt5 ) + + traden(n+1 : n+nraero_dust) = (/(TRPDENS(n_clay),i=1,nSubClays), & + TRPDENS(n_silt1),TRPDENS(n_silt2), & + TRPDENS(n_silt3),TRPDENS(n_silt4), & + TRPDENS(n_silt5)/)*1D-3 + ! Convert from kg/m^3 to g/cm^3 + +#elif defined( TRACERS_DUST_Silt5 ) + + traden(n+1 : n+nraero_dust) = (/(TRPDENS(n_clay),i=1,nSubClays), & + TRPDENS(n_silt1),TRPDENS(n_silt2), & + TRPDENS(n_silt3),TRPDENS(n_silt5)/)& + *1D-3 ! Convert from kg/m^3 to g/cm^3 + ! +#elif defined( TRACERS_DUST_Silt4 ) + + traden(n+1 : n+nraero_dust) = (/(TRPDENS(n_clay),i=1,nSubClays), & + TRPDENS(n_silt1),TRPDENS(n_silt2), & + TRPDENS(n_silt3),TRPDENS(n_silt4)/)& + *1D-3 ! Convert from kg/m^3 to g/cm^3 + ! +#else + + traden(n+1 : n+nraero_dust) = (/(TRPDENS(n_clay),i=1,nSubClays), & + TRPDENS(n_silt1),TRPDENS(n_silt2), & + TRPDENS(n_silt3)/)*1D-3 + ! Convert from kg/m^3 to g/cm^3 + +#endif + + +#endif /* TRACERS_MINERALS */ + + itr(n+1 : n+nraero_dust) = 7 + ! all dust cases, outside ifdefs + krhtra(n+1 : n+nraero_dust) = 0 + ! no deliq for dust or minerals + fttasc(n+1 : n+nraero_dust) = 1.3D0 + ! increase dust AOD by 1.3 in LW + ENDIF + n = n + nraero_dust +#endif /* (defined TRACERS_DUST) || (defined TRACERS_MINERALS) */ + !----------------------------------------------------------------------- + !define ntrix_rf, based on the OMA tracers above + IF ( n>0 ) THEN + IF ( diag_fc==2 ) THEN + ntrix_rf(1 : nraero_OMA) = ntrix_aod(1 : nraero_OMA) + ELSEIF ( diag_fc==1 ) THEN + ntrix_rf(1) = ntrix_aod(1) + ENDIF + ENDIF + !----------------------------------------------------------------------- +#if (defined TRACERS_AMP) || (defined TRACERS_AMP_M1) + IF ( nraero_AMP>0 ) THEN + IF ( rad_interact_aer>0 ) THEN + FS8OPX(1 : 7) = 0.D0 + FT8OPX(1 : 7) = 0.D0 + ENDIF + ntrix_aod(n+1 : n+nraero_AMP) = (/n_N_AKK_1,n_N_ACC_1,n_N_DD1_1, & + n_N_DS1_1,n_N_DD2_1,n_N_DS2_1, & + n_N_SSA_1,n_N_SSC_1,n_N_OCC_1, & + n_N_BC1_1,n_N_BC2_1,n_N_BC3_1, & + n_N_DBC_1,n_N_BOC_1,n_N_BCS_1, & + n_N_MXX_1/) + IF ( diag_fc==2 ) THEN + ntrix_rf(n+1 : n+nraero_AMP) = ntrix_aod(n+1 : n+nraero_AMP) + ELSEIF ( diag_fc==1 ) THEN + ntrix_rf(n+1) = ntrix_aod(n+1) + ENDIF + ENDIF + n = n + nraero_AMP +#endif /* (defined TRACERS_AMP) || (defined TRACERS_AMP_M1) */ + !----------------------------------------------------------------------- +#ifdef TRACERS_TOMAS + IF ( nraero_TOMAS>0 ) THEN + IF ( rad_interact_aer>0 ) THEN + FS8OPX(1 : 2) = 0.D0 + FS8OPX(4 : 7) = 0.D0 + FT8OPX(1 : 2) = 0.D0 + FT8OPX(4 : 7) = 0.D0 +#ifdef TRACERS_NITRATE + FS8OPX(3) = 0.D0 + FT8OPX(3) = 0.D0 +#endif /* TRACERS_NITRATE */ + ENDIF + + ntrix_aod(n+1 : n+nraero_TOMAS) & + = (/N_ASO4(1),N_ANACL(1),N_AECOB(1),N_AECIL(1),N_AOCOB(1), & + N_AOCIL(1),N_ADUST(1)/) + itr(n+1 : n+nraero_TOMAS) = (/1,2,6,5,4,4,7/) + krhtra(n+1 : n+nraero_TOMAS) = 0 + ! ANUM(1) for internal-mixing case. Others(ncomp-1) for external-mixing case. + IF ( diag_fc==2 ) THEN + ntrix_rf(n+1 : n+nraero_TOMAS) = ntrix_aod(n+1 : n+nraero_TOMAS) + ELSEIF ( diag_fc==1 ) THEN + ntrix_rf(n+1) = ntrix_aod(n+1) + ENDIF + ENDIF + n = n + nraero_TOMAS +#endif + !======================================================================= + !======================================================================= +#endif /* TRACERS_ON */ + + ! set default FSTOPX and FTTOPX values + IF ( rad_interact_aer>0 ) THEN + FSTOPX( : ) = 1.D0 + FTTOPX( : ) = 1.D0 + ELSE + FSTOPX( : ) = 0.D0 + FTTOPX( : ) = 0.D0 + ENDIF + skip_AOD_in_rad = rad_interact_aer>0 + + IF ( ktrend/=0 ) THEN + !**** Read in time history of well-mixed greenhouse gases + CALL OPENUNIT('GHG',iu,.FALSE.,.TRUE.) + CALL GHGHST(iu) + CALL CLOSEUNIT(iu) + IF ( FILE_EXISTS('dH2O') .AND. H2ObyCH4/=0. .AND. Kradia<=0 ) & + THEN + !**** Read in dH2O : H2O prod.rate in kg/m^2 per day and ppm_CH4 + CALL OPENUNIT('dH2O',iu,.FALSE.,.TRUE.) +#if defined(CUBED_SPHERE) + CALL READ_QMA(iu,plbx) +#else + CALL GETQMA(iu,lat_dg,plbx,dh2o,lm,jm) +#endif + CALL CLOSEUNIT(iu) + ELSE + H2ObyCH4 = 0. + ENDIF + ENDIF +#ifdef OLD_BCdalbsn + IF ( dalbsnX/=0. ) THEN + CALL UPDBCD(1990) + depoBC_1990 = depoBC + ENDIF +#endif + !**** set up unit numbers for 14 more radiation input files + donotread = -9999 + nrfun( : ) = 0 ! green light + nrfun(12 : 13) = donotread ! not used in GCM + nrfun(10 : 11) = donotread ! obsolete O3 data + nrfun(6) = donotread ! dust read externally now + IF ( .NOT.transmission_corrections ) nrfun(4) = donotread + IF ( madvol==0 ) nrfun(7) = donotread + IF ( madeps==0 ) nrfun(8) = donotread + ! if(ksolar < 0) nrfun(9) = donotread + nrfun(9) = donotread ! open/read RADN9 inside RCOMP1 + DO IU = 1, 14 + IF ( nrfun(iu)==donotread ) CYCLE + CALL OPENUNIT(RUNSTR(IU),NRFUN(IU),QBIN(IU),.TRUE.) + ENDDO + + LS1_loc = 1 + ! default + !*********************************************************************** + ! Main Radiative Initializations + ! ------------------------------------------------------------------ + CALL RCOMP1(NRFUN) + IF ( AM_I_ROOT() ) CALL WRITER(6,0) + ! print rad. control parameters + !*********************************************************************** + DO IU = 1, 14 + IF ( nrfun(iu)==donotread ) CYCLE + CALL CLOSEUNIT(NRFUN(IU)) + ENDDO + !**** Save initial (currently permanent and global) Q in rad.layers + DO LR = 1, LM_REQ + SHL0(LR) = SHL(LM+LR) + ENDDO + WRITE (out_line,*) 'spec.hum in rad.equ.layers : ', SHL0 + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + +#ifdef ALTER_RADF_BY_LAT + !**** Save initial rad forcing alterations : + FS8OPX_orig( : ) = FS8OPX( : ) + FT8OPX_orig( : ) = FT8OPX( : ) ! aerosols + + !**** Read in the factors used for alterations : + CALL OPENUNIT('ALT_GHG_LAT',iu2,.FALSE.,.TRUE.) + READ (iu2,*) + ! skip first line + DO n = 1, 46 + READ (iu2,'(a6,13D8.3)') skip, (FULGAS_lat(nn,n),nn=1,13) + ENDDO + CALL CLOSEUNIT(iu2) + CALL OPENUNIT('ALT_AER_LAT',iu2,.FALSE.,.TRUE.) + READ (iu2,*) + ! skip first line + DO n = 1, 46 + READ (iu2,'(a6,8D8.3)') skip, (FS8OPX_lat(nn,n),nn=1,8) + ENDDO + READ (iu2,*) + ! skip first line + DO n = 1, 46 + READ (iu2,'(a6,8D8.3)') skip, (FT8OPX_lat(nn,n),nn=1,8) + ENDDO + CALL CLOSEUNIT(iu2) +#endif + + ! transplanted from main(). needs reviving + ! USE RAD_COM, only : dimrad_sv + ! CHARACTER aDATE*14 + ! if (Kradia.ne.0 .and. Kradia<10) then + ! write(aDATE(1 : 7),'(a3,I4.4)') aMON(1 : 3),Jyear + ! if (Kradia.gt.0) aDATE(4 : 7)=' ' + ! call openunit(trim('RAD'//aDATE(1 : 7)),iu_RAD,.true.,.false.) + ! if (Kradia.lt.0) call io_POS(iu_RAD,Itime-1,2*dimrad_sv,Nrad) + ! end if + + IF ( rad_scm ) THEN + IF ( FILE_EXISTS('GASES') ) THEN + ! GAS NUMBER 1 2 3 4 5 6 7 + ! H2O CO2 O3 O2 NO2 N2O CH4 + ! GAS NUMBER 8 9 10 11 12 13 + ! CCL3F1 CCL2F2 N2 CFC-Y CFC-Z SO2 + + gasnames = (/ 'h2o ','co2 ','o3 ','o2 ','no2 ', & + 'n2o ','ch4 ','cfc11 ','cfc12 ','n2 ', & + 'cfc-y ','cfc-z ','so2 ' /) + set_gases_internally = .FALSE. + u0gas = 0. + fid = PAR_OPEN(grid,'GASES','read') + DO igas = 1, SIZE(gasnames) + CALL READ_DATA(grid,fid,TRIM(gasnames(igas)), & + u0gas(1:LM, igas)) + u0gas(lm+1 : ,igas) = u0gas(lm,igas) + ! fill lm+1:LM+lm_req + IF ( TRIM(gasnames(igas))=='h2o' ) q(1,1, : ) & + = u0gas(1:LM, igas)*(mwat/mair) ! vol. ratio -> sp. hum. + u0gas( : ,igas) = AML00*u0gas( : ,igas) & + *((1D5/mair)*(gasc*tf/101325D0)) + ! vol. ratio -> cm-atm + ENDDO + CALL PAR_CLOSE(grid,fid) + + !fulgas = 1. ! needed? + + ulgas = u0gas + + ! Multiply gas amounts by rundeck scaling factors. + ! Looping not an option since fulgas array does not yet + ! contain the factors. + + !ulgas( : , 1) = ulgas( : , 1)*H2OstratX + ulgas( : ,2) = ulgas( : ,2)*CO2X + ulgas( : ,3) = ulgas( : ,3)*O3X + ulgas( : ,4) = ulgas( : ,4)*O2X + ulgas( : ,5) = ulgas( : ,5)*NO2X + ulgas( : ,6) = ulgas( : ,6)*N2OX + ulgas( : ,7) = ulgas( : ,7)*CH4X + ulgas( : ,8) = ulgas( : ,8)*CFC11X + ulgas( : ,9) = ulgas( : ,9)*CFC12X + ulgas( : ,10) = ulgas( : ,10)*N2CX + ulgas( : ,11) = ulgas( : ,11)*XGHGX + ulgas( : ,12) = ulgas( : ,12)*YGHGX + ulgas( : ,13) = ulgas( : ,13)*SO2X + + ENDIF + IF ( FILE_EXISTS('VISAODangstr') ) THEN + set_aerosols_internally = .FALSE. + ! fid = par_open(grid,'VISAODangstr','read') + ! not needed for initial CIRC cases which have zero aerosol + ! todo : read optical depths and scale with Angstrom exponent + ! weighted by solar flux + ! .... + ! call par_close(grid,fid) + sraext = 0. + srasct = 0. + sragcb = 0. + srdext = 0. + srdsct = 0. + srdgcb = 0. + srvext = 0. + srvsct = 0. + srvgcb = 0. + srbext = 0. + srbsct = 0. + srbgcb = 0. + traalk = 0. + trdalk = 0. + trvalk = 0. + trbalk = 0. + ENDIF + i = 1 + j = 1 + DO l = 1, lm + tloc = t(i,j,l)*pk(l,i,j) + IF ( tloc>=tf ) THEN + SVLHX(l,i,j) = lhe + ELSE + SVLHX(l,i,j) = lhs + ENDIF + SVLAT(l,i,j) = SVLHX(l,i,j) + RHSAV(l,i,j) = q(i,j,l)/QSAT(tloc,SVLHX(l,i,j),PMID(l,i,j)) + ENDDO + !llow=1; lmid=2; lhi=3 + ENDIF + +END SUBROUTINE INIT_RAD + +SUBROUTINE SETATM ! dummy routine in gcm +END SUBROUTINE SETATM + +SUBROUTINE GETVEG(LONR,LATR) ! dummy routine in gcm + INTEGER LONR, LATR +END SUBROUTINE GETVEG + +SUBROUTINE DAILY_RAD(end_of_day) + !@sum daily_RAD sets radiation parameters that change every day + !@auth G. Schmidt + !@calls RADPAR : RCOMPT + USE DOMAIN_DECOMP_ATM, ONLY : AM_I_ROOT + USE DOMAIN_DECOMP_ATM, ONLY : GRID, GETDOMAINBOUNDS + USE MODEL_COM, ONLY : MODELECLOCK + USE RADPAR, ONLY : FULGAS, JYEARR => JYEAR, JDAYR => JDAY, XREF, & + KYEARV +#ifdef ALTER_RADF_BY_LAT + USE RADPAR, ONLY : FULGAS_orig +#endif + USE RADPAR, ONLY : RCOMPT, WRITET + USE RAD_COM, ONLY : co2x, n2ox, ch4x, cfc11x, cfc12x, xGHGx, & + h2ostratx, o2x, no2x, n2cx, yghgx, so2x, o3x, o3_yr, ghg_yr, & + co2ppm, Volc_yr, albsn_yr, dalbsnX, SNOAGE, snoage_def, & + chl_from_seawifs + USE DIAG_COM, ONLY : iwrite, jwrite, itwrite, TDIURN + USE GEOM, ONLY : IMAXJ + IMPLICIT NONE + LOGICAL, INTENT(IN) :: end_of_day + INTEGER :: year, dayOfYear + INTEGER :: i, j, i_0, i_1, j_0, j_1, itype + + CALL MODELECLOCK%GET(year=year,dayOfYear=dayOfYear) + + !**** Update time dependent radiative parameters each day + ! Get black carbon deposition data for the appropriate year + ! (does nothing except at a restart or the beginning of a new year) + IF ( dalbsnX/=0. ) THEN + IF ( albsn_yr==0 ) THEN +#ifdef OLD_BCdalbsn + CALL UPDBCD(year) +#else + CALL UPDBCDALBSN(year,dayofyear) +#endif + ELSE +#ifdef OLD_BCdalbsn + CALL UPDBCD(albsn_yr) +#else + ! as per radiation-code convention, pass -albsn_yr to indicate + ! perpetual-year mode + CALL UPDBCDALBSN(-albsn_yr,dayofyear) +#endif + ENDIF + ENDIF + ! Hack : 2 specific volc. eruption scenarios for 2000-2100 period + IF ( volc_yr==-2010 ) THEN ! repeat some old volcanos + KYEARV = YEAR + IF ( YEAR>2010 ) KYEARV = YEAR - 100 + ! go back 100 years + ENDIF + IF ( volc_yr==-2000 ) THEN + KYEARV = YEAR + IF ( YEAR>2000 ) KYEARV = YEAR - 50 + ! go back 50 years til 2050 + IF ( YEAR>2050 ) KYEARV = YEAR - 150 + ! then go back 150 years + ENDIF + + JDAYR = dayOfYear + JYEARR = YEAR + CALL RCOMPT + ! FULGAS(2 : ) is set only in the first call to RCOMPT unless ghg_yr=0 + ! Optional scaling of the observed value only in case it was (re)set + IF ( .NOT.end_of_day .AND. H2OstratX>=0. ) FULGAS(1) = FULGAS(1) & + *H2OstratX + IF ( .NOT.end_of_day .OR. O3_yr==0. ) FULGAS(3) = FULGAS(3)*O3X + IF ( ghg_yr==0 .OR. .NOT.end_of_day ) THEN + FULGAS(2) = FULGAS(2)*CO2X + FULGAS(6) = FULGAS(6)*N2OX + FULGAS(7) = FULGAS(7)*CH4X + FULGAS(8) = FULGAS(8)*CFC11X + FULGAS(9) = FULGAS(9)*CFC12X + FULGAS(11) = FULGAS(11)*XGHGX + FULGAS(12) = FULGAS(12)*YGHGX + ENDIF + IF ( .NOT.end_of_day ) THEN + FULGAS(4) = FULGAS(4)*O2X + FULGAS(5) = FULGAS(5)*NO2X + FULGAS(10) = FULGAS(10)*N2CX + FULGAS(13) = FULGAS(13)*SO2X + ! no effect since FULGAS(13)=0. + ENDIF + + !**** write trend table for forcing 'itwrite' for years iwrite->jwrite + !**** itwrite : 1-2=GHG 3=So 4-5=O3 6-9=aerosols : Trop,DesDust,Volc,Total + IF ( AM_I_ROOT() .AND. jwrite>1500 ) & + CALL WRITET(6,itwrite,iwrite,jwrite,1,0) + +#ifdef ALTER_RADF_BY_LAT + !**** Save initial rad forcing alterations : + FULGAS_orig( : ) = FULGAS( : ) + ! GHGs +#endif + + !**** Define CO2 (ppm) for rest of model + co2ppm = FULGAS(2)*XREF(1) + + IF ( chl_from_seawifs>0 ) CALL GET_CHL_FROM_SEAWIFS + + IF ( end_of_day ) THEN + + CALL GETDOMAINBOUNDS(grid,J_STRT=J_0,J_STOP=J_1) + CALL GETDOMAINBOUNDS(grid,I_STRT=I_0,I_STOP=I_1) + + DO j = J_0, J_1 + DO i = I_0, IMAXJ(j) + !**** + !**** increase snow age depending on snoage_def + !**** + IF ( snoage_def==0 ) THEN + ! update indep. of ts + DO itype = 1, 3 + SNOAGE(itype,i,j) = 1. + .98D0*SNOAGE(itype,i,j) + ENDDO + ELSEIF ( snoage_def==1 ) THEN + ! update if max T>0 + IF ( TDIURN(i,j,7)>0 ) SNOAGE(1,i,j) & + = 1. + .98D0*SNOAGE(1,i,j) + ! ocean ice (not currently used) + IF ( TDIURN(i,j,8)>0 ) SNOAGE(2,i,j) & + = 1. + .98D0*SNOAGE(2,i,j) + ! land ice + IF ( TDIURN(i,j,2)>0 ) SNOAGE(3,i,j) & + = 1. + .98D0*SNOAGE(3,i,j) + ! land + ELSE + WRITE (6,*) "This snoage_def is not defined : ", & + snoage_def + WRITE (6,*) "Please use : 0 (update indep of T)" + WRITE (6,*) " 1 (update if T>0)" + CALL STOP_MODEL('stopped in RAD_DRV.f',255) + ENDIF + ENDDO + ENDDO + ENDIF + +END SUBROUTINE DAILY_RAD + +SUBROUTINE GET_CHL_FROM_SEAWIFS + + USE DOMAIN_DECOMP_ATM, ONLY : GRID, REWIND_PARALLEL, READT_PARALLEL,& + GETDOMAINBOUNDS + USE FLUXES, ONLY : FOCEAN, atmocn + USE CONSTANT, ONLY : by12 + USE MODEL_COM, ONLY : MODELECLOCK, calendar + USE RESOLUTION, ONLY : im, jm + USE FILEMANAGER, ONLY : NAMEUNIT + USE GEOM, ONLY : IMAXJ + USE FILEMANAGER, ONLY : OPENUNIT + USE CALENDARMONTH_MOD + IMPLICIT NONE + + REAL*8 :: TEMP_LOCAL(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,2) + INTEGER :: month, date, year + LOGICAL :: HAVE_NORTH_POLE, HAVE_SOUTH_POLE + INTEGER :: LSTMON, I, J, J_0, J_1, I_0, I_1 + INTEGER, SAVE :: IMON0 = 0 + INTEGER, SAVE :: iu_chl = -1 + !@var ACHL,ECHL1,ECHL0,BCHL,CCHL arrays for the reading in chlorophyll + REAL*8, ALLOCATABLE, DIMENSION( : , : ), SAVE :: ACHL, ECHL1, ECHL0,& + BCHL, CCHL + REAL*8 :: TIME + INTEGER :: I_0H, I_1H, J_0H, J_1H + TYPE (CALENDARMONTH) :: cMonth + + I_0H = grid%I_STRT_HALO + I_1H = grid%I_STOP_HALO + J_0H = grid%J_STRT_HALO + J_1H = grid%J_STOP_HALO + IF ( iu_chl<0 ) THEN + CALL OPENUNIT("CHL_DATA",iu_CHL,.TRUE.,.TRUE.) + ALLOCATE (ACHL(I_0H : I_1H,J_0H : J_1H),ECHL1(I_0H : I_1H,J_0H : J_1H),& + ECHL0(I_0H : I_1H,J_0H : J_1H),BCHL(I_0H : I_1H,J_0H : J_1H),& + CCHL(I_0H : I_1H,J_0H : J_1H)) + ENDIF + CALL MODELECLOCK%GET(month=month,date=date) + CALL GETDOMAINBOUNDS(GRID,J_STRT=J_0,J_STOP=J_1, & + HAVE_SOUTH_POLE=HAVE_SOUTH_POLE, & + HAVE_NORTH_POLE=HAVE_NORTH_POLE) + I_0 = grid%I_STRT + I_1 = grid%I_STOP + + !**** Read in Seawifs files here + IF ( month/=IMON0 ) THEN + IF ( IMON0==0 ) THEN + !**** READ IN LAST MONTH''S END-OF-MONTH DATA + LSTMON = month - 1 + IF ( lstmon==0 ) lstmon = 12 + CALL READT_PARALLEL(grid,iu_CHL,NAMEUNIT(iu_CHL),TEMP_LOCAL,& + LSTMON) + ECHL0 = TEMP_LOCAL( : , : ,2) + ELSE + !**** COPY END-OF-OLD-MONTH DATA TO START-OF-NEW-MONTH DATA + ECHL0 = ECHL1 + ENDIF + !**** READ IN CURRENT MONTHS DATA : MEAN AND END-OF-MONTH + IMON0 = month + IF ( month==1 ) CALL REWIND_PARALLEL(iu_CHL) + CALL READT_PARALLEL(grid,iu_CHL,NAMEUNIT(iu_CHL),TEMP_LOCAL,1) + ACHL = TEMP_LOCAL( : , : ,1) + ECHL1 = TEMP_LOCAL( : , : ,2) + + !**** FIND INTERPOLATION COEFFICIENTS (LINEAR/QUADRATIC FIT) + DO J = J_0, J_1 + DO I = I_0, IMAXJ(J) + BCHL(I,J) = ECHL1(I,J) - ECHL0(I,J) + CCHL(I,J) = 3.*(ECHL1(I,J)+ECHL0(I,J)) - 6.*ACHL(I,J) + ENDDO + ENDDO + ENDIF + !**** Calculate CHL for current day + cMonth = calendar%GETCALENDARMONTH(month,year) + TIME = (DATE-.5)/cMonth%DAYSINMONTH - .5 + ! -.50 ) THEN + !**** CHL always uses quadratic fit + atmocn%CHL(I,J) = ACHL(I,J) + BCHL(I,J)*TIME + CCHL(I,J) & + *(TIME**2-BY12) + IF ( atmocn%CHL(I,J)<0 ) atmocn%CHL(I,J) = 0. + ! just in case + ENDIF + ENDDO + ENDDO + !**** REPLICATE VALUES AT POLE + IF ( HAVE_NORTH_POLE ) THEN + IF ( FOCEAN(1,JM)>0 ) atmocn%CHL(2 : IM,JM) = atmocn%CHL(1,JM) + ENDIF + IF ( HAVE_SOUTH_POLE ) THEN + IF ( FOCEAN(1,1)>0 ) atmocn%CHL(2 : IM,1) = atmocn%CHL(1,1) + ENDIF + atmocn%CHL_DEFINED = .TRUE. + +END SUBROUTINE GET_CHL_FROM_SEAWIFS + +SUBROUTINE DAILY_ORBIT(end_of_day) + !@sum DAILY performs daily tasks at end-of-day and maybe at (re)starts + !@auth Original Development Team + !@calls constant : orbit + USE MODEL_COM, ONLY : MODELECLOCK + USE RAD_COM, ONLY : RSDIST, COSD, SIND, COSZ_day, SUNSET, & + VARIABLE_ORB_PAR, ORB_PAR_YEAR_BP, USEORBIT => ORBIT + USE DOMAIN_DECOMP_ATM, ONLY : AM_I_ROOT + USE RAD_COSZ0, ONLY : DAILY_COSZ + USE BASETIME_MOD + USE TIMEINTERVAL_MOD + USE RATIONAL_MOD + IMPLICIT NONE + REAL*8 :: SUNLON, SUNLAT, LAM, EDPY, VEDAY, PYEAR + LOGICAL, INTENT(IN) :: end_of_day + INTEGER :: year, dayOfYear + TYPE (BASETIME) :: t + REAL*8 :: declinationAngle + TYPE (TIMEINTERVAL) :: halfDay + + CALL MODELECLOCK%GET(year=year,dayOfYear=dayOfYear) + + !**** CALCULATE SOLAR ANGLES AND ORBIT POSITION + !**** This is for noon (GMT) for new day. + + !**** The orbital calculation will need to vary depending on the kind + !**** of calendar adopted (i.e. a generic 365 day year, or a transient + !**** calendar including leap years etc.). For transient calendars the + !**** dayOfYear passed to orbit needs to be adjusted to represent the number + !**** of days from Jan 1 2000AD. + ! EDPY=365.2425d0, VEDAY=79.3125d0 ! YR 2000AD + ! dayOfYear => dayOfYear + 365 * (YEAR-2000) + appropriate number of leaps + !**** Default calculation (no leap, VE=Mar 21 hr 0) + ! EDPY=365d0 ; VEDAY=79d0 ! Generic year + !**** PMIP calculation (no leap, VE=Mar 21 hr 12) + EDPY = 365D0 + VEDAY = 79.5D0 ! Generic year + !**** Update orbital parameters at start of year + IF ( dayOfYear==1 ) CALL USEORBIT%SETYEAR(REAL(year,KIND=8)) + + ! Use time for the _middle_ of the day to compute + ! zenith angle : + + halfDay = TIMEINTERVAL(USEORBIT%GETMEANDAY()/2) + t = NEWBASETIME(MODELECLOCK%GETTIMEATBEGINNINGOFCURRENTDAY() & + +halfDay) + + sinD = USEORBIT%GETSINDECLINATIONANGLE(t) + cosD = SQRT(1-sinD**2) + rsdist = USEORBIT%GETDISTANCE(t)**2 + + CALL DAILY_COSZ(sind,cosd,cosz_day,sunset) + +END SUBROUTINE DAILY_ORBIT + +SUBROUTINE DAILY_CH4OX(end_of_day) + !@sum DAILY performs daily tasks at end-of-day and maybe at (re)starts + !@vers 2013/03/27 + !@auth Original Development Team + !@calls constant : orbit + USE RESOLUTION, ONLY : im, jm, lm + USE ATM_COM, ONLY : Q + USE MODEL_COM, ONLY : MODELECLOCK + USE MODEL_COM, ONLY : itime + USE GEOM, ONLY : AXYP, IMAXJ, LAT2D + USE ATM_COM, ONLY : BYMA + USE RADPAR, ONLY : GHGAM, ghgyr2, ghgyr1 + USE RAD_COM, ONLY : DH2O, H2ObyCH4, ghg_yr +#ifdef TRACERS_WATER + USE OLDTRACER_MOD, ONLY : TR_WD_TYPE, NWATER, TR_H2OBYCH4, ITIME_TR0 + USE TRACER_COM, ONLY : TRM, NTM +#endif + USE DIAG_COM, ONLY : FTYPE, ntype, AIJ => AIJ_LOC + USE DIAG_COM_RAD, ONLY : j_h2och4, ij_h2och4 + USE DOMAIN_DECOMP_ATM, ONLY : grid, GETDOMAINBOUNDS, AM_I_ROOT + IMPLICIT NONE + REAL*8 :: xCH4, xdH2O + INTEGER i, j, l, iy, it + LOGICAL, INTENT(IN) :: end_of_day +#ifdef TRACERS_WATER + INTEGER n +#endif + !**** Extract domain decomposition info + INTEGER :: J_0, J_1, I_0, I_1 + LOGICAL :: HAVE_SOUTH_POLE, HAVE_NORTH_POLE + INTEGER :: year, month + + CALL MODELECLOCK%GET(year=year,month=month) + + CALL GETDOMAINBOUNDS(grid,J_STRT=J_0,J_STOP=J_1, & + HAVE_SOUTH_POLE=HAVE_SOUTH_POLE, & + HAVE_NORTH_POLE=HAVE_NORTH_POLE) + I_0 = grid%I_STRT + I_1 = grid%I_STOP + + IF ( .NOT.end_of_day ) RETURN + + !**** Tasks to be done at end of day only + IF ( H2ObyCH4>0 ) THEN + !**** Add obs. H2O generated by CH4(*H2ObyCH4) using a 2 year lag + iy = year - 2 - ghgyr1 + 1 + IF ( ghg_yr>0 ) iy = ghg_yr - 2 - ghgyr1 + 1 + IF ( iy<1 ) iy = 1 + IF ( iy>ghgyr2-ghgyr1+1 ) iy = ghgyr2 - ghgyr1 + 1 + xCH4 = GHGAM(3,iy)*H2ObyCH4 + ! If (AM_I_ROOT()) + ! write(6,*) 'add in stratosphere : H2O gen. by CH4(ppm)=',xCH4 + + DO l = 1, lm + DO j = J_0, J_1 + DO i = I_0, IMAXJ(j) +#ifdef CUBED_SPHERE + CALL LAT_INTERP_QMA(LAT2D(i,j),l,month,xdH2O) +#else + xdH2O = DH2O(j,l,month) +#endif + Q(i,j,l) = Q(i,j,l) + xCH4*xdH2O*BYMA(l,i,j) +#ifdef TRACERS_WATER + !**** Add water to relevant tracers as well + DO n = 1, ntm + IF ( ITIME_TR0(n)<=itime ) THEN + SELECT CASE (TR_WD_TYPE(n)) + CASE (NWATER) + ! water : add CH4-sourced water to tracers + TRM(i,j,l,n) = TRM(i,j,l,n) + TR_H2OBYCH4(n) & + *xCH4*xdH2O*AXYP(i,j) + ENDSELECT + ENDIF + ENDDO +#endif + DO it = 1, ntype + CALL INC_AJ(i,j,it,j_h2och4, & + xCH4*xdH2O*FTYPE(it,i,j)) + ENDDO + AIJ(i,j,ij_h2och4) = AIJ(i,j,ij_h2och4) + xCH4*xdH2O + ENDDO + ENDDO + IF ( HAVE_NORTH_POLE ) Q(2 : im,jm,l) = Q(1,jm,l) + IF ( HAVE_SOUTH_POLE ) Q(2 : im,1,l) = Q(1,1,l) +#ifdef TRACERS_WATER + DO n = 1, ntm + IF ( HAVE_SOUTH_POLE ) TRM(2 : im,1,l,n) = TRM(1,1,l,n) + IF ( HAVE_NORTH_POLE ) TRM(2 : im,jm,l,n) = TRM(1,jm,l,n) + ENDDO +#endif + ENDDO + ENDIF + +END SUBROUTINE DAILY_CH4OX + +SUBROUTINE RADIA + !@sum RADIA adds the radiation heating to the temperatures + !@vers 2013/03/27 + !@auth Original Development Team + !@calls tropwmo,coszs,coszt, RADPAR : rcompx ! writer,writet + USE CONSTANT, ONLY : lhe, lhs, twopi, tf, stbo, rhow, mair, grav, & + bysha, pi, radian, areag + USE RESOLUTION, ONLY : pmtop + USE RESOLUTION, ONLY : im, jm, lm +#ifdef TRACERS_SPECIAL_Shindell + USE RESOLUTION, ONLY : LS1 => LS1_NOMINAL +#endif + USE ATM_COM, ONLY : kradia, lm_req, p, t, Q, iu_rad, req_fac_d + USE MODEL_COM + USE TIMECONSTANTS_MOD, ONLY : SECONDS_PER_DAY, INT_DAYS_PER_YEAR + USE ATM_COM, ONLY : BYAML00 + USE GEOM, ONLY : IMAXJ, AXYP, BYAXYP, LAT2D, LON2D + ! for threadprivate copyin common block + ! INPUT DATA ! not (i,j) dependent + USE RADPAR, ONLY : LX, tauwc0, tauic0, WRITER, RCOMPX, UPDGHG, & + S00WM2, RATLS0, S0, JYEARR => JYEAR, JDAYR => JDAY, FULGAS, & + use_tracer_chem, FS8OPX, FT8OPX, use_o3_ref, KYEARG, KJDAYG, & + planck_tmin, planck_tmax + ! set in radpar block data +#ifdef ALTER_RADF_BY_LAT + USE RADPAR, ONLY : FS8OPX_orig, FT8OPX_orig, FULGAS_orig +#endif + ! INPUT DATA (i,j) dependent + USE RADPAR, ONLY : JLAT46 => JLAT, ILON72 => ILON, JGCM, IGCM, L1, & + LMR => NL, PLB, TLB, TLM, SHL, RHL, ltopcl, TAUWC, TAUIC, & + SIZEWC, SIZEIC, kdeliq, POCEAN, PEARTH, POICE, PLICE, PLAKE, & + COSZ, PVT, TGO, TGE, TGOI, TGLI, TSL, WMAG, WEARTH, AGESN, & + SNOWD, SNOWOI, SNOWLI, dALBsn, ZSNWOI, ZOICE, zmp, fmp, flags,& + LS1_loc, snow_frac, zlake, TRACER, FSTOPX, FTTOPX, chem_IN, & + nraero_aod => NTRACE, FTAUC, LOC_CHL, FSTASC, FTTASC +#ifdef HEALY_LM_DIAGS + USE RADPAR, ONLY : VTAULAT +#endif +#ifdef GCC_COUPLE_RAD + USE RADPAR, ONLY : GCCco2_IN, use_tracer_GCCco2, GCCCO2_OUT +#endif + + ! OUTPUT DATA + USE RADPAR, ONLY : TRDFLB, TRNFLB, TRUFLB, TRFCRL, chem_out, SRDFLB,& + SRNFLB, SRUFLB, SRFHRL, PLAVIS, PLANIR, ALBVIS, ALBNIR, & + FSRNFG, SRRVIS, SRRNIR, SRAVIS, SRANIR, SRXVIS, SRDVIS, & + BTEMPW, SRAEXT, SRASCT, SRAGCB, SRDEXT, SRDSCT, SRDGCB, & + SRVEXT, SRVSCT, SRVGCB, aesqex, aesqsc, aesqcb, CO2outCol, & + aesqex_dry, aesqsc_dry, aesqcb_dry, SRXNIR, SRDNIR + USE RAD_COM, ONLY : modrd, nrad + USE RAD_COM, ONLY : rqt, SRHR, TRHR, FSF, COSZ1, s0x, rsdist, & + nradfrc, CH4X_RADoverCHEM, snoage, PLB0, SHL0, TCHG, ALB, & + FSRDIR, SRVISSURF, SRDN, cfrac, RCLD, chem_tracer_save, & + rad_interact_aer, kliq, RHfix, CLDx, GHG_YR, CO2X, N2OX, CH4X,& + CFC11X, CFC12X, XGHGX, rad_forc_lev, NTRIX_AOD, NTRIX_RF, & + WTTR, cloud_rad_forc, CC_cdncx, OD_cdncx, cdncl, dALBsnX, & + rad_to_chem, TRSURF, DIRVIS, FSRDIF, DIRNIR, DIFNIR, & + aer_rad_forc, clim_interact_chem, TAUSUMW, TAUSUMI, & + TAero_aod_diag, chl_from_obio, chl_from_seawifs +#ifdef GCC_COUPLE_RAD + USE RAD_COM, ONLY : GCCCO2_TRACER_SAVE, GCCCO2RAD_TO_CHEM +#endif +#ifdef GCAP + USE RAD_COM, ONLY : TAUW3D, TAUI3D +#endif +#ifdef mjo_subdd + USE RAD_COM, ONLY : SWHR, LWHR, SWHR_cnt, LWHR_cnt, OLR_ACC, & + OLR_cnt, SWU_AVG, swu_cnt +#endif +#ifdef ALTER_RADF_BY_LAT + USE RAD_COM, ONLY : FULGAS_lat, FS8OPX_lat, FT8OPX_lat +#endif +#ifdef TRACERS_DUST + USE RAD_COM, ONLY : srnflb_save, trnflb_save +#endif +#if (defined SHINDELL_STRAT_EXTRA) &(defined ACCMIP_LIKE_DIAGS) + USE RAD_COM, ONLY : STRATO3_TRACER_SAVE +#endif +#ifdef TRACERS_ON + USE RAD_COM, ONLY : tau_as, tau_cs, tau_dry, nraero_rf +#ifdef CACHED_SUBDD + USE CONSTANT, ONLY : grav, Rgas + USE RAD_COM, ONLY : abstau_as, abstau_cs, abstau_dry, swfrc, lwfrc + USE RUNTIMECONTROLS_MOD, ONLY : tracers_amp, tracers_tomas +#endif /* CACHED_SUBDD */ +#endif + USE RANDOM + USE CLOUDS_COM, ONLY : TAUSS, TAUMC, SVLHX, RHSAV, SVLAT, CLDSAV, & + CLDMC, CLDSS, CSIZMC, CSIZSS, llow, lmid, lhi, FSS, TAUSSIP, & + CSIZSSIP, QLSS, QISS, QLMC, QIMC, GET_CLD_OVERLAP + ! subroutine +#ifdef GCAP + USE CLOUDS_COM, ONLY : CLDSS3D + USE CONSTANT, ONLY : teeny +#endif + USE DIAG_COM, ONLY : ia_rad, JREG, AIJ => AIJ_LOC, AIJL => AIJL_LOC,& + ntype, FTYPE, itocean, itlake, itearth, itlandi, itoice, & + itlkice, ADIURN => ADIURN_LOC, ndiuvar, ia_rad_frc +#ifdef USE_HDIURN + USE DIAG_COM, ONLY : HDIURN => HDIURN_LOC +#endif + USE DIAG_COM, ONLY : iwrite, jwrite, itwrite, ndiupt, IJDD, AFLX_ST,& + hr_in_day, hr_in_month + USE DIAG_COM_RAD +#ifdef TRACERS_ON + USE DIAG_COM, ONLY : adiurn_dust, SAVE3DAOD + USE RAD_COM, ONLY : diag_fc +#endif + USE ATM_COM, ONLY : PK, PEDN, PMID, PDSIG, ltropo, MA, BYMA + USE SEAICE_COM, ONLY : si_atm + USE GHY_COM, ONLY : FEARTH, snowd_ij => snowd + USE ENT_COM, ONLY : ENTCELLS + USE ENT_MOD, ONLY : ENT_GET_EXPORTS, N_COVERTYPES + !YKIM-temp hack + USE ENT_DRV, ONLY : MAP_ENT2GISS !YKIM-temp hack + USE LAKES_COM, ONLY : flake, dlake !,mwl + USE FLUXES, ONLY : ASFLX4, atmocn, atmice, atmgla, atmlnd, atmsrf, & + FLICE, FLAND, FOCEAN + USE DOMAIN_DECOMP_ATM, ONLY : grid, WRITE_PARALLEL + USE DOMAIN_DECOMP_ATM, ONLY : GLOBALSUM, GETDOMAINBOUNDS + USE RAD_COSZ0, ONLY : COSZT, COSZS + +#ifdef TRACERS_ON + USE OLDTRACER_MOD, ONLY : TRNAME, TRPDENS + USE TRACER_COM, ONLY : NTM, n_Ox, TRM, n_OCB, n_BCII, n_BCIA, & + n_OCIA, N_OCII, N_SO4_D2, N_SO4_D3, N_SO4, n_stratOx, & + N_N_AKK_1 +#ifdef TRACERS_NITRATE + USE OLDTRACER_MOD, ONLY : TR_MM + USE TRACER_COM, ONLY : n_NH4, n_NO3p +#endif +#ifdef TRACERS_AEROSOLS_SOA + USE TRACER_COM, ONLY : n_isopp1a, n_isopp2a +#ifdef TRACERS_TERP + USE TRACER_COM, ONLY : n_apinp1a, n_apinp2a +#endif /* TRACERS_TERP */ +#endif /* TRACERS_AEROSOLS_SOA */ +#ifdef TRACERS_AEROSOLS_OCEAN + USE TRACER_COM, ONLY : n_ococean +#endif /* TRACERS_AEROSOLS_OCEAN */ +#ifdef GCC_COUPLE_RAD + USE TRACER_COM, ONLY : n_CO2n + USE CONSTANT, ONLY : avog + USE OLDTRACER_MOD, ONLY : TR_MM +#endif +#ifdef TRACERS_AEROSOLS_VBS + USE TRACERS_VBS, ONLY : vbs_tr +#endif + USE TRDIAG_COM, ONLY : TAIJS => TAIJS_LOC, taijls => TAIJLS_LOC, & + IJTS_FC, IJTS_TAU, IJTS_TAUSUB, IJTS_FCSUB, IJLT_3DTAU, & + IJLT_3DAAOD, IJLT_3DTAUCS, IJLT_3DAAODCS, IJLT_3DTAUDRY, & + IJLT_3DAAODDRY, IJTS_SQEX, IJTS_SQEXSUB, IJTS_SQSC, & + IJTS_SQSCSUB, IJTS_SQCB, IJTS_SQCBSUB, diag_rad, diag_aod_3d, & + save_dry_aod +#ifdef AUXILIARY_OX_RADF + USE TRDIAG_COM, ONLY : IJTS_AUXFC +#endif /* AUXILIARY_OX_RADF */ +#ifdef BC_ALB + USE TRDIAG_COM, ONLY : IJTS_ALB, ijts_sunlit_snow +#endif /* BC_ALB */ +#ifdef TRACERS_SPECIAL_Shindell + USE TRCHEM_SHINDELL_COM, ONLY : Lmax_rad_O3, Lmax_rad_CH4 +#endif /* TRACERS_SPECIAL_Shindell */ +#ifdef TRACERS_TOMAS + USE TOMAS_AEROSOL, ONLY : icomp +#endif +#endif /* TRACERS_ON */ + USE AERPARAM_MOD, ONLY : DCDNC_EST +#ifdef OLD_BCdalbsn + USE AERPARAM_MOD, ONLY : DEPOBC, DEPOBC_1990 +#else + USE AERPARAM_MOD, ONLY : BCDALBSN +#endif + USE TIMERPACKAGE_MOD, ONLY : STARTTIMER => START, STOPTIMER => STOP + USE DICTIONARY_MOD, ONLY : GET_PARAM, IS_SET_PARAM +#ifdef CACHED_SUBDD + USE SUBDD_MOD, ONLY : sched_rad, SUBDD_GROUPS, SUBDD_TYPE, & + subdd_ngroups, INC_SUBDD, FIND_GROUPS, lmaxsubdd +#endif +#ifdef SCM + USE SCM_COM, ONLY : SCMopt, SCMin + USE CONSTANT, ONLY : SHA + USE ATM_COM, ONLY : QCL +#endif + USE DIAG_COM, ONLY : IJ_NINTAEREXT, IJ_NINTAERSCA, IJ_NINTAERASY + USE RADPAR, ONLY : nintaerext, nintaersca, nintaerasy + +#ifdef GCAP + USE RAD_COM, ONLY : SAVE_ALB, save_cosz2 + USE O3MOD, ONLY : SAVE_TO3 +#endif +#ifdef TRACERS_GC + USE CHEM_COM, ONLY : TrM, i_O3, i_CH4 + USE DICTIONARY_MOD, ONLY : SYNC_PARAM + USE DOMAIN_DECOMP_ATM, ONLY : AM_I_ROOT + USE RAD_COM, ONLY : SAVE_RF, SAVE_RF_TP, SAVE_RF_3D +#endif + + IMPLICIT NONE + REAL*8 dz, rho + ! + !@var wtrtau,icetau per-layer opacity for cloud water,ice + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,lm) & + :: wtrtau, icetau +#ifdef SCM + REAL*8 q_above(LM+1), q_below(LM+1), Frad(LM+1) +#endif + ! INPUT DATA partly (i,j) dependent, partly global + REAL*8 U0GAS, taulim +#ifdef OLD_BCdalbsn + REAL*8 xdalbs, sumda, tauda, fsnow + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) & + :: sumda_psum, tauda_psum +#endif + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: COSZ2, & + COSZA, TRINCG, BTMPW, WSOIL, fmp_com + REAL*8, DIMENSION(4,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: SNFS, TNFS + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: SNFSCRF,& + TNFSCRF, SNFSCRF2, TNFSCRF2, LWDNCS, & + SNFS_AS_noA, TNFS_AS_noA, SNFS_CS_noA, & + TNFS_CS_noA, SWUS, CTT, CTP, WTRCLD, ICECLD + REAL*8, DIMENSION(18,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) & + :: SNFSAERRF, TNFSAERRF +#ifdef CFMIP3_SUBDD + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: swut, & + swutcs, cfmip_twp, swdcls, swucls, swdt + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,lm) & + :: cfmip_cf, cfmip_qci, cfmip_qcl +#endif +#ifdef CACHED_SUBDD + INTEGER :: igrp, ngroups, grpids(subdd_ngroups) + TYPE (SUBDD_TYPE), POINTER :: subdd + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: SDDARR + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,lm) & + :: SDDARR3D +#ifdef TRACERS_ON + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,nraero_rf) & + :: sddarr3drf + INTEGER :: f +#endif /* TRACERS_ON */ +#ifdef SCM + ! radiative flux profiles for sub-daily output, generalized + ! for GCM grid but currently limited to SCM use + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,lm) & + :: TRDFLB_prof, TRUFLB_prof, SRDFLB_prof, & + SRUFLB_prof +#endif +#ifdef TRACERS_ON + ! types of aods to be saved + ! The name will be any combination of {,TRNAME}{as,cs}{,a}aod + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,lm,nraero_aod)& + :: sddarr4d + CHARACTER(LEN=10), DIMENSION(2) & + :: sgroups = (/'taijh ','taijlh'/) + CHARACTER(LEN=10), DIMENSION(3) :: ssky = (/'as ','cs ','dry'/) + CHARACTER(LEN=10), DIMENSION(2) :: sabs = (/' ','a'/) + CHARACTER(LEN=10), DIMENSION(2) :: sfrc = (/'swf','lwf'/) + CHARACTER(LEN=10) :: spcname + CHARACTER(LEN=50) :: sname + INTEGER :: g, s, a +#endif /* TRACERS_ON */ + !@var CO2out for holding 3D CO2 from rad code for SUBDD + REAL*8, DIMENSION(LM,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: CO2out +#endif /* CACHED_SUBDD */ +#if (defined ACCMIP_LIKE_DIAGS) +#ifndef SKIP_ACCMIP_GHG_RADF_DIAGS + !@var snfs_ghg,tnfs_ghg like SNFS/TNFS but with reference GHG for + !@+ radiative forcing calculations. TOA only. + !@+ index 1=CH4, 2=N2O, 3=CFC11, 4=CFC12 + REAL*8, DIMENSION(4,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) & + :: snfs_ghg, tnfs_ghg + REAL*8, DIMENSION(4) :: sv_fulgas_ref, sv_fulgas_now + INTEGER :: nf, GFrefY, GFrefD, GFnowY, GFnowD + !@var nfghg fulgas( ) index of radf diag ghgs : + INTEGER, DIMENSION(4) :: nfghg = (/7,6,8,9/) +#endif +#endif + +#if defined ( TRACERS_GC ) + !@var snfs_ghg,tnfs_ghg like SNFS/TNFS but with reference GHG for + !@+ radiative forcing calculations. TOA only. + !@+ index 1=CH4, 2=N2O, 3=CFC11, 4=CFC12 + REAL*8, DIMENSION(4,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) & + :: snfs_ghg, tnfs_ghg, & + snfs_ghg_tp, tnfs_ghg_tp + + REAL*8, DIMENSION(4) :: sv_fulgas_ref, sv_fulgas_now + INTEGER :: nf, GFrefY, GFrefD, GFnowY, GFnowD + !@var nfghg fulgas( ) index of radf diag ghgs : + INTEGER, DIMENSION(4) :: nfghg = (/7,6,8,9/) + ! For ozone + REAL*8, DIMENSION(5,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) & + :: SNFST_o3ref, TNFST_o3ref + ! For 3D fluxes + ! 20 radiatively-active species (1:13 gases + 12:20 aerosol particle types + 21:21 clouds) + REAL*8, DIMENSION( grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO, & + LM+LM_REQ+1, 21 ) :: SNFS_3D_pert, TNFS_3D_pert + ! Baseline 3-D radiation fluxes + REAL*8, DIMENSION( grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO, & + LM+LM_REQ+1 ) :: SNFS_3D, TNFS_3D + + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO,LM+LM_REQ+1) & + :: SDDARRFLX +#endif + + ! variables for running uncoupled concentration-driven GCC +#ifdef GCC_UNCOUPLE_RAD_CONCEN + REAL*8 :: GCCco2_fulgas_ref, GCCco2_fulgas_now + INTEGER :: GCCco2nowY, GCCco2nowD +#endif + +#ifdef HEALY_LM_DIAGS + ! GHG Effective forcing relative to 1850 + REAL*8 :: ghg_totforc, CO2I = 285.2, N2OI = .2754, CH4I = .791 + ! 1850 GHG's + REAL*8 :: CO2R = 337.9, N2OR = .3012, CH4R = 1.547 ! RAD's 1979 Reference values + REAL*8 :: FCO2, FN2O, FCH4 ! Current Model GHG + REAL*8 :: FE + !! Function +#endif +#ifdef TRACERS_ON + !@var SNFST,TNFST like SNFS/TNFS but with/without specific tracers for + !@+ radiative forcing calculations + REAL*8, DIMENSION(2,nraero_rf,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: SNFST, & + TNFST + !@var SNFST_o3ref,TNFST_o3ref like snfst,tnfst for special case ozone for + !@+ which nraero_rf fields are not defined. Indicies are : + !@+ 1=LTROPO,reference, 2=TOA,reference; not saving surface forcing. + !@+ 3=LTROPO or LS1-1,auxiliary, 4=TOA,auxiliary; 5=LS1-1,reference +#if (defined SHINDELL_STRAT_EXTRA) &(defined ACCMIP_LIKE_DIAGS) + REAL*8, DIMENSION(5,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) & + :: SNFST_o3ref, TNFST_o3ref, snfst_stratOx, & + tnfst_stratOx +#endif /* SHINDELL_STRAT_EXTRA &ACCMIP_LIKE_DIAGS */ +#ifdef BC_ALB + REAL*8, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: ALBNBC, & + NFSNBC, dALBsnBC + ! not to be confused with BCdalbsn from an input file + LOGICAL, DIMENSION(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) & + :: bc_snow_present +#endif /* BC_ALB */ +#endif /* TRACERS_ON */ + REAL*8, DIMENSION(LM_REQ,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: TRHRS, & + SRHRS + REAL*8, DIMENSION(0 : LM+LM_REQ,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) :: TRHRA, & + SRHRA + ! for adj.frc + REAL*8, DIMENSION(LM) :: TOTCLD, SS_CLD, dcc_cdncl, dod_cdncl + INTEGER I, J, L, K, KR, LR, JR, IH, IHM, INCH, JK, IT, iy, iend, & + N, onoff_aer, onoff_chem, LFRC, JTIME, n1, moddrf + REAL*8 ROT1, ROT2, PLAND, CSS, CMC, DEPTH, QSS, TAUSSL, TAUSSLIP, & + TAUMCL, ELHX, CLDCV, X, OPNSKY, CSZ2, tauup, taudn, & + ptype4(4), taucl, wtlin, MSTRAT, STRATQ, STRJ, MSTJ, optdw,& + optdi, rsign_aer, rsign_chem, tauex5, tauex6, tausct, & + taugcb, dcdnc, & + QR(LM,grid%I_STRT_HALO:grid%I_STOP_HALO,grid%J_STRT_HALO : & + grid%J_STOP_HALO), & + CLDinfo(LM,3,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) + REAL*8 tmpS(8), tmpT(8) + REAL*8 QSAT +#ifdef BC_ALB + REAL*8 dALBsn1 +#endif + LOGICAL set_clayilli, set_claykaol, set_claysmec, set_claycalc, & + set_clayquar + ! + REAL*8 RDSS(LM,grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO), & + RDMC(grid%I_STRT_HALO:grid%I_STOP_HALO, & + grid%J_STRT_HALO:grid%J_STOP_HALO) + + REAL*8 :: TMP(NDIUVAR) + INTEGER, PARAMETER :: NLOC_DIU_VAR = 8 + INTEGER :: idx(NLOC_DIU_VAR) +#if (defined TRACERS_AMP) || (defined TRACERS_TOMAS) + INTEGER, PARAMETER :: NLOC_DIU_VARB = 5 +#else + INTEGER, PARAMETER :: NLOC_DIU_VARB = 3 +#endif + INTEGER :: idxb(NLOC_DIU_VARB) + + INTEGER :: aj_alb_inds(8) + REAL*8, DIMENSION(lm_req) :: bydpreq + + ! INTEGER ICKERR,JCKERR,KCKERR + INTEGER :: J_0, J_1, I_0, I_1 + INTEGER :: J_0S, J_1S + LOGICAL :: HAVE_SOUTH_POLE, HAVE_NORTH_POLE + CHARACTER(LEN=300) :: out_line + + INTEGER :: NIJ_BEFORE_J0, NIJ_AFTER_J1, NIJ_AFTER_I1 + INTEGER :: initial_GHG_setup + + REAL*8 :: PVT0(N_COVERTYPES), HVT0(N_COVERTYPES) +#ifdef TRACERS_NITRATE + REAL*8 :: nh4_on_no3 +#endif +#ifdef TRACERS_TOMAS + REAL*8 :: qcb_col(6,ICOMP-2), qcb_col_dry(6,ICOMP-2) +#endif + + REAL*8, DIMENSION( : , : ), POINTER :: RSI, ZSI, SNOWI, POND_MELT + LOGICAL, DIMENSION( : , : ), POINTER :: FLAG_DSWS + REAL*8 :: rhodz + ! air density times layer thickness (kg/m2 + INTEGER :: year, dayOfYear, hour, date + +#ifdef TRACERS_ON + !@var nsub_ntrix array of index counters for sub classes of tracers + INTEGER, DIMENSION(ntm) :: nsub_ntrix +#endif + +#ifdef GCC_COUPLE_RAD + INTEGER :: Lmax_rad_CO2 = LM +#endif + + CALL MODELECLOCK%GET(year=year,dayOfYear=dayOfYear,hour=hour, & + date=date) + + RSI => SI_ATM%RSI + ZSI => SI_ATM%ZSI + SNOWI => SI_ATM%SNOWI + POND_MELT => SI_ATM%POND_MELT + FLAG_DSWS => SI_ATM%FLAG_DSWS + + ! + !**** + CALL STARTTIMER('RADIA()') + + idx = (/(IDD_CL7+i-1,i=1,7),IDD_CCV/) +#if (defined TRACERS_AMP) || (defined TRACERS_TOMAS) + idxb = (/IDD_PALB,IDD_GALB,IDD_ABSA,idd_aot,idd_aot2/) +#else + idxb = (/IDD_PALB,IDD_GALB,IDD_ABSA/) +#endif + CALL GETDOMAINBOUNDS(grid,HAVE_SOUTH_POLE=HAVE_SOUTH_POLE, & + HAVE_NORTH_POLE=HAVE_NORTH_POLE) + I_0 = grid%I_STRT + I_1 = grid%I_STOP + J_0 = grid%J_STRT + J_1 = grid%J_STOP + J_0S = grid%J_STRT_SKP + J_1S = grid%J_STOP_SKP + + + !**** + !**** FLAND LAND COVERAGE (1) + !**** FLICE LAND ICE COVERAGE (1) + !**** + !**** GTEMPR RADIATIVE TEMPERATURE ARRAY OVER ALL SURFACE TYPES (K) + !**** RSI RATIO OF OCEAN ICE COVERAGE TO WATER COVERAGE (1) + !**** + !**** VDATA 1-11 RATIOS FOR THE 11 VEGETATION TYPES (1) + !**** + + !**** limit optical cloud depth from below : taulim + taulim = MIN(tauwc0,tauic0) + ! currently both .001 + tauwc0 = taulim + tauic0 = taulim + !**** Calculate mean cosine of zenith angle for the current physics step + JTIME = MOD(ITIME,NDAY) + ROT1 = (TWOPI*JTIME)/NDAY + ! ROT2=ROT1+TWOPI*DTsrc/SECONDS_PER_DAY + ! CALL COSZT (ROT1,ROT2,COSZ1) + CALL CALC_ZENITH_ANGLE ! moved to main loop + + IF ( kradia>0 ) THEN ! read in all rad. input data (frc.runs) + iend = 1 + it = itime - 1 ! make sure, at least 1 record is read + DO WHILE ( MOD(itime-it,NDAY*INT_DAYS_PER_YEAR)/=0 ) + !**** input data : WARNINGS + !**** 1 - any changes here also go in later (look for 'iu_rad') + !**** 2 - keep "dimrad_sv" up-to-date : dimrad_sv=IM*JM*{ + ! LM+LM_REQ+1+ + ! * ,(((GTEMPR(k,i,j),k=1,4),i=1,im),j=1,jm) ! (4+) + ! LM+1+3*LM+1+1+ + ! 1+1+1+1+1+ + ! 3+1+.5+.5+ + !**** output data : really needed only if kradia=2 + ! 2+1+1 + !**** total : dimrad_sv= IM*JM*(7*LM + 3*LM_REQ + 24 (+4)) => RAD_COM.f + READ (iu_rad,END=10,ERR=10) it, T, RQT, atmsrf%TSAVG, QR, P,& + CLDinfo, rsi, zsi, wsoil, & + atmsrf%WSAVG, snowi, & + atmgla%SNOW, atmlnd%SNOWE, & + snoage, fmp_com, flag_dsws, & + ltropo, atmlnd%FR_SNOW_RAD, & + dlake, flake, srhra, trhra, iy + ! 2(LM+LM_REQ+1)} + IF ( qcheck ) THEN + WRITE (out_line,*) 'reading RADfile at Itime', Itime, it,& + iy + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + ENDIF + ENDDO + iend = 0 +10 IF ( it/=iy .OR. iend==1 ) THEN + WRITE (out_line,*) 'RAD input file bad or too short : ', & + itime, it, iy, iend + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + CALL STOP_MODEL('RADIA : input file bad or too short',255) + ENDIF + ENDIF + + IF ( MODRD==0 ) THEN + IDACC(ia_rad) = IDACC(ia_rad) + 1 + moddrf = 1 + ! skip rad.forcing diags if nradfrc.le.0 + IF ( nradfrc>0 ) moddrf = MOD(itime-itimei,nrad*nradfrc) + !**** + IF ( moddrf==0 ) IDACC(ia_rad_frc) = IDACC(ia_rad_frc) + 1 + !**** Interface with radiation routines, done only every NRAD time steps + !**** + !**** Calculate mean cosine of zenith angle for the full radiation step + ROT2 = ROT1 + TWOPI*NRAD*DTsrc/SECONDS_PER_DAY + CALL COSZS(ROT1,ROT2,COSZ2,COSZA) +#ifdef GCAP + save_COSZ2 = COSZ2 +#endif + JDAYR = dayOfYear + JYEARR = YEAR + + IF ( IS_SET_PARAM('s0') ) THEN + ! typically only used for SCM + CALL GET_PARAM('s0',s0) + s00wm2 = s0 + ! just in case + ELSE + S0 = S0X*S00WM2*RATLS0/RSDIST + ENDIF + +#ifdef OLD_BCdalbsn + !**** find scaling factors for surface albedo reduction + ! LTM : Fix, testing equality of reals is not reliable + IF ( dalbsnX/=0 ) THEN + IF ( HAVE_SOUTH_POLE ) THEN + sumda_psum( : ,1) = AXYP(1,1) + tauda_psum( : ,1) = AXYP(1,1)*DEPOBC_1990(1,1) + ENDIF + DO j = J_0S, J_1S + DO i = I_0, I_1 + ! ilon72, jlat46 are indices w.r.t 72x46 grid + ! JLAT46=INT(1.+(J-1.)*0.25*DLAT_DG+.5) ! slightly more general + ! ILON72=INT(.5+(I-.5)*72./IM+.5) + ilon72 = 1 + INT(72D0*LON2D(i,j)/twopi) + jlat46 = 1 + INT(45D0*(LAT2D(i,j)+92D0*radian)/pi) + fsnow = FLICE(i,j) + rsi(i,j)*(1-FLAND(i,j)) + IF ( atmlnd%SNOWE(I,J)>0. ) fsnow = fsnow + & + FEARTH(i,j) + sumda_psum(i,j) = AXYP(i,j)*fsnow + tauda_psum(i,j) = AXYP(i,j)*fsnow*DEPOBC_1990(i,j) + ENDDO + ENDDO + IF ( HAVE_NORTH_POLE ) THEN + sumda_psum( : ,JM) = AXYP(1,jm)*rsi(1,jm) + tauda_psum( : ,JM) = AXYP(1,jm)*rsi(1,jm)*DEPOBC_1990(1,jm) + ENDIF + CALL GLOBALSUM(grid,sumda_psum,sumda,ALL=.TRUE.) + CALL GLOBALSUM(grid,tauda_psum,tauda,ALL=.TRUE.) + + xdalbs = -dalbsnX*sumda/tauda + IF ( QCHECK ) WRITE (6,*) 'coeff. for snow alb reduction', & + xdalbs + ENDIF + ! dalbsnX not zero +#endif + + IF ( kradia<=0 ) THEN + IF ( QCHECK ) THEN + !**** Calculate mean strat water conc + STRATQ = 0. + MSTRAT = 0. + DO J = J_0, J_1 + STRJ = 0. + MSTJ = 0. + DO I = I_0, IMAXJ(J) + DO L = LTROPO(I,J) + 1, LM + STRJ = STRJ + Q(I,J,L)*MA(L,I,J)*AXYP(I,J) + MSTJ = MSTJ + MA(L,I,J)*AXYP(I,J) + ENDDO + ENDDO + IF ( J==1 .OR. J==JM ) THEN + STRJ = STRJ*IM + MSTJ = MSTJ*IM + ENDIF + STRATQ = STRATQ + STRJ + MSTRAT = MSTRAT + MSTJ + ENDDO + PRINT *, "Strat water vapour (ppmv), mass (mb)", & + 1D6*STRATQ*mair/(18.*MSTRAT), & + PMTOP + 1D-2*GRAV*MSTRAT/AREAG + ENDIF + + !**** Get the random numbers outside openMP parallel regions + !**** but keep MC calculation separate from SS clouds + !**** To get parallel consistency also with mpi, force each process + !**** to generate random numbers for all latitudes (using BURN_RANDOM) + + !**** MC clouds are considered as a block for each I,J grid point + + CALL BURN_RANDOM(NIJ_BEFORE_J0(J_0)) + + DO J = J_0, J_1 ! complete overlap + CALL BURN_RANDOM((I_0-1)) + DO I = I_0, IMAXJ(J) + RDMC(I,J) = RANDU(X) + ! 1 random number per column + ENDDO + CALL BURN_RANDOM(NIJ_AFTER_I1(I_1)) + ENDDO + + CALL BURN_RANDOM((NIJ_AFTER_J1(J_1))) + + !**** SS clouds are considered as a block for each continuous cloud + CALL BURN_RANDOM(NIJ_BEFORE_J0(j_0)*LM) + + DO J = J_0, J_1 ! semi-random overlap + CALL BURN_RANDOM((I_0-1)*LM) + DO I = I_0, IMAXJ(J) + ! reverse loop kept only for consistency with previous version + DO L = LM, 1, -1 + ! better : 1,LM + IF ( TAUSS(L,I,J)<=taulim ) CLDSS(L,I,J) = 0. + IF ( TAUMC(L,I,J)<=taulim ) CLDMC(L,I,J) = 0. + RDSS(L,I,J) = RANDU(X) + ENDDO + ENDDO + CALL BURN_RANDOM(NIJ_AFTER_I1(I_1)*LM) + ENDDO + + CALL BURN_RANDOM(NIJ_AFTER_J1(j_1)*LM) + + ENDIF ! kradia le 0 + +#if (defined ACCMIP_LIKE_DIAGS) +#ifndef SKIP_ACCMIP_GHG_RADF_DIAGS + ! because of additional updghg calls, these factors will not apply : + ! LTM : This needs to be fixed, testing equality of reals is not reliable + IF ( CO2X/=1. ) CALL STOP_MODEL('CO2x.ne.1 accmip diags',255) + IF ( N2OX/=1. ) CALL STOP_MODEL('N2Ox.ne.1 accmip diags',255) + IF ( CH4X/=1. ) CALL STOP_MODEL('CH4x.ne.1 accmip diags',255) + IF ( CFC11X/=1. ) CALL STOP_MODEL('CFC11x.ne.1 accmip diags', & + 255) + IF ( CFC12X/=1. ) CALL STOP_MODEL('CFC12x.ne.1 accmip diags', & + 255) + IF ( XGHGX/=1. ) CALL STOP_MODEL('XGHGx.ne.1 accmip diags',255) + GFrefY = 1850 + GFrefD = 182 ! ghg forcing refrnce year, day + GFnowY = JyearR + GFnowD = JdayR ! ghg current desired year, day + IF ( KJDAYG>0 ) GFnowD = KJDAYG + ! unless presribed in deck + IF ( KYEARG>0 ) GFnowY = KYEARG + ! + CALL UPDGHG(GFrefY,GFrefD) + sv_fulgas_ref(1:4) = FULGAS(nfghg(1:4)) + CALL UPDGHG(GFnowY,GFnowD) + sv_fulgas_now(1:4) = FULGAS(nfghg(1:4)) +#endif +#endif + +#if defined ( TRACERS_GC ) + + ! because of additional updghg calls, these factors will not apply : + ! LTM : This needs to be fixed, testing equality of reals is not reliable + IF ( CO2X/=1. ) CALL STOP_MODEL('CO2x.ne.1 accmip diags',255) + IF ( N2OX/=1. ) CALL STOP_MODEL('N2Ox.ne.1 accmip diags',255) + IF ( CH4X/=1. ) CALL STOP_MODEL('CH4x.ne.1 accmip diags',255) + IF ( CFC11X/=1. ) CALL STOP_MODEL('CFC11x.ne.1 accmip diags', & + 255) + IF ( CFC12X/=1. ) CALL STOP_MODEL('CFC12x.ne.1 accmip diags', & + 255) + IF ( XGHGX/=1. ) CALL STOP_MODEL('XGHGx.ne.1 accmip diags',255) + GFrefY = 1850 + GFrefD = 182 ! ghg forcing refrnce year, day + GFnowY = JyearR + GFnowD = JdayR ! ghg current desired year, day + IF ( KJDAYG>0 ) GFnowD = KJDAYG + ! unless presribed in deck + IF ( KYEARG>0 ) GFnowY = KYEARG + ! + + CALL UPDGHG(GFrefY,GFrefD) + sv_fulgas_ref(1:4) = FULGAS(nfghg(1:4)) + + CALL UPDGHG(GFnowY,GFnowD) + sv_fulgas_now(1:4) = FULGAS(nfghg(1:4)) + +#endif + + + + ! Set variables used in storing reference CO2 for uncoupled runs +#ifdef GCC_UNCOUPLE_RAD_CONCEN + IF ( KJDAYG>0 ) GCCco2nowD = KJDAYG + ! unless presribed in deck + IF ( KYEARG>0 ) GCCco2nowY = KYEARG + ! + CALL UPDGHG(1850,182) + GCCco2_fulgas_ref = FULGAS(2) + CALL UPDGHG(GCCco2nowD,GCCco2nowD) + GCCco2_fulgas_now = FULGAS(2) +#endif + +#ifdef HEALY_LM_DIAGS + FCO2 = FULGAS(2)*CO2R + FN2O = FULGAS(6)*N2OR + FCH4 = FULGAS(7)*CH4R + ! + ! write(6,*) 'RJH : GHG : CONC=', + ! * FCO2,FN2O,FCH4 + ghg_totforc = 5.35D0*LOG(FCO2/CO2I) & + + 0.036D0*(SQRT(FCH4)-SQRT(CH4I)) & + - (FE(FCH4,N2OI)-FE(CH4I,N2OI)) & + + 0.12D0*(SQRT(FN2O)-SQRT(N2OI)) & + - (FE(CH4I,FN2O)-FE(CH4I,N2OI)) + ! write(6,*) 'RJH : GHG : FORC=',ghg_totforc +#endif + + aj_alb_inds = (/J_PLAVIS,J_PLANIR,J_ALBVIS,J_ALBNIR,J_SRRVIS, & + J_SRRNIR,J_SRAVIS,J_SRANIR/) + + cfrac = 0. + wtrcld = 0. + icecld = 0. + tausumw = 0. + tausumi = 0. + ctp = 0. + ctt = 0. + swus = 0. + wtrtau = 0. + icetau = 0. +#ifdef CFMIP3_SUBDD + swut = 0. + swutcs = 0. + cfmip_twp = 0. + swdcls = 0. + swucls = 0. + swdt = 0. + cfmip_cf = 0. + cfmip_qci = 0. + cfmip_qcl = 0. +#endif +#ifdef GCAP + tauw3d = 0. + taui3d = 0. +#endif +#ifdef TRACERS_GC + save_rf = 0. + save_rf_tp = 0. + save_rf_3D = 0. + SNFS_3D_pert = 0. + TNFS_3D_pert = 0. + SNFS_3D = 0. + TNFS_3D = 0. +#endif + + !**** + !**** MAIN J LOOP + !**** + DO J = J_0, J_1 + + ! ICKERR=0 + ! JCKERR=0 + ! KCKERR=0 + + !**** + !**** MAIN I LOOP + !**** + DO I = I_0, IMAXJ(J) + !**** Radiation input files use a 72x46 grid independent of IM and JM + !**** (ilon72,jlat46) is the 4x5 box containing the center of box (i,j) + ! JLAT46=INT(1.+(J-1.)*45./(JM-1.)+.5) ! lat_index w.r.to 72x46 grid + ! JLAT46=INT(1.+(J-1.)*0.25*DLAT_DG+.5) ! slightly more general + ! ILON72=INT(.5+(I-.5)*72./IM+.5) ! lon_index w.r.to 72x46 grid + igcm = i + jgcm = j + ilon72 = 1 + INT(72D0*LON2D(i,j)/twopi) + jlat46 = 1 + INT(45D0*(LAT2D(i,j)+92D0*radian)/pi) +#ifdef ALTER_RADF_BY_LAT + FULGAS( : ) = FULGAS_orig( : )*FULGAS_lat( : ,JLAT46) + FS8OPX( : ) = FS8OPX_orig( : )*FS8OPX_lat( : ,JLAT46) + FT8OPX( : ) = FT8OPX_orig( : )*FT8OPX_lat( : ,JLAT46) +#endif + L1 = 1 ! lowest layer above ground + LMR = LM + LM_REQ ! radiation allows var. # of layers + JR = JREG(I,J) + !**** DETERMINE FRACTIONS FOR SURFACE TYPES AND COLUMN PRESSURE + PLAND = FLAND(I,J) + POICE = RSI(I,J)*(1.-PLAND) + POCEAN = (1.-PLAND) - POICE + PLAKE = FLAKE(I,J) + PLICE = FLICE(I,J) + PEARTH = FEARTH(I,J) + ptype4(1) = pocean + ! open ocean and open lake + ptype4(2) = poice + ! ocean/lake ice + ptype4(3) = plice + ! glacial ice + ptype4(4) = pearth + ! non glacial ice covered soil + + !**** CHECK SURFACE TEMPERATURES + DO IT = 1, 4 + IF ( ptype4(IT)>0. ) THEN + !CC STOP 'In Radia : Grnd Temp out of range' + ! ICKERR=ICKERR+1 + IF ( INT(ASFLX4(it)%GTEMPR(I,J))=planck_tmax ) & + WRITE (6,*) 'In Radia : Time,I,J,IT,TG1', & + ITime, I, J, IT, ASFLX4(it) & + %GTEMPR(I,J) + ENDIF + ENDDO + + !**** Set Chlorophyll concentration + IF ( POCEAN>0 ) THEN + IF ( (chl_from_seawifs>0 .OR. chl_from_obio>0) .AND. & + atmocn%CHL_DEFINED ) THEN + LOC_CHL = atmocn%CHL(I,J) + IF ( ij_chl>0 ) AIJ(I,J,IJ_CHL) = AIJ(I,J,IJ_CHL) & + + atmocn%CHL(I,J)*FOCEAN(I,J) + ! write(*,'(a,3i5,e12.4)')'RAD_DRV : ', + ! . itime,i,j,chl(i,j) + ELSE + LOC_CHL = -1.D30 + ENDIF + ENDIF + + LS1_loc = LTROPO(I,J) + 1 + ! define stratosphere for radiation + !**** kradia>1 : adjusted forcing, i.e. T adjusts in L=LS1_loc->LM+3 + IF ( kradia>1 ) LS1_loc = LS1_loc + 2 - kradia + ! favorite : kradia=3 + IF ( kradia>3 ) LS1_loc = 1 ! favorite : kradia=3 + kdeliq = 0 + ! initialize mainly for L>LM + IF ( kradia>0 ) THEN + ! rad forcing model + DO l = 1, lm + TLM(l) = T(i,j,l)*PK(l,i,j) + SHL(l) = QR(l,i,j) + IF ( SHL(l)<0 ) SHL(l) = 0 + TAUWC(l) = cldx*CLDinfo(l,1,i,j) + TAUIC(l) = cldx*CLDinfo(l,2,i,j) + SIZEWC(L) = CLDinfo(l,3,i,j) + SIZEIC(L) = SIZEWC(L) + ENDDO + ELSE ! full model + !**** + !**** DETERMINE CLOUDS (AND THEIR OPTICAL DEPTHS) SEEN BY RADIATION + !**** + CSS = 0. + CMC = 0. + CLDCV = 0. + DEPTH = 0. + OPTDW = 0. + OPTDI = 0. + ! LTM : Fix, testing equality of reals is not reliable. + IF ( cc_cdncx/=0. .OR. od_cdncx/=0. ) THEN + CALL DCDNC_EST(i,j,pland,dCDNC) + ELSE + dCDNC = 0. + ENDIF + dCC_CDNCL = CC_cdncx*dCDNC*CDNCL + dOD_CDNCL = OD_cdncx*dCDNC*CDNCL + + !**** Adjust RDSS for semi-random overlap + CALL GET_CLD_OVERLAP(lm,CLDSS( : ,i,j), & + RANDSS=rdss( : ,i,j)) + + DO L = 1, LM + IF ( Q(i,j,l)<0 ) THEN + WRITE (6,*) 'In Radia : Time,I,J,L,Q<0', ITime, & + I, J, L, Q, '->0' + Q(I,J,L) = 0. + ENDIF + QSS = Q(I,J,L)/(RHSAV(L,I,J)+1.D-20) + SHL(L) = QSS + IF ( FSS(L,I,J)*CLDSAV(L,I,J)<1. ) SHL(L) & + = (Q(I,J,L)-QSS*FSS(L,I,J)*CLDSAV(L,I,J)) & + /(1.-FSS(L,I,J)*CLDSAV(L,I,J)) + TLM(L) = T(I,J,L)*PK(L,I,J) + rhodz = PDSIG(l,i,j)*100/grav + TAUSSL = 0. + TAUSSLIP = 0. + TAUMCL = 0. + TAUWC(L) = 0. + TAUIC(L) = 0. + SIZEWC(L) = 0. + SIZEIC(L) = 0. + TOTCLD(L) = 0. + SS_CLD(L) = 0. + !**** Determine large scale and moist convective cloud cover for radia + IF ( CLDSS(L,I,J)*(1.+dcc_cdncl(l))>RDSS(L,I,J) ) & + THEN + TAUSSL = TAUSS(L,I,J)*(1.+dod_cdncl(l)) + ! tausslip is tau of ice precip in a supercooled water cloud + TAUSSLIP = TAUSSIP(L,I,J)*(1.+dod_cdncl(l)) + SHL(L) = QSS + CSS = 1. + CALL INC_AJL(i,j,l,jl_sscld,css) +#ifdef CFMIP3_SUBDD + ! LS Cloud + cfmip_cf(i,j,l) = cfmip_cf(i,j,l) + 1. +#endif + ENDIF + IF ( CLDMC(L,I,J)>RDMC(I,J) ) THEN + CMC = 1. + CALL INC_AJL(i,j,l,jl_mccld,cmc) +#ifdef CFMIP3_SUBDD + ! MC Cloud + cfmip_cf(i,j,l) = MIN(cfmip_cf(i,j,l)+1.,1.) +#endif + DEPTH = DEPTH + PDSIG(L,I,J) + IF ( TAUMC(L,I,J)>TAUSSL+TAUSSLIP ) THEN + TAUMCL = TAUMC(L,I,J) + ELHX = LHE + IF ( TLM(L)<=TF ) ELHX = LHS + SHL(L) = QSAT(TLM(L),ELHX,PMID(L,I,J)) + ENDIF + ENDIF + IF ( TAUSSL+TAUSSLIP+TAUMCL>0. ) THEN + CLDCV = 1. + TOTCLD(L) = 1. + CALL INC_AJL(i,j,l,jl_totcld,1D0) + !**** save 3D cloud fraction as seen by radiation + IF ( cldx>0 ) AIJL(I,J,L,IJL_CF) & + = AIJL(I,J,L,IJL_CF) + 1. + IF ( TAUMCL>TAUSSL+TAUSSLIP ) THEN + SIZEWC(L) = CSIZMC(L,I,J) + SIZEIC(L) = CSIZMC(L,I,J) + IF ( SVLAT(L,I,J)==LHE ) THEN + TAUWC(L) = cldx*TAUMCL + OPTDW = OPTDW + TAUWC(L) +#ifdef GCAP + TAUW3D(I,J,L) = TAUW3D(I,J,L) + TAUMCL + ! in-cloud vs. in-cell TAUWC(L) +#endif + CALL INC_AJL(i,j,l,jl_wcld,1D0) + CALL INC_AJL(i,j,l,jl_wcldwt,PDSIG(l,i,j)) + AIJ(i,j,ij_lwprad) = AIJ(i,j,ij_lwprad) & + + QLMC(l,i,j)*rhodz/CLDMC(l,i,j) + AIJL(i,j,l,ijl_QLrad) & + = AIJL(i,j,l,ijl_QLrad) + QLMC(l,i,j) & + *PDSIG(l,i,j)/CLDMC(l,i,j) +#ifdef CFMIP3_SUBDD + ! MC Cloud Liquid + cfmip_twp(i,j) = cfmip_twp(i,j) & + + QLMC(l,i,j)*rhodz/CLDMC(l,i,j) + cfmip_qcl(i,j,l) = QLMC(l,i,j) & + /CLDMC(l,i,j) +#endif + ELSE + TAUIC(L) = cldx*TAUMCL + OPTDI = OPTDI + TAUIC(L) +#ifdef GCAP + TAUI3D(I,J,L) = TAUI3D(I,J,L) + TAUMCL + ! in-cloud vs. in-cell TAUIC(L) +#endif + CALL INC_AJL(i,j,l,jl_icld,1D0) + CALL INC_AJL(i,j,l,jl_icldwt,PDSIG(l,i,j)) + AIJ(i,j,ij_iwprad) = AIJ(i,j,ij_iwprad) & + + QIMC(l,i,j)*rhodz/CLDMC(l,i,j) + AIJL(i,j,l,ijl_QIrad) & + = AIJL(i,j,l,ijl_QIrad) + QIMC(l,i,j) & + *PDSIG(l,i,j)/CLDMC(l,i,j) +#ifdef CFMIP3_SUBDD + ! MC Cloud Ice + cfmip_twp(i,j) = cfmip_twp(i,j) & + + QIMC(l,i,j)*rhodz/CLDMC(l,i,j) + cfmip_qci(i,j,l) = QIMC(l,i,j) & + /CLDMC(l,i,j) +#endif + ENDIF + ELSE + SS_CLD(L) = 1. + SIZEWC(L) = CSIZSS(L,I,J) + SIZEIC(L) = CSIZSS(L,I,J) + IF ( SVLHX(L,I,J)==LHE ) THEN + TAUWC(L) = cldx*TAUSSL + OPTDW = OPTDW + TAUWC(L) +#ifdef GCAP + TAUW3D(I,J,L) = TAUW3D(I,J,L) + TAUSSL + ! in-cloud vs. in-cell TAUWC(L) +#endif + CALL INC_AJL(i,j,l,jl_wcld,1D0) + CALL INC_AJL(i,j,l,jl_wcldwt,PDSIG(l,i,j)) + AIJ(i,j,ij_lwprad) = AIJ(i,j,ij_lwprad) & + + QLSS(l,i,j)*rhodz/CLDSS(l,i,j) + AIJL(i,j,l,ijl_QLrad) & + = AIJL(i,j,l,ijl_QLrad) + QLSS(l,i,j) & + *PDSIG(l,i,j)/CLDSS(l,i,j) +#ifdef CFMIP3_SUBDD + ! LS Cloud Liquid + cfmip_twp(i,j) = cfmip_twp(i,j) & + + QLSS(l,i,j)*rhodz/CLDSS(l,i,j) + cfmip_qcl(i,j,l) = QLSS(l,i,j) & + /CLDSS(l,i,j) +#endif + IF ( tausslip>0. ) THEN + SIZEIC(L) = CSIZSSIP(L,I,J) + TAUIC(L) = cldx*TAUSSLIP + OPTDI = OPTDI + TAUIC(L) +#ifdef GCAP + TAUI3D(I,J,L) = TAUI3D(I,J,L) & + + TAUSSLIP ! in-cloud vs. in-cell TAUIC(L) +#endif + CALL INC_AJL(i,j,l,jl_icld,1D0) + CALL INC_AJL(i,j,l,jl_icldwt, & + PDSIG(l,i,j)) + AIJ(i,j,ij_iwprad) = AIJ(i,j,ij_iwprad)& + + QISS(l,i,j)*rhodz/CLDSS(l,i,j) + AIJL(i,j,l,ijl_QIrad) & + = AIJL(i,j,l,ijl_QIrad) & + + QISS(l,i,j)*PDSIG(l,i,j) & + /CLDSS(l,i,j) +#ifdef CFMIP3_SUBDD + ! LS Snow in supercooled liquid + cfmip_twp(i,j) = cfmip_twp(i,j) & + + QISS(l,i,j)*rhodz/CLDSS(l,i,j) +#endif + ENDIF + ELSE + TAUIC(L) = cldx*TAUSSL + OPTDI = OPTDI + TAUIC(L) +#ifdef GCAP + TAUI3D(I,J,L) = TAUI3D(I,J,L) + TAUSSL + ! in-cloud vs. in-cell TAUIC(L) +#endif + CALL INC_AJL(i,j,l,jl_icld,1D0) + CALL INC_AJL(i,j,l,jl_icldwt,PDSIG(l,i,j)) + AIJ(i,j,ij_iwprad) = AIJ(i,j,ij_iwprad) & + + QISS(l,i,j)*rhodz/CLDSS(l,i,j) + AIJL(i,j,l,ijl_QIrad) & + = AIJL(i,j,l,ijl_QIrad) + QISS(l,i,j) & + *PDSIG(l,i,j)/CLDSS(l,i,j) +#ifdef CFMIP3_SUBDD + ! LS Cloud Ice + cfmip_twp(i,j) = cfmip_twp(i,j) & + + QISS(l,i,j)*rhodz/CLDSS(l,i,j) + cfmip_qci(i,j,l) = QISS(l,i,j) & + /CLDSS(l,i,j) +#endif + ENDIF + ENDIF + CALL INC_AJL(i,j,l,jl_wcod,TAUWC(l)) + CALL INC_AJL(i,j,l,jl_icod,TAUIC(l)) + CALL INC_AJL(i,j,l,jl_wcsiz,SIZEWC(l)*TAUWC(l)) + CALL INC_AJL(i,j,l,jl_icsiz,SIZEIC(l)*TAUIC(l)) + AIJL(i,j,l,ijl_wtrtau) = AIJL(i,j,l,ijl_wtrtau) & + + TAUWC(l) + AIJL(i,j,l,ijl_icetau) = AIJL(i,j,l,ijl_icetau) & + + TAUIC(l) + wtrtau(i,j,l) = TAUWC(l) + icetau(i,j,l) = TAUIC(l) + ENDIF + !**** save some radiation/cloud fields for wider use + RCLD(L,I,J) = TAUWC(L) + TAUIC(L) + ENDDO + CFRAC(I,J) = CLDCV + ! cloud fraction consistent with radiation + !**** effective cloud cover diagnostics + OPNSKY = 1. - CLDCV + DO IT = 1, NTYPE + CALL INC_AJ(i,j,it,J_PCLDSS,CSS*FTYPE(IT,I,J)) + CALL INC_AJ(i,j,it,J_PCLDMC,CMC*FTYPE(IT,I,J)) + CALL INC_AJ(i,j,it,J_CLDDEP,DEPTH*FTYPE(IT,I,J)) + CALL INC_AJ(i,j,it,J_PCLD,CLDCV*FTYPE(IT,I,J)) + ENDDO + CALL INC_AREG(i,j,jr,J_PCLDSS,CSS) + CALL INC_AREG(i,j,jr,J_PCLDMC,CMC) + CALL INC_AREG(i,j,jr,J_CLDDEP,DEPTH) + CALL INC_AREG(i,j,jr,J_PCLD,CLDCV) + AIJ(I,J,IJ_PMCCLD) = AIJ(I,J,IJ_PMCCLD) + CMC + AIJ(I,J,IJ_CLDCV) = AIJ(I,J,IJ_CLDCV) + CLDCV + DO L = 1, LLOW + ! LTM : Fix, testing equality of reals is not reliable + IF ( TOTCLD(L)/=1. ) CYCLE + AIJ(I,J,IJ_PCLDL) = AIJ(I,J,IJ_PCLDL) + 1. + EXIT + ENDDO + DO L = LLOW + 1, LMID + ! LTM : Fix, testing equality of reals is not reliable + IF ( TOTCLD(L)/=1. ) CYCLE + AIJ(I,J,IJ_PCLDM) = AIJ(I,J,IJ_PCLDM) + 1. + EXIT + ENDDO + DO L = LMID + 1, LHI + ! LTM : Fix, testing equality of reals is not reliable + IF ( TOTCLD(L)/=1. ) CYCLE + AIJ(I,J,IJ_PCLDH) = AIJ(I,J,IJ_PCLDH) + 1. + EXIT + ENDDO + DO L = 1, LLOW + ! LTM : Fix, testing equality of reals is not reliable + IF ( SS_CLD(L)/=1. ) CYCLE + AIJ(I,J,IJ_PCLDL_SS) = AIJ(I,J,IJ_PCLDL_SS) + 1. + EXIT + ENDDO + + TAUSUMW(I,J) = OPTDW + TAUSUMI(I,J) = OPTDI + IF ( optdw>0. ) THEN + AIJ(I,J,IJ_optdw) = AIJ(I,J,IJ_optdw) + optdw + AIJ(I,J,IJ_wtrcld) = AIJ(I,J,IJ_wtrcld) + 1. + WTRCLD(I,J) = 1. + ENDIF + IF ( optdi>0. ) THEN + AIJ(I,J,IJ_optdi) = AIJ(I,J,IJ_optdi) + optdi + AIJ(I,J,IJ_icecld) = AIJ(I,J,IJ_icecld) + 1. + ICECLD(I,J) = 1. + ENDIF + + DO KR = 1, NDIUPT + IF ( I==IJDD(1,KR) .AND. J==IJDD(2,KR) ) THEN + !**** Warning : this replication may give inaccurate results for hours + !**** 1->(NRAD-1)*DTsrc (ADIURN) or skip them (HDIURN) + TMP(IDD_CL7 : IDD_CL7+6) = TOTCLD(1 : 7) + TMP(IDD_CCV) = CLDCV + DO INCH = 1, NRAD + IHM = 1 + (JTIME+INCH-1)*HR_IN_DAY/NDAY + IH = IHM + IF ( IH>HR_IN_DAY ) IH = IH - HR_IN_DAY + ADIURN(IDX( : ),KR,IH) = ADIURN(IDX( : ),KR,IH) & + + TMP(IDX( : )) +#ifdef USE_HDIURN + IHM = IHM + (DATE-1)*HR_IN_DAY + IF ( IHM<=HR_IN_MONTH ) HDIURN(IDX( : ),KR,IHM)& + = HDIURN(IDX( : ),KR,IHM) + TMP(IDX( : )) +#endif + ENDDO + ENDIF + ENDDO + ENDIF + ! kradia le 0 (full model) + !**** + !**** SET UP VERTICAL ARRAYS OMITTING THE I AND J INDICES + !**** + !**** EVEN PRESSURES +#ifdef TRACERS_TOMAS + aesqex( : , : , : ) = 0.0 + aesqsc( : , : , : ) = 0.0 + aesqcb( : , : , : ) = 0.0 + aesqex_dry( : , : , : ) = 0.0 + aesqsc_dry( : , : , : ) = 0.0 + aesqcb_dry( : , : , : ) = 0.0 +#endif + PLB(LM+1) = PEDN(LM+1,I,J) + DO L = 1, LM + PLB(L) = PEDN(L,I,J) + !**** TEMPERATURES + !---- TLm(L)=T(I,J,L)*PK(L,I,J) ! already defined + IF ( INT(TLM(L))=planck_tmax ) THEN + WRITE (6,*) 'In Radia : Time,I,J,L,TL', ITime, I, J,& + L, TLM(L) + WRITE (6,*) 'GTEMPR : ', ASFLX4(1)%GTEMPR(I,J), & + ASFLX4(2)%GTEMPR(I,J), ASFLX4(3) & + %GTEMPR(I,J), ASFLX4(4)%GTEMPR(I,J) + !CC STOP 'In Radia : Temperature out of range' + ! ICKERR=ICKERR+1 + ENDIF + !**** MOISTURE VARIABLES + !---- shl(L)=Q(I,J,L) ! already defined and reset to 0 if <0 + ! if(shl(l).lt.0.) then + ! WRITE(0,*)'In Radia : Time,I,J,L,QL<0',ITime,I,J,L,shl(L),'->0' + ! KCKERR=KCKERR+1 + ! shl(l)=0. + ! end if + RHL(L) = SHL(L)/QSAT(TLM(L),LHE,PMID(L,I,J)) + IF ( RHfix>=0. ) RHL(L) = RHfix + !**** Extra aerosol data + !**** For up to nraero_aod aerosols, define the aerosol amount to + !**** be used (kg/m^2) + !**** Only define TRACER if individual tracer is actually defined. +#if (defined TRACERS_AEROSOLS_Koch) || (defined TRACERS_DUST) ||\ + (defined TRACERS_MINERALS) || (defined TRACERS_AEROSOLS_SEASALT) + !**** loop over tracers that are passed to radiation. + !**** Some special cases for black carbon, organic carbon, SOAs where + !**** more than one tracer is lumped together for radiation purposes + DO n = 1, nraero_aod + SELECT CASE (TRNAME(NTRIX_AOD(n))) + CASE ("OCIA","vbsAm2") +#ifdef TRACERS_AEROSOLS_VBS + TRACER(L,n) = SUM(TRM(i,j,l,vbs_tr%IAER)) +#else + TRACER(L,n) = TRM(i,j,l,n_OCII) & + + TRM(i,j,l,n_OCIA) +#endif /* TRACERS_AEROSOLS_VBS */ +#ifdef TRACERS_AEROSOLS_OCEAN + TRACER(L,n) = TRACER(L,n) + TRM(i,j,l,n_ococean) +#endif /* TRACERS_AEROSOLS_OCEAN */ + TRACER(L,n) = TRACER(L,n)*BYAXYP(I,J) + CASE ("OCB") +#ifdef TRACERS_AEROSOLS_VBS + TRACER(L,n) = 0.D0 +#else + TRACER(L,n) = TRM(i,j,l,n_OCB)*BYAXYP(I,J) +#endif /* TRACERS_AEROSOLS_VBS */ +#ifdef TRACERS_AEROSOLS_SOA + CASE ("isopp1a") + TRACER(L,n) = TRM(i,j,l,n_isopp1a) & + + TRM(i,j,l,n_isopp2a) +#ifdef TRACERS_TERP + TRACER(L,n) = TRACER(L,n) + TRM(i,j,l,n_apinp1a)& + + TRM(i,j,l,n_apinp2a) +#endif /* TRACERS_TERP */ + TRACER(L,n) = TRACER(L,n)*BYAXYP(I,J) +#endif /* TRACERS_AEROSOLS_SOA */ + CASE ("BCIA") + TRACER(L,n) = (TRM(i,j,l,n_BCII)+TRM(i,j,l, & + n_BCIA))*BYAXYP(I,J) + CASE DEFAULT +#ifdef TRACERS_NITRATE + ! assume full neutralization of NO3p, if NH4 suffice + SELECT CASE (TRNAME(NTRIX_AOD(n))) + CASE ("NO3p") + IF ( TRM(i,j,l,NTRIX_AOD(n))>0.D0 ) THEN + nh4_on_no3 = MIN(TRM(i,j,l,n_NO3p) & + *(TR_MM(n_NO3p)+TR_MM(n_NH4)) & + /TR_MM(n_NO3p)-TRM(i,j,l,n_NO3p), & + TRM(i,j,l,n_NH4)) + WTTR(n) = (nh4_on_no3+TRM(i,j,l,NTRIX_AOD(& + n)))/TRM(i,j,l,NTRIX_AOD(n)) + ENDIF + CASE ("SO4") + IF ( TRM(i,j,l,NTRIX_AOD(n))>0.D0 ) THEN + nh4_on_no3 = MIN(TRM(i,j,l,n_NO3p) & + *(TR_MM(n_NO3p)+TR_MM(n_NH4)) & + /TR_MM(n_NO3p)-TRM(i,j,l,n_NO3p), & + TRM(i,j,l,n_NH4)) + WTTR(n) = (TRM(i,j,l,n_NH4)-nh4_on_no3+TRM& + (i,j,l,NTRIX_AOD(n))) & + /TRM(i,j,l,NTRIX_AOD(n)) + ENDIF + ENDSELECT +#endif + TRACER(L,n) = WTTR(n)*TRM(i,j,l,NTRIX_AOD(n)) & + *BYAXYP(I,J) + ENDSELECT + ENDDO +#endif /* TRACERS_AEROSOLS_Koch/DUST/MINERALS/SEASALT */ + +#ifdef TRACERS_AMP + CALL SETAMP_LEV(i,j,l) +#endif +#ifdef TRACERS_TOMAS + CALL SETTOMAS_LEV(i,j,l) +#endif + ENDDO + !**** Radiative Equilibrium Layer data + DO K = 1, LM_REQ + !CC STOP 'In Radia : RQT out of range' + ! JCKERR=JCKERR+1 + IF ( INT(RQT(K,I,J))=planck_tmax ) WRITE (6,*) & + 'In RADIA : Time,I,J,L,TL', ITime, I, J, LM + K, & + RQT(K,I,J) + TLM(LM+K) = RQT(K,I,J) + PLB(LM+k+1) = PLB0(k) + SHL(LM+k) = SHL0(k) + RHL(LM+k) = SHL(LM+k) & + /QSAT(TLM(LM+k),LHE,.5D0*(PLB(LM+k) & + +PLB(LM+k+1))) + TAUWC(LM+k) = 0. + TAUIC(LM+k) = 0. + SIZEWC(LM+k) = 0. + SIZEIC(LM+k) = 0. +#ifdef TRACERS_ON + !**** set radiative equilibrium extra tracer amount to zero + IF ( nraero_aod>0 ) TRACER(LM+k,1 : nraero_aod) = 0. +#endif + ENDDO + IF ( kradia>1 ) THEN + DO l = 1, lm + lm_req + TLM(l) = TLM(l) + TCHG(l,i,j) + AFLX_ST(L,I,J,5) = AFLX_ST(L,I,J,5) + TCHG(L,I,J) + ENDDO + ENDIF + !**** Zenith angle and GROUND/SURFACE parameters + COSZ = COSZA(I,J) + TGO = atmocn%GTEMPR(I,J) + TGOI = atmice%GTEMPR(I,J) + TGLI = atmgla%GTEMPR(I,J) + TGE = atmlnd%GTEMPR(I,J) + TSL = atmsrf%TSAVG(I,J) + SNOWOI = SNOWI(I,J) + SNOWLI = atmgla%SNOW(I,J) + !SNOWE=atmlnd%SNOWE(I,J) ! snow depth (kg/m**2) + SNOWD( : ) = snowd_ij( : ,I,J) + snow_frac( : ) = atmlnd%FR_SNOW_RAD( : ,i,j) + ! snow cover (1) + AGESN(1) = SNOAGE(3,I,J) + ! land ! ? why are these numbers + AGESN(2) = SNOAGE(1,I,J) + ! ocean ice so confusing ? + AGESN(3) = SNOAGE(2,I,J) + ! land ice + ! print*,"snowage",i,j,SNOAGE(1,I,J) + !**** set up parameters for new sea ice and snow albedo + zsnwoi = atmice%ZSNOWI(I,J) + ! LTM : Fix, testing equality of reals is not reliable + IF ( dalbsnX/=0. ) THEN +#ifdef OLD_BCdalbsn + dALBsn = xdalbs*DEPOBC(i,j) +#else + dALBsn = dalbsnX*BCDALBSN(i,j) +#endif + ELSE + dALBsn = 0. + ENDIF + + ! to use on-line tracer albedo impact, set dALBsnX=0. in rundeck +#ifdef BC_ALB + CALL GET_BC_DALBEDO(i,j,dALBsn1,bc_snow_present(i,j)) + IF ( rad_interact_aer>0 ) dALBsn = dALBsn1 + dALBsnBC(I,J) = dALBsn1 +#endif /* BC_ALB */ + IF ( poice>0. ) THEN + zoice = ZSI(i,j) + flags = flag_dsws(i,j) + IF ( kradia<=0 ) THEN + fmp = MIN(1.6D0*SQRT(pond_melt(i,j)/rhow),1D0) + AIJ(I,J,IJ_FRMP) = AIJ(I,J,IJ_FRMP) + fmp*POICE + ELSE + fmp = fmp_com(i,j) + ENDIF + zmp = MIN(0.8D0*fmp,0.9D0*zoice) + ELSE + zoice = 0. + flags = .FALSE. + fmp = 0. + zmp = 0. + ENDIF + !**** set up new lake depth parameter to incr. albedo for shallow lakes + ! zlake=0. + ! if (plake.gt.0) then + ! zlake = MWL(I,J)/(RHOW*PLAKE*AXYP(I,J)) + ! end if + zlake = dlake(i,j) + !**** + IF ( kradia<=0 ) THEN + !WEARTH=(WEARTH_COM(I,J)+AIEARTH(I,J))/(WFCS(I,J)+1.D-20) + WEARTH = atmlnd%BARE_SOIL_WETNESS(i,j) + IF ( wearth>1. ) wearth = 1. + ELSE ! rad.frc. model + wearth = wsoil(i,j) + ENDIF + IF ( FEARTH(i,j)>0.D0 ) THEN + CALL ENT_GET_EXPORTS(ENTCELLS(i,j), & + VEGETATION_FRACTIONS=PVT0, & + VEGETATION_HEIGHTS=HVT0) + CALL MAP_ENT2GISS(PVT0,HVT0,PVT) + !temp hack : ent pfts->giss veg + ELSE + PVT( : ) = 0.D0 + ! actually PVT is not supposed to be used in this case + ENDIF + WMAG = atmsrf%WSAVG(I,J) + !**** + !**** Radiative interaction and forcing diagnostics : + !**** If no radiatively active tracers are defined, nothing changes. + !**** Currently this works for aerosols and ozone but should be extended + !**** to cope with all trace gases. + !**** + FTAUC = 1. + ! deflt (clouds on) + use_tracer_chem(:) = 0 + ! by default use climatological ozone/ch4/co2 + !**** Set level for inst. rad. forc. calcs for aerosols/trace gases + !**** This is set from the rundeck. + LFRC = LM + LM_REQ + 1 + ! TOA + IF ( rad_forc_lev>0 ) LFRC = LTROPO(I,J) + ! TROPOPAUSE +#ifdef ACCMIP_LIKE_DIAGS + IF ( rad_forc_lev>0 ) CALL STOP_MODEL( & + &'ACCMIP_LIKE_DIAGS desires TOA RADF diags',255) +#endif + !**** The calculation of the forcing is slightly different. + !**** depending on whether full radiative interaction is turned on + !**** or not. + onoff_aer = 0 + onoff_chem = 0 + IF ( rad_interact_aer > 0 ) onoff_aer = 1 + IF ( clim_interact_chem > 0 ) onoff_chem = 1 + use_o3_ref = 0 + +#ifdef TRACERS_GC + + IF ( SUM( TrM(I,J,1:LM,i_CH4) ) .lt. 1d-20 ) THEN + ! If methane is not initialized yet assume 1.5 ppmv everywhere + CHEM_IN(2,1:LM) = MA(1:LM,I,J) * 1.5e-6 * 16.04 / 28.97 + ELSE + !IF ( i_CH4 > 0 ) + IF ( Am_I_Root() .and. I .eq. 1 .and. J .eq. 1 ) & + WRITE(6,*) 'Updating methane in radiation code...' + CHEM_IN(2,1:LM) = TrM(I,J,1:LM,i_CH4) * BYAXYP(I,J) + ENDIF + + IF ( SUM( TrM(I,J,1:LM,i_O3) ) .lt. 1d-20 ) THEN + ! If ozone is not initialized yet assume 5 ppmv everywhere + CHEM_IN(1,1:LM) = MA(1:LM,I,J) * 5.0e-6 * 47.997 / 28.97 + ELSE + !IF ( i_O3 > 0 ) + IF ( Am_I_Root() .and. I .eq. 1 .and. J .eq. 1 ) & + WRITE(6,*) 'Updating ozone in radiation code...' + CHEM_IN(1,1:LM) = TrM(I,J,1:LM, i_O3) * BYAXYP(I,J) + ENDIF + + IF ( clim_interact_chem > 0 ) THEN + use_tracer_chem(1) = LM ! Lmax_rad_O3 ! O3 + use_tracer_chem(2) = LM ! Lmax_rad_CH4 ! CH4 + ENDIF +#endif + +#ifdef TRACERS_SPECIAL_Shindell + !**** Ozone and Methane : + CHEM_IN(1,1:LM) = chem_tracer_save(1,1:LM, I,J) + CHEM_IN(2,1:LM) = chem_tracer_save(2,1:LM, I,J) & + *CH4X_RADoverCHEM + IF ( clim_interact_chem>0 ) THEN + use_tracer_chem(1) = Lmax_rad_O3 + ! O3 + use_tracer_chem(2) = Lmax_rad_CH4 + ! CH4 + ENDIF +#if (defined SHINDELL_STRAT_EXTRA) &(defined ACCMIP_LIKE_DIAGS) + IF ( clim_interact_chem<=0 ) CALL STOP_MODEL( & + &"stratOx RADF on, clim_interact_chem<=0",255) +#endif /* SHINDELL_STRAT_EXTRA &ACCMIP_LIKE_DIAGS */ +#endif /* TRACERS_SPECIAL_Shindell */ + + !**** CO2 + ! Update GCCco2_IN and GCCco2_tracer_save with trm to pass on CO2 + ! information to RADIATION +#ifdef GCC_COUPLE_RAD + DO L = 1, LM + GCCCO2_TRACER_SAVE(L,i,j) = (TRM(i,j,L,n_CO2n)) & + *BYAXYP(i,j)*avog/(TR_MM(n_CO2n)*2.69E20) + ENDDO + GCCco2_IN(1:LM) = GCCCO2_TRACER_SAVE(1:LM, I,J)*CO2X + use_tracer_GCCco2 = Lmax_rad_CO2 + ! CO2 +#endif /* GCC_COUPLE_RAD */ + + IF ( moddrf==0 ) THEN +#if (defined TRACERS_AEROSOLS_Koch) || (defined TRACERS_DUST) ||\ + (defined TRACERS_MINERALS) || (defined TRACERS_AEROSOLS_SEASALT) ||\ + (defined TRACERS_AMP) || (defined TRACERS_TOMAS) + !**** Aerosols (OMA, MATRIX, TOMAS) : + DO n = 1, nraero_rf + IF ( TRNAME(NTRIX_RF(n))=="seasalt2" ) CYCLE + ! not for seasalt2 + IF ( diag_fc==2 ) THEN + FSTOPX(n) = 1 - onoff_aer + !turns off online tracer + FTTOPX(n) = 1 - onoff_aer + ! + !**** Warning : small bit of hardcoding assumes that seasalt2 immediately + !**** succeeds seasalt1 in nraero_rf array + IF ( TRNAME(NTRIX_RF(n))=="seasalt1" ) THEN + !add seasalt2 + FSTOPX(n+1) = 1 - onoff_aer + FTTOPX(n+1) = 1 - onoff_aer !to seasalt1 + ENDIF + ELSEIF ( diag_fc==1 ) THEN + FSTOPX(1 : nraero_aod) = 1 - onoff_aer + !turns off online tracer + FTTOPX(1 : nraero_aod) = 1 - onoff_aer + ! + ENDIF +#if (defined TRACERS_AEROSOLS_Koch) || (defined TRACERS_DUST) ||\ + (defined TRACERS_MINERALS) || (defined TRACERS_AEROSOLS_SEASALT) + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) +#endif + CALL RCOMPX + ! tr.aero.Koch/dust/miner./seasalt + SNFST(1,n,I,J) = SRNFLB(1) + ! surface forcing + TNFST(1,n,I,J) = TRNFLB(1) + SNFST(2,n,I,J) = SRNFLB(LFRC) + ! Tropopause forcing + TNFST(2,n,I,J) = TRNFLB(LFRC) + IF ( diag_fc==2 ) THEN + FSTOPX(n) = onoff_aer + !turns on online tracer + FTTOPX(n) = onoff_aer + ! + IF ( TRNAME(NTRIX_RF(n))=="seasalt1" ) THEN + ! also for seasalt2 + FSTOPX(n+1) = onoff_aer + FTTOPX(n+1) = onoff_aer + ENDIF + ELSEIF ( diag_fc==1 ) THEN + FSTOPX(1 : nraero_aod) = onoff_aer + !turns on online tracer + FTTOPX(1 : nraero_aod) = onoff_aer + ! + ENDIF + ENDDO +#endif + +#ifdef TRACERS_GC + ! Get flux values minus ozone at various heights + ! Use constant reference year for first call as with Shindell tracers + !use_o3_ref = 1 + ! Do not use constant reference year + use_o3_ref = 0 + use_tracer_chem(1) = 0 + kdeliq( 1:LM, 1:4 ) = kliq( 1:LM, 1:4, i, j ) + CALL RCOMPX + ! Meteorological tropopause + SNFST_o3ref(1,I,J) = SRNFLB(LTROPO(I,J)) + TNFST_o3ref(1,I,J) = TRNFLB(LTROPO(I,J)) + ! Top of the atmosphere + SNFST_o3ref(2,I,J) = SRNFLB(LM+LM_REQ+1) + TNFST_o3ref(2,I,J) = TRNFLB(LM+LM_REQ+1) + ! Whole atmosphere + SNFS_3D_pert(I,J,:,5) = SRNFLB + TNFS_3D_pert(I,J,:,5) = TRNFLB + + use_o3_ref = 0 + use_tracer_chem(1) = onoff_chem * LM !Lmax_rad_O3 + + IF ( SUM( TrM(I,J,1:LM,i_CH4) ) .lt. 1d-20 ) THEN + ! If methane is not initialized yet assume 1.5 ppmv everywhere + CHEM_IN(2,1:LM) = MA(1:LM,I,J) * 1.5e-6 * 16.04 / 28.97 + ELSE + !IF ( i_CH4 > 0 ) + CHEM_IN(2,1:LM) = TrM(I,J,1:LM,i_CH4) * BYAXYP(I,J) + ENDIF + + IF ( SUM( TrM(I,J,1:LM,i_O3) ) .lt. 1d-20 ) THEN + ! If ozone is not initialized yet assume 5 ppmv everywhere + CHEM_IN(1,1:LM) = MA(1:LM,I,J) * 5.0e-6 * 47.997 / 28.97 + ELSE + !IF ( i_O3 > 0 ) + CHEM_IN(1,1:LM) = TrM(I,J,1:LM, i_O3) * BYAXYP(I,J) + ENDIF + +#endif + +#ifdef TRACERS_SPECIAL_Shindell + !**** Ozone : + ! ozone rad forcing diags now use a constant reference year + ! for this first call. And no tracer values... + use_o3_ref = 1 + use_tracer_chem(1) = 0 + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + CALL RCOMPX + ! tr_Shindell Ox tracer + SNFST_o3ref(1,I,J) = SRNFLB(LTROPO(I,J)) + ! meteorological tropopause + TNFST_o3ref(1,I,J) = TRNFLB(LTROPO(I,J)) + SNFST_o3ref(2,I,J) = SRNFLB(LM+LM_REQ+1) + ! T.O.A. + TNFST_o3ref(2,I,J) = TRNFLB(LM+LM_REQ+1) + SNFST_o3ref(5,I,J) = SRNFLB(LS1-1) + ! fixed tropopause + TNFST_o3ref(5,I,J) = TRNFLB(LS1-1) + +#ifdef AUXILIARY_OX_RADF + ! if needed, also save the auxiliary ozone field (i.e. climatology + ! if tracer is used in final call, tracers if climatology is used.) +#ifdef AUX_OX_RADF_TROP + ! forces use of tracer from L=1,LS1-1 and reference above that : + use_o3_ref = 1 + use_tracer_chem(1) = LS1 - 1 +#else + ! use tracer or climatology, whichever won''t be used in final call : + use_o3_ref = 0 + use_tracer_chem(1) = (1-onoff_chem)*Lmax_rad_O3 +#endif + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + CALL RCOMPX + ! tr_Shindell Ox tracer +#ifdef AUX_OX_RADF_TROP + SNFST_o3ref(3,I,J) = SRNFLB(LS1-1) + ! fixed tropopause + TNFST_o3ref(3,I,J) = TRNFLB(LS1-1) +#else + SNFST_o3ref(3,I,J) = SRNFLB(LTROPO(I,J)) + ! meteorological tropopause + TNFST_o3ref(3,I,J) = TRNFLB(LTROPO(I,J)) +#endif + SNFST_o3ref(4,I,J) = SRNFLB(LM+LM_REQ+1) + ! T.O.A. + TNFST_o3ref(4,I,J) = TRNFLB(LM+LM_REQ+1) +#endif /* AUXILIARY_OX_RADF */ + ! After AUX call, use either climatological or tracer O3 : + use_o3_ref = 0 + use_tracer_chem(1) = onoff_chem*Lmax_rad_O3 +#if (defined SHINDELL_STRAT_EXTRA) && (defined ACCMIP_LIKE_DIAGS) + ! Optional intermediate call with stratOx tracer : + !NEED CHEM_IN(1,1:LM)=stratO3_tracer_save(1:LM, I,J) + !NEED kdeliq(1:LM, 1:4)=kliq(1:LM, 1:4,i,j) + !NEED CALL RCOMPX ! stratOx diag tracer + ! Tropopause + SNFST_stratOx(1,I,J) = SRNFLB(LTROPO(I,J)) + TNFST_stratOx(1,I,J) = TRNFLB(LTROPO(I,J)) + ! T.O.A. + SNFST_stratOx(2,I,J) = SRNFLB(LM+LM_REQ+1) + TNFST_stratOx(2,I,J) = TRNFLB(LM+LM_REQ+1) +#endif /* SHINDELL_STRAT_EXTRA && ACCMIP_LIKE_DIAGS */ + CHEM_IN(1,1:LM) = chem_tracer_save(1,1:LM, I,J) ! Ozone + CHEM_IN(2,1:LM) = chem_tracer_save(2,1:LM, I,J) * CH4X_RADoverCHEM ! Methane +#if (defined ACCMIP_LIKE_DIAGS) +#ifndef SKIP_ACCMIP_GHG_RADF_DIAGS + ! TOA GHG rad forcing : nf=1,4 are CH4, N2O, CFC11, CFC12 : + ! Initial calls are reference year/day : + DO nf = 1, 4 + IF ( nf==1 ) THEN + ! CH4 reference call must not use tracer + use_tracer_chem(2) = 0 + ELSE + ! N2O and CFC call's CH4 should match final call + use_tracer_chem(2) = onoff_chem*Lmax_rad_CH4 + ENDIF + FULGAS(nfghg(nf)) = sv_fulgas_ref(nf) + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + CALL RCOMPX + SNFS_ghg(nf,I,J) = SRNFLB(LM+LM_REQ+1) + TNFS_ghg(nf,I,J) = TRNFLB(LM+LM_REQ+1) + FULGAS(nfghg(nf)) = sv_fulgas_now(nf) + ENDDO +#endif /* NOT DEFINED SKIP_ACCMIP_GHG_RADF_DIAGS */ +#endif /* ACCMIP_LIKE_DIAGS */ +#endif /* TRACERS_SPECIAL_Shindell */ + +#if defined ( TRACERS_GC ) + + IF ( SUM( TrM(I,J,1:LM,i_CH4) ) .lt. 1d-20 ) THEN + ! If methane is not initialized yet assume 1.5 ppmv everywhere + CHEM_IN(2,1:LM) = MA(1:LM,I,J) * 1.5e-6 * 16.04 / 28.97 + ELSE + !IF ( i_CH4 > 0 ) + CHEM_IN(2,1:LM) = TrM(I,J,1:LM,i_CH4) * BYAXYP(I,J) + ENDIF + + IF ( SUM( TrM(I,J,1:LM,i_O3) ) .lt. 1d-20 ) THEN + ! If ozone is not initialized yet assume 5 ppmv everywhere + CHEM_IN(1,1:LM) = MA(1:LM,I,J) * 5.0e-6 * 47.997 / 28.97 + ELSE + !IF ( i_O3 > 0 ) + CHEM_IN(1,1:LM) = TrM(I,J,1:LM, i_O3) * BYAXYP(I,J) + ENDIF + + ! TOA GHG rad forcing : nf=1,4 are CH4, N2O, CFC11, CFC12 : + ! Initial calls are reference year/day : + DO nf = 1, 4 + IF ( nf==1 ) THEN + ! CH4 reference call must not use tracer + use_tracer_chem(2) = 0 + ELSE + ! N2O and CFC call's CH4 should match final call + use_tracer_chem(2) = onoff_chem*LM ! Lmax_rad_CH4 + ENDIF + FULGAS(nfghg(nf)) = sv_fulgas_ref(nf) + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + CALL RCOMPX + ! TOA + SNFS_ghg(nf,I,J) = SRNFLB(LM+LM_REQ+1) + TNFS_ghg(nf,I,J) = TRNFLB(LM+LM_REQ+1) + ! Tropopause + SNFS_ghg_tp(nf,I,J) = SRNFLB(LTROPO(I,J)) + TNFS_ghg_tp(nf,I,J) = TRNFLB(LTROPO(I,J)) + ! Whole atmosphere + SNFS_3D_pert(I,J,:,nf) = SRNFLB + TNFS_3D_pert(I,J,:,nf) = TRNFLB + FULGAS(nfghg(nf)) = sv_fulgas_now(nf) + ENDDO + +#endif + + ENDIF + ! moddrf=0 +#if (defined GCC_COUPLE_RAD) + ! final (main) RCOMPX call can use tracer co2 (or not) : + use_tracer_GCCco2 = Lmax_rad_CO2 + IF ( IS_SET_PARAM('initial_GHG_setup') ) THEN + CALL GET_PARAM('initial_GHG_setup',initial_GHG_setup) + IF ( initial_GHG_setup==1 .AND. itime==itimeI ) & + use_tracer_GCCco2 = 0 + ! special case; model outputs climatology + ENDIF +#endif /* GCC_COUPLE_RAD */ +#if (defined TRACERS_SPECIAL_Shindell) + ! final (main) RCOMPX call can use tracer methane (or not) : + use_tracer_chem(2) = onoff_chem*Lmax_rad_CH4 + IF ( IS_SET_PARAM('initial_GHG_setup') ) THEN + CALL GET_PARAM('initial_GHG_setup',initial_GHG_setup) + IF ( initial_GHG_setup==1 .AND. itime==itimeI ) & + use_tracer_chem(2) = 0 + ! special case; model outputs climatology + ENDIF +#endif /* TRACERS_SPECIAL_Shindell */ + +#ifdef GCC_UNCOUPLE_RAD_CONCEN + ! Use reference year CO2 for uncoupling radiation + FULGAS(2) = GCCco2_fulgas_ref +#endif + + IF ( moddrf==0 ) THEN +#ifdef BC_ALB + IF ( rad_interact_aer>0 ) dalbsn = 0.D0 + CALL RCOMPX + NFSNBC(I,J) = SRNFLB(LM+LM_REQ+1) + ! NFSNBC(I,J)=SRNFLB(LFRC) + ALBNBC(I,J) = SRNFLB(1)/(SRDFLB(1)+1.D-20) + ! set for BC-albedo effect + IF ( rad_interact_aer>0 ) dALBsn = dALBsn1 +#endif + !**** Optional calculation of CRF using a clear sky calc. + IF ( cloud_rad_forc>0 ) THEN + FTAUC = 0. + ! turn off cloud tau (tauic +tauwc) + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + CALL RCOMPX + ! cloud_rad_forc>0 : clr sky + SNFSCRF(I,J) = SRNFLB(LM+LM_REQ+1) + ! always TOA + TNFSCRF(I,J) = TRNFLB(LM+LM_REQ+1) + ! always TOA + LWDNCS(I,J) = STBO*(POCEAN*atmocn%GTEMPR(I,J)**4+ & + POICE*atmice%GTEMPR(I,J) & + **4+PLICE*atmgla%GTEMPR(I,J) & + **4+PEARTH*atmlnd%GTEMPR(I,J)**4) & + - TRNFLB(1) + ! clr sky trhr(0) + ! BEGIN AMIP + AIJ(I,J,IJ_SWDCLS) = AIJ(I,J,IJ_SWDCLS) + SRDFLB(1)& + *COSZ2(I,J) + AIJ(I,J,IJ_SWNCLS) = AIJ(I,J,IJ_SWNCLS) + SRNFLB(1)& + *COSZ2(I,J) + AIJ(I,J,IJ_LWDCLS) = AIJ(I,J,IJ_LWDCLS) + TRDFLB(1) + AIJ(I,J,IJ_SWNCLT) = AIJ(I,J,IJ_SWNCLT) & + + SRNFLB(LM+LM_REQ+1)*COSZ2(I,J) + AIJ(I,J,IJ_LWNCLT) = AIJ(I,J,IJ_LWNCLT) & + + TRNFLB(LM+LM_REQ+1) + ! END AMIP +#ifdef CFMIP3_SUBDD + ! SW upward flux at TOA, Csky + !swutcs(i,j)=sruflb(lm)*csz2 + swutcs(i,j) = SRUFLB(lm)*cosz2(i,j) + ! SW downward flux at SFC, Csky + swdcls(i,j) = SRDFLB(1)*cosz2(i,j) + ! SW upward flux at SFC, Csky + swucls(i,j) = SRUFLB(1)*cosz2(i,j) +#endif + ENDIF + FTAUC = 1. + ! default : turn on cloud tau + + + !**** 2nd Optional calculation of CRF using a clear sky calc. without aerosols and Ox + IF ( cloud_rad_forc==2 ) THEN + FTAUC = 0. + ! turn off cloud tau (tauic +tauwc) + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + ! Including turn off of aerosols and Ox during crf calc.+++++++++++++++++++ +#ifdef TRACERS_SPECIAL_Shindell + use_o3_ref = 1 + use_tracer_chem(1) = 0 !turns off ozone +#endif + FSTOPX( : ) = 0 + !turns off aerosol tracers + FTTOPX( : ) = 0 + CALL RCOMPX + ! cloud_rad_forc=2 : clr sky + FSTOPX( : ) = onoff_aer + !turns on aerosol tracers, if requested + FTTOPX( : ) = onoff_aer + ! +#ifdef TRACERS_SPECIAL_Shindell + use_o3_ref = 0 + use_tracer_chem(1) = onoff_chem*Lmax_rad_O3 + ! turns on ozone tracers +#endif + SNFSCRF2(I,J) = SRNFLB(LM+LM_REQ+1) + ! always TOA + TNFSCRF2(I,J) = TRNFLB(LM+LM_REQ+1) + ! always TOA + ENDIF + FTAUC = 1. + ! default : turn on cloud tau + + IF ( cloud_rad_forc>0 ) THEN + !**** all sky calc. without aerosol + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + FSTOPX( : ) = 0 + !turns off aerosol tracers + FTTOPX( : ) = 0 + CALL RCOMPX + ! all sky + FSTOPX( : ) = onoff_aer + !turns on aerosol tracers, if requested + FTTOPX( : ) = onoff_aer + ! + + SNFS_AS_noA(I,J) = SRNFLB(LM+LM_REQ+1) + ! always TOA + TNFS_AS_noA(I,J) = TRNFLB(LM+LM_REQ+1) + ! always TOA + + !**** clear sky calc. without aerosol + FTAUC = 0. + ! turn off cloud tau (tauic +tauwc) + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + FSTOPX( : ) = 0 + !turns off aerosol tracers + FTTOPX( : ) = 0 + CALL RCOMPX + ! clr sky + FSTOPX( : ) = onoff_aer + !turns on aerosol tracers, if requested + FTTOPX( : ) = onoff_aer + ! + + SNFS_CS_noA(I,J) = SRNFLB(LM+LM_REQ+1) + ! always TOA + TNFS_CS_noA(I,J) = TRNFLB(LM+LM_REQ+1) + ! always TOA + FTAUC = 1. + ! default : turn on cloud tau + ENDIF + + !**** Optional calculation of the impact of NINT aerosols + IF ( aer_rad_forc>0 ) THEN + !**** first, separate aerosols + DO N = 1, 8 + tmpS(N) = FS8OPX(N) + tmpT(N) = FT8OPX(N) + FS8OPX(N) = 0. + FT8OPX(N) = 0. + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + CALL RCOMPX + ! aer_rad_forc>0 : no aerosol N + SNFSAERRF(N,I,J) = SRNFLB(LM+LM_REQ+1) + ! TOA + TNFSAERRF(N,I,J) = TRNFLB(LM+LM_REQ+1) + ! TOA + SNFSAERRF(N+8,I,J) = SRNFLB(1) + ! SURF + TNFSAERRF(N+8,I,J) = TRNFLB(1) + ! SURF + FS8OPX(N) = tmpS(N) + FT8OPX(N) = tmpT(N) + ENDDO + !**** second, net aerosols + tmpS( : ) = FS8OPX( : ) + tmpT( : ) = FT8OPX( : ) + FS8OPX( : ) = 0. + FT8OPX( : ) = 0. + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + CALL RCOMPX ! aer_rad_forc>0 : no aerosols + SNFSAERRF(17,I,J) = SRNFLB(LM+LM_REQ+1) + ! TOA + TNFSAERRF(17,I,J) = TRNFLB(LM+LM_REQ+1) + ! TOA + SNFSAERRF(18,I,J) = SRNFLB(1) + ! SURF + TNFSAERRF(18,I,J) = TRNFLB(1) + ! SURF + FS8OPX( : ) = tmpS( : ) + FT8OPX( : ) = tmpT( : ) + ENDIF + ENDIF + ! moddrf=0 + + !**** End of initial computations for optional forcing diagnostics + + !**** Localize fields that are modified by RCOMPX + kdeliq(1:LM, 1:4) = kliq(1:LM, 1:4,i,j) + + !***************************************************** + ! Main RADIATIVE computations, SOLAR and THERM(A)L + CALL RCOMPX + !***************************************************** + +#ifdef CACHED_SUBDD + CO2out(1:LM, i,j) = CO2outCol(1:LM) +#endif +#ifdef GCC_UNCOUPLE_RAD_CONCEN + ! Put back the actual amount of CO2 to fulgas + FULGAS(2) = GCCco2_fulgas_now +#endif +#if (defined TRACERS_AEROSOLS_Koch) || (defined TRACERS_DUST) ||\ + (defined TRACERS_MINERALS) || (defined TRACERS_AMP) ||\ + (defined TRACERS_TOMAS) || (defined TRACERS_AEROSOLS_SEASALT) + + !**** Save optical depth diags + nsub_ntrix = 0 + DO n = 1, nraero_aod + SELECT CASE (TRNAME(NTRIX_AOD(n))) + CASE ('Clay','ClayIlli','ClayKaol','ClaySmec', & + &'ClayCalc','ClayQuar','ClayFeld','ClayHema', & + &'ClayGyps','ClayIlHe','ClayKaHe','ClaySmHe', & + &'ClayCaHe','ClayQuHe','ClayFeHe','ClayGyHe') + nsub_ntrix(NTRIX_AOD(n)) = nsub_ntrix(NTRIX_AOD(n))& + + 1 + + ! 3d aod + IF ( diag_aod_3d>0 .AND. diag_aod_3d<5 ) THEN + ! valid values are 1-4 + IF ( IJLT_3DAAOD(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAOD(n)) & + = taijls(i,j,1:LM, IJLT_3DAAOD(n)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) + IF ( IJLT_3DAAODCS(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODCS(n)) & + = taijls(i,j,1:LM, IJLT_3DAAODCS(n)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) & + *OPNSKY + IF ( IJLT_3DAAODDRY(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODDRY(n)) & + = taijls(i,j,1:LM, IJLT_3DAAODDRY(n)) & + + (aesqex_dry(1:LM, 6,n) & + -aesqsc_dry(1:LM, 6,n)) + IF ( IJLT_3DTAU(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAU(n)) & + = taijls(i,j,1:LM, IJLT_3DTAU(n)) & + + aesqex(1:LM, 6,n) + IF ( IJLT_3DTAUCS(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUCS(n)) & + = taijls(i,j,1:LM, IJLT_3DTAUCS(n)) & + + aesqex(1:LM, 6,n)*OPNSKY + IF ( IJLT_3DTAUDRY(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUDRY(n)) & + = taijls(i,j,1:LM, IJLT_3DTAUDRY(n)) & + + aesqex_dry(1:LM, 6,n) + ELSEIF ( diag_aod_3d<0 .AND. diag_aod_3d>-5 ) THEN + ! if negative, save total + IF ( IJLT_3DAAOD(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAOD(1)) & + = taijls(i,j,1:LM, IJLT_3DAAOD(1)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) + IF ( IJLT_3DAAODCS(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODCS(1)) & + = taijls(i,j,1:LM, IJLT_3DAAODCS(1)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) & + *OPNSKY + IF ( IJLT_3DAAODDRY(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODDRY(1)) & + = taijls(i,j,1:LM, IJLT_3DAAODDRY(1)) & + + (aesqex_dry(1:LM, 6,n) & + -aesqsc_dry(1:LM, 6,n)) + IF ( IJLT_3DTAU(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAU(1)) & + = taijls(i,j,1:LM, IJLT_3DTAU(1)) & + + aesqex(1:LM, 6,n) + IF ( IJLT_3DTAUCS(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUCS(1)) & + = taijls(i,j,1:LM, IJLT_3DTAUCS(1)) & + + aesqex(1:LM, 6,n)*OPNSKY + IF ( IJLT_3DTAUDRY(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUDRY(1)) & + = taijls(i,j,1:LM, IJLT_3DTAUDRY(1)) & + + aesqex_dry(1:LM, 6,n) + ENDIF + ! 0diag_aod_3d>-5 + + ! 2d aod, per band or just band6, depending on diag_rad + IF ( diag_rad/=1 ) THEN + IF ( IJTS_TAUSUB(1,NTRIX_AOD(n),nsub_ntrix( & + NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_TAUSUB(1,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_TAUSUB(1,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqex(1:LM, 6,n)) + IF ( IJTS_TAUSUB(2,NTRIX_AOD(n),nsub_ntrix( & + NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_TAUSUB(2,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_TAUSUB(2,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqex(1:LM, 6,n))*OPNSKY + IF ( IJTS_TAUSUB(3,NTRIX_AOD(n),nsub_ntrix( & + NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_TAUSUB(3,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_TAUSUB(3,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqex_dry(1:LM, 6,n)) + ELSE + DO kr = 1, 6 + IF ( IJTS_SQEXSUB(1,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQEXSUB(1,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQEXSUB(1,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqex(1:LM, kr,n)) + IF ( IJTS_SQEXSUB(2,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQEXSUB(2,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQEXSUB(2,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqex(1:LM, kr,n))*OPNSKY + IF ( IJTS_SQEXSUB(3,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQEXSUB(3,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQEXSUB(3,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqex_dry(1:LM, kr,n)) + IF ( IJTS_SQSCSUB(1,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQSCSUB(1,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQSCSUB(1,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqsc(1:LM, kr,n)) + IF ( IJTS_SQSCSUB(2,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQSCSUB(2,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQSCSUB(2,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqsc(1:LM, kr,n))*OPNSKY + IF ( IJTS_SQSCSUB(3,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQSCSUB(3,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQSCSUB(3,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqsc_dry(1:LM, kr,n)) + IF ( IJTS_SQCBSUB(1,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQCBSUB(1,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQCBSUB(1,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqcb(1:LM, kr,n)) & + /(SUM(aesqsc(1:LM, kr,n))+1.D-10) + IF ( IJTS_SQCBSUB(2,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQCBSUB(2,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQCBSUB(2,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqcb(1:LM, kr,n)) & + /(SUM(aesqsc(1:LM, kr,n))+1.D-10)*OPNSKY + IF ( IJTS_SQCBSUB(3,kr,NTRIX_AOD(n), & + nsub_ntrix(NTRIX_AOD(n)))>0 ) & + TAIJS(i,j,IJTS_SQCBSUB(3,kr,NTRIX_AOD(n)& + ,nsub_ntrix(NTRIX_AOD(n)))) & + = TAIJS(i,j,IJTS_SQCBSUB(3,kr, & + NTRIX_AOD(n),nsub_ntrix(NTRIX_AOD(n)))) & + + SUM(aesqcb_dry(1:LM, kr,n)) & + /(SUM(aesqsc_dry(1:LM, kr,n))+1.D-10) + ENDDO + ENDIF + CASE DEFAULT + + ! 3d aod + IF ( diag_aod_3d>0 .AND. diag_aod_3d<5 ) THEN + ! valid values are 1-4 + IF ( IJLT_3DAAOD(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAOD(n)) & + = taijls(i,j,1:LM, IJLT_3DAAOD(n)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) + IF ( IJLT_3DAAODCS(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODCS(n)) & + = taijls(i,j,1:LM, IJLT_3DAAODCS(n)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) & + *OPNSKY + IF ( IJLT_3DAAODDRY(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODDRY(n)) & + = taijls(i,j,1:LM, IJLT_3DAAODDRY(n)) & + + (aesqex_dry(1:LM, 6,n)-aesqsc(1:LM, 6,n)) + IF ( IJLT_3DTAU(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAU(n)) & + = taijls(i,j,1:LM, IJLT_3DTAU(n)) & + + aesqex(1:LM, 6,n) + IF ( IJLT_3DTAUCS(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUCS(n)) & + = taijls(i,j,1:LM, IJLT_3DTAUCS(n)) & + + aesqex(1:LM, 6,n)*OPNSKY + IF ( IJLT_3DTAUDRY(n)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUDRY(n)) & + = taijls(i,j,1:LM, IJLT_3DTAUDRY(n)) & + + aesqex_dry(1:LM, 6,n) + ELSEIF ( diag_aod_3d<0 .AND. diag_aod_3d>-5 ) THEN + ! if negative, save total + IF ( IJLT_3DAAOD(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAOD(1)) & + = taijls(i,j,1:LM, IJLT_3DAAOD(1)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) + IF ( IJLT_3DAAODCS(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODCS(1)) & + = taijls(i,j,1:LM, IJLT_3DAAODCS(1)) & + + (aesqex(1:LM, 6,n)-aesqsc(1:LM, 6,n)) & + *OPNSKY + IF ( IJLT_3DAAODDRY(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DAAODDRY(1)) & + = taijls(i,j,1:LM, IJLT_3DAAODDRY(1)) & + + (aesqex_dry(1:LM, 6,n) & + -aesqsc_dry(1:LM, 6,n)) + IF ( IJLT_3DTAU(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAU(1)) & + = taijls(i,j,1:LM, IJLT_3DTAU(1)) & + + aesqex(1:LM, 6,n) + IF ( IJLT_3DTAUCS(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUCS(1)) & + = taijls(i,j,1:LM, IJLT_3DTAUCS(1)) & + + aesqex(1:LM, 6,n)*OPNSKY + IF ( IJLT_3DTAUDRY(1)>0 ) & + taijls(i,j,1:LM, IJLT_3DTAUDRY(1)) & + = taijls(i,j,1:LM, IJLT_3DTAUDRY(1)) & + + aesqex_dry(1:LM, 6,n) + ENDIF + ! 0diag_aod_3d>-5 + + ! 2d aod, per band or just band6, depending on diag_rad + IF ( diag_rad/=1 ) THEN + IF ( IJTS_TAU(1,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_TAU(1,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_TAU(1,NTRIX_AOD(n))) & + + SUM(aesqex(1:LM, 6,n)) + IF ( IJTS_TAU(2,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_TAU(2,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_TAU(2,NTRIX_AOD(n))) & + + SUM(aesqex(1:LM, 6,n))*OPNSKY + IF ( IJTS_TAU(3,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_TAU(3,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_TAU(3,NTRIX_AOD(n))) & + + SUM(aesqex_dry(1:LM, 6,n)) + ELSE + DO kr = 1, 6 + ! print*,'SUSA diag',SUM(aesqex(1:LM, kr,n)) + IF ( IJTS_SQEX(1,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQEX(1,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQEX(1,kr,NTRIX_AOD(n))& + ) + SUM(aesqex(1:LM, kr,n)) + IF ( IJTS_SQEX(2,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQEX(2,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQEX(2,kr,NTRIX_AOD(n))& + ) + SUM(aesqex(1:LM, kr,n))*OPNSKY + IF ( IJTS_SQEX(3,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQEX(3,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQEX(3,kr,NTRIX_AOD(n))& + ) + SUM(aesqex_dry(1:LM, kr,n)) + IF ( IJTS_SQSC(1,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQSC(1,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQSC(1,kr,NTRIX_AOD(n))& + ) + SUM(aesqsc(1:LM, kr,n)) + IF ( IJTS_SQSC(2,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQSC(2,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQSC(2,kr,NTRIX_AOD(n))& + ) + SUM(aesqsc(1:LM, kr,n))*OPNSKY + IF ( IJTS_SQSC(3,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQSC(3,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQSC(3,kr,NTRIX_AOD(n))& + ) + SUM(aesqsc_dry(1:LM, kr,n)) +#ifndef TRACERS_TOMAS + IF ( IJTS_SQCB(1,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQCB(1,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQCB(1,kr,NTRIX_AOD(n))& + ) + SUM(aesqcb(1:LM, kr,n)) & + /(SUM(aesqsc(1:LM, kr,n))+1.D-10) + IF ( IJTS_SQCB(2,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQCB(2,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQCB(2,kr,NTRIX_AOD(n))& + ) + SUM(aesqcb(1:LM, kr,n)) & + /(SUM(aesqsc(1:LM, kr,n))+1.D-10) & + *OPNSKY + IF ( IJTS_SQCB(3,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQCB(3,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQCB(3,kr,NTRIX_AOD(n))& + ) + SUM(aesqcb_dry(1:LM, kr,n)) & + /(SUM(aesqsc_dry(1:LM, kr,n))+1.D-10) +#else + qcb_col(kr,n) = 0.D0 + qcb_col_dry(kr,n) = 0.D0 + DO l = 1, lm + qcb_col(kr,n) = qcb_col(kr,n) & + + aesqcb(l,kr,n)*aesqsc(l,kr,n) + qcb_col_dry(kr,n) = qcb_col(kr,n) & + + aesqcb_dry(l,kr,n)*aesqsc_dry(l,kr,n) + ENDDO + + IF ( IJTS_SQCB(1,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQCB(1,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQCB(1,kr,NTRIX_AOD(n))& + ) + qcb_col(kr,n) & + /(SUM(aesqsc(1:LM, kr,n))+1.D-10) + IF ( IJTS_SQCB(2,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQCB(2,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQCB(2,kr,NTRIX_AOD(n))& + ) + qcb_col(kr,n) & + /(SUM(aesqsc(1:LM, kr,n))+1.D-10) & + *OPNSKY + IF ( IJTS_SQCB(3,kr,NTRIX_AOD(n))>0 ) & + TAIJS(i,j,IJTS_SQCB(3,kr,NTRIX_AOD(n))) & + = TAIJS(i,j,IJTS_SQCB(3,kr,NTRIX_AOD(n))& + ) + qcb_col_dry(kr,n) & + /(SUM(aesqsc_dry(1:LM, kr,n))+1.D-10) +#endif + ENDDO + ! kr + ENDIF + ! diag_rad + ENDSELECT + ! clay or not + ENDDO + ! nraero_aod + +#endif /* Koch||DUST||MINERALS||AMP||TOMAS||SEASALT */ + + IF ( TAero_aod_diag>0 ) THEN + DO n = 1, 8 + ! 8 radiatively active aerosol tracers + DO kr = 1, 6 + ! 6 bands in the shortwave + IF ( TAero_aod_diag==2 .AND. kr/=6 ) CYCLE + ! only save band6 + AIJ(i,j,IJ_NINTAEREXT(kr,n)) & + = AIJ(i,j,IJ_NINTAEREXT(kr,n)) & + + SUM(nintaerext(1:LM, kr,n)) + AIJ(i,j,IJ_NINTAERSCA(kr,n)) & + = AIJ(i,j,IJ_NINTAERSCA(kr,n)) & + + SUM(nintaersca(1:LM, kr,n)) + AIJ(i,j,IJ_NINTAERASY(kr,n)) & + = AIJ(i,j,IJ_NINTAERASY(kr,n)) & + + SUM(nintaerasy(1:LM, kr,n) & + *nintaersca(1:LM, kr,n)) & + /(SUM(nintaersca(1:LM, kr,n))+1.D-10) + ENDDO + ! kr + ENDDO + ! n + ENDIF + + +#ifdef TRACERS_ON + IF ( nraero_aod>0 ) THEN + tau_as(i,j,1:LM, 1 : nraero_aod) & + = aesqex(1:LM, 6,1 : nraero_aod) + tau_cs(i,j,1:LM, 1 : nraero_aod) & + = aesqex(1:LM, 6,1 : nraero_aod)*OPNSKY + IF ( save_dry_aod>0 ) tau_dry(i,j,1:LM, 1 : nraero_aod) & + = aesqex_dry(1:LM, 6,1 : nraero_aod) +#ifdef CACHED_SUBDD + abstau_as(i,j,1:LM, 1 : nraero_aod) & + = (aesqex(1:LM, 6,1 : nraero_aod) & + -aesqsc(1:LM, 6,1 : nraero_aod)) + abstau_cs(i,j,1:LM, 1 : nraero_aod) & + = (aesqex(1:LM, 6,1 : nraero_aod) & + -aesqsc(1:LM, 6,1 : nraero_aod))*OPNSKY + IF ( save_dry_aod>0 ) & + abstau_dry(i,j,1:LM, 1 : nraero_aod) & + = (aesqex_dry(1:LM, 6,1 : nraero_aod) & + -aesqsc_dry(1:LM, 6,1 : nraero_aod)) +#endif /* CACHED_SUBDD */ + ENDIF +#endif /* TRACERS_ON */ + + IF ( I==IWRITE .AND. J==JWRITE ) CALL WRITER(6,ITWRITE) + CSZ2 = COSZ2(I,J) + DO L = 1, LM +#ifdef GCC_COUPLE_RAD + GCCCO2RAD_TO_CHEM(L,i,j) = GCCCO2_OUT(L) +#endif + rad_to_chem( : ,L,i,j) = chem_out(L, : ) + rad_to_chem(4,L,i,j) = chem_out(L,4)/CH4X_RADoverCHEM + DO k = 1, 4 + kliq(L,k,i,j) = kdeliq(L,k) + ! save updated flags + ENDDO + ENDDO + IF ( kradia>0 ) THEN + ! rad. forc. model; acc diagn + DO L = 1, LM + LM_REQ + 1 + AFLX_ST(L,I,J,1) = AFLX_ST(L,I,J,1) + SRUFLB(L) & + *CSZ2 + AFLX_ST(L,I,J,2) = AFLX_ST(L,I,J,2) + SRDFLB(L) & + *CSZ2 + AFLX_ST(L,I,J,3) = AFLX_ST(L,I,J,3) + TRUFLB(L) + AFLX_ST(L,I,J,4) = AFLX_ST(L,I,J,4) + TRDFLB(L) + ENDDO + IF ( kradia==1 ) THEN + tauex6 = 0. + tauex5 = 0. + tausct = 0. + taugcb = 0. + DO L = 1, LM + AFLX_ST(L,I,J,5) = AFLX_ST(L,I,J,5) & + + 1.D2*RHL(L) + tauex6 = tauex6 + SRAEXT(L,6) + SRDEXT(L,6) & + + SRVEXT(L,6) + tauex5 = tauex5 + SRAEXT(L,5) + SRDEXT(L,5) & + + SRVEXT(L,5) + tausct = tausct + SRASCT(L,6) + SRDSCT(L,6) & + + SRVSCT(L,6) + taugcb = taugcb + SRASCT(L,6)*SRAGCB(L,6) & + + SRDSCT(L,6)*SRDGCB(L,6) + SRVSCT(L,6)& + *SRVGCB(L,6) + ENDDO + AFLX_ST(LM+1,I,J,5) = AFLX_ST(LM+1,I,J,5) + tauex5 + AFLX_ST(LM+2,I,J,5) = AFLX_ST(LM+2,I,J,5) + tauex6 + AFLX_ST(LM+3,I,J,5) = AFLX_ST(LM+3,I,J,5) + tausct + AFLX_ST(LM+4,I,J,5) = AFLX_ST(LM+4,I,J,5) + taugcb + CYCLE + ENDIF + DO l = LS1_loc, lm + TCHG(l,i,j) = TCHG(l,i,j) & + + (SRFHRL(l)*csz2-srhra(l,i,j) & + +(-TRFCRL(l)-trhra(l,i,j))) & + *nrad*DTsrc*bysha*BYMA(l,i,j) + ENDDO + DO l = lm + 1, lm + lm_req + TCHG(l,i,j) = TCHG(l,i,j) & + + (SRFHRL(l)*csz2-srhra(l,i,j) & + +(-TRFCRL(l)-trhra(l,i,j))) & + *nrad*DTsrc*bysha*BYAML00(l) + ENDDO + CYCLE + ELSEIF ( kradia<0 ) THEN + ! save i/o data for frc.runs + fmp_com(i,j) = fmp ! input data + wsoil(i,j) = wearth + DO L = 1, LM + QR(L,I,J) = SHL(L) + CLDinfo(L,1,I,J) = TAUWC(L) + CLDinfo(L,2,I,J) = TAUIC(L) + CLDinfo(L,3,I,J) = SIZEIC(L) + ! sizeic=sizewc currently + ENDDO + SRHRA(0,I,J) = SRNFLB(1)*CSZ2 + ! output data (for adj frc) + TRHRA(0,I,J) = -TRNFLB(1) + DO L = 1, LM + LM_REQ + SRHRA(L,I,J) = SRFHRL(L)*CSZ2 + TRHRA(L,I,J) = -TRFCRL(L) + ENDDO + ENDIF + !**** + !**** Save relevant output in model arrays + !**** + !**** (some generalisation and coherence needed in the rad surf type calc) + FSF(1,I,J) = FSRNFG(1) + ! ocean + FSF(2,I,J) = FSRNFG(3) + ! ocean ice + FSF(3,I,J) = FSRNFG(4) + ! land ice + FSF(4,I,J) = FSRNFG(2) + ! soil + SRHR(0,I,J) = SRNFLB(1) + TRHR(0,I,J) = STBO*(POCEAN*atmocn%GTEMPR(I,J)**4+POICE* & + atmice%GTEMPR(I,J) & + **4+PLICE*atmgla%GTEMPR(I,J) & + **4+PEARTH*atmlnd%GTEMPR(I,J)**4) & + - TRNFLB(1) + TRSURF(1,I,J) = STBO*atmocn%GTEMPR(I,J)**4 + ! ocean + TRSURF(2,I,J) = STBO*atmice%GTEMPR(I,J)**4 + ! ocean ice + TRSURF(3,I,J) = STBO*atmgla%GTEMPR(I,J)**4 + ! land ice + TRSURF(4,I,J) = STBO*atmlnd%GTEMPR(I,J)**4 + ! soil + DO L = 1, LM + SRHR(L,I,J) = SRFHRL(L) + TRHR(L,I,J) = -TRFCRL(L) + ENDDO + DO LR = 1, LM_REQ + SRHRS(LR,I,J) = SRFHRL(LM+LR) + TRHRS(LR,I,J) = -TRFCRL(LM+LR) + ENDDO +#ifdef SCM + !**** possibly turn off radiative heating in atmosphere + !**** and use specified profile for thermal heating rate + !**** converting units from K/s to W/m2 + IF ( SCMopt%QRAD ) THEN + SRHR(1:LM, I,J) = 0. + TRHR(1:LM, I,J) = 0. + SRHRS(1:LM_REQ,I,J) = 0. + TRHRS(1:LM_REQ,I,J) = 0. + TRHR(1:LM, I,J) = SCMin%QRAD(1:LM)*SHA*MA(1:LM, I,J) + ENDIF + !**** possibly turn off radiative heating in atmosphere + !**** and use Beers Law for thermal heating rate as + !**** difference of net flux over layer + IF ( SCMopt%BEERSLAW ) THEN + SRHR(1:LM, I,J) = 0. + TRHR(1:LM, I,J) = 0. + SRHRS(1:LM_REQ,I,J) = 0. + TRHRS(1:LM_REQ,I,J) = 0. + ! cumulative cloud water paths * extinction coefficient + q_above(LM+1) = 0. + DO L = LM, 1, -1 + q_above(L) = q_above(L+1) & + + SCMin%BEERSLAW_KAPPA*MA(L,i,j) & + *QCL(i,j,L) + ENDDO + q_below(1) = 0. + DO L = 1, LM + q_below(L+1) = q_below(L) & + + SCMin%BEERSLAW_KAPPA*MA(L,i,j) & + *QCL(i,j,L) + ENDDO + ! net upward radiative flux at layer edges + Frad( : ) = SCMin%BEERSLAW_F0*EXP(-q_above( : )) & + + SCMin%BEERSLAW_F1*EXP(-q_below( : )) + ! radiative flux difference over each layer + TRHR(1:LM, I,J) = Frad(1:LM) - Frad(2 : LM+1) + ENDIF + !**** save radiative flux profiles for sub-daily output +#ifdef CACHED_SUBDD + TRDFLB_prof(I,J,1:LM) = TRDFLB(1:LM) + TRUFLB_prof(I,J,1:LM) = TRUFLB(1:LM) + SRDFLB_prof(I,J,1:LM) = SRDFLB(1:LM) + SRUFLB_prof(I,J,1:LM) = SRUFLB(1:LM) +#endif +#endif + !**** Save fluxes at four levels surface, P0, P1, LTROPO + ! Surface + SNFS(1,I,J) = SRNFLB(1) + TNFS(1,I,J) = TRNFLB(1) + ! P1 + SNFS(2,I,J) = SRNFLB(LM+1) + TNFS(2,I,J) = TRNFLB(LM+1) + ! P0 = TOA + SNFS(3,I,J) = SRNFLB(LM+LM_REQ+1) + TNFS(3,I,J) = TRNFLB(LM+LM_REQ+1) + ! LTROPO + SNFS(4,I,J) = SRNFLB(LTROPO(I,J)) + TNFS(4,I,J) = TRNFLB(LTROPO(I,J)) + +#ifdef TRACERS_GC + SNFS_3D(I,J,:) = SRNFLB(:) + TNFS_3D(I,J,:) = TRNFLB(:) + ! Archive total flux for diagnostis + SAVE_RF_3D(I,J,:,0,1) = SRNFLB(:) + SAVE_RF_3D(I,J,:,0,2) = TRNFLB(:) +#endif + + !**** + TRINCG(I,J) = TRDFLB(1) + BTMPW(I,J) = BTEMPW - TF + ALB(I,J,1) = SRNFLB(1)/(SRDFLB(1)+1.D-20) + ALB(I,J,2) = PLAVIS + ALB(I,J,3) = PLANIR + ALB(I,J,4) = ALBVIS + ALB(I,J,5) = ALBNIR + ALB(I,J,6) = SRRVIS + ALB(I,J,7) = SRRNIR + ALB(I,J,8) = SRAVIS + ALB(I,J,9) = SRANIR + +#ifdef TRACERS_DUST + IF ( adiurn_dust==1 ) THEN + srnflb_save(i,j,1:LM) = SRNFLB(1:LM) + trnflb_save(i,j,1:LM) = TRNFLB(1:LM) + ENDIF +#endif +#ifdef mjo_subdd + SWU_AVG(I,J) = SWU_AVG(I,J) + SRUFLB(1)*CSZ2 +#endif + + SWUS(I,J) = SRUFLB(1)*CSZ2 +#ifdef CFMIP3_SUBDD + ! SW upward flux at TOA + swut(i,j) = SRUFLB(lm)*csz2 + ! SW downward flux at TOA + swdt(i,j) = SRDFLB(lm)*csz2 +#endif + SRDN(I,J) = SRDFLB(1) + ! save total solar flux at surface + !**** SALB(I,J)=ALB(I,J,1) ! save surface albedo (pointer) + FSRDIR(I,J) = SRXVIS + ! direct visible solar at surface **coefficient + SRVISSURF(I,J) = SRDVIS + ! total visible solar at surface + DIRVIS(I,J) = SRXVIS*SRDVIS + ! direct visible solar at surface + FSRDIF(I,J) = SRDVIS*(1-SRXVIS) + ! diffuse visible solar at surface + + DIRNIR(I,J) = SRXNIR*SRDNIR + ! direct beam nir solar at surface + DIFNIR(I,J) = SRDNIR*(1-SRXNIR) + ! diffuse nir solar at surface + + !diag write(*,'(a,2i5,6e12.4)')'RAD_DRV : ', + !diag. I,J,FSRDIR(I,J),SRVISSURF(I,J),FSRDIF(I,J), + !diag. DIRNIR(I,J),SRDNIR,DIFNIR(I,J) + !**** Save clear sky/tropopause diagnostics here + AIJ(I,J,IJ_CLR_SRINCG) = AIJ(I,J,IJ_CLR_SRINCG) & + + OPNSKY*SRDFLB(1)*CSZ2 + AIJ(I,J,IJ_CLR_SRNFG) = AIJ(I,J,IJ_CLR_SRNFG) & + + OPNSKY*SRNFLB(1)*CSZ2 + AIJ(I,J,IJ_CLR_TRDNG) = AIJ(I,J,IJ_CLR_TRDNG) & + + OPNSKY*TRHR(0,I,J) + AIJ(I,J,IJ_CLR_SRUPTOA) = AIJ(I,J,IJ_CLR_SRUPTOA) & + + OPNSKY*SRUFLB(LM+LM_REQ+1)*CSZ2 + AIJ(I,J,IJ_CLR_TRUPTOA) = AIJ(I,J,IJ_CLR_TRUPTOA) & + + OPNSKY*TRUFLB(LM+LM_REQ+1) + AIJ(I,J,IJ_CLR_SRNTP) = AIJ(I,J,IJ_CLR_SRNTP) & + + OPNSKY*SRNFLB(LTROPO(I,J))*CSZ2 + AIJ(I,J,IJ_CLR_TRNTP) = AIJ(I,J,IJ_CLR_TRNTP) & + + OPNSKY*TRNFLB(LTROPO(I,J)) + AIJ(I,J,IJ_SRNTP) = AIJ(I,J,IJ_SRNTP) & + + SRNFLB(LTROPO(I,J))*CSZ2 + AIJ(I,J,IJ_TRNTP) = AIJ(I,J,IJ_TRNTP) & + + TRNFLB(LTROPO(I,J)) + AIJ(I,J,IJ_SISWD) = AIJ(I,J,IJ_SISWD) + POICE*SRDFLB(1) & + *CSZ2 + AIJ(I,J,IJ_SISWU) = AIJ(I,J,IJ_SISWU) & + + POICE*(SRDFLB(1)-FSRNFG(3))*CSZ2 + + DO IT = 1, NTYPE + CALL INC_AJ(i,j,it,J_CLRTOA, & + OPNSKY*(SRNFLB(LM+LM_REQ+1) & + *CSZ2-TRNFLB(LM+LM_REQ+1))*FTYPE(IT,I,J)) + CALL INC_AJ(i,j,it,J_CLRTRP, & + OPNSKY*(SRNFLB(LTROPO(I,J)) & + *CSZ2-TRNFLB(LTROPO(I,J)))*FTYPE(IT,I,J)) + CALL INC_AJ(i,j,it,J_TOTTRP, & + (SRNFLB(LTROPO(I,J))*CSZ2-TRNFLB & + (LTROPO(I,J)))*FTYPE(IT,I,J)) + ENDDO + CALL INC_AREG(i,j,jr,J_CLRTOA, & + OPNSKY*(SRNFLB(LM+LM_REQ+1)*CSZ2- & + TRNFLB(LM+LM_REQ+1))) + CALL INC_AREG(i,j,jr,J_CLRTRP, & + OPNSKY*(SRNFLB(LTROPO(I,J))*CSZ2- & + TRNFLB(LTROPO(I,J)))) + CALL INC_AREG(i,j,jr,J_TOTTRP, & + (SRNFLB(LTROPO(I,J))*CSZ2-TRNFLB & + (LTROPO(I,J)))) + !**** Save cloud top diagnostics here + IF ( CLDCV>0. ) THEN + AIJ(I,J,IJ_CLDTPPR) = AIJ(I,J,IJ_CLDTPPR) & + + PLB(ltopcl+1) + AIJ(I,J,IJ_CLDTPT) = AIJ(I,J,IJ_CLDTPT) & + + (TLB(ltopcl+1)-tf) + CTT(i,j) = (TLB(ltopcl+1)-tf) + CTP(i,j) = PLB(ltopcl+1) + !**** Save cloud tau=1 related diagnostics here (opt.depth=1 level) + tauup = 0. + DO L = LM, 1, -1 + taucl = TAUWC(l) + TAUIC(l) + taudn = tauup + taucl + IF ( taudn>1. ) THEN + AIJ(i,j,ij_cldcv1) = AIJ(i,j,ij_cldcv1) + 1. + wtlin = (1.-tauup)/taucl + AIJ(i,j,ij_cldt1t) = AIJ(i,j,ij_cldt1t) & + + (TLB(l+1)-tf+(TLB(l)-TLB(l+1))*wtlin) + AIJ(i,j,ij_cldt1p) = AIJ(i,j,ij_cldt1p) & + + (PLB(l+1)+(PLB(l)-PLB(l+1))*wtlin) + EXIT + ENDIF + tauup = taudn + ENDDO + ENDIF + + ENDDO + !**** + !**** END OF MAIN LOOP FOR I INDEX + !**** + + ENDDO + !**** + !**** END OF MAIN LOOP FOR J INDEX + !**** + +#ifdef mjo_subdd + swu_cnt = swu_cnt + 1. +#endif + + IF ( kradia>0 ) THEN + CALL STOPTIMER('RADIA()') + RETURN + ENDIF + !**** Stop if temperatures were out of range + !**** Now only warning messages are printed for T,Q errors + ! IF(ICKERR.GT.0) + ! call stop_model('In Radia : Temperature out of range',11) + ! IF(JCKERR.GT.0) call stop_model('In Radia : RQT out of range',11) + ! IF(KCKERR.GT.0) call stop_model('In Radia : Q<0',255) + !**** save all input data to disk if kradia<0 + ! LM+LM_REQ+1+ + ! ,(((GTEMPR(k,i,j),k=1,4),i=1,im),j=1,jm) ! (4+) + ! LM+1+3*LM+1+1+ + ! 1+1+1+1+1+ + ! 3+1+.5+.5+ + !**** output data : really needed only if kradia=2 + ! 2+1+1 + IF ( kradia<0 ) WRITE (iu_rad) itime, T, RQT, atmsrf%TSAVG, QR,& + P, CLDinfo, rsi, zsi, wsoil, & + atmsrf%WSAVG, snowi, & + atmgla%SNOW, atmlnd%SNOWE, & + snoage, fmp_com, flag_dsws, & + ltropo, atmlnd%FR_SNOW_RAD, & + dlake, flake, srhra, trhra, & + itime + ! 2(LM+LM_REQ+1) + !**** + !**** ACCUMULATE THE RADIATION DIAGNOSTICS + !**** + bydpreq( : ) = 1D0/(req_fac_d( : )*pmtop) + DO J = J_0, J_1 + DO I = I_0, IMAXJ(J) + DO l = 1, lm + CALL INC_AJL(i,j,l,jl_srhr,SRHR(L,I,J)*COSZ2(I,J)) + CALL INC_AJL(i,j,l,jl_trcr,TRHR(L,I,J)) + ENDDO + CSZ2 = COSZ2(I,J) + JR = JREG(I,J) + DO LR = 1, LM_REQ + CALL INC_ASJL(i,j,lr,3,bydpreq(lr)*SRHRS(LR,I,J)*CSZ2) + CALL INC_ASJL(i,j,lr,4,bydpreq(lr)*TRHRS(LR,I,J)) + ENDDO + DO KR = 1, NDIUPT + IF ( I==IJDD(1,KR) .AND. J==IJDD(2,KR) ) THEN +#if (defined TRACERS_AMP) || (defined TRACERS_TOMAS) + TMP(idd_aot) = SUM(aesqex(1:LM, 6,1 : nraero_aod)) + !*OPNSKY + TMP(idd_aot2) = SUM(aesqsc(1:LM, 6,1 : nraero_aod)) + !*OPNSKY +#endif + TMP(IDD_PALB) = (1.-SNFS(3,I,J)/S0) + TMP(IDD_GALB) = (1.-ALB(I,J,1)) + TMP(IDD_ABSA) = (SNFS(3,I,J)-SRHR(0,I,J))*CSZ2 + DO INCH = 1, NRAD + IHM = 1 + (JTIME+INCH-1)*HR_IN_DAY/NDAY + IH = IHM + IF ( IH>HR_IN_DAY ) IH = IH - HR_IN_DAY + ADIURN(IDXB( : ),KR,IH) = ADIURN(IDXB( : ),KR,IH) & + + TMP(IDXB( : )) +#ifdef USE_HDIURN + IHM = IHM + (DATE-1)*HR_IN_DAY + IF ( IHM<=HR_IN_MONTH ) HDIURN(IDXB( : ),KR,IHM) & + = HDIURN(IDXB( : ),KR,IHM) + TMP(IDXB( : )) +#endif + ENDDO + ENDIF + ENDDO + + DO IT = 1, NTYPE + CALL INC_AJ(I,J,IT,J_SRINCP0,(S0*CSZ2)*FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,J_SRNFP0,(SNFS(3,I,J)*CSZ2) & + *FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,J_SRINCG, & + (SRHR(0,I,J)*CSZ2/(ALB(I,J,1)+1.D-20)) & + *FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,J_BRTEMP,BTMPW(I,J)*FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,J_TRINCG,TRINCG(I,J)*FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,J_HSURF,-(TNFS(3,I,J)-TNFS(1,I,J)) & + *FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,J_TRNFP0,-TNFS(3,I,J)*FTYPE(IT,I,J)& + ) + CALL INC_AJ(I,J,IT,J_TRNFP1,-TNFS(2,I,J)*FTYPE(IT,I,J)& + ) + CALL INC_AJ(I,J,IT,J_SRNFP1,SNFS(2,I,J) & + *CSZ2*FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,J_HATM,-(TNFS(2,I,J)-TNFS(1,I,J)) & + *FTYPE(IT,I,J)) +#ifdef HEALY_LM_DIAGS + CALL INC_AJ(I,J,IT,j_vtau,10.*-20*VTAULAT(J) & + *FTYPE(IT,I,J)) + CALL INC_AJ(I,J,IT,j_ghg,10.*ghg_totforc*FTYPE(IT,I,J)& + ) +#endif + + ENDDO + !**** Note : confusing because the types for radiation are a subset + CALL INC_AJ(I,J,ITOCEAN,J_SRNFG,(FSF(1,I,J)*CSZ2) & + *FOCEAN(I,J)*(1.-RSI(I,J))) + CALL INC_AJ(I,J,ITLAKE,J_SRNFG,(FSF(1,I,J)*CSZ2) & + *FLAKE(I,J)*(1.-RSI(I,J))) + CALL INC_AJ(I,J,ITEARTH,J_SRNFG,(FSF(4,I,J)*CSZ2) & + *FEARTH(I,J)) + CALL INC_AJ(I,J,ITLANDI,J_SRNFG,(FSF(3,I,J)*CSZ2) & + *FLICE(I,J)) + CALL INC_AJ(I,J,ITOICE,J_SRNFG,(FSF(2,I,J)*CSZ2) & + *FOCEAN(I,J)*RSI(I,J)) + CALL INC_AJ(I,J,ITLKICE,J_SRNFG,(FSF(2,I,J)*CSZ2) & + *FLAKE(I,J)*RSI(I,J)) + !**** + CALL INC_AREG(I,J,JR,J_SRINCP0,(S0*CSZ2)) + CALL INC_AREG(I,J,JR,J_SRNFP0,(SNFS(3,I,J)*CSZ2)) + CALL INC_AREG(I,J,JR,J_SRNFP1,(SNFS(2,I,J)*CSZ2)) + CALL INC_AREG(I,J,JR,J_SRINCG, & + (SRHR(0,I,J)*CSZ2/(ALB(I,J,1)+1.D-20))) + CALL INC_AREG(I,J,JR,J_HATM,-(TNFS(2,I,J)-TNFS(1,I,J))) + CALL INC_AREG(I,J,JR,J_SRNFG,(SRHR(0,I,J)*CSZ2)) + CALL INC_AREG(I,J,JR,J_HSURF,-(TNFS(3,I,J)-TNFS(1,I,J))) + CALL INC_AREG(I,J,JR,J_BRTEMP,BTMPW(I,J)) + CALL INC_AREG(I,J,JR,J_TRINCG,TRINCG(I,J)) + CALL INC_AREG(I,J,JR,J_TRNFP0,-TNFS(3,I,J)) + CALL INC_AREG(I,J,JR,J_TRNFP1,-TNFS(2,I,J)) + DO K = 2, 9 + JK = AJ_ALB_INDS(K-1) + ! accumulate 8 radiation diags. + DO IT = 1, NTYPE + CALL INC_AJ(I,J,IT,JK,(S0*CSZ2)*ALB(I,J,K) & + *FTYPE(IT,I,J)) + ENDDO + CALL INC_AREG(I,J,JR,JK,(S0*CSZ2)*ALB(I,J,K)) + ENDDO + AIJ(I,J,IJ_SRINCG) = AIJ(I,J,IJ_SRINCG) & + + (SRHR(0,I,J)*CSZ2/(ALB(I,J,1) & + +1.D-20)) + AIJ(I,J,IJ_SRNFG) = AIJ(I,J,IJ_SRNFG) & + + (SRHR(0,I,J)*CSZ2) + AIJ(I,J,IJ_BTMPW) = AIJ(I,J,IJ_BTMPW) + BTMPW(I,J) + AIJ(I,J,IJ_SRREF) = AIJ(I,J,IJ_SRREF) & + + S0*CSZ2*ALB(I,J,2) + AIJ(I,J,IJ_SRVIS) = AIJ(I,J,IJ_SRVIS) & + + S0*CSZ2*ALB(I,J,4) + AIJ(I,J,IJ_TRNFP0) = AIJ(I,J,IJ_TRNFP0) - TNFS(3,I,J) + AIJ(I,J,IJ_SRNFP0) = AIJ(I,J,IJ_SRNFP0) & + + (SNFS(3,I,J)*CSZ2) + AIJ(I,J,IJ_RNFP1) = AIJ(I,J,IJ_RNFP1) & + + (SNFS(2,I,J)*CSZ2-TNFS(2,I,J)) + AIJ(I,J,ij_srvdir) = AIJ(I,J,ij_srvdir) + FSRDIR(I,J) & + *SRVISSURF(I,J) + AIJ(I,J,IJ_SRVISSURF) = AIJ(I,J,IJ_SRVISSURF) & + + SRVISSURF(I,J) +#ifdef mjo_subdd + OLR_ACC(I,J) = OLR_ACC(I,J) - TNFS(3,I,J) +#endif + !**** CRF diags if required + IF ( moddrf==0 ) THEN + IF ( cloud_rad_forc>0 ) THEN + ! CRF diagnostics + AIJ(I,J,IJ_SWCRF) = AIJ(I,J,IJ_SWCRF) & + + (SNFS(3,I,J)-SNFSCRF(I,J))*CSZ2 + AIJ(I,J,IJ_LWCRF) = AIJ(I,J,IJ_LWCRF) & + - (TNFS(3,I,J)-TNFSCRF(I,J)) + ENDIF + IF ( cloud_rad_forc==2 ) THEN + ! CRF diagnostics without aerosols and Ox + AIJ(I,J,IJ_SWCRF2) = AIJ(I,J,IJ_SWCRF2) & + + (SNFS(3,I,J)-SNFSCRF2(I,J))*CSZ2 + AIJ(I,J,IJ_LWCRF2) = AIJ(I,J,IJ_LWCRF2) & + - (TNFS(3,I,J)-TNFSCRF2(I,J)) + ENDIF + + !**** AERRF diags if required + IF ( aer_rad_forc>0 ) THEN + DO N = 1, 8 + AIJ(I,J,IJ_SWAERRF+N-1) & + = AIJ(I,J,IJ_SWAERRF+N-1) & + + (SNFS(3,I,J)-SNFSAERRF(N,I,J))*CSZ2 + AIJ(I,J,IJ_LWAERRF+N-1) & + = AIJ(I,J,IJ_LWAERRF+N-1) & + - (TNFS(3,I,J)-TNFSAERRF(N,I,J)) + AIJ(I,J,IJ_SWAERSRF+N-1) & + = AIJ(I,J,IJ_SWAERSRF+N-1) & + + (SNFS(1,I,J)-SNFSAERRF(N+8,I,J))*CSZ2 + AIJ(I,J,IJ_LWAERSRF+N-1) & + = AIJ(I,J,IJ_LWAERSRF+N-1) & + - (TNFS(1,I,J)-TNFSAERRF(N+8,I,J)) + ENDDO + AIJ(I,J,IJ_SWAERRFNT) = AIJ(I,J,IJ_SWAERRFNT) & + + (SNFS(3,I,J)-SNFSAERRF(17,I,J))*CSZ2 + AIJ(I,J,IJ_LWAERRFNT) = AIJ(I,J,IJ_LWAERRFNT) & + - (TNFS(3,I,J)-TNFSAERRF(17,I,J)) + AIJ(I,J,IJ_SWAERSRFNT) = AIJ(I,J,IJ_SWAERSRFNT) & + + (SNFS(1,I,J)-SNFSAERRF(18,I,J))*CSZ2 + AIJ(I,J,IJ_LWAERSRFNT) = AIJ(I,J,IJ_LWAERSRFNT) & + - (TNFS(1,I,J)-TNFSAERRF(18,I,J)) + ENDIF + + !***** Clear Sky and All Sky TOA Forcing without aerosol + AIJ(I,J,IJ_SW_AS_noA) = AIJ(I,J,IJ_SW_AS_noA) & + + (SNFS(3,I,J)-SNFS_AS_noA(I,J))*CSZ2 + AIJ(I,J,IJ_LW_AS_noA) = AIJ(I,J,IJ_LW_AS_noA) & + - (TNFS(3,I,J)-TNFS_AS_noA(I,J)) + AIJ(I,J,IJ_SW_CS_noA) = AIJ(I,J,IJ_SW_CS_noA) & + + (SNFS(3,I,J)-SNFS_CS_noA(I,J))*CSZ2 + AIJ(I,J,IJ_LW_CS_noA) = AIJ(I,J,IJ_LW_CS_noA) & + - (TNFS(3,I,J)-TNFS_CS_noA(I,J)) + + +#ifdef TRACERS_GC + !**** Generic diagnostics for radiative forcing calculations + !**** Depending on whether tracers radiative interaction is turned on, + !**** diagnostic sign changes (for aerosols) +! rsign_aer = 1. + rsign_chem = -1. +! IF ( rad_interact_aer>0 ) rsign_aer = -1. +! !**** define SNFS/TNFS level (TOA/TROPO) for calculating forcing +! LFRC = 3 ! TOA +! IF ( rad_forc_lev>0 ) LFRC = 4 + + ! TOA + SAVE_RF(I,J,5,1) = rsign_chem*(SNFST_o3ref(2,I,J)-SNFS(3,I,J))*CSZ2 ! SW + SAVE_RF(I,J,5,2) = -rsign_chem*(TNFST_o3ref(2,I,J)-TNFS(3,I,J)) ! LW + ! Topopause + SAVE_RF_TP(I,J,5,1) = rsign_chem*(SNFST_o3ref(1,I,J)-SNFS(4,I,J))*CSZ2 ! SW + SAVE_RF_TP(I,J,5,2) = -rsign_chem*(TNFST_o3ref(1,I,J)-TNFS(4,I,J)) ! LW + ! Whole atmosphere + SAVE_RF_3D(I,J,:,5,1) = rsign_chem*(SNFS_3D_pert(I,J,:,5)-SNFS_3D(I,J,:))*CSZ2 ! SW + SAVE_RF_3D(I,J,:,5,2) = -rsign_chem*(TNFS_3D_pert(I,J,:,5)-TNFS_3D(I,J,:)) ! LW + +#endif + +#if (defined TRACERS_AEROSOLS_Koch) || (defined TRACERS_DUST) ||\ + (defined TRACERS_SPECIAL_Shindell) || (defined TRACERS_MINERALS) ||\ + (defined TRACERS_AMP) || (defined TRACERS_TOMAS) ||\ + (defined TRACERS_AEROSOLS_SEASALT) + !**** Generic diagnostics for radiative forcing calculations + !**** Depending on whether tracers radiative interaction is turned on, + !**** diagnostic sign changes (for aerosols) + rsign_aer = 1. + rsign_chem = -1. + IF ( rad_interact_aer>0 ) rsign_aer = -1. + !**** define SNFS/TNFS level (TOA/TROPO) for calculating forcing + LFRC = 3 ! TOA + IF ( rad_forc_lev>0 ) LFRC = 4 + ! TROPOPAUSE +#ifdef BC_ALB + IF ( IJTS_ALB(1)>0 .AND. bc_snow_present(i,j) .AND. & + csz2>0. ) THEN + TAIJS(I,J,ijts_sunlit_snow) & + = TAIJS(I,J,ijts_sunlit_snow) + 1. + TAIJS(I,J,IJTS_ALB(1)) = TAIJS(I,J,IJTS_ALB(1)) & + + dALBsnBC(I,J) + ! + 100.d0*(ALBNBC(I,J)-ALB(I,J,1)) + ENDIF + IF ( IJTS_ALB(2)>0 ) TAIJS(i,j,IJTS_ALB(2)) & + = TAIJS(i,j,IJTS_ALB(2)) & + + (SNFS(3,I,J)-NFSNBC(I,J))*CSZ2 +#endif /* BC_ALB */ + ! .......... + ! accumulation of forcings for tracers for which nraero_rf fields are + ! defined + ! .......... + nsub_ntrix = 0 + DO n = 1, nraero_rf + SELECT CASE (TRNAME(NTRIX_RF(n))) + CASE ('Clay','ClayIlli','ClayKaol','ClaySmec', & + &'ClayCalc','ClayQuar','ClayFeld','ClayHema', & + &'ClayGyps','ClayIlHe','ClayKaHe','ClaySmHe', & + &'ClayCaHe','ClayQuHe','ClayFeHe','ClayGyHe') + nsub_ntrix(NTRIX_RF(n)) & + = nsub_ntrix(NTRIX_RF(n)) + 1 + ! shortwave forcing (TOA or TROPO) of Clay sub size classes + IF ( IJTS_FCSUB(1,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(1,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(1,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + + rsign_aer*(snfst(2,n,i,j)-snfs(lfrc,i,j))& + *csz2 + ! longwave forcing (TOA or TROPO) of Clay size sub classes + IF ( IJTS_FCSUB(2,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(2,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(2,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + - rsign_aer*(tnfst(2,n,i,j)-tnfs(lfrc,i,j)) + ! shortwave forcing (TOA or TROPO) clear sky of Clay sub size classes + IF ( IJTS_FCSUB(5,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(5,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(5,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + + rsign_aer*(snfst(2,n,i,j)-snfs(lfrc,i,j))& + *csz2*(1.D0-cfrac(i,j)) + ! longwave forcing (TOA or TROPO) clear sky of Clay sub size classes + IF ( IJTS_FCSUB(6,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(6,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(6,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + - rsign_aer*(tnfst(2,n,i,j)-tnfs(lfrc,i,j))& + *(1.D0-cfrac(i,j)) + ! shortwave forcing at surface (if required) of Clay sub size classes + IF ( IJTS_FCSUB(3,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(3,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(3,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + + rsign_aer*(snfst(1,n,i,j)-snfs(1,i,j)) & + *csz2 + ! longwave forcing at surface (if required) of Clay sub size classes + IF ( IJTS_FCSUB(4,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(4,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(4,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + - rsign_aer*(tnfst(1,n,i,j)-tnfs(1,i,j)) + ! shortwave forcing at surface clear sky (if required) of Clay sub size classes + IF ( IJTS_FCSUB(7,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(7,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(7,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + + rsign_aer*(snfst(1,n,i,j)-snfs(1,i,j)) & + *csz2*(1.D0-cfrac(i,j)) + ! longwave forcing at surface clear sky (if required) of Clay sub size classes + IF ( IJTS_FCSUB(8,NTRIX_RF(n),nsub_ntrix( & + NTRIX_RF(n)))>0 ) & + TAIJS(i,j,IJTS_FCSUB(8,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + = TAIJS(i,j,IJTS_FCSUB(8,NTRIX_RF(n), & + nsub_ntrix(NTRIX_RF(n)))) & + - rsign_aer*(tnfst(1,n,i,j)-tnfs(1,i,j)) & + *(1.D0-cfrac(i,j)) + CASE DEFAULT + SELECT CASE (TRNAME(NTRIX_RF(n))) + CASE ('seasalt2') + CYCLE + ENDSELECT + ! shortwave forcing (TOA or TROPO) + IF ( IJTS_FC(1,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(1,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(1,NTRIX_RF(n))) & + + rsign_aer*(SNFST(2,N,I,J)-SNFS(LFRC,I,J))& + *CSZ2 + ! longwave forcing (TOA or TROPO) + IF ( IJTS_FC(2,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(2,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(2,NTRIX_RF(n))) & + - rsign_aer*(TNFST(2,N,I,J)-TNFS(LFRC,I,J)) + ! shortwave forcing (TOA or TROPO) clear sky + IF ( IJTS_FC(5,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(5,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(5,NTRIX_RF(n))) & + + rsign_aer*(SNFST(2,N,I,J)-SNFS(LFRC,I,J))& + *CSZ2*(1.D0-CFRAC(I,J)) + ! longwave forcing (TOA or TROPO) clear sky + IF ( IJTS_FC(6,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(6,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(6,NTRIX_RF(n))) & + - rsign_aer*(TNFST(2,N,I,J)-TNFS(LFRC,I,J))& + *(1.D0-CFRAC(I,J)) + ! shortwave forcing at surface (if required) + IF ( IJTS_FC(3,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(3,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(3,NTRIX_RF(n))) & + + rsign_aer*(SNFST(1,N,I,J)-SNFS(1,I,J)) & + *CSZ2 + ! longwave forcing at surface (if required) + IF ( IJTS_FC(4,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(4,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(4,NTRIX_RF(n))) & + - rsign_aer*(TNFST(1,N,I,J)-TNFS(1,I,J)) + ! shortwave forcing at surface clear sky (if required) + IF ( IJTS_FC(7,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(7,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(7,NTRIX_RF(n))) & + + rsign_aer*(SNFST(1,N,I,J)-SNFS(1,I,J)) & + *CSZ2*(1.D0-CFRAC(I,J)) + ! longwave forcing at surface clear sky (if required) + IF ( IJTS_FC(8,NTRIX_RF(n))>0 ) & + TAIJS(i,j,IJTS_FC(8,NTRIX_RF(n))) & + = TAIJS(i,j,IJTS_FC(8,NTRIX_RF(n))) & + - rsign_aer*(TNFST(1,N,I,J)-TNFS(1,I,J)) & + *(1.D0-CFRAC(I,J)) + ENDSELECT + ENDDO + ! n=1,nraero_rf + + ! .......... + ! accumulation of forcings for special case ozone (nraero_rf fields + ! not defined) Warning : indicies used differently, since we don't + ! need CS or Surface, but are doing both TOA and Ltropo : + ! .......... + IF ( n_Ox>0 ) THEN + ! ------ main Ox tracer ------- + ! shortwave forcing at tropopause + IF ( IJTS_FC(1,n_Ox)>0 ) TAIJS(i,j,IJTS_FC(1,n_Ox))& + = TAIJS(i,j,IJTS_FC(1,n_Ox)) & + + rsign_chem*(SNFST_o3ref(1,I,J)-SNFS(4,I,J)& + )*CSZ2 + ! longwave forcing at tropopause + IF ( IJTS_FC(2,n_Ox)>0 ) TAIJS(i,j,IJTS_FC(2,n_Ox))& + = TAIJS(i,j,IJTS_FC(2,n_Ox)) & + - rsign_chem*(TNFST_o3ref(1,I,J)-TNFS(4,I,J)& + ) + ! shortwave forcing at TOA + IF ( IJTS_FC(3,n_Ox)>0 ) TAIJS(i,j,IJTS_FC(3,n_Ox))& + = TAIJS(i,j,IJTS_FC(3,n_Ox)) & + + rsign_chem*(SNFST_o3ref(2,I,J)-SNFS(3,I,J)& + )*CSZ2 + ! longwave forcing at TOA + IF ( IJTS_FC(4,n_Ox)>0 ) TAIJS(i,j,IJTS_FC(4,n_Ox))& + = TAIJS(i,j,IJTS_FC(4,n_Ox)) & + - rsign_chem*(TNFST_o3ref(2,I,J)-TNFS(3,I,J)& + ) + ENDIF +#ifdef AUXILIARY_OX_RADF + ! shortwave forcing at tropopause + +#ifdef AUX_OX_RADF_TROP + IF ( IJTS_AUXFC(1)>0 ) TAIJS(i,j,IJTS_AUXFC(1)) & + = TAIJS(i,j,IJTS_AUXFC(1)) & + + rsign_chem*(SNFST_o3ref(5,I,J) & + -SNFST_o3ref(3,I,J))*CSZ2 +#else + IF ( IJTS_AUXFC(1)>0 ) TAIJS(i,j,IJTS_AUXFC(1)) & + = TAIJS(i,j,IJTS_AUXFC(1)) & + + rsign_chem*(SNFST_o3ref(1,I,J) & + -SNFST_o3ref(3,I,J))*CSZ2 +#endif + ! longwave forcing at tropopause +#ifdef AUX_OX_RADF_TROP + IF ( IJTS_AUXFC(2)>0 ) TAIJS(i,j,IJTS_AUXFC(2)) & + = TAIJS(i,j,IJTS_AUXFC(2)) & + - rsign_chem*(TNFST_o3ref(5,I,J) & + -TNFST_o3ref(3,I,J)) +#else + IF ( IJTS_AUXFC(2)>0 ) TAIJS(i,j,IJTS_AUXFC(2)) & + = TAIJS(i,j,IJTS_AUXFC(2)) & + - rsign_chem*(TNFST_o3ref(1,I,J) & + -TNFST_o3ref(3,I,J)) +#endif + ! shortwave forcing at TOA + IF ( IJTS_AUXFC(3)>0 ) TAIJS(i,j,IJTS_AUXFC(3)) & + = TAIJS(i,j,IJTS_AUXFC(3)) & + + rsign_chem*(SNFST_o3ref(2,I,J) & + -SNFST_o3ref(4,I,J))*CSZ2 + ! longwave forcing at TOA + IF ( IJTS_AUXFC(4)>0 ) TAIJS(i,j,IJTS_AUXFC(4)) & + = TAIJS(i,j,IJTS_AUXFC(4)) & + - rsign_chem*(TNFST_o3ref(2,I,J) & + -TNFST_o3ref(4,I,J)) +#endif /* AUXILIARY_OX_RADF */ +#if (defined SHINDELL_STRAT_EXTRA) &(defined ACCMIP_LIKE_DIAGS) + ! ------ diag stratOx tracer ------- + ! note for now for this diag, there is a failsafe that stops model + ! if clim_interact_chem .le. 0 when the below would be wrong : + ! shortwave forcing at tropopause + IF ( IJTS_FC(1,n_stratOx)>0 ) & + TAIJS(i,j,IJTS_FC(1,n_stratOx)) & + = TAIJS(i,j,IJTS_FC(1,n_stratOx)) & + + rsign_chem*(SNFST_o3ref(1,I,J) & + -SNFST_stratOx(1,I,J))*CSZ2 + ! longwave forcing at tropopause + IF ( IJTS_FC(2,n_stratOx)>0 ) & + TAIJS(i,j,IJTS_FC(2,n_stratOx)) & + = TAIJS(i,j,IJTS_FC(2,n_stratOx)) & + - rsign_chem*(TNFST_o3ref(1,I,J) & + -TNFST_stratOx(1,I,J)) + ! shortwave forcing at TOA + IF ( IJTS_FC(3,n_stratOx)>0 ) & + TAIJS(i,j,IJTS_FC(3,n_stratOx)) & + = TAIJS(i,j,IJTS_FC(3,n_stratOx)) & + + rsign_chem*(SNFST_o3ref(2,I,J) & + -SNFST_stratOx(2,I,J))*CSZ2 + ! longwave forcing at TOA + IF ( IJTS_FC(4,n_stratOx)>0 ) & + TAIJS(i,j,IJTS_FC(4,n_stratOx)) & + = TAIJS(i,j,IJTS_FC(4,n_stratOx)) & + - rsign_chem*(TNFST_o3ref(2,I,J) & + -TNFST_stratOx(2,I,J)) +#endif /* SHINDELL_STRAT_EXTRA &ACCMIP_LIKE_DIAGS*/ +#endif /* any of various tracer groups defined */ + +#ifdef TRACERS_GC + !============================================ + ! Methane, N2O, CFC11 and CFC12 + !============================================ + DO nf = 1, 4 + + ! TOA + SAVE_RF(I,J,nf,1) = (SNFS(3,I,J)-SNFS_ghg(nf,I,J))*CSZ2 ! SW + SAVE_RF(I,J,nf,2) = (TNFS_ghg(nf,I,J)-TNFS(3,I,J)) ! LW + + IF ( IJ_FCGHG(1,nf)>0 ) & + AIJ(i,j,IJ_FCGHG(1,nf)) = AIJ(i,j,IJ_FCGHG(1,nf)) & + + (SNFS(3,I,J)-SNFS_ghg(nf,I,J))*CSZ2 + IF ( IJ_FCGHG(2,nf)>0 ) & + AIJ(i,j,IJ_FCGHG(2,nf)) = AIJ(i,j,IJ_FCGHG(2,nf)) & + + (TNFS_ghg(nf,I,J)-TNFS(3,I,J)) + + ! Tropopause + SAVE_RF_TP(I,J,nf,1) = (SNFS(4,I,J)-SNFS_ghg_tp(nf,I,J))*CSZ2 ! SW + SAVE_RF_TP(I,J,nf,2) = (TNFS_ghg_tp(nf,I,J)-TNFS(4,I,J)) ! LW + + ! Whole Atmosphere + SAVE_RF_3D(I,J,:,nf,1) = (SNFS_3D(I,J,:)-SNFS_3D_pert(I,J,:,nf))*CSZ2 ! SW + SAVE_RF_3D(I,J,:,nf,2) = (TNFS_3D_pert(I,J,:,nf)-TNFS_3D(I,J,:)) ! LW + + ENDDO + +#endif + +#ifdef ACCMIP_LIKE_DIAGS +#ifndef SKIP_ACCMIP_GHG_RADF_DIAGS + DO nf = 1, 4 + ! CH4, N2O, CFC11, and CFC12 : + ! shortwave GHG forcing at TOA + IF ( IJ_FCGHG(1,nf)>0 ) AIJ(i,j,IJ_FCGHG(1,nf)) & + = AIJ(i,j,IJ_FCGHG(1,nf)) & + + (SNFS(3,I,J)-SNFS_ghg(nf,I,J))*CSZ2 + ! longwave GHG forcing at TOA + IF ( IJ_FCGHG(2,nf)>0 ) AIJ(i,j,IJ_FCGHG(2,nf)) & + = AIJ(i,j,IJ_FCGHG(2,nf)) & + + (TNFS_ghg(nf,I,J)-TNFS(3,I,J)) + ENDDO +#endif /* NOT DEFINED SKIP_ACCMIP_GHG_RADF_DIAGS */ +#endif /* ACCMIP_LIKE_DIAGS */ + +#ifdef CACHED_SUBDD +#if (defined TRACERS_AEROSOLS_Koch) || (defined TRACERS_DUST) ||\ + (defined TRACERS_SPECIAL_Shindell) || (defined TRACERS_MINERALS) ||\ + (defined TRACERS_AMP) || (defined TRACERS_TOMAS) ||\ + (defined TRACERS_AEROSOLS_SEASALT) + IF ( nraero_rf>0 ) THEN + swfrc(i,j,1 : nraero_rf) & + = rsign_aer*(SNFST(2,1 : nraero_rf,I,J) & + -SNFS(LFRC,I,J))*CSZ2 + lwfrc(i,j,1 : nraero_rf) & + = -rsign_aer*(TNFST(2,1 : nraero_rf,I,J) & + -TNFS(LFRC,I,J)) + ENDIF +#endif /* any of various tracer groups defined */ +#endif /* CACHED_SUBDD */ + + ENDIF + ENDDO + ENDDO + +#ifdef mjo_subdd + OLR_cnt = OLR_cnt + 1. +#endif + + DO J = J_0, J_1 + DO I = I_0, I_1 + DO L = 1, LM + AIJL(i,j,l,IJL_RC) = AIJL(i,j,l,IJL_RC) & + + (SRHR(L,I,J)*COSZ2(I,J) & + +TRHR(L,I,J)) +#ifdef mjo_subdd + SWHR(I,J,L) = SWHR(I,J,L) + SRHR(L,I,J)*COSZ2(I,J) & + *bysha*BYMA(L,I,J) + LWHR(I,J,L) = LWHR(I,J,L) + TRHR(L,I,J) & + *bysha*BYMA(L,I,J) +#endif + ENDDO + ENDDO + ENDDO +#ifdef mjo_subdd + SWHR_cnt = SWHR_cnt + 1 + LWHR_cnt = LWHR_cnt + 1 +#endif + +#ifdef CACHED_SUBDD + DO k = 1, subdd_ngroups + subdd => SUBDD_GROUPS(k) + subdd%NACC(subdd%SUBDD_PERIOD,sched_rad) & + = subdd%NACC(subdd%SUBDD_PERIOD,sched_rad) + 1 + ENDDO + !**** + !**** Collect some high-frequency outputs + !**** + CALL FIND_GROUPS('rijh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + CASE ('olrrad') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = tnfs(3,i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('olrcs') + IF ( cloud_rad_forc<=0. ) CALL STOP_MODEL( & + &'diagnostic olrcs needs cloud_rad_forc>0',255) + CALL INC_SUBDD(subdd,k,TNFSCRF) + CASE ('lwds') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = TRHR(0,i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('lwdscs') + IF ( cloud_rad_forc<=0. ) CALL STOP_MODEL( & + &'diagnostic lwdscs needs cloud_rad_forc>0',255) + CALL INC_SUBDD(subdd,k,lwdncs) + CASE ('lwus') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = TRHR(0,i,j) + tnfs(1,i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('swus') + CALL INC_SUBDD(subdd,k,SWUS) + CASE ('swds') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SRDN(i,j)*cosz2(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('swdf') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = FSRDIF(i,j) + DIFNIR(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('swtoa') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = snfs(3,i,j)*cosz2(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + !Net solar flux at surface : + CASE ('swns') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = snfs(1,i,j)*cosz2(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + !Net Longwave flux at surface : + CASE ('lwns') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = tnfs(1,i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('totcld') + CALL INC_SUBDD(subdd,k,cfrac) + CASE ('totcld_diag') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + CALL GET_CLD_OVERLAP(lm,CLDSS( : ,i,j), & + CLDMCL=CLDMC( : ,i,j),CLDTOT=sddarr(i,j)) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('cldss_2d') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + CALL GET_CLD_OVERLAP(lm,CLDSS( : ,i,j), & + CLDSS=sddarr(i,j)) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('cldmc_2d') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + CALL GET_CLD_OVERLAP(lm,CLDSS( : ,i,j), & + CLDMCL=CLDMC( : ,i,j),CLDMC=sddarr(i,j)) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('wtrcld') + CALL INC_SUBDD(subdd,k,WTRCLD) + CASE ('icecld') + CALL INC_SUBDD(subdd,k,ICECLD) + CASE ('cod') + CALL INC_SUBDD(subdd,k,TAUSUMW) + CASE ('cid') + CALL INC_SUBDD(subdd,k,TAUSUMI) + CASE ('ctp') + CALL INC_SUBDD(subdd,k,CTP) + CASE ('ctt') + CALL INC_SUBDD(subdd,k,CTT) +#ifdef CFMIP3_SUBDD + CASE ('rtmt') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = (snfs(3,i,j)*cosz2(i,j)) & + - tnfs(2,i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('swut') + CALL INC_SUBDD(subdd,k,swut) + CASE ('swutcs') + CALL INC_SUBDD(subdd,k,swutcs) + CASE ('clwvi') + CALL INC_SUBDD(subdd,k,cfmip_twp) + CASE ('swdcls') + CALL INC_SUBDD(subdd,k,swdcls) + CASE ('swucls') + CALL INC_SUBDD(subdd,k,swucls) + CASE ('swdt') + CALL INC_SUBDD(subdd,k,swdt) +#endif + ENDSELECT + + ENDDO + ENDDO + +#ifdef GCAP + CALL FIND_GROUPS('aijlh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + CASE ('OPTDEPTH') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + ! Weight mean cloud optical thickness by relative 2-D area fractions + sddarr3d(i,j,l) & + = (CLDSS(l,i,j)*TAUSS(l,i,j)+CLDMC(l,i,j) & + *TAUMC(l,i,j)) & + /(CLDSS(l,i,j)+CLDMC(l,i,j)+teeny) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('CLOUD') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) & + = MIN(1.0,CLDSS3D(l,i,j)+CLDMC(l,i,j)) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('TAUCLI') + CALL INC_SUBDD(subdd,k,taui3d) + CASE ('TAUCLW') + CALL INC_SUBDD(subdd,k,tauw3d) + ENDSELECT + ENDDO + ENDDO + + CALL FIND_GROUPS('aijh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + CASE ('PARDF') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = 0.82*SRVISSURF(i,j) & + *(1D0-FSRDIR(i,j))*COSZ1(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('PARDR') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = 0.82*SRVISSURF(i,j)*(FSRDIR(i,j)) & + *COSZ1(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('ALBEDO') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + ! Saves non-zero albedos for nighttime + IF ( SRDN(i,j)>0 ) SAVE_ALB(i,j) & + = 1D0 - ALB(i,j,1) + sddarr(i,j) = SAVE_ALB(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('CLDTOT') + ! totcld in standard model + CALL INC_SUBDD(subdd,k,cfrac) + CASE ('SWGDN') + ! swds in standard model + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SRDN(i,j)*cosz2(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('TO3') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_TO3(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + ENDSELECT + ENDDO + ENDDO +#endif + +#ifdef TRACERS_GC + CALL FIND_GROUPS('aijh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + + !================================================== + ! Top of the Atmosphere + !================================================== + CASE ('SW_CH4') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,1,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_CH4') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,1,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_N2O') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,2,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_N2O') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,2,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_CFC11') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,3,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_CFC11') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,3,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_CFC12') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,4,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_CFC12') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,4,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_O3') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,5,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_O3') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF(i,j,5,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + + !================================================== + ! Radiative Forcing @ Tropopause + !================================================== + CASE ('SW_CH4_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,1,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_CH4_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,1,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_N2O_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,2,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_N2O_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,2,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_CFC11_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,3,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_CFC11_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,3,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_CFC12_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,4,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_CFC12_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,4,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('SW_O3_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,5,1) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('LW_O3_TP') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_RF_TP(i,j,5,2) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + + ENDSELECT + ENDDO + ENDDO + + CALL FIND_GROUPS('rijleh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + + !================================================== + ! Whole Atmosphere Radiative Forcing + !================================================== + CASE ('SW_FLUX') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,0,1) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('LW_FLUX') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,0,2) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('SW_CH4_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,1,1) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('LW_CH4_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,1,2) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('SW_N2O_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,2,1) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('LW_N2O_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,2,2) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('SW_CFC11_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,3,1) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('LW_CFC11_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,3,2) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('SW_CFC12_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,4,1) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('LW_CFC12_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,4,2) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('SW_O3_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,5,1) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + CASE ('LW_O3_3D') + SDDARRFLX = 0. + DO l = 1, LM+LM_REQ+1 + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + SDDARRFLX(i,j,l) = SAVE_RF_3D(i,j,l,5,2) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,SDDARRFLX) + ENDSELECT + ENDDO + ENDDO + +#endif + +#ifdef GCAP + + CALL FIND_GROUPS('aijh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + CASE ('PARDF') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = 0.82*SRVISSURF(i,j) & + *(1D0-FSRDIR(i,j))*COSZ1(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('PARDR') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = 0.82*SRVISSURF(i,j)*(FSRDIR(i,j)) & + *COSZ1(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('ALBEDO') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + ! Saves non-zero albedos for nighttime + IF ( SRDN(i,j)>0 ) SAVE_ALB(i,j) & + = 1D0 - ALB(i,j,1) + sddarr(i,j) = SAVE_ALB(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('CLDTOT') + ! totcld in standard model + CALL INC_SUBDD(subdd,k,cfrac) + CASE ('SWGDN') + ! swds in standard model + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SRDN(i,j)*cosz2(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('TO3') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + sddarr(i,j) = SAVE_TO3(i,j) + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr) + ENDSELECT + ENDDO + ENDDO + +#endif + + CALL FIND_GROUPS('rijlh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + CASE ('MRCO2rad') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) = CO2out(l,i,j) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('wtrtau') + CALL INC_SUBDD(subdd,k,wtrtau) + CASE ('icetau') + CALL INC_SUBDD(subdd,k,icetau) + ENDSELECT + ENDDO + ENDDO + +#ifdef SCM + CALL FIND_GROUPS('rijlh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + CASE ('dth_sw') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) = SRHR(L,I,J) & + *bysha*BYMA(L,I,J)*COSZ2(I,J)/PK(L,I,J) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('dth_lw') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) = TRHR(L,I,J) & + *bysha*BYMA(L,I,J)/PK(L,I,J) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('dth_rad') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) & + = (SRHR(L,I,J)*COSZ2(I,J)+TRHR(L,I,J)) & + *bysha*BYMA(L,I,J)/PK(L,I,J) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('lwdp') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) = TRDFLB_prof(i,j,l) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('lwup') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) = TRUFLB_prof(i,j,l) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('swdp') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) = SRDFLB_prof(i,j,l) & + *COSZ2(I,J) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + CASE ('swup') + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lmaxsubdd + sddarr3d(i,j,l) = SRUFLB_prof(i,j,l) & + *COSZ2(I,J) + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + ENDSELECT + ENDDO + ENDDO +#endif +#ifdef CFMIP3_SUBDD + CALL FIND_GROUPS('rijlh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + SELECT CASE (subdd%NAME(k)) + CASE ('cf') + CALL INC_SUBDD(subdd,k,cfmip_cf) + CASE ('qcirad') + CALL INC_SUBDD(subdd,k,cfmip_qci) + CASE ('qclrad') + CALL INC_SUBDD(subdd,k,cfmip_qcl) + ENDSELECT + ENDDO + ENDDO +#endif +#ifdef TRACERS_ON + + ! aod + DO g = 1, SIZE(sgroups) + CALL FIND_GROUPS(sgroups(g),grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + DO s = 1, SIZE(ssky) + IF ( TRIM(ssky(s))=='dry' .AND. save_dry_aod==0 ) & + CYCLE + DO a = 1, SIZE(sabs) + SELECT CASE (TRIM(ssky(s))//TRIM(sabs(a))) + CASE ('as') + sddarr4d = tau_as + CASE ('cs') + sddarr4d = tau_cs + CASE ('dry') + sddarr4d = tau_dry + CASE ('asa') + sddarr4d = abstau_as + CASE ('csa') + sddarr4d = abstau_cs + CASE ('drya') + sddarr4d = abstau_dry + CASE DEFAULT + CYCLE + ! not implemented, silently ignore + ENDSELECT + DO n = 1, nraero_aod + 1 + ! +1 for total + IF ( n<=nraero_aod ) THEN + spcname = TRIM(TRNAME(NTRIX_AOD(n))) + ELSE + spcname = '' + ENDIF + !aod + sname = TRIM(spcname)//TRIM(ssky(s)) & + //TRIM(sabs(a))//'aod' + IF ( TRIM(sgroups(g))=='taijlh' ) & + sname = TRIM(sname)//'3d' + IF ( TRIM(sname)==TRIM(subdd%NAME(k)) ) THEN + ! not select case here + IF ( n<=nraero_aod ) THEN + sddarr3d = sddarr4d( : , : , : ,n) + ELSE + sddarr3d = SUM(sddarr4d,DIM=4) + ENDIF + SELECT CASE (TRIM(sgroups(g))) + CASE ('taijh') + sddarr = SUM(sddarr3d,DIM=3) + CALL INC_SUBDD(subdd,k,sddarr) + CASE ('taijlh') + CALL INC_SUBDD(subdd,k,sddarr3d) + ENDSELECT + ENDIF + !bext (bcoef) or babs (abcoef) + IF ( TRIM(sgroups(g))=='taijlh' ) THEN + sname = TRIM(spcname)//TRIM(ssky(s)) & + //TRIM(sabs(a))//'bcoef3d' + IF ( TRIM(sname)==TRIM(subdd%NAME(k)) ) & + THEN ! not select case here + IF ( n<=nraero_aod ) THEN + sddarr3d = sddarr4d( : , : , : ,n) + ELSE + sddarr3d = SUM(sddarr4d,DIM=4) + ENDIF + DO j = j_0, j_1 + DO i = i_0, IMAXJ(j) + DO l = 1, lm + TLM(l) = T(i,j,l)*PK(l,i,j) + rho = PMID(l,i,j) & + *100./(Rgas*TLM(l)) + dz = MA(l,i,j)/rho + sddarr3d(i,j,l) & + = sddarr3d(i,j,l)/dz + ENDDO + ENDDO + ENDDO + CALL INC_SUBDD(subdd,k,sddarr3d) + ENDIF + ENDIF + ENDDO + ! n + ENDDO + ! a + ENDDO + ! s + ENDDO + ! k + ENDDO + ! igrp + ENDDO + ! g + + ! rf + CALL FIND_GROUPS('taijh',grpids,ngroups) + DO igrp = 1, ngroups + subdd => SUBDD_GROUPS(grpids(igrp)) + DO k = 1, subdd%NDIAGS + DO f = 1, SIZE(sfrc) + SELECT CASE (TRIM(sfrc(f))) + CASE ('swf') + sddarr3drf = swfrc + CASE ('lwf') + sddarr3drf = lwfrc + CASE DEFAULT + CYCLE + ! not implemented, silently ignore + ENDSELECT + DO n = 1, nraero_rf + IF ( diag_fc==2 ) THEN + spcname = TRIM(TRNAME(NTRIX_RF(n))) + ELSEIF ( diag_fc==1 ) THEN + IF ( tracers_amp ) THEN + spcname = 'AMP' + ELSEIF ( tracers_tomas ) THEN + spcname = 'TOMAS' + ELSE + spcname = 'OMA' + ENDIF + ENDIF + sname = TRIM(sfrc(f))//'_'//TRIM(spcname) + IF ( TRIM(sname)==TRIM(subdd%NAME(k)) ) & + CALL INC_SUBDD(subdd,k,sddarr3drf( : , : ,n)) + ! not select case here + ENDDO + ! n + ENDDO + ! f + ENDDO + ! k + ENDDO + ! igrp + +#endif /* TRACERS_ON */ + +#endif /* CACHED_SUBDD */ + + !**** + !**** Update radiative equilibrium temperatures + !**** + DO J = J_0, J_1 + DO I = I_0, IMAXJ(J) + DO LR = 1, LM_REQ + RQT(LR,I,J) = RQT(LR,I,J) & + + (SRHRS(LR,I,J)*COSZ2(I,J)+TRHRS(LR,I, & + J))*NRAD*DTsrc*bysha*BYAML00(lr+lm) + ENDDO + ENDDO + ENDDO + ENDIF + !**** + !**** Update other temperatures every physics time step + !**** + DO J = J_0, J_1 + DO I = I_0, IMAXJ(J) + DO L = 1, LM + T(I,J,L) = T(I,J,L) & + + (SRHR(L,I,J)*COSZ1(I,J)+TRHR(L,I,J)) & + *DTsrc*bysha*BYMA(l,i,j)/PK(L,I,J) + ENDDO + AIJ(I,J,IJ_SRINCP0) = AIJ(I,J,IJ_SRINCP0) + (S0*COSZ1(I,J)) + ENDDO + ENDDO + + !**** daily diagnostics + IH = 1 + MODELECLOCK%GETHOUR() + IHM = IH + (MODELECLOCK%GETDATE()-1)*24 + DO KR = 1, NDIUPT + I = IJDD(1,KR) + J = IJDD(2,KR) + IF ( (J>=J_0) .AND. (J<=J_1) .AND. (I>=I_0) .AND. (I<=I_1) ) & + THEN + ADIURN(IDD_ISW,KR,IH) = ADIURN(IDD_ISW,KR,IH) & + + S0*COSZ1(I,J) +#ifdef USE_HDIURN + HDIURN(IDD_ISW,KR,IHM) = HDIURN(IDD_ISW,KR,IHM) & + + S0*COSZ1(I,J) +#endif + ENDIF + ENDDO + + CALL STOPTIMER('RADIA()') +END SUBROUTINE RADIA + +SUBROUTINE RESET_SURF_FLUXES(I,J,ITYPE_OLD,ITYPE_NEW,FTYPE_ORIG, & + FTYPE_NOW) + !@sum set incident solar and upward thermal fluxes appropriately + !@+ as fractions change to conserve energy, prevent restart problems + !@auth Gavin Schmidt + USE RAD_COM, ONLY : FSF, TRSURF + IMPLICIT NONE + !@var itype_old, itype_new indices for the old type turning to new type + INTEGER, INTENT(IN) :: i, j, itype_old, itype_new + !@var ftype_orig, ftype_now original and current fracs of the 'new' type + REAL*8, INTENT(IN) :: ftype_orig, ftype_now + REAL*8 :: delf + ! change in fraction from old to new + + IF ( ((ITYPE_OLD==1 .AND. ITYPE_NEW==2) .OR. & + (ITYPE_OLD==2 .AND. ITYPE_NEW==1)) .AND. & + (FTYPE_NOW<=0. .OR. FTYPE_NOW>1.) ) THEN + WRITE (6,*) & + 'RESET_SURF_FLUXES : I, J, ITYPE_OLD, ITYPE_NEW, FTYPE_ORIG, FTYPE_NOW = ', & + I, J, ITYPE_OLD, ITYPE_NEW, FTYPE_ORIG, FTYPE_NOW + CALL STOP_MODEL('RESET_SURF_FLUXES : INCORRECT RESET',255) + ENDIF + + delf = FTYPE_NOW - FTYPE_ORIG + !**** Constrain fsf_1*ftype_1+fsf_2*ftype_2 to be constant + FSF(ITYPE_NEW,I,J) = (FSF(ITYPE_NEW,I,J)*FTYPE_ORIG+FSF(ITYPE_OLD,& + I,J)*DELF)/FTYPE_NOW + + !**** Same for upward thermal + TRSURF(ITYPE_NEW,I,J) = (TRSURF(ITYPE_NEW,I,J)*FTYPE_ORIG+TRSURF( & + ITYPE_OLD,I,J)*DELF)/FTYPE_NOW + +END SUBROUTINE RESET_SURF_FLUXES + +SUBROUTINE GHGHST(iu) + !@sum reads history for nghg well-mixed greenhouse gases + !@auth R. Ruedy + + USE DOMAIN_DECOMP_ATM, ONLY : WRITE_PARALLEL + USE RADPAR, ONLY : nghg, ghgyr1, ghgyr2, ghgam + USE RAD_COM, ONLY : ghg_yr + IMPLICIT NONE + INTEGER :: iu, n, k, nhead = 4, iyr + CHARACTER*80 title + CHARACTER(LEN=300) :: out_line + + WRITE (out_line,*) ! print header lines and first data line + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + DO n = 1, nhead + 1 + READ (iu,'(a)') title + WRITE (out_line,'(1x,a80)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + ENDDO + IF ( title(1 : 2)=='--' ) THEN ! older format + READ (iu,'(a)') title + WRITE (out_line,'(1x,a80)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + nhead = 5 + ENDIF + + !**** find range of table : ghgyr1 - ghgyr2 + READ (title,*) ghgyr1 + DO + READ (iu,'(a)',END=20) title + ENDDO +20 READ (title,*) ghgyr2 + REWIND iu ! position to data lines + DO n = 1, nhead + READ (iu,'(a)') + ENDDO + + ALLOCATE (ghgam(nghg,ghgyr2-ghgyr1+1)) + DO n = 1, ghgyr2 - ghgyr1 + 1 + READ (iu,*) iyr, (ghgam(k,n),k=1,nghg) + DO k = 1, nghg + ! replace -999. by reasonable numbers + IF ( ghgam(k,n)<0. ) ghgam(k,n) = ghgam(k,n-1) + ENDDO + IF ( ghg_yr>0 .AND. ABS(ghg_yr-iyr)<=1 ) THEN + WRITE (out_line,'(i5,6f10.4)') iyr, (ghgam(k,n),k=1,nghg) + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + ENDIF + ENDDO + WRITE (out_line,*) 'read GHG table for years', ghgyr1, ' - ', & + ghgyr2 + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) +END SUBROUTINE GHGHST + +#if defined(CUBED_SPHERE) +SUBROUTINE READ_QMA(iu,plb) + !@sum reads H2O production rates induced by CH4 (Tim Hall) + !@auth R. Ruedy + USE DOMAIN_DECOMP_ATM, ONLY : WRITE_PARALLEL + USE RAD_COM, ONLY : DH2O, jma => JM_DH2O, lat_dh2o + USE RESOLUTION, ONLY : lm + USE CONSTANT, ONLY : radian + USE TIMECONSTANTS_MOD, ONLY : DAYS_PER_YEAR + IMPLICIT NONE + INTEGER, PARAMETER :: LMA = 24 + INTEGER m, iu, j, l, ll, ldn(lm), lup(lm) + REAL*8 :: plb(lm+1) + REAL*4 pb(0 : LMA+1), h2o(jma,0 : LMA), z(LMA), dz(0 : LMA) + CHARACTER*100 title + REAL*4 pdn, pup, dh, fracl + CHARACTER(LEN=300) :: out_line + + !**** read headers/latitudes + READ (iu,'(a)') title + WRITE (out_line,'(''0'',a100)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + READ (iu,'(a)') title + WRITE (out_line,'(1x,a100)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + READ (iu,'(a)') title + ! write(6,'(1x,a100)') title + READ (title(10 : 100),*) (lat_dh2o(j),j=1,jma) + lat_dh2o( : ) = lat_dh2o( : )*radian + + !**** read heights z(km) and data (kg/km^3/year) + DO m = 1, 12 + READ (iu,'(a)') title + WRITE (out_line,'(1x,a100)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + DO l = LMA, 1, -1 + READ (iu,'(a)') title + ! write(6,'(1x,a100)') title + READ (title,*) z(l), (H2O(j,l),j=1,jma) + ENDDO + DO j = 1, jma + h2o(j,0) = 0. + ENDDO + + !**** Find edge heights and pressures + dz(0) = 0. + dz(1) = z(2) - z(1) + DO l = 2, LMA - 1 + dz(l) = .5*(z(l+1)-z(l-1)) + ENDDO + dz(LMA) = z(LMA) - z(LMA-1) + + pb(0) = plb(1) + DO l = 1, LMA + Pb(l) = 1000.*10.**(-(z(l)-.5*dz(l))/16.) + ENDDO + !**** extend both systems vertically to p=0 + pb(LMA+1) = 0. + plb(lm+1) = 0. + + !**** Interpolate vertical resolution to model layers + ldn( : ) = 0 + DO l = 1, lm + DO WHILE ( pb(ldn(l)+1)>=plb(l) .AND. ldn(l)plb(l+1) .AND. lup(l)0 ) THEN + DO ll = ldn(l), lup(l) + pup = MAX(REAL(pb(ll+1),KIND=8),plb(l+1)) + fracl = (pdn-pup)/(pb(ll)-pb(ll+1)) + dh = dh + h2o(j,ll)*fracl*dz(ll) + pdn = pup + ENDDO + ENDIF + DH2O(j,l,m) = 1.D-6*dh/1.74D0/DAYS_PER_YEAR + !->(kg/m^2/ppm_CH4/day) + ENDDO + ENDDO + ENDDO +END SUBROUTINE READ_QMA + +SUBROUTINE LAT_INTERP_QMA(rlat,lev,mon,dh2o_interp) + !@sum interpolate CH4->H2O production rates in latitude + !@auth R. Ruedy + USE RAD_COM, ONLY : jma => JM_DH2O, XLAT => LAT_DH2O, DH2O + IMPLICIT NONE + REAL*8 :: rlat + ! input latitude (radians) + INTEGER :: lev, mon + ! input level, month + REAL*8 :: dh2o_interp + ! output + REAL*8 w1, w2 + INTEGER :: j1, j2 + + !**** Interpolate (extrapolate) horizontally + j2 = 2 + (jma-1)*(rlat-XLAT(1))/(XLAT(jma)-XLAT(1)) + ! first guess + j2 = MIN(MAX(2,j2),jma) + j1 = j2 - 1 + IF ( rlat>XLAT(j2) ) THEN ! j guess was too low + DO WHILE ( j2XLAT(j2) ) + j2 = j2 + 1 + ENDDO + j1 = j2 - 1 + ELSEIF ( rlat1 .AND. rlat1. ) w1 = .5 + .5*w1 + IF ( w1<0. ) w1 = .5*w1 + w2 = 1. - w1 + dh2o_interp = w1*DH2O(j1,lev,mon) + w2*DH2O(j2,lev,mon) +END SUBROUTINE LAT_INTERP_QMA + +#endif /* CUBED_SPHERE */ + +SUBROUTINE GETQMA(iu,dglat,plb,dh2o,lm,jm) + !@sum reads H2O production rates induced by CH4 (Tim Hall) + !@auth R. Ruedy + USE DOMAIN_DECOMP_ATM, ONLY : grid, GETDOMAINBOUNDS, WRITE_PARALLEL + USE TIMECONSTANTS_MOD, ONLY : DAYS_PER_YEAR + IMPLICIT NONE + INTEGER, PARAMETER :: JMA = 18, LMA = 24 + INTEGER m, iu, jm, lm, j, j1, j2, l, ll, ldn(lm), lup(lm) + REAL*8 PLB(lm+1), dH2O(grid%J_STRT_HALO:grid%J_STOP_HALO,lm,12), & + dglat(jm) + REAL*4 pb(0 : LMA+1), h2o(JMA,0 : LMA), xlat(JMA), z(LMA), dz(0 : LMA) + CHARACTER*100 title + REAL*4 pdn, pup, w1, w2, dh, fracl + INTEGER :: j_0, j_1 + CHARACTER(LEN=300) :: out_line + CALL GETDOMAINBOUNDS(grid,J_STRT=J_0,J_STOP=J_1) + + !**** read headers/latitudes + READ (iu,'(a)') title + WRITE (out_line,'(''0'',a100)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + READ (iu,'(a)') title + WRITE (out_line,'(1x,a100)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + READ (iu,'(a)') title + ! write(6,'(1x,a100)') title + READ (title(10 : 100),*) (xlat(j),j=1,JMA) + + !**** read heights z(km) and data (kg/km^3/year) + DO m = 1, 12 + READ (iu,'(a)') title + WRITE (out_line,'(1x,a100)') title + CALL WRITE_PARALLEL(TRIM(out_line),UNIT=6) + DO l = LMA, 1, -1 + READ (iu,'(a)') title + ! write(6,'(1x,a100)') title + READ (title,*) z(l), (H2O(j,l),j=1,JMA) + ENDDO + DO j = 1, JMA + h2o(j,0) = 0. + ENDDO + + !**** Find edge heights and pressures + dz(0) = 0. + dz(1) = z(2) - z(1) + DO l = 2, LMA - 1 + dz(l) = .5*(z(l+1)-z(l-1)) + ENDDO + dz(LMA) = z(LMA) - z(LMA-1) + + pb(0) = plb(1) + DO l = 1, LMA + Pb(l) = 1000.*10.**(-(z(l)-.5*dz(l))/16.) + ENDDO + !**** extend both systems vertically to p=0 + pb(LMA+1) = 0. + plb(lm+1) = 0. + + !**** Interpolate vertical resolution to model layers + ldn( : ) = 0 + DO l = 1, lm + DO WHILE ( pb(ldn(l)+1)>=plb(l) .AND. ldn(l)plb(l+1) .AND. lup(l)xlat(j2) ) + j2 = j2 + 1 + ENDDO + j1 = j2 - 1 + w1 = (xlat(j2)-dglat(j))/(xlat(j2)-xlat(j1)) + !**** for extrapolations, only use half the slope + IF ( w1>1. ) w1 = .5 + .5*w1 + IF ( w1<0. ) w1 = .5*w1 + w2 = 1. - w1 + DO l = 1, lm + dh = 0. + pdn = plb(l) + IF ( lup(l)>0 ) THEN + DO ll = ldn(l), lup(l) + pup = MAX(REAL(pb(ll+1),KIND=8),plb(l+1)) + fracl = (pdn-pup)/(pb(ll)-pb(ll+1)) + dh = dh + (w1*h2o(j1,ll)+w2*h2o(j2,ll)) & + *fracl*dz(ll) + pdn = pup + ENDDO + ENDIF + dh2o(j,l,m) = 1.D-6*dh/1.74D0/DAYS_PER_YEAR + !->(kg/m^2/ppm_CH4/day) + ENDDO + ENDDO + ENDDO +END SUBROUTINE GETQMA + +SUBROUTINE ORBIT(DOBLIQ,ECCEN,DOMEGVP,VEDAY,EDPY,DAY,SDIST,SIND, & + COSD,SUNLON,SUNLAT,EQTIME) + !**** + !**** ORBIT receives orbital parameters and time of year, and returns + !**** distance from Sun, declination angle, and Sun's overhead position. + !**** Reference for following caculations is : V.M.Blanco and + !**** S.W.McCuskey, 1961, "Basic Physics of the Solar System", pages + !**** 135 - 151. Existence of Moon and heavenly bodies other than + !**** Earth and Sun are ignored. Earth is assumed to be spherical. + !**** + !**** Program author : Gary L. Russell 2004/11/16 + !**** Angles, longitude and latitude are measured in radians. + !**** + !**** Input : ECCEN = eccentricity of the orbital ellipse + !**** OBLIQ = latitude of Tropic of Cancer + !**** OMEGVP = longitude of perihelion (sometimes Pi is added) = + !**** = spatial angle from vernal equinox to perihelion + !**** with Sun as angle vertex + !**** DAY = days measured since 2000 January 1, hour 0 + !**** + !**** EDPY = Earth days per year + !**** tropical year = 365.2425 (Gregorgian Calendar) + !**** tropical year = 365 (Generic Year) + !**** VEDAY = Vernal equinox + !**** 79.0 (Generic year Mar 21 hour 0) + !**** 79.5 (Generic year Mar 21 hour 12 - PMIP standard) + !**** 79.3125d0 for days from 2000 January 1, hour 0 till vernal + !**** equinox of year 2000 = 31 + 29 + 19 + 7.5/24 + !**** + !**** Intermediate quantities : + !**** BSEMI = semi minor axis in units of semi major axis + !**** PERIHE = perihelion in days since 2000 January 1, hour 0 + !**** in its annual revolution about Sun + !**** TA = true anomaly = spatial angle from perihelion to + !**** current location with Sun as angle vertex + !**** EA = eccentric anomaly = spatial angle measured along + !**** eccentric circle (that circumscribes Earth's orbit) + !**** from perihelion to point above (or below) Earth's + !**** absisca (where absisca is directed from center of + !**** eccentric circle to perihelion) + !**** MA = mean anomaly = temporal angle from perihelion to + !**** current time in units of 2*Pi per tropical year + !**** TAofVE = TA(VE) = true anomaly of vernal equinox = - OMEGVP + !**** EAofVE = EA(VE) = eccentric anomaly of vernal equinox + !**** MAofVE = MA(VE) = mean anomaly of vernal equinox + !**** SLNORO = longitude of Sun in Earth's nonrotating reference frame + !**** VEQLON = longitude of Greenwich Meridion in Earth's nonrotating + !**** reference frame at vernal equinox + !**** ROTATE = change in longitude in Earth's nonrotating reference + !**** frame from point's location on vernal equinox to its + !**** current location where point is fixed on rotating Earth + !**** SLMEAN = longitude of fictitious mean Sun in Earth's rotating + !**** reference frame (normal longitude and latitude) + !**** + !**** Output : SIND = sine of declination angle = sin(SUNLAT) + !**** COSD = cosine of the declination angle = cos(SUNLAT) + !**** SUNDIS = distance to Sun in units of semi major axis + !**** SUNLON = longitude of point on Earth directly beneath Sun + !**** SUNLAT = latitude of point on Earth directly beneath Sun + !**** EQTIME = Equation of Time = + !**** = longitude of fictitious mean Sun minus SUNLON + !**** + !**** From the above reference : + !**** (4-54) : [1 - ECCEN*cos(EA)]*[1 + ECCEN*cos(TA)] = (1 - ECCEN^2) + !**** (4-55) : tan(TA/2) = sqrt[(1+ECCEN)/(1-ECCEN)]*tan(EA/2) + !**** Yield : tan(EA) = sin(TA)*sqrt(1-ECCEN^2) / [cos(TA) + ECCEN] + !**** or : tan(TA) = sin(EA)*sqrt(1-ECCEN^2) / [cos(EA) - ECCEN] + !**** + USE CONSTANT, ONLY : twopi, pi, radian + IMPLICIT NONE + REAL*8, INTENT(IN) :: DOBLIQ, ECCEN, DOMEGVP, DAY, VEDAY, EDPY + REAL*8, INTENT(OUT) :: SIND, COSD, SDIST, SUNLON, SUNLAT, EQTIME + + REAL*8 MA, OMEGVP, OBLIQ, EA, DEA, BSEMI, TAofVE, EAofVE, MAofVE, & + SUNDIS, TA, SUNX, SUNY, SLNORO, VEQLON, ROTATE, SLMEAN + ! REAL*8, PARAMETER :: EDAYzY=365.2425d0, VE2000=79.3125d0 + ! REAL*8, PARAMETER :: EDAYzY=365d0, VE2000=79d0 ! original parameters + REAL*8 EDAYzY, VE2000 + !**** + VE2000 = VEDAY + EDAYzY = EDPY + OMEGVP = DOMEGVP*radian + OBLIQ = DOBLIQ*radian + !**** Determine EAofVE from geometry : tan(EA) = b*sin(TA) / [e+cos(TA)] + !**** Determine MAofVE from Kepler's equation : MA = EA - e*sin(EA) + !**** Determine MA knowing time from vernal equinox to current day + !**** + BSEMI = SQRT(1-ECCEN*ECCEN) + TAofVE = -OMEGVP + EAofVE = ATAN2(BSEMI*SIN(TAofVE),ECCEN+COS(TAofVE)) + MAofVE = EAofVE - ECCEN*SIN(EAofVE) + ! PERIHE = VE2000 - MAofVE*EDAYzY/TWOPI + MA = MODULO(TWOPI*(DAY-VE2000)/EDAYzY+MAofVE,TWOPI) + !**** + !**** Numerically invert Kepler's equation : MA = EA - e*sin(EA) + !**** + EA = MA + ECCEN*(SIN(MA)+ECCEN*SIN(2*MA)/2) + DO + dEA = (MA-EA+ECCEN*SIN(EA))/(1-ECCEN*COS(EA)) + EA = EA + dEA + IF ( ABS(dEA)<=1D-10 ) THEN + !**** + !**** Calculate distance to Sun and true anomaly + !**** + SUNDIS = 1 - ECCEN*COS(EA) + TA = ATAN2(BSEMI*SIN(EA),COS(EA)-ECCEN) + SDIST = SUNDIS*SUNDIS + ! added for compatiblity + !**** + !**** Change reference frame to be nonrotating reference frame, angles + !**** fixed according to stars, with Earth at center and positive x + !**** axis be ray from Earth to Sun were Earth at vernal equinox, and + !**** x-y plane be Earth's equatorial plane. Distance from current Sun + !**** to this x axis is SUNDIS sin(TA-TAofVE). At vernal equinox, Sun + !**** is located at (SUNDIS,0,0). At other times, Sun is located at : + !**** + !**** SUN = (SUNDIS cos(TA-TAofVE), + !**** SUNDIS sin(TA-TAofVE) cos(OBLIQ), + !**** SUNDIS sin(TA-TAofVE) sin(OBLIQ)) + !**** + SIND = SIN(TA-TAofVE)*SIN(OBLIQ) + COSD = SQRT(1-SIND*SIND) + SUNX = COS(TA-TAofVE) + SUNY = SIN(TA-TAofVE)*COS(OBLIQ) + SLNORO = ATAN2(SUNY,SUNX) + !**** + !**** Determine Sun location in Earth's rotating reference frame + !**** (normal longitude and latitude) + !**** + VEQLON = TWOPI*VE2000 - PI + MAofVE - TAofVE + ! modulo 2*Pi + ROTATE = TWOPI*(DAY-VE2000)*(EDAYzY+1)/EDAYzY + SUNLON = MODULO(SLNORO-ROTATE-VEQLON,TWOPI) + IF ( SUNLON>PI ) SUNLON = SUNLON - TWOPI + SUNLAT = ASIN(SIN(TA-TAofVE)*SIN(OBLIQ)) + !**** + !**** Determine longitude of fictitious mean Sun + !**** Calculate Equation of Time + !**** + SLMEAN = PI - TWOPI*(DAY-FLOOR(DAY)) + EQTIME = MODULO(SLMEAN-SUNLON,TWOPI) + IF ( EQTIME>PI ) EQTIME = EQTIME - TWOPI + EXIT + ENDIF + ENDDO + !**** +END SUBROUTINE ORBIT + +#ifdef HEALY_LM_DIAGS +REAL*8 FUNCTION FE(M,N) + REAL*8 M, N + + FE = 0.47D0*LOG(1.+2.01D-5*(M*N)**(0.75)+5.31D-15*M*(M*N)**(1.52)) +END FUNCTION FE +#endif + +#ifdef CACHED_SUBDD +SUBROUTINE RIJH_DEFS(arr,nmax,decl_count) + ! + ! 2D outputs + ! + USE SUBDD_MOD, ONLY : INFO_TYPE, sched_rad + ! info_type_ is a homemade structure constructor for older compilers + USE SUBDD_MOD, ONLY : INFO_TYPE_ + IMPLICIT NONE + INTEGER :: nmax, decl_count + TYPE (INFO_TYPE) :: arr(nmax) + ! + ! note : next() is a locally declared function to increment decl_count + ! + + decl_count = 0 + + ! + arr(NEXT()) = INFO_TYPE_(SNAME='olrrad',LNAME= & + &'OUTGOING LW RADIATION at TOA (in RADIA)', & + &UNITS='W/m^2',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='olrcs',LNAME= & + &'OUTGOING LW RADIATION at TOA, CLEAR-SKY', & + &UNITS='W/m^2',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='lwds',LNAME= & + &'LONGWAVE DOWNWARD FLUX at SURFACE',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='lwdscs',LNAME= & + &'LONGWAVE DOWNWARD FLUX at SURFACE, CLEAR-SKY', & + UNITS='W/m^2',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='lwus',LNAME= & + &'LONGWAVE UPWARD FLUX at SURFACE',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='totcld',LNAME= & + &'Total Cloud Cover (as seen by rad)',UNITS='%', & + SCALE=1D2,SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='totcld_diag',LNAME= & + &'Total Cloud Cover (continuous, not seen by rad)', & + UNITS='%',SCALE=1D2,SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='cldss_2d',LNAME= & + &'Stratiform Cloud Cover',UNITS='%',SCALE=1D2, & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='cldmc_2d',LNAME= & + &'Convective Cloud Cover',UNITS='%',SCALE=1D2, & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='cod',LNAME= & + &'Cloud optical depth warm clouds',UNITS='-', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='cid',LNAME= & + &'Cloud optical depth ice clouds',UNITS='-', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='wtrcld',LNAME= & + &'Water cloud frequency',UNITS='-',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='icecld',LNAME= & + &'Ice cloud frequency',UNITS='-',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='ctt',LNAME='Cloud top temperature'& + ,UNITS='C',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='ctp',LNAME='Cloud top pressure', & + UNITS='hPa',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swds',LNAME= & + &'SOLAR DOWNWARD FLUX at SURFACE',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swus',LNAME= & + &'SOLAR UPWARD FLUX at SURFACE',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swdf',LNAME= & + &'SOLAR DOWNWARD DIFFUSE FLUX at SURFACE', & + &UNITS='W/m^2',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swtoa',LNAME='SOLAR NET FLUX, TOA'& + ,UNITS='W/m^2',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swns',LNAME= & + &'Solar net flux at surface',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='lwns',LNAME= & + &'Longwave net flux at surface',UNITS='W/m^2', & + SCHED=sched_rad) + ! +#ifdef CFMIP3_SUBDD /* CFMIP3_SUBDD */ + arr(NEXT()) = INFO_TYPE_(SNAME='rtmt',LNAME= & + &'Net downward radiative flux, TOA',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swut',LNAME='TOA outgoing SW', & + UNITS='W/m^2',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swutcs',LNAME= & + &'TOA outgoing SW, CSKY',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='clwvi',LNAME='Total water path', & + UNITS='kg/m^2',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swdcls',LNAME= & + &'SFC downward radiative flux, CSKY',UNITS='kg/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swucls',LNAME= & + &'SFC upward radiative flux, CSKY',UNITS='kg/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swus',LNAME= & + &'SFC upward radiative flux',UNITS='kg/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swdt',LNAME='TOA incoming SW', & + UNITS='W/m^2',SCHED=sched_rad) +#endif /* CFMIP3_SUBDD */ + RETURN +CONTAINS + INTEGER FUNCTION NEXT() + decl_count = decl_count + 1 + NEXT = decl_count + END FUNCTION NEXT +END SUBROUTINE RIJH_DEFS + +SUBROUTINE RIJLH_DEFS(arr,nmax,decl_count) + ! + ! 3D outputs + ! + USE SUBDD_MOD, ONLY : INFO_TYPE, sched_rad + ! info_type_ is a homemade structure constructor for older compilers + USE SUBDD_MOD, ONLY : INFO_TYPE_ + USE CONSTANT, ONLY : kapa + USE TIMECONSTANTS_MOD, ONLY : SECONDS_PER_DAY + IMPLICIT NONE + INTEGER :: nmax, decl_count + TYPE (INFO_TYPE) :: arr(nmax) + ! + ! note : next() is a locally declared function to increment decl_count + ! + decl_count = 0 + ! + arr(NEXT()) = INFO_TYPE_(SNAME='dth_sw',LNAME= & + &'theta tendency from shortwave radiative heating', & + UNITS='K/day',SCALE=1000.**kapa*SECONDS_PER_DAY, & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='dth_lw',LNAME= & + &'theta tendency from longwave radiative heating', & + UNITS='K/day',SCALE=1000.**kapa*SECONDS_PER_DAY, & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='dth_rad',LNAME= & + &'theta tendency from radiative heating', & + &UNITS='K/day',SCALE=1000.**kapa*SECONDS_PER_DAY, & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='lwdp',LNAME= & + &'LONGWAVE DOWNWARD FLUX profile',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='lwup',LNAME= & + &'LONGWAVE UPWARD FLUX profile',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swdp',LNAME= & + &'SHORTWAVE DOWNWARD FLUX profile',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='swup',LNAME= & + &'SHORTWAVE UPWARD FLUX profile',UNITS='W/m^2', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='MRCO2rad',LNAME= & + &'radiation code CO2 volume mixing ratio', & + &UNITS='mole species / mole air',SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='wtrtau',LNAME= & + &'Cloud Water Opacity Seen by Radiation',UNITS='-', & + SCHED=sched_rad) + ! + arr(NEXT()) = INFO_TYPE_(SNAME='icetau',LNAME= & + &'Cloud Ice Opacity Seen by Radiation',UNITS='-', & + SCHED=sched_rad) + ! +#ifdef CFMIP3_SUBDD + arr(NEXT()) = INFO_TYPE_(SNAME='cf',LNAME='Cloud Fraction', & + &UNITS='%',SCALE=1D2,SCHED=sched_rad) + arr(NEXT()) = INFO_TYPE_(SNAME='qcirad',LNAME= & + &'Ice Water Mass Mixing Ratio Seen by Radiation', & + UNITS='kg/kg',SCHED=sched_rad) + arr(NEXT()) = INFO_TYPE_(SNAME='qclrad',LNAME= & + &'Liquid Water Mass Mixing Ratio Seen by Radiation', & + UNITS='kg/kg',SCHED=sched_rad) +#endif + ! + RETURN +CONTAINS + INTEGER FUNCTION NEXT() + decl_count = decl_count + 1 + NEXT = decl_count + END FUNCTION NEXT +END SUBROUTINE RIJLH_DEFS + +#endif + +SUBROUTINE READIFILE(IFile) + ! Consolidated duplicate of MODELE.f code snippets that read the + ! I-file containing the parameter database and INPUTZ namelist. + ! Currently used by radiation-only configuration; to be moved + ! to MODELE.f and used by all configurations once full testing + ! is completed. + ! Note that INPUTZ contains fewer variables in this version. + USE FILEMANAGER, ONLY : OPENUNIT, CLOSEUNIT + USE PARSER_MOD + USE MODEL_COM, ONLY : xlabel, lrunid + USE MODEL_COM, ONLY : HOURI, DATEI, MONTHI, YEARI, IYEAR1 + USE DIAG_COM, ONLY : itwrite + IMPLICIT NONE + !**** Command line options + CHARACTER(LEN=*), INTENT(IN) :: IFile + + INTEGER :: iu_IFILE + !@nlparam IHRI,TIMEE,IHOURE end of model run + !@var IHRI,IHOURE start and end of run in hours (from 1/1/IYEAR1 hr 0) + CHARACTER NLREC*80, RLABEL*132 + !**** List of parameters that are disregarded at restarts + NAMELIST /INPUTZ/ ITWRITE, HOURI, DATEI, MONTHI, YEARI + !**** List of parameters that are disregarded at restarts + NAMELIST /INPUTZ_COLD/ ITWRITE, HOURI, DATEI, MONTHI, YEARI + CHARACTER*132 :: bufs + INTEGER, PARAMETER :: MAXLEN_RUNID = 32 + INTEGER :: lid1, lid2, fid, noff + + + !**** + !**** Reading rundeck (I-file) options + !**** + CALL OPENUNIT(TRIM(ifile),iu_IFILE,.FALSE.,.TRUE.) + CALL PARSE_PARAMS(iu_IFILE) + CALL CLOSEUNIT(iu_IFILE) + + !**** + !**** Print Header and Label (2 lines) from rundeck + !**** + CALL OPENUNIT(TRIM(ifile),iu_IFILE,.FALSE.,.TRUE.) + !if (AM_I_ROOT()) + WRITE (6,'(A,40X,A/)') '0', 'GISS CLIMATE MODEL' + READ (iu_IFILE,'(A80)') XLABEL(1 : 80), NLREC + NOFF = 0 + IF ( XLABEL(73 : 80)==' ' ) NOFF = 8 ! for 72-column rundecks + XLABEL(81-NOFF : 132) = NLREC(1 : 52+NOFF) + !if (AM_I_ROOT()) + WRITE (6,'(A,A/)') '0', XLABEL + RLABEL = XLABEL !@var RLABEL rundeck-label + + lid1 = INDEX(XLABEL,'(') - 1 + IF ( lid1<1 ) lid1 = MAXLEN_RUNID + 1 + lid2 = INDEX(XLABEL,' ') - 1 + IF ( lid2<1 ) lid2 = MAXLEN_RUNID + 1 + LRUNID = MIN(lid1,lid2) + IF ( LRUNID>MAXLEN_RUNID ) CALL STOP_MODEL( & + &'INPUT : Rundeck name too long. Shorten to 32 char or less', & + 255) + + !**** + !**** Read parameters from the rundeck to database and namelist + !**** + DO + READ (iu_IFILE,*,ERR=910,END=910) bufs + ! achar(38) is an ampersand + IF ( bufs == achar(38)//achar(38)//'END_PARAMETERS' ) EXIT + ENDDO + + READ (iu_IFILE,NML=INPUTZ,ERR=900) + + CALL CLOSEUNIT(iu_IFILE) + + IF ( YearI<0 ) THEN + WRITE (6,*) 'Please choose a proper start year yearI, not', & + yearI + CALL STOP_MODEL('INPUT : yearI not provided',255) + ENDIF + + RETURN + !**** + !**** TERMINATE BECAUSE OF IMPROPER PICK-UP + !**** +900 WRITE (6,*) 'Error in NAMELIST parameters' + CALL STOP_MODEL('Error in NAMELIST parameters',255) +910 WRITE (6,*) 'Error readin I-file' + CALL STOP_MODEL('Error reading I-file',255) + +END SUBROUTINE READIFILE + +SUBROUTINE RUN_RADONLY(IFile) + !@sum Call single-column radiation-only model once + USE DICTIONARY_MOD + USE DOMAIN_DECOMP_1D, ONLY : INIT_APP + USE MODEL_COM, ONLY : itime, itimeE, master_yr, xlabel, lrunid + USE MODEL_COM, ONLY : YEARI, IYEAR1 + USE DOMAIN_DECOMP_ATM, ONLY : grid, INIT_GRID +#ifdef CACHED_SUBDD + USE DIAG_COM + USE GEOM, ONLY : lon_dg, lat_dg + USE CDL_MOD +#endif + USE TIMERPACKAGE_MOD, & + ONLY : INITIALIZETIMERPACKAGE_MOD => INITIALIZE + IMPLICIT NONE + !**** Command line options + CHARACTER(LEN=*), INTENT(IN) :: IFile + ! + INTEGER :: i, j, l, n + CHARACTER(LEN=80) :: filenm + + CALL INIT_APP() + + CALL INITIALIZETIMERPACKAGE_MOD() ! avoid probs when RADIA calls timers + + CALL READIFILE(IFile) + + IF ( IS_SET_PARAM("master_yr") ) THEN + CALL GET_PARAM("master_yr",master_yr) + ELSE + CALL STOP_MODEL('Please define master_yr in the rundeck.',255) + ENDIF + + Iyear1 = yearI + + CALL SUNDIAL + + itimeE = itime + 1 + ! for length-1 nominal time axis in diags + + CALL INIT_GRID(grid,1,1,1,WIDTH=0) + + !call alloc_clouds_com(grid) + CALL ALLOC_RAD_COM(grid) + !call alloc_veg_com(grid) + + CALL GEOM_1PT + + CALL INIT_RAD(2) ! istart=2 + CALL DAILY_ORBIT(.FALSE.) ! not end_of_day + CALL DAILY_RAD(.FALSE.) + + CALL PRINT_PARAM(6) + +#ifdef CACHED_SUBDD + ! Initialize diagnostics framework + CALL INIT_CDL_TYPE('cdl_aij',cdl_ij_template) + CALL ADD_COORD(cdl_ij_template,'lon',1,UNITS='degrees_east', & + COORDVALUES=lon_dg( : ,1)) + CALL ADD_COORD(cdl_ij_template,'lat',1,UNITS='degrees_north', & + COORDVALUES=lat_dg( : ,1)) + CALL PARSE_SUBDD + CALL RESET_CACHED_SUBDD + CALL GET_SUBDD_VINTERP_COEFFS + CALL SET_SUBDD_PERIOD() +#endif + + CALL CALC_ZENITH_ANGLE + CALL RADIA + +#ifdef CACHED_SUBDD + filenm = 'allsteps.subdd'//XLABEL(1 : LRUNID) + CALL WRITE_SUBDD_ACCFILE(filenm) +#endif + + CALL STOP_MODEL('Radiation calculations completed.',13) + +CONTAINS + + SUBROUTINE GEOM_1PT + USE GEOM + USE CONSTANT, ONLY : pi, twopi, radian + USE DICTIONARY_MOD, ONLY : GET_PARAM, SYNC_PARAM + IMPLICIT NONE + REAL*8 :: lon_targ, lat_targ + + ! mandatory rundeck parameters : lon and lat of target point + CALL GET_PARAM('lon_targ',lon_targ) + CALL GET_PARAM('lat_targ',lat_targ) + + IF ( ABS(lon_targ)>180D0 .OR. ABS(lat_targ)>90D0 ) & + CALL STOP_MODEL( & + &'geom_atm : invalid lon_targ,lat_targ in rundeck',255) + + LON2D_DG(1,1) = lon_targ + LAT2D_DG(1,1) = lat_targ + + AXYP(1,1) = 1. + + BYAXYP(1,1) = 1D0/AXYP(1,1) + + LON2D(1,1) = LON2D_DG(1,1)*radian + LAT2D(1,1) = LAT2D_DG(1,1)*radian + + SINLAT2D(1,1) = SIN(LAT2D(1,1)) + COSLAT2D(1,1) = COS(LAT2D(1,1)) + LON2D(1,1) = LON2D(1,1) + pi ! IDL has a value of zero + IF ( LON2D(1,1)<0. ) LON2D(1,1) = LON2D(1,1) + twopi + + imaxj = 1 + + lon_dg = LON2D_DG + lat_dg = LAT2D_DG + + END SUBROUTINE GEOM_1PT + + SUBROUTINE SUNDIAL + ! Duplicate of relevant snippets of clock initialization in MODELE.f. + ! Currently used by radiation-only configuration; will disappear + ! once the clock initialization in MODELE.f has been cleanly isolated + ! from other intialization activities. + USE DICTIONARY_MOD + USE MODEL_COM, ONLY : nday, dtsrc, itime, itimei, HOURI, DATEI, & + MONTHI, YEARI + USE MODEL_COM, ONLY : modelEclock, calendar + USE MODELCLOCK_MOD, ONLY : MODELCLOCK +#ifdef TRACERS_GC + USE TEMPUS_MOD +#else + USE TIME_MOD +#endif + USE BASETIME_MOD + USE RATIONAL_MOD + USE TIMEINTERVAL_MOD + IMPLICIT NONE + + TYPE (TIME) :: MODELETIME0 + TYPE (TIME) :: MODELETIME + TYPE (TIMEINTERVAL) :: dtSrcUsed + TYPE (TIMEINTERVAL) :: secsPerDay + + !**** Get those parameters which are needed in this subroutine + CALL GET_PARAM("DTsrc",DTsrc) + + !@var NDAY=(1 day)/DTsrc : even integer; adjust DTsrc to be commensurate + secsPerDay = calendar%GETSECONDSPERDAY() + NDAY = 2*NINT((secsPerDay/(DTsrc*2))) + dtSrcUsed = TIMEINTERVAL(secsPerDay/NDAY) + DTsrc = REAL(dtSrcUsed) + + MODELETIME0 = NEWTIME(calendar) + MODELETIME = NEWTIME(calendar) + + CALL MODELETIME%SETBYDATE(yearI,monthI,dateI,hourI) + CALL MODELETIME0%SETBYDATE(yearI,MONTH=1,DATE=1,HOUR=0) + + ITimeI = NINT((MODELETIME-MODELETIME0)/dtSrcUsed) + Itime = ItimeI + + modelEclock = MODELCLOCK(MODELETIME,dtSrcUsed,itime) + + CALL DAILY_CAL(.FALSE.) ! not end_of_day + + END SUBROUTINE SUNDIAL + +END SUBROUTINE RUN_RADONLY diff --git a/model/RAD2_UTILS.F90 b/model/RAD2_UTILS.F90 new file mode 100644 index 00000000..298afa5f --- /dev/null +++ b/model/RAD2_UTILS.F90 @@ -0,0 +1,4035 @@ +!@sum This file contains the radiation subroutines which don''t use +!@+ the module RADPAR. They are used by RADIATION and/or ALBEDO. +#include "rundeck_opts.h" + + MODULE GTAU_STATE_MOD + SAVE + REAL*8 :: GTAU(51,11,143) + REAL*8 :: TAUGSA(1001,14), SALBTG(768,14), TAUTGS(768), & + TAUTGD(122) + END MODULE GTAU_STATE_MOD + + SUBROUTINE RXSNOW(RBSNO,XCOSZ,GGSNO,RXSNO) +!@sum RXSNOW calculate zenith angle dependence for snow/ice albedo +!@auth A. Lacis (modified by G. Schmidt) + ! USE RADPAR, only : gtsalb,sgpgxg + IMPLICIT NONE +!@var RBSNO diffuse albedo + REAL*8, INTENT(IN) :: RBSNO +!@var XCOSZ zenith angle + REAL*8, INTENT(IN) :: XCOSZ +!@var GGSNO Asymmetry parameter for snow + REAL*8, INTENT(IN) :: GGSNO +!@var RXSNO direct albedo + REAL*8, INTENT(OUT) :: RXSNO + INTEGER NDBLS, NN + REAL*8 XXG, XXT, GGSN, RBSN, FRTOP, TAU, TAUSN, GPFF, PR, PT, & + DBLS, SECZ, XANB, XANX, TANB, TANX, RASB, RASX, BNORM, & + XNORM, RARB, RARX, XATB, DENOM, DB, DX, UB, UX, DRBRAT, & + RBBOUT + + IF ( RBSNO<0.05D0 ) THEN + RXSNO = RBSNO + RETURN + ENDIF + XXG = 0.D0 + XXT = 0.D0 + GGSN = GGSNO + IF ( GGSNO>0.9D0 ) GGSN = 0.9D0 + RBSN = RBSNO + FRTOP = 1.D0 + IF ( RBSNO>0.5D0 ) THEN + RBSN = 0.5D0 + FRTOP = ((1.D0-RBSNO)/0.5D0)**2 + ENDIF + + CALL GTSALB(XXG,XXT,RBBOUT,RBSN,GGSN,TAUSN,2) + CALL SGPGXG(XCOSZ,TAUSN,GGSN,GPFF) + PR = 1.D0 - GPFF + PT = 1.D0 + GPFF + DBLS = 10.D0 + 1.44269D0*LOG(TAUSN) + NDBLS = DBLS + TAU = TAUSN/2**NDBLS +! Set optically thin limit values of R,T,X using PI0 renormalization +! ------------------------------------------------------------------ +! + SECZ = 1.D0/XCOSZ + XANB = EXP(-TAU-TAU) + XANX = EXP(-TAU*SECZ) + TANB = PT*XANB + XXT = (SECZ-2.D0)*TAU + TANX = PT*SECZ* & + (.5D0+XXT*(.25D0+XXT*(.0833333D0+XXT*(.0208333D0+XXT)))) & + *XANX + RASB = PR*(1.D0-TAU*(2.D0-2.66667D0*TAU*(1.D0-TAU))) + XXT = (SECZ+2.D0)*TAU + RASX = PR*SECZ* & + (.5D0-XXT*(.25D0-XXT*(.0833333D0-XXT*(.0208333D0-XXT)))) + BNORM = (1.D0-XANB)/(RASB+TANB) + XNORM = (1.D0-XANX)/(RASX+TANX) + RASB = RASB*BNORM + RASX = RASX*XNORM + TANB = TANB*BNORM + TANX = TANX*XNORM + DO NN = 1, NDBLS + RARB = RASB*RASB + RARX = XANX*RASX + XATB = XANB + TANB + DENOM = 1.D0 - RARB + DB = (TANB+XANB*RARB)/DENOM + DX = (TANX+RARX*RASB)/DENOM + UB = RASB*(XANB+DB) + UX = RARX + RASB*DX + RASB = RASB + XATB*UB + RASX = RASX + XATB*UX + TANB = XANB*TANB + XATB*DB + TANX = XANX*TANX + XATB*DX + XANB = XANB*XANB + XANX = XANX*XANX + ENDDO + DRBRAT = RASX/RBSN - 1.D0 + RXSNO = RBSNO*(1.D0+DRBRAT*FRTOP) + END SUBROUTINE RXSNOW + + SUBROUTINE SETGTS(tgdata_in) + USE GTAU_STATE_MOD + IMPLICIT NONE + REAL*8, INTENT(IN) :: tgdata_in(122,13) + REAL*8 CWM, CWE, TIJ, RBB, RBBI, BTAU + INTEGER I, J + + REAL*8 :: tgdata(122,13) + ! why cant we just + TGDATA = tgdata_in ! pass tgdata_in to spline + + DO I = 1, 122 + TAUTGD(I) = (I-1)*0.1D0 + IF ( I>24 ) TAUTGD(I) = (I-24)*0.2D0 + 2.2D0 + IF ( I>48 ) TAUTGD(I) = (I-48)*0.5D0 + 7.0D0 + IF ( I>72 ) TAUTGD(I) = (I-72) + 19.0D0 + IF ( I>96 ) TAUTGD(I) = (I-96)*5.0D0 + 40.0D0 + IF ( I>112 ) TAUTGD(I) = (I-112)*100.0D0 + 100.0D0 + IF ( I==121 ) TAUTGD(I) = 9999.99D0 + IF ( I==122 ) TAUTGD(I) = 12000.0D0 + ENDDO + + DO I = 1, 768 + IF ( I<602 ) TAUTGS(I) = (I-1)*0.05D0 + IF ( I>601 ) TAUTGS(I) = (I-601)*0.50D0 + 30.0D0 + IF ( I>741 ) TAUTGS(I) = (I-741)*50.0D0 + 100.D0 + IF ( I>758 ) TAUTGS(I) = (I-758)*1000.D0 + ENDDO + + DO J = 1, 13 + DO I = 1, 768 + CWM = 0.5 + CWE = 0.5 + IF ( I>759 ) CWM = 0.0 + IF ( I>759 ) CWE = 0.0 + TIJ = TAUTGS(I) + CALL SPLINE(TAUTGD,TGDATA(1,J),122,TIJ,RBBI,CWM,CWE,0) + SALBTG(I,J) = RBBI + ENDDO + ENDDO + DO J = 1, 13 + DO I = 2, 1000 + RBB = (I-1)*0.001D0 + CWM = 0.5 + CWE = 0.5 + CALL SPLINE(SALBTG(1,J),TAUTGS,768,RBB,BTAU,CWM,CWE,0) + TAUGSA(I,J) = BTAU + ENDDO + ENDDO + SALBTG(1,:) = 0 ! 1:14 + TAUGSA(1,:) = 0 + TAUGSA(1001,:) = 10000 + + SALBTG(:,14) = SALBTG(:,13)*2 - SALBTG(:,12) ! 1:768 + TAUGSA(:,14) = TAUGSA(:,13)*2 - TAUGSA(:,12) ! 1:1001 + + END SUBROUTINE SETGTS + + SUBROUTINE GTSALB(GIN,TAUIN,RBBOUT,RBBIN,EGIN,TAUOUT,KGTAUR) + USE GTAU_STATE_MOD + IMPLICIT NONE + REAL*8, INTENT(IN) :: GIN, TAUIN, RBBIN, EGIN + INTEGER, INTENT(IN) :: KGTAUR + REAL*8, INTENT(OUT) :: RBBOUT, TAUOUT + + REAL*8 FFKG(4,3), RBBK(3) + REAL*8, PARAMETER, DIMENSION(14) & + :: GVALUE = (/.0,.25,.45,.50,.55, & + .60,.65,.70,.75,.80,.85,.90,.95,1./) + REAL*8 RBB, G, TAU, EG, DELTAU, TI, WTJ, WTI, GI, WGI, WGJ, F1, & + F2, F3, F4, A, B, C, RB2, RB3, TBB, TB2, TB3, XG, XM, XP, & + RBBB, RI, WRJ, WRI, EI, WEI, WEJ, DELALB, X1, X2, X3, X4, & + XX, BB, DTAU + INTEGER K, KTERPL, IT, JT, IG, JG, ITERPL, IGM, JGP, KG, IR, JR, & + IE, JE, IEM, JEP + REAL*8, EXTERNAL :: COMPUTE + KTERPL = 0 + + G = GIN + TAU = TAUIN + RBB = RBBIN + EG = EGIN + + RBBOUT = 0.0 + TAUOUT = 0.0 +! --------------------------- +! OPTICAL DEPTH INTERPOLATION +! 0.05 ON (0.00 < TAU < 30.0) +! 0.50 ON (30.0 < TAU < 100.) +! 50.0 ON (100. < TAU < 1000) +! --------------------------- + + IF ( KGTAUR==2 ) GOTO 300 + + + 200 DELTAU = 0.05D0 + TI = TAU/DELTAU + IT = TI + IF ( IT>599 ) THEN + DELTAU = 0.50D0 + TI = TAU/DELTAU + IT = TI + IF ( IT>199 ) THEN + DELTAU = 50.0D0 + TI = TAU/DELTAU + IT = TI + IF ( IT>19 ) THEN + DELTAU = 1000.0D0 + TI = TAU/DELTAU + IT = TI + WTJ = TI - IT + WTI = 1.0 - WTJ + IT = IT + 758 + ELSE + WTJ = TI - IT + WTI = 1.0 - WTJ + IT = IT + 649 + ENDIF + ELSE + WTJ = TI - IT + WTI = 1.0 - WTJ + IT = IT + 541 + ENDIF + ELSE + WTJ = TI - IT + WTI = 1.D0 - WTJ + IT = IT + 1 + ENDIF + JT = IT + 1 + +! --------------------------------- +! ASYMMETRY PARAMETER INTERPOLATION +! 0.05 CUBIC SPLINE (0.5 < G < 0.9) +! 0.25 QUADRATIC ON (0.0 < G < 0.5) +! LINEAR EXTRAP FOR (.95 < G < 1.0) +! --------------------------------- + + GI = G*20.D0 + IF ( GI>10.0 ) THEN + + ITERPL = 4 + IG = GI + WGJ = GI - IG + WGI = 1.D0 - WGJ + IG = IG - 6 + IF ( IG>12 ) THEN + ITERPL = 2 + IG = 12 + ENDIF + JG = IG + 1 + ELSE + IG = 2 + JG = 3 + ITERPL = 1 + ENDIF + + + IGM = IG - 1 + JGP = JG + 1 + + K = 0 + DO KG = IGM, JGP + K = K + 1 + F1 = SALBTG(IT-1,KG) + F2 = SALBTG(IT,KG) + F3 = SALBTG(JT,KG) + F4 = SALBTG(JT+1,KG) + IF ( IT==1 ) F1 = -F3 + FFKG(K,1) = COMPUTE(F1,F2,F3,F4,WTJ) + FFKG(K,2) = F2 + FFKG(K,3) = F3 + ENDDO + + IF ( ITERPL<4 ) THEN + + XG = G*2.D0 - 0.5D0 + IF ( ITERPL==2 ) XG = G*10.D0 - 9.D0 + XM = 1.D0 - XG - XG + XP = 1.D0 + XG + XG + RBB = XM*XP*FFKG(ITERPL+1,1) - XG*XM*FFKG(ITERPL,1) & + + XG*XP*FFKG(4,1) + RB2 = XM*XP*FFKG(ITERPL+1,2) - XG*XM*FFKG(ITERPL,2) & + + XG*XP*FFKG(4,2) + RB3 = XM*XP*FFKG(ITERPL+1,3) - XG*XM*FFKG(ITERPL,3) & + + XG*XP*FFKG(4,3) + + IF ( KGTAUR==1 ) RETURN + IF ( KTERPL==1 ) GOTO 400 + ELSE + + DO K = 1, 3 + F1 = FFKG(1,K) + F2 = FFKG(2,K) + F3 = FFKG(3,K) + F4 = FFKG(4,K) + RBBK(K) = COMPUTE(F1,F2,F3,F4,WGJ) + ENDDO + RBB = RBBK(1) + RB2 = RBBK(2) + RB3 = RBBK(3) + TBB = TAU + TB2 = TAUTGS(IT) + TB3 = TAUTGS(JT) + IF ( KGTAUR==1 ) RETURN + IF ( KTERPL==1 ) GOTO 400 + ENDIF + + 300 RBBB = RBB + + RI = RBB*1000.D0 + IR = RI + WRJ = RI - IR + WRI = 1.D0 - WRJ + IR = IR + 1 + JR = IR + 1 + + EI = EG*20.D0 + IF ( EI>10.0 ) THEN + + ITERPL = 4 + IE = EI + WEJ = EI - IE + WEI = 1.D0 - WEJ + IE = IE - 6 + IF ( IE>12 ) THEN + ITERPL = 2 + IE = 12 + ENDIF + JE = IE + 1 + ELSE + IE = 2 + JE = 3 + ITERPL = 1 + ENDIF + + DELALB = 0.001D0 + IEM = IE - 1 + JEP = JE + 1 + K = 0 + DO KG = IEM, JEP + K = K + 1 + F1 = TAUGSA(IR-1,KG) + F2 = TAUGSA(IR,KG) + F3 = TAUGSA(JR,KG) + F4 = TAUGSA(JR+1,KG) + IF ( IR==1 ) F1 = -F3 + FFKG(K,1) = COMPUTE(F1,F2,F3,F4,WRJ) + FFKG(K,2) = F2 + FFKG(K,3) = F3 + ENDDO + X1 = GVALUE(IE-1) + X2 = GVALUE(IE) + X3 = GVALUE(JE) + X4 = GVALUE(JE+1) + XX = WEJ + IF ( ITERPL<4 ) THEN + + XG = EG*2.D0 - 0.5D0 + IF ( ITERPL==2 ) XG = G*10.D0 - 9.D0 + XM = 1.D0 - XG - XG + XP = 1.D0 + XG + XG + TBB = XM*XP*FFKG(ITERPL+1,1) - XG*XM*FFKG(ITERPL,1) & + + XG*XP*FFKG(4,1) + TB2 = XM*XP*FFKG(ITERPL+1,2) - XG*XM*FFKG(ITERPL,2) & + + XG*XP*FFKG(4,2) + TB3 = XM*XP*FFKG(ITERPL+1,3) - XG*XM*FFKG(ITERPL,3) & + + XG*XP*FFKG(4,3) + IF ( KTERPL==1 ) GOTO 400 + ELSE + + DO K = 1, 3 + F1 = FFKG(1,K) + F2 = FFKG(2,K) + F3 = FFKG(3,K) + F4 = FFKG(4,K) + RBBK(K) = COMPUTE(F1,F2,F3,F4,WEJ) + ENDDO + TBB = RBBK(1) + TB2 = RBBK(2) + TB3 = RBBK(3) + + IF ( KTERPL==1 ) GOTO 400 + ENDIF + KTERPL = 1 + TAU = TBB + G = EGIN + GOTO 200 + 400 IF ( ABS(WTI*WTJ)<0.1D0 ) DTAU = (RBBB-RB2)/(RB3-RB2) + IF ( ABS(WTI*WTJ)>=0.1D0 ) THEN + C = (RB3-RBB)/WTI - (RBB-RB2)/WTJ + B = (RBB-RB2)/WTJ - WTJ*C + A = RB2 + BB = B*B + 4.D0*C*(RBBB-A) + IF ( BB>0.D0 ) DTAU = (SQRT(BB)-B)/(C+C) + ENDIF + TAUOUT = (IT-1+DTAU)*DELTAU + RBBOUT = RBBB + + + END SUBROUTINE GTSALB + + SUBROUTINE SGPGXG(XMU,TAU,G,GG) + USE GTAU_STATE_MOD + IMPLICIT NONE +! ---------------------------------------------------------------- +! COSBAR ADJUSTMENT TO REPRODUCE THE SOLAR ZENITH ANGLE DEPENDENCE +! FOR AEROSOL ALBEDO FOR OPTICAL THICKNESSES [0.0 < TAU < 10000.0] +! ---------------------------------------------------------------- + REAL*8, INTENT(IN) :: XMU, TAU, G + REAL*8, INTENT(OUT) :: GG + REAL*8 XI, WXI, WXJ, GI, WGI, WGJ, TI, WTJ, WTI + INTEGER IX, JX, IG, JG, IT, IT0, JT +! ------------------------------------------- +! XMU (COSZ) SOLAR ZENITH ANGLE INTERPOLATION +! DATA INTERVAL: 0.02 ON [0.0 < XMU < 1.0] +! ------------------------------------------- + + XI = XMU*50.D0 + 0.999999D0 + ! >1 since XMU=COSZ>.001 + IX = XI + JX = IX + 1 + WXJ = XI - IX + WXI = 1.D0 - WXJ + +! ------------------------------- +! COSBAR DEPENDENCE INTERPOLATION +! 0.10 ON [0.0 < COSBAR < 1.0] +! ------------------------------- + + GI = G*10.D0 + IG = GI + WGJ = GI - IG + WGI = 1.D0 - WGJ + IG = IG + 1 + JG = IG + 1 + +! ----------------------------------------- +! AEROSOL TAU INTERPOLATION INTERVALS +! ----------------------------------------- +! dTau 1 1 (Lin Int) 61 62 +! 0.10 ON [0.00 , 0.00 < TAU < 6.00 , 6.10] +! 63 64 92 93 +! 0.50 ON [5.50 , 6.00 < TAU < 20.0 , 20.5] +! 94 95 111 112 +! 5.00 ON [15.0 , 20.0 < TAU < 100. , 105.] +! 113 114 132 133 +! 50.0 ON [50.0 , 100. < TAU < 1000 , 1050] +! 134 143 +! 1000 ON [ , 1000 < TAU < 10000, ] +! ----------------------------------------- + + IF ( TAU<6.D0 ) THEN + TI = TAU*10.D0 + 1. + IT = TI + WTJ = TI - IT + IT0 = 0 + + ELSEIF ( TAU<20.D0 ) THEN + TI = (TAU-6.D0)*2.00D0 + 2.D0 + IT = TI + WTJ = TI - IT + IT0 = 62 + + ELSEIF ( TAU<100.D0 ) THEN + TI = (TAU-20.D0)*0.20D0 + 2.D0 + IT = TI + WTJ = TI - IT + IT0 = 93 + + ELSEIF ( TAU<1000.D0 ) THEN + TI = (TAU-100.D0)*0.02D0 + 2.D0 + IT = TI + WTJ = TI - IT + IT0 = 112 + + ELSE + TI = TAU*0.001D0 + 1.D-6 + IT = TI + WTJ = TI - IT + IF ( IT>9 ) IT = 9 + IT0 = 133 + ENDIF + + WTI = 1.D0 - WTJ + IT = IT + IT0 + JT = IT + 1 + GG = WGI*(WTI*(WXI*GTAU(IX,IG,IT)+WXJ*GTAU(JX,IG,IT)) & + +WTJ*(WXI*GTAU(IX,IG,JT)+WXJ*GTAU(JX,IG,JT))) & + + WGJ*(WTI*(WXI*GTAU(IX,JG,IT)+WXJ*GTAU(JX,JG,IT)) & + +WTJ*(WXI*GTAU(IX,JG,JT)+WXJ*GTAU(JX,JG,JT))) + + RETURN + + END SUBROUTINE SGPGXG + + SUBROUTINE SET_SGPGXG(GTAU_IN) + USE GTAU_STATE_MOD + REAL*8, INTENT(IN) :: GTAU_IN(51,11,143) + GTAU = GTAU_IN + END SUBROUTINE SET_SGPGXG + + SUBROUTINE SPLINE(X,F,NXF,XX,FF,CUSPWM,CUSPWE,KXTRAP) + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NXF, KXTRAP + REAL*8, INTENT(IN) :: X(NXF), F(NXF), XX, CUSPWM, CUSPWE + REAL*8, INTENT(OUT) :: FF + REAL*8 :: FFVEC(1) + +!--------------------------------------------------------------------- +! +! SPLINE locates XX between points (F2,X2)(F3,X3) on 4-point spread +! and returns 4-point Cubic Spline interpolated value FF = F(XX) +! +! Quadratic Derivatives of Spline are continuous at (F2,X2),(F3,X3) +! (X-Coordinate may be specified in increasing or decreasing order) +! +!--------------------------------------------------------------------- +! +! Custom Control Parameters: CUSPWM,CUSPWE,KXTRAP +!------------------------------ +! +! In cases where data points are unevenly spaced and/or data points +! exhibit abrupt changes in value, Spline Interpolation may produce +! undesirable bulging of interpolated values. In more extreme cases +! Linear Interpolation may be less problematic to use. +! +! Interpolation can be weighted between: Cubic Spline and Linear by +! adjusting weights CUSPWM and CUSPWE to values between 1.0 and 0.0 +! +! CUSPWM = Cubic Spline Weight at the (X2-X3) Interval Mid-point +! CUSPWE = Cubic Spline Weight at the (X2-X3) Interval End-points +! +! For example, with: +! +! CUSPWM=1.0,CUSPWE=1.0 FF returns Cubic Spline interpolated value +! CUSPWM=0.0,CUSPWE=0.0 FF returns Linearly interpolated value +! +!--------------------------------------------------------------------- +! +! Extrapolation for XX outside of defined interval: X(1)<->X(NXF) +! +! KXTRAP = 0 No Extrapolation (i.e., sets F(XX)=0.0) +! 1 Fixed Extrapolation (F(XX) = edge value) +! 2 Linear Extrapolation using 2 edge points +! +!--------------------------------------------------------------------- + + FFVEC(1) = FF + CALL SPLINEVECTOR(X,F,1,NXF,XX,FFVEC,CUSPWM,CUSPWE,KXTRAP) + FF = FFVEC(1) + + END SUBROUTINE SPLINE + + SUBROUTINE SPLINEVECTOR(X,F,NVEC,NXF,XX,FF,CUSPWM,CUSPWE,KXTRAP) + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NVEC, NXF, KXTRAP + REAL*8, INTENT(IN) :: X(NXF), F(NVEC,NXF), XX, CUSPWM, CUSPWE + REAL*8, INTENT(OUT) :: FF(NVEC) + +!--------------------------------------------------------------------- +! +! SPLINEVector is identical to SPLINE, except operates on vector functions +! rather than scalar functions. More efficient than calling in a loop. +! +!--------------------------------------------------------------------- + + REAL*8 x1, x2, x3, x4, x21, x32, x43, x31, x42, betw, CUSPWT + REAL*8, DIMENSION(NVEC) :: f1, f2, f3, f4 + REAL*8, DIMENSION(NVEC) :: f21, f32, f43, f3221, f4332 + REAL*8, DIMENSION(NVEC) :: A, B, C, D, FFCUSP, FFLINR + REAL*8 xf, xe, xexm + INTEGER K + + K = 2 + X2 = X(K) + X3 = X(NXF-1) + BETW = (XX-X2)*(X3-XX) + IF ( BETW<=0.D0 ) THEN + +! Edge Point Interval Interpolation and/or Extrapolation +! ------------------------------------------------------ + BETW = (X2-XX)*(X3-X2) + IF ( BETW<0.D0 ) THEN + +! X(NXF-1),X(NXF) Edge Point Interval Interpolation +! -------------------------------------------------- + F3 = F(:,NXF) + X3 = X(NXF) + F2 = F(:,NXF-1) + X2 = X(NXF-1) + X32 = X3 - X2 + F32 = (F3-F2)/X32 + XF = XX - X3 + BETW = (X2-XX)*(XX-X3) + IF ( BETW<0.D0 ) THEN + +! Extrapolation for X Outside of Interval X(NXF-1)-X(NXF) +! -------------------------------------------------------- +! IF(KXTRAP == 0) (No Extrapolation: sets F(XX)=0.0) +! IF(KXTRAP == 1) (Extrapolation at Fixed Edge Value) +! IF(KXTRAP == 2) (2 Edge Point Linear Extrapolation) + + IF ( KXTRAP==0 ) FF = 0.D0 + IF ( KXTRAP==1 ) FF = F3 + IF ( KXTRAP==2 ) FF = F3 + XF*(F3-F2)/(X3-X2) + ELSE + F1 = F(:,NXF-2) + X1 = X(NXF-2) + X21 = X2 - X1 + X31 = X3 - X1 + F21 = (F2-F1)/X21 + XF = XX - X2 + +! 3-Point Quadratic Interpolation for Edge Intervals +! -------------------------------------------------- +! +! (Edge Option) ---------------------------------------------- +! For Linear Interpolation within Edge Intervals +! between X(1),X(2), and between X(NXF-1),X(NXF) +! set the value of coefficient C below, to C=0.0 +! ---------------------------------------------- + + C = (F32-F21)/X31 + B = F21 + X21*C + A = F2 + FFCUSP = A + XF*(B+XF*C) + FFLINR = A + XF*F32 + XE = 1.D0 - 2.D0*XF/X32 + IF ( XE<0.D0 ) XE = -XE + XEXM = XE**2 + CUSPWT = (1.D0-XEXM)*CUSPWM + XEXM*CUSPWE + FF = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + ENDIF + ELSE + +! X(1),X(2) Edge Point Interval Interpolation +! -------------------------------------------- + X1 = X(1) + F1 = F(:,1) + F2 = F(:,2) + X21 = X2 - X1 + F21 = (F2-F1)/X21 + XF = XX - X1 + BETW = (X2-XX)*XF + IF ( BETW<0.D0 ) THEN + +! Extrapolation for XX Outside of Interval X(1) - X(2) +! ---------------------------------------------------- +! IF(KXTRAP == 0) (No Extrapolation: sets F(XX)=0.0) +! IF(KXTRAP == 1) (Extrapolation at Fixed Edge Value) +! IF(KXTRAP == 2) (2 Edge Point Linear Extrapolation) + + IF ( KXTRAP==0 ) FF = 0.D0 + IF ( KXTRAP==1 ) FF = F1 + IF ( KXTRAP==2 ) FF = F1 + XF*F21 + ELSE + F3 = F(:,3) + X3 = X(3) + X32 = X3 - X2 + X31 = X3 - X1 + C = ((F3-F2)/X32-F21)/X31 + B = F21 - X21*C + A = F1 + FFCUSP = A + XF*(B+XF*C) + FFLINR = A + XF*F21 + XE = 1.D0 - 2.D0*XF/X21 + IF ( XE<0.D0 ) XE = -XE + XEXM = XE**2 + CUSPWT = (1.D0-XEXM)*CUSPWM + XEXM*CUSPWE + FF = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + ENDIF + ENDIF + ELSE + DO + + K = K + 1 + X3 = X(K) + BETW = (XX-X2)*(X3-XX) + IF ( BETW>=0.D0 ) THEN + + F3(:) = F(:,K) + F4(:) = F(:,K+1) + X4 = X(K+1) + F2(:) = F(:,K-1) + X2 = X(K-1) + F1(:) = F(:,K-2) + X1 = X(K-2) + X21 = X2 - X1 + X31 = X3 - X1 + X32 = X3 - X2 + X43 = X4 - X3 + X42 = X4 - X2 + F21(:) = (F2(:)-F1(:))/(X21*X21) + F32(:) = (F3(:)-F2(:))/(X32*X32) + F43(:) = (F4(:)-F3(:))/(X43*X43) + F3221(:) = (F32(:)+F21(:))/X31*X21 + F4332(:) = (F43(:)+F32(:))/X42*X43 + A = F2 + B = X32*F3221 + C = 3.D0*F32 - F3221 - F3221 - F4332 + D = (F3221+F4332-F32-F32)/X32 + XF = XX - X2 + +! FFCUSP= Cubic Spline Interpolation Result +! ----------------------------------------- + + FFCUSP = A + XF*(B+XF*(C+XF*D)) + XE = (X3+X2-XX-XX)/X32 + IF ( XE<0.D0 ) XE = -XE + XEXM = XE**2 + CUSPWT = (1.D0-XEXM)*CUSPWM + XEXM*CUSPWE + +! FFLINR= Linear Interpolation Result +! ----------------------------------- + FFLINR = A + XF*F32*X32 + FF = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + EXIT + ELSE + X2 = X3 + ENDIF + ENDDO + ENDIF + + END SUBROUTINE SPLINEVECTOR +!cc the following subroutines were just moved from RADIATION.f to +!cc reduce its size. Only MODULE RADPAR subroutines or those that +!cc USE RADPAR module were left. + + SUBROUTINE BOXAV1(DEGLAT,TAULAT,NLAT,JALIM,JBLIM,TAU) + IMPLICIT NONE +! +!-------------------------------------------------------------------- +! BOXAV1 Performs: +! Latitudinal average (area-weighted) of TAULAT +! +! DEGLAT Center latitude of grid-box variable (TAULAT) +! of the form: DEGLAT = -90+(J-1)*180/(NLAT-1) +! +! TAULAT Zonal average value is constant over grid-bos +! +! JALIM, JBLIM Latitude boxes for which (TAULAT) is averaged +! +! TAU Area-weighted (TAULAT) latitude average value +!-------------------------------------------------------------------- +! + INTEGER, INTENT(IN) :: NLAT, JALIM, JBLIM + REAL*8, DIMENSION(NLAT), INTENT(IN) :: DEGLAT, TAULAT + REAL*8, INTENT(OUT) :: TAU + REAL*8 :: ASUM, TSUM + REAL*8 :: ONES(NLAT) + + ONES = 1.0D0 + CALL BOXAV(DEGLAT,ONES,TAULAT,NLAT,JALIM,JBLIM,TSUM,ASUM) + TAU = TSUM/ASUM + + END SUBROUTINE BOXAV1 + + SUBROUTINE BOXAV2(DEGLAT,TAULAT,SIZLAT,NLAT,JALIM,JBLIM,SIZ) + IMPLICIT NONE +! +!-------------------------------------------------------------------- +! BOXAV2 Performs: +! TAULAT-weighted latitudinal average of SIZLAT +! +! DEGLAT Center latitude of grid-box variable (TAULAT) +! of the form: DEGLAT = -90+(J-1)*180/(NLAT-1) +! +! TAULAT Zonal average value is constant over grid-box +! SIZLAT Zonal average value is constant over grid-box +! +! JALIM, JBLIM Latitude boxes for which variable is averaged +! +! SIZ TAULAT-weighted latitudinal average of SIZLAT +!-------------------------------------------------------------------- +! + INTEGER, INTENT(IN) :: NLAT, JALIM, JBLIM + REAL*8, DIMENSION(NLAT), INTENT(IN) :: DEGLAT, TAULAT, SIZLAT + REAL*8, INTENT(OUT) :: SIZ + REAL*8 ASUM, TSUM + + CALL BOXAV(DEGLAT,TAULAT,SIZLAT,NLAT,JALIM,JBLIM,TSUM,ASUM) + SIZ = (1.D-20+TSUM)/(1.D-10+ASUM) + + END SUBROUTINE BOXAV2 + + SUBROUTINE BOXAV(DEGLAT,W1,ARR,NLAT,JALIM,JBLIM,TSUM,ASUM) + IMPLICIT NONE +! +!-------------------------------------------------------------------- +! BOXAV Performs: +! W1 weighted sums of ARR +! +! DEGLAT Center latitude of grid-box variable (W1) +! of the form: DEGLAT = -90+(J-1)*180/(NLAT-1) +! +! W1 Zonal average value is constant over grid-box +! SIZLAT Zonal average value is constant over grid-box +! +! JALIM, JBLIM Latitude boxes for which variable is averaged +! +!-------------------------------------------------------------------- +! + INTEGER, INTENT(IN) :: NLAT, JALIM, JBLIM + REAL*8, DIMENSION(NLAT), INTENT(IN) :: DEGLAT, W1, ARR + REAL*8, INTENT(OUT) :: TSUM, ASUM + REAL*8 PI, RADIAN, RLAT1, RLAT2, ALAT1, ALAT2, ALATJ + INTEGER J, J1, J2 + + ASUM = 0.D0 + TSUM = 0.D0 + PI = ACOS(-1.D0) + RADIAN = 180.D0/PI + J1 = JALIM - 1 + IF ( J1<1 ) J1 = 1 + RLAT1 = (0.5D0*(DEGLAT(J1)+DEGLAT(JALIM))+90.D0)/RADIAN + ALAT1 = SIN(RLAT1) + DO J = JALIM, JBLIM + J2 = J + 1 + IF ( J2>NLAT ) J2 = NLAT + RLAT2 = (0.5D0*(DEGLAT(J)+DEGLAT(J2))+90.D0)/RADIAN + ALAT2 = SIN(RLAT2) + ALATJ = 0.5D0*(ALAT1+ALAT2)/(RLAT2-RLAT1) + ASUM = ASUM + ALATJ*W1(J) + TSUM = TSUM + ALATJ*W1(J)*ARR(J) + RLAT1 = RLAT2 + ALAT1 = ALAT2 + ENDDO + END SUBROUTINE BOXAV + + SUBROUTINE PHATMO(P,H,D,T,O,Q,S,OCM,WCM,NPHD,NATM) + IMPLICIT NONE +! ------------------------------------------------------------------ +! ------------- MCCLATCHY (1972) ATMOSPHERE DATA ----------- +! ------------------------------------------------------------------ +! +! INPUT DATA +!------------------ +! NATM=0 GIVES ABREVIATED DATA FOR STANDARD ATMOSPHER +! (INPUT: P OR H) (RETURNS: H OR P D,T) +! +! NATM=1 GIVES ATMOSPHERE DATA FOR TROPICAL LATITUDES +! NATM=2 GIVES ATMOSPHERE DATA FOR MIDLATITUDE SUMMER +! NATM=3 GIVES ATMOSPHERE DATA FOR MIDLATITUDE WINTER +! NATM=4 GIVES ATMOSPHERE DATA FOR SUBARCTIC SUMMER +! NATM=5 GIVES ATMOSPHERE DATA FOR SUBARCTIC WINTER +! NATM=6 GIVES ATMOSPHERE DATA FOR STANDARD ATMOSPHER +! +! NPHD=1 RETURNS H,D,T,O,Q,S DATA FOR GIVEN PRESSURE P +! NPHD=2 RETURNS P,D,T,O,Q,S DATA FOR GIVEN HEIGHT H +! NPHD=3 RETURNS P,H,T,O,Q,S DATA FOR GIVEN DENSITY D +! +! OUTPUT DATA +!------------------ +! P = PRESSURE IN MILLIBARS +! H = HEIGHT IN KILOMETERS +! D = DENSITY IN GRAMS/METER**3 +! T = TEMPERATURE (ABSOLUTE) +! O = OZONE MIXING RATIO (GRAMS OZONE)/(GRAMS AIR) +! Q = SPECIFIC HUMIDITY (GRAMS WATER VAPOR)/(GRAMS AIR) +! S = SATURATION RATIO (GRAMS WATER VAPOR)/(GRAMS AIR) +! OCM = OZONE (CM-STP) ABOVE GIVEN HEIGHT +! WCM = WATER VAPOR (CM-STP) ABOVE GIVEN HEIGHT +! +! REMARKS +!------------------ +! INPUT P,H,D PARAMETERS ARE NOT ALTERED +! P,D INTERPOLATION IS EXPONENTIAL WITH HEIGHT +! NO EXTRAPOLATION IS MADE OUTSIDE 0-100 KM INTERVAL +! S IS NOT COMPUTED ABOVE 40 KM (FORMULA NOT ACCURATE) +! +! R = Q/S GIVES RELATIVE HUMIDITY +! W = Q/(1-Q) GIVES WATER VAPOR MIXING RATIO +! N = D*2.079E 16 GIVES NUMBER DENSITY PER CM**3 +! + REAL*8, DIMENSION(33) :: PRS1, PRS2, PRS3, PRS4, PRS5, PRS6, & + DNS1, DNS2, DNS3, DNS4, DNS5, DNS6, & + TMP1, TMP2, TMP3, TMP4, TMP5, TMP6, & + WVP1, WVP2, WVP3, WVP4, WVP5, WVP6, & + OZO1, OZO2, OZO3, OZO4, OZO5, OZO6 + REAL*8, DIMENSION(33,6) :: PRES, DENS, TEMP, WVAP, OZON + + EQUIVALENCE (PRES(1,1),PRS1(1)) + EQUIVALENCE (DENS(1,1),DNS1(1)) + EQUIVALENCE (TEMP(1,1),TMP1(1)) + EQUIVALENCE (PRES(1,2),PRS2(1)) + EQUIVALENCE (DENS(1,2),DNS2(1)) + EQUIVALENCE (TEMP(1,2),TMP2(1)) + EQUIVALENCE (PRES(1,3),PRS3(1)) + EQUIVALENCE (DENS(1,3),DNS3(1)) + EQUIVALENCE (TEMP(1,3),TMP3(1)) + EQUIVALENCE (PRES(1,4),PRS4(1)) + EQUIVALENCE (DENS(1,4),DNS4(1)) + EQUIVALENCE (TEMP(1,4),TMP4(1)) + EQUIVALENCE (PRES(1,5),PRS5(1)) + EQUIVALENCE (DENS(1,5),DNS5(1)) + EQUIVALENCE (TEMP(1,5),TMP5(1)) + EQUIVALENCE (PRES(1,6),PRS6(1)) + EQUIVALENCE (DENS(1,6),DNS6(1)) + EQUIVALENCE (TEMP(1,6),TMP6(1)) + EQUIVALENCE (WVAP(1,1),WVP1(1)) + EQUIVALENCE (OZON(1,1),OZO1(1)) + EQUIVALENCE (WVAP(1,2),WVP2(1)) + EQUIVALENCE (OZON(1,2),OZO2(1)) + EQUIVALENCE (WVAP(1,3),WVP3(1)) + EQUIVALENCE (OZON(1,3),OZO3(1)) + EQUIVALENCE (WVAP(1,4),WVP4(1)) + EQUIVALENCE (OZON(1,4),OZO4(1)) + EQUIVALENCE (WVAP(1,5),WVP5(1)) + EQUIVALENCE (OZON(1,5),OZO5(1)) + EQUIVALENCE (WVAP(1,6),WVP6(1)) + EQUIVALENCE (OZON(1,6),OZO6(1)) + + REAL*8, PARAMETER, DIMENSION(33) & + :: HTKM = (/1D-9,1D0,2D0,3D0,4D0, & + 5D0,6D0,7D0,8D0,9D0,10D0,11D0,12D0, & + 13D0,14D0,15D0,16D0,17D0,18D0,19D0, & + 20D0,21D0,22D0,23D0,24D0,25D0,30D0, & + 35D0,40D0,45D0,50D0,70D0,99.9D0/) + +!---------------------------------------------------------------------- +!0000 GLOBAL U.S. (1976) STANDARD ATMOSPHERE P, T, GEO H PARAMETERS +!---------------------------------------------------------------------- + + REAL*8, PARAMETER, DIMENSION(8) :: SPLB = (/1013.25D0,226.32D0, & + 54.748D0,8.6801D0,1.109D0,.66938D0, & + .039564D0,3.7338D-03/), & + STLB = (/288.15D0,216.65D0,216.65D0, & + 228.65D0,270.65D0,270.65D0,214.65D0, & + 186.87D0/), & + SHLB = (/0D0,11D0,20D0,32D0,47D0, & + 51D0,71D0,84.852D0/), & + SDLB = (/-6.5D0,0D0,1D0,2.8D0,0D0, & + -2.8D0,-2D0,0D0/) + REAL*8, PARAMETER :: HPCON = 34.16319D0 + +!----------------------------------------------------------------------- +!1111 TROPICAL LATITUDES MCCLATCHY (1972) ATMOSPHERE DATA VS HEIGHT +!----------------------------------------------------------------------- + + DATA PRS1/1.013D03, 9.040D02, 8.050D02, 7.150D02, 6.330D02, & + 5.590D02, 4.920D02, 4.320D02, 3.780D02, 3.290D02, 2.860D02, & + 2.470D02, 2.130D02, 1.820D02, 1.560D02, 1.320D02, 1.110D02, & + 9.370D01, 7.890D01, 6.660D01, 5.650D01, 4.800D01, 4.090D01, & + 3.500D01, 3.000D01, 2.570D01, 1.220D01, 6.000D00, 3.050D00, & + 1.590D00, 8.540D-01, 5.790D-02, 3.000D-04/ + DATA DNS1/1.167D03, 1.064D03, 9.689D02, 8.756D02, 7.951D02, & + 7.199D02, 6.501D02, 5.855D02, 5.258D02, 4.708D02, 4.202D02, & + 3.740D02, 3.316D02, 2.929D02, 2.578D02, 2.260D02, 1.972D02, & + 1.676D02, 1.382D02, 1.145D02, 9.515D01, 7.938D01, 6.645D01, & + 5.618D01, 4.763D01, 4.045D01, 1.831D01, 8.600D00, 4.181D00, & + 2.097D00, 1.101D00, 9.210D-02, 5.000D-04/ + DATA TMP1/300.0, 294.0, 288.0, 284.0, 277.0, 270.0, 264.0, 257.0, & + 250.0, 244.0, 237.0, 230.0, 224.0, 217.0, 210.0, 204.0, & + 197.0, 195.0, 199.0, 203., 207.0, 211.0, 215.0, 217.0, 219.0,& + 221.0, 232.0, 243.0, 254.0, 265.0, 270., 219.0, 210.0/ + DATA WVP1/1.9D01, 1.3D01, 9.3D00, 4.7D00, 2.2D00, 1.5D00, 8.5D-01,& + 4.7D-01, 2.5D-01, 1.2D-01, 5.0D-02, 1.7D-02, 6.0D-03, & + 1.8D-03, 1.0D-03, 7.6D-04, 6.4D-04, 5.6D-04, 5.0D-04, & + 4.9D-04, 4.5D-04, 5.1D-04, 5.1D-04, 5.4D-04, 6.0D-04, & + 6.7D-04, 3.6D-04, 1.1D-04, 4.3D-05, 1.9D-05, 6.3D-06, & + 1.4D-07, 1.0D-09/ + DATA OZO1/5.6D-05, 5.6D-05, 5.4D-05, 5.1D-05, 4.7D-05, 4.5D-05, & + 4.3D-05, 4.1D-05, 3.9D-05, 3.9D-05, 3.9D-05, 4.1D-05, & + 4.3D-05, 4.5D-05, 4.5D-05, 4.7D-05, 4.7D-05, 6.9D-05, & + 9.0D-05, 1.4D-04, 1.9D-04, 2.4D-04, 2.8D-04, 3.2D-04, & + 3.4D-04, 3.4D-04, 2.4D-04, 9.2D-05, 4.1D-05, 1.3D-05, & + 4.3D-06, 8.6D-08, 4.3D-11/ + +!----------------------------------------------------------------------- +!2222 MIDLATITUDE SUMMER MCCLATCHY (1972) ATMOSPHERE DATA VS HEIGHT +!----------------------------------------------------------------------- + + DATA PRS2/1.013D03, 9.020D02, 8.020D02, 7.100D02, 6.280D02, & + 5.540D02, 4.870D02, 4.260D02, 3.720D02, 3.240D02, 2.810D02, & + 2.430D02, 2.090D02, 1.790D02, 1.530D02, 1.300D02, 1.110D02, & + 9.500D01, 8.120D01, 6.950D01, 5.950D01, 5.100D01, 4.370D01, & + 3.760D01, 3.220D01, 2.770D01, 1.320D01, 6.520D00, 3.330D00, & + 1.760D00, 9.510D-01, 6.710D-02, 3.000D-04/ + DATA DNS2/1.191D03, 1.080D03, 9.757D02, 8.846D02, 7.998D02, & + 7.211D02, 6.487D02, 5.830D02, 5.225D02, 4.669D02, 4.159D02, & + 3.693D02, 3.269D02, 2.882D02, 2.464D02, 2.104D02, 1.797D02, & + 1.535D02, 1.305D02, 1.110D02, 9.453D01, 8.056D01, 6.872D01, & + 5.867D01, 5.014D01, 4.288D01, 1.322D01, 6.519D00, 3.330D00, & + 1.757D00, 9.512D-01, 6.706D-02, 5.000D-04/ + DATA TMP2/294.0, 290.0, 285.0, 279.0, 273.0, 267.0, 261.0, 255.0, & + 248.0, 242.0, 235.0, 229.0, 222.0, 216.0, 216.0, 216.0, & + 216.0, 216.0, 216.0, 217., 218.0, 219.0, 220.0, 222.0, 223.0,& + 224.0, 234.0, 245.0, 258.0, 270.0, 276., 218.0, 210.0/ + DATA WVP2/1.4D01, 9.3D00, 5.9D00, 3.3D00, 1.9D00, 1.0D00, 6.1D-01,& + 3.7D-01, 2.1D-01, 1.2D-01, 6.4D-02, 2.2D-02, 6.0D-03, & + 1.8D-03, 1.0D-03, 7.6D-04, 6.4D-04, 5.6D-04, 5.0D-04, & + 4.9D-04, 4.5D-04, 5.1D-04, 5.1D-04, 5.4D-04, 6.0D-04, & + 6.7D-04, 3.6D-04, 1.1D-04, 4.3D-05, 1.9D-05, 6.3D-06, & + 1.4D-07, 1.0D-09/ + DATA OZO2/6.0D-05, 6.0D-05, 6.0D-05, 6.2D-05, 6.4D-05, 6.6D-05, & + 6.9D-05, 7.5D-05, 7.9D-05, 8.6D-05, 9.0D-05, 1.1D-04, & + 1.2D-04, 1.5D-04, 1.8D-04, 1.9D-04, 2.1D-04, 2.4D-04, & + 2.8D-04, 3.2D-04, 3.4D-04, 3.6D-04, 3.6D-04, 3.4D-04, & + 3.2D-04, 3.0D-04, 2.0D-04, 9.2D-05, 4.1D-05, 1.3D-05, & + 4.3D-06, 8.6D-08, 4.3D-11/ + +!----------------------------------------------------------------------- +!3333 MIDLATITUDE WINTER MCCLATCHY (1972) ATMOSPHERE DATA VS HEIGHT +!----------------------------------------------------------------------- + + DATA PRS3/1.018D03, 8.973D02, 7.897D02, 6.938D02, 6.081D02, & + 5.313D02, 4.627D02, 4.016D02, 3.473D02, 2.992D02, 2.568D02, & + 2.199D02, 1.882D02, 1.610D02, 1.378D02, 1.178D02, 1.007D02, & + 8.610D01, 7.350D01, 6.280D01, 5.370D01, 4.580D01, 3.910D01, & + 3.340D01, 2.860D01, 2.430D01, 1.110D01, 5.180D00, 2.530D00, & + 1.290D00, 6.820D-01, 4.670D-02, 3.000D-04/ + DATA DNS3/1.301D03, 1.162D03, 1.037D03, 9.230D02, 8.282D02, & + 7.411D02, 6.614D02, 5.886D02, 5.222D02, 4.619D02, 4.072D02, & + 3.496D02, 2.999D02, 2.572D02, 2.206D02, 1.890D02, 1.620D02, & + 1.388D02, 1.188D02, 1.017D02, 8.690D01, 7.421D01, 6.338D01, & + 5.415D01, 4.624D01, 3.950D01, 1.783D01, 7.924D00, 3.625D00, & + 1.741D00, 8.954D-01, 7.051D-02, 5.000D-04/ + DATA TMP3/272.2, 268.7, 265.2, 261.7, 255.7, 249.7, 243.7, 237.7, & + 231.7, 225.7, 219.7, 219.2, 218.7, 218.2, 217.7, 217.2, & + 216.7, 216.2, 215.7, 215.2, 215.2, 215.2, 215.2, 215.2, & + 215.2, 215.2, 217.4, 227.8, 243.2, 258.5, 265.7, 230.7, & + 210.2/ + DATA WVP3/3.5D00, 2.5D00, 1.8D00, 1.2D00, 6.6D-01, 3.8D-01, & + 2.1D-01, 8.5D-02, 3.5D-02, 1.6D-02, 7.5D-03, 6.9D-03, & + 6.0D-03, 1.8D-03, 1.0D-03, 7.6D-04, 6.4D-04, 5.6D-04, & + 5.0D-04, 4.9D-04, 4.5D-04, 5.1D-04, 5.1D-04, 5.4D-04, & + 6.0D-04, 6.7D-04, 3.6D-04, 1.1D-04, 4.3D-05, 1.9D-05, & + 6.3D-06, 1.4D-07, 1.0D-09/ + DATA OZO3/6.0D-05, 5.4D-05, 4.9D-05, 4.9D-05, 4.9D-05, 5.8D-05, & + 6.4D-05, 7.7D-05, 9.0D-05, 1.2D-04, 1.6D-04, 2.1D-04, & + 2.6D-04, 3.0D-04, 3.2D-04, 3.4D-04, 3.6D-04, 3.9D-04, & + 4.1D-04, 4.3D-04, 4.5D-04, 4.3D-04, 4.3D-04, 3.9D-04, & + 3.6D-04, 3.4D-04, 1.9D-04, 9.2D-05, 4.1D-05, 1.3D-05, & + 4.3D-06, 8.6D-08, 4.3D-11/ + +!----------------------------------------------------------------------- +!4444 SUBARCTIC SUMMER MCCLATCHY (1972) ATMOSPHERE DATA VS HEIGHT +!----------------------------------------------------------------------- + + DATA PRS4/1.010D03, 8.960D02, 7.929D02, 7.000D02, 6.160D02, & + 5.410D02, 4.730D02, 4.130D02, 3.590D02, 3.107D02, 2.677D02, & + 2.300D02, 1.977D02, 1.700D02, 1.460D02, 1.250D02, 1.080D02, & + 9.280D01, 7.980D01, 6.860D01, 5.890D01, 5.070D01, 4.360D01, & + 3.750D01, 3.227D01, 2.780D01, 1.340D01, 6.610D00, 3.400D00, & + 1.810D00, 9.870D-01, 7.070D-02, 3.000D-04/ + DATA DNS4/1.220D03, 1.110D03, 9.971D02, 8.985D02, 8.077D02, & + 7.244D02, 6.519D02, 5.849D02, 5.231D02, 4.663D02, 4.142D02, & + 3.559D02, 3.059D02, 2.630D02, 2.260D02, 1.943D02, 1.671D02, & + 1.436D02, 1.235D02, 1.062D02, 9.128D01, 7.849D01, 6.750D01, & + 5.805D01, 4.963D01, 4.247D01, 1.338D01, 6.614D00, 3.404D00, & + 1.817D00, 9.868D-01, 7.071D-02, 5.000D-04/ + DATA TMP4/287.0, 282.0, 276.0, 271.0, 266.0, 260.0, 253.0, 246.0, & + 239.0, 232.0, 225.0, 225.0, 225.0, 225.0, 225.0, 225.0, & + 225.0, 225.0, 225.0, 225., 225.0, 225.0, 225.0, 225.0, 226.0,& + 228.0, 235.0, 247.0, 262.0, 274.0, 277., 216.0, 210.0/ + DATA WVP4/9.1D00, 6.0D00, 4.2D00, 2.7D00, 1.7D00, 1.0D00, 5.4D-01,& + 2.9D-01, 1.3D-02, 4.2D-02, 1.5D-02, 9.4D-03, 6.0D-03, & + 1.8D-03, 1.0D-03, 7.6D-04, 6.4D-04, 5.6D-04, 5.0D-04, & + 4.9D-04, 4.5D-04, 5.1D-04, 5.1D-04, 5.4D-04, 6.0D-04, & + 6.7D-04, 3.6D-04, 1.1D-04, 4.3D-05, 1.9D-05, 6.3D-06, & + 1.4D-07, 1.0D-09/ + DATA OZO4/4.9D-05, 5.4D-05, 5.6D-05, 5.8D-05, 6.0D-05, 6.4D-05, & + 7.1D-05, 7.5D-05, 7.9D-05, 1.1D-04, 1.3D-04, 1.8D-04, & + 2.1D-04, 2.6D-04, 2.8D-04, 3.2D-04, 3.4D-04, 3.9D-04, & + 4.1D-04, 4.1D-04, 3.9D-04, 3.6D-04, 3.2D-04, 3.0D-04, & + 2.8D-04, 2.6D-04, 1.4D-04, 9.2D-05, 4.1D-05, 1.3D-05, & + 4.3D-06, 8.6D-08, 4.3D-11/ + +!----------------------------------------------------------------------- +!5555 SUBARCTIC WINTER MCCLATCHY (1972) ATMOSPHERE DATA VS HEIGHT +!----------------------------------------------------------------------- + + DATA PRS5/1.013D03, 8.878D02, 7.775D02, 6.798D02, 5.932D02, & + 5.158D02, 4.467D02, 3.853D02, 3.308D02, 2.829D02, 2.418D02, & + 2.067D02, 1.766D02, 1.510D02, 1.291D02, 1.103D02, 9.431D01, & + 8.058D01, 6.882D01, 5.875D01, 5.014D01, 4.277D01, 3.647D01, & + 3.109D01, 2.649D01, 2.256D01, 1.020D01, 4.701D00, 2.243D00, & + 1.113D00, 5.719D-01, 4.016D-02, 3.000D-04/ + DATA DNS5/1.372D03, 1.193D03, 1.058D03, 9.366D02, 8.339D02, & + 7.457D02, 6.646D02, 5.904D02, 5.226D02, 4.538D02, 3.879D02, & + 3.315D02, 2.834D02, 2.422D02, 2.071D02, 1.770D02, 1.517D02, & + 1.300D02, 1.113D02, 9.529D01, 8.155D01, 6.976D01, 5.966D01, & + 5.100D01, 4.358D01, 3.722D01, 1.645D01, 7.368D00, 3.330D00, & + 1.569D00, 7.682D-01, 5.695D-02, 5.000D-04/ + DATA TMP5/257.1, 259.1, 255.9, 252.7, 247.7, 240.9, 234.1, 227.3, & + 220.6, 217.2, 217.2, 217.2, 217.2, 217.2, 217.2, 217.2, & + 216.6, 216., 215.4, 214.8, 214.1, 213.6, 213.0, 212.4, 211.8,& + 211.2, 216.0, 222.2, 234.7, 247., 259.3, 245.7, 210.0/ + DATA WVP5/1.2D00, 1.2D00, 9.4D-01, 6.8D-01, 4.1D-01, 2.0D-01, & + 9.8D-02, 5.4D-02, 1.1D-02, 8.4D-03, 5.5D-03, 3.8D-03, & + 2.6D-03, 1.8D-03, 1.0D-03, 7.6D-04, 6.4D-04, 5.6D-04, & + 5.0D-04, 4.9D-04, 4.5D-04, 5.1D-04, 5.1D-04, 5.4D-04, & + 6.0D-04, 6.7D-04, 3.6D-04, 1.1D-04, 4.3D-05, 1.9D-05, & + 6.3D-06, 1.4D-07, 1.0D-09/ + DATA OZO5/4.1D-05, 4.1D-05, 4.1D-05, 4.3D-05, 4.5D-05, 4.7D-05, & + 4.9D-05, 7.1D-05, 9.0D-05, 1.6D-04, 2.4D-04, 3.2D-04, & + 4.3D-04, 4.7D-04, 4.9D-04, 5.6D-04, 6.2D-04, 6.2D-04, & + 6.2D-04, 6.0D-04, 5.6D-04, 5.1D-04, 4.7D-04, 4.3D-04, & + 3.6D-04, 3.2D-04, 1.5D-04, 9.2D-05, 4.1D-05, 1.3D-05, & + 4.3D-06, 8.6D-08, 4.3D-11/ + +!---------------------------------------------------------------------- +!6666 GLOBAL U.S. (1976) STANDARD ATMOSPHERE P, T, GEO H PARAMETERS +!---------------------------------------------------------------------- + + DATA PRS6/1.01325D+03, 8.987D+02, 7.950D+02, 7.011D+02, 6.164D+02,& + 5.402D+02, 4.718D+02, 4.106D+02, 3.560D+02, 3.074D+02, & + 2.644D+02, 2.263D+02, 1.933D+02, 1.651D+02, 1.410D+02, & + 1.204D+02, 1.029D+02, 8.787D+01, 7.505D+01, 6.410D+01, & + 5.475D+01, 4.678D+01, 4.000D+01, 3.422D+01, 2.931D+01, & + 2.511D+01, 1.172D+01, 5.589D+00, 2.775D+00, 1.431D+00, & + 7.594D-01, 4.634D-02, 2.384D-04/ + DATA DNS6/1.225D+03, 1.112D+03, 1.006D+03, 9.091D+02, 8.191D+02, & + 7.361D+02, 6.597D+02, 5.895D+02, 5.252D+02, 4.663D+02, & + 4.127D+02, 3.639D+02, 3.108D+02, 2.655D+02, 2.268D+02, & + 1.937D+02, 1.654D+02, 1.413D+02, 1.207D+02, 1.031D+02, & + 8.803D+01, 7.487D+01, 6.373D+01, 5.428D+01, 4.627D+01, & + 3.947D+01, 1.801D+01, 8.214D+00, 3.851D+00, 1.881D+00, & + 9.775D-01, 7.424D-02, 4.445D-04/ + DATA TMP6/288.150, 281.650, 275.150, 268.650, 262.150, 255.650, & + 249.150, 242.650, 236.150, 229.650, 223.150, 216.650, & + 216.650, 216.650, 216.650, 216.650, 216.650, 216.650, & + 216.650, 216.650, 216.650, 217.650, 218.650, 219.650, & + 220.650, 221.650, 226.650, 237.050, 251.050, 265.050, & + 270.650, 217.450, 186.870/ + DATA WVP6/1.083D+01, 6.323D+00, 3.612D+00, 2.015D+00, 1.095D+00, & + 5.786D-01, 2.965D-01, 1.469D-01, 7.021D-02, 3.226D-02, & + 1.419D-02, 5.956D-03, 5.002D-03, 4.186D-03, 3.490D-03, & + 2.896D-03, 2.388D-03, 1.954D-03, 1.583D-03, 1.267D-03, & + 9.967D-04, 8.557D-04, 7.104D-04, 5.600D-04, 4.037D-04, & + 2.406D-04, 5.404D-05, 2.464D-05, 1.155D-05, 5.644D-06, & + 2.932D-06, 2.227D-07, 1.334D-09/ + DATA OZO6/7.526D-05, 3.781D-05, 6.203D-05, 3.417D-05, 5.694D-05, & + 3.759D-05, 5.970D-05, 4.841D-05, 7.102D-05, 6.784D-05, & + 9.237D-05, 9.768D-05, 1.251D-04, 1.399D-04, 1.715D-04, & + 1.946D-04, 2.300D-04, 2.585D-04, 2.943D-04, 3.224D-04, & + 3.519D-04, 3.714D-04, 3.868D-04, 3.904D-04, 3.872D-04, & + 3.728D-04, 2.344D-04, 9.932D-05, 3.677D-05, 1.227D-05, & + 4.324D-06, 5.294D-08, 1.262D-10/ + + REAL*8, INTENT(INOUT) :: H, P, D + INTEGER, INTENT(IN) :: NATM, NPHD + REAL*8, INTENT(OUT) :: O, Q, S, OCM, WCM, T + REAL*8 :: XX, XI, XJ, DELTA, RAT, PI, PJ, DI, DJ, DP, ES, RS, & + OI, OJ, QI, QJ + INTEGER :: I, J, K, N + + IF ( NATM>0 ) THEN + + IF ( NPHD/=1 ) THEN + IF ( NPHD/=2 ) THEN + XX = D + XI = DENS(1,NATM) + IF ( D>XI ) XX = XI + IF ( D<5.0E-04 ) GOTO 280 + DO J = 2, 33 + XJ = DENS(J,NATM) + IF ( XX>XJ ) GOTO 260 + XI = XJ + ENDDO + ENDIF + XX = H + XI = HTKM(1) + IF ( H99.9 ) GOTO 280 + DO J = 2, 33 + XJ = HTKM(J) + IF ( XXXI ) XX = XI + IF ( P<3.0E-04 ) GOTO 280 + DO J = 2, 33 + XJ = PRES(J,NATM) + IF ( XX>XJ ) EXIT + XI = XJ + ENDDO + ELSE + O = 1.E-10 + Q = 1.E-10 + S = 1.E-10 + OCM = 1.E-10 + WCM = 1.E-10 + IF ( NPHD<2 ) THEN + + DO N = 2, 8 + IF ( P>SPLB(N) ) GOTO 170 + ENDDO + N = 9 + 170 N = N - 1 + IF ( ABS(SDLB(N))<1.E-04 ) THEN + H = SHLB(N) + STLB(N)/HPCON*LOG(SPLB(N)/P) + ELSE + H = SHLB(N) + STLB(N)/SDLB(N) & + *((SPLB(N)/P)**(SDLB(N)/HPCON)-1.) + ENDIF + T = STLB(N) + SDLB(N)*(H-SHLB(N)) + D = P/T*28.9644E05/8.31432E03 + RETURN + ELSE + DO N = 2, 8 + IF ( H1.E-06 ) S = 1./RS + OI = O + QI = Q + OCM = 0.D0 + WCM = 0.D0 + DO K = J, 33 + PJ = PRES(K,NATM) + DJ = DENS(K,NATM) + OJ = OZON(K,NATM)/DJ + QJ = WVAP(K,NATM)/DJ + DP = PI - PJ + OCM = OCM + 0.5D0*(OI+OJ)*DP + WCM = WCM + 0.5D0*(QI+QJ)*DP + OI = OJ + QI = QJ + PI = PJ + ENDDO + WCM = WCM/0.980D0*22420.7D0/18.D0 + OCM = OCM/0.980D0*22420.7D0/48.D0 + RETURN + 280 T = 210.D0 + IF ( NATM==6 ) T = 186.87 + O = 1.D-10 + Q = 1.D-10 + S = 1.D-10 + OCM = 1.D-10 + WCM = 1.D-10 + IF ( NPHD/=1 ) P = 1.D-05 + IF ( NPHD/=2 ) H = 99.99 + IF ( NPHD/=3 ) D = 2.D-05 + END SUBROUTINE PHATMO + + REAL*8 FUNCTION PFOFTK(WAVNA,WAVNB,TK) +! ------------------------------------------------------------------ +! +! INPUT DATA +! WAVNA,WAVNB SPECTRAL INTERVAL IN WAVENUMBERS +! (ORDER OF WAVNA,WAVNB NOT IMPORTANT) +! +! TK ABSOLUTE TEMPERATURE IN DEGREES KELVIN +! +! OUTPUT DATA +! PFofTK PLANCK FLUX (W/m^2) +! +! +! REMARKS +! PLANCK INTENSITY (W/m^2*STER) IS GIVEN BY PFofTK/PI +! +! ------------------------------------------------------------------ + USE CONSTANT, ONLY:stbo ! (W m-2 K-4) Stefan-Boltzmann + IMPLICIT NONE + REAL*8, PARAMETER, DIMENSION(21) & + :: BN = (/1D0,-1D0,1D0,-1D0,1D0, & + -1D0,5D0,-691D0,7D0,-3617D0,43867D0, & + -174611D0,854513D0,-236364091D0, & + 8553103D0,-23749461029D0, & + 8615841276005D0,-7709321041217D0, & + 2577687858367D0,-2631527155305348D4, & + 2929993913841559D0/), & + BD = (/1D0,2D0,6D0,30D0,42D0,30D0, & + 66D0,2730D0,6D0,510D0,798D0,330D0, & + 138D0,2730D0,6D0,870D0,14322D0,510D0,& + 6D0,1919190D0,6D0/) + REAL*8, PARAMETER :: PI4 = 97.40909103400244D0 +! REAL*8, PARAMETER :: PI =3.141592653589793D0 + REAL*8, PARAMETER :: HCK = 1.43879D0 + REAL*8, PARAMETER :: DGXLIM = 1D-06 + + REAL*8, INTENT(IN) :: WAVNA, WAVNB, TK + REAL*8 GSUM, B, DG, DGB, GX, PNORM, GTERM, GXA, GXB, X, XX, XN, & + XN3, XNN, XNM, XNF, XNX + INTEGER II, NB, NNB, N + + PFOFTK = 0D0 + IF ( TK<1D-06 ) RETURN + DO II = 1, 2 + IF ( II==1 ) X = HCK*WAVNA/TK + IF ( II==2 ) X = HCK*WAVNB/TK + IF ( X>2.3D0 ) THEN + GSUM = PI4/15.D0 + DO N = 1, 20 + NNB = N + XN = N + XNN = XN*XN + XNX = XN*X + IF ( XNX>100.D0 ) EXIT + GTERM = (X*X*(3.D0+XNX)+6.D0*(1.D0+XNX)/XNN)/XNN + DG = GTERM*EXP(-XNX) + GSUM = GSUM - DG + DGB = DG + IF ( DG2.0D0 ) THEN + XC = XX + YC = YY + DO + XA = XB + YA = YB + XB = XB*2.D0 + YB = PFOFTK(WAVNA,WAVNB,XB) + IF ( YB>YC ) GOTO 190 + IF ( YB>=PF ) THEN + XC = XB + YC = YB + GOTO 190 + ENDIF + ENDDO + ELSEIF ( XX>XB ) THEN + XC = XX + YC = YY + ELSE + XC = XB + YC = YB + XB = XX + YB = YY + ENDIF + 120 DO + XBA = XB - XA + XCA = XC - XA + XBC = XB - XC + YBA = YB - YA + YCA = YC - YA + YBC = YB - YC + NFIT = NFIT + 1 + IF ( NFIT>NMAX ) THEN + TKOFPF = XX + GOTO 99999 + ELSE + YXBA = YBA/XBA + YXCA = YCA/XCA + C = (YXBA-YXCA)/XBC + B = YXBA - (XB+XA)*C + A = YA - XA*(B+XA*C) + ROOT = SQRT(B*B+4.D0*C*(PF-A)) + XX = 0.5D0*(ROOT-B)/C + IF ( XXXC ) XX = -0.5D0*(ROOT+B)/C + YY = PFOFTK(WAVNA,WAVNB,XX) + IF ( LOGFIT ) YY = LOG(YY) + IF ( ABS(YY-PF)XB ) THEN + XA = XB + YA = YB + ELSE + XC = XB + YC = YB + ENDIF + XB = XX + YB = YY + ENDIF + ENDIF + ENDDO + 190 XB = XA + (PF-YA)*(XC-XA)/(YC-YA) + YB = PFOFTK(WAVNA,WAVNB,XB) + XX = XB + IF ( ABS(YB-PF)NXF ) THEN + SELECT CASE (oper) + CASE ('repart') + GYL(J) = SUMG + CASE ('interp') + GYL(J) = SUMG/SUMY + ENDSELECT + DO + J = J + 1 + IF ( J>NYG ) GOTO 160 + GYL(J) = 0.D0 + ENDDO + ELSE + XA = XB + XB = XLB(I+1) + ENDIF + ELSE + PART = (YB-XAYA)/(XB-XA) + SUMG = SUMG + PART*FXL(I) + SUMY = SUMY + PART + SELECT CASE (oper) + CASE ('repart') + GYL(J) = SUMG + CASE ('interp') + GYL(J) = SUMG/SUMY + ENDSELECT + J = J + 1 + IF ( J>NYG ) GOTO 160 + SUMG = 0.D0 + SUMY = 0.D0 + YA = YB + YB = YLB(J+1) + ENDIF + ENDDO + ELSE + I = I + 1 + IF ( I>NXF ) GOTO 160 + XA = XB + ENDIF + ENDDO + ELSE + GYL(J) = 0.D0 + J = J + 1 + IF ( J>NYG ) EXIT + YA = YB + ENDIF + ENDDO + ELSE + DO + YB = YLB(J+1) + IF ( YB>XA ) THEN + DO + XB = XLB(I+1) + IF ( XB>YA ) THEN + DO + XAYA = XA + IF ( YA>XA ) XAYA = YA + IF ( YB>XB ) THEN + PART = (XB-XAYA)/(XB-XA) + SUMG = SUMG + PART*FXL(I) + SUMY = SUMY + PART + I = I + 1 + IF ( I>NXF ) THEN + SELECT CASE (oper) + CASE ('repart') + GYL(J) = SUMG + CASE ('interp') + GYL(J) = SUMG/SUMY + ENDSELECT + DO + J = J + 1 + IF ( J>NYG ) GOTO 160 + GYL(J) = 0.D0 + ENDDO + ELSE + XA = XB + XB = XLB(I+1) + ENDIF + ELSE + PART = (YB-XAYA)/(XB-XA) + SUMG = SUMG + PART*FXL(I) + SUMY = SUMY + PART + SELECT CASE (oper) + CASE ('repart') + GYL(J) = SUMG + CASE ('interp') + GYL(J) = SUMG/SUMY + ENDSELECT + J = J + 1 + IF ( J>NYG ) GOTO 160 + SUMG = 0.D0 + SUMY = 0.D0 + YA = YB + YB = YLB(J+1) + ENDIF + ENDDO + ELSE + I = I + 1 + IF ( I>NXF ) GOTO 160 + XA = XB + ENDIF + ENDDO + ELSE + GYL(J) = 0.D0 + J = J + 1 + IF ( J>NYG ) EXIT + YA = YB + ENDIF + ENDDO + ENDIF + + 160 END SUBROUTINE REPARTINT + + SUBROUTINE FABINT(F,X,NX,ALIM,BLIM,ABINT) + IMPLICIT NONE +! ------------------------------------------------------------------ +! FABINT PERFORMS NUMERICAL INTEGRATION (AREA UNDER CURVE) OF F(X) +! BETWEEN THE LIMITS X=ALIM AND X=BLIM (WITH BLIM GT ALIM) +! +! F(X) IS DEFINED BY CONNECTING SUCCESSIVE F(X) DATA POINTS USING +! STRAIGHT-LINE SEGMENTS, I.E. F(X) IS PIECE-WISE CONTINUOUS +! THE X COORDINATE CAN BE IN ASCENDING OR DESCENDING ORDER +! +! (F(X) IS ZERO OUTSIDE THE INTERVAL BETWEEN X(1) AND X(NX)) +! ------------------------------------------------------------------ + INTEGER, INTENT(IN) :: NX + REAL*8, INTENT(IN) :: F(NX), X(NX), ALIM, BLIM + REAL*8, INTENT(OUT) :: ABINT + REAL*8, PARAMETER :: DELTA = 1.D-07 + REAL*8 XA, XB, XX, XMIN, XMAX, XJ, XI, FI, FJ, BF, AF, DINT, X2, & + X1 + INTEGER JX, KX, IX + + ABINT = 0.D0 + JX = 1 + KX = 1 + XA = X(JX) + XB = X(NX) + XX = XA + IF ( XB<=XA ) THEN + XA = XB + XB = XX + JX = NX + KX = -1 + ENDIF + XMIN = XA + XMAX = XB + IF ( XMIN>=BLIM ) RETURN + IF ( XMAX<=ALIM ) RETURN + IF ( XMINBLIM ) XMAX = BLIM + DO + JX = JX + KX + XJ = X(JX) + IF ( XJ>XMIN ) THEN + IX = JX - KX + XI = X(IX) + IF ( (XJ-XI)>=DELTA ) THEN + FI = F(IX) + FJ = F(JX) + BF = (FJ-FI)/(XJ-XI) + AF = FJ - BF*XJ + X2 = XMIN + DO + X1 = X2 + X2 = XJ + IF ( X2>XMAX ) X2 = XMAX + DINT = AF*(X2-X1) + BF*(X2**2-X1**2)/2.D0 + ABINT = ABINT + DINT + IF ( DABS(X2-XMAX)=DELTA ) THEN + BF = (FJ-FI)/(XJ-XI) + AF = FJ - BF*XJ + EXIT + ENDIF + ENDDO + ENDIF + ENDDO + ENDIF + ENDIF + ENDDO + END SUBROUTINE FABINT + + SUBROUTINE FXGINT(F,X,NX,G,Y,NY,ALIM,BLIM,ABINT) + IMPLICIT NONE +! ------------------------------------------------------------------ +! FXGINT PERFORMS NUMERICAL INTEGRATION (AREA UNDER CURVE) OF F*G +! BETWEEN THE LIMITS X=ALIM AND X=BLIM (WITH BLIM GT ALIM) +! +! F(X) IS DEFINED BY CONNECTING SUCCESSIVE F(X) DATA POINTS USING +! STRAIGHT-LINE SEGMENTS, I.E. F(X) IS PIECE-WISE CONTINUOUS +! THE X COORDINATE CAN BE IN ASCENDING OR DESCENDING ORDER +! +! G(Y) IS DEFINED BY CONNECTING SUCCESSIVE G(Y) DATA POINTS USING +! STRAIGHT-LINE SEGMENTS, I.E. G(Y) IS PIECE-WISE CONTINUOUS +! THE Y COORDINATE CAN BE IN ASCENDING OR DESCENDING ORDER +! +! (X,Y ARE THE SAME LINEAR COORDINATE INDEPENDENTLY DEFINED) +! +! (F(X) IS ZERO OUTSIDE THE INTERVAL BETWEEN X(1) AND X(NX)) +! (G(Y) IS ZERO OUTSIDE THE INTERVAL BETWEEN Y(1) AND Y(NY)) +! ------------------------------------------------------------------ + INTEGER, INTENT(IN) :: NX, NY + REAL*8, INTENT(IN) :: F(NX), X(NX), G(NY), Y(NY), ALIM, BLIM + REAL*8, INTENT(OUT) :: ABINT + REAL*8, PARAMETER :: DELTA = 1.D-07 + REAL*8 XA, YA, XB, YB, XX, XMIN, XMAX, XJ, XI, FI, FJ, BF, AF, YI,& + YJ, GI, GJ, AG, BG, DINT, X2, X1 + INTEGER JX, JY, KX, KY, IX, IY + + ABINT = 0.D0 + JX = 1 + JY = 1 + KX = 1 + KY = 1 + XA = X(JX) + YA = Y(JY) + XB = X(NX) + YB = Y(NY) + XX = XA + IF ( XB<=XA ) THEN + XA = XB + XB = XX + JX = NX + KX = -1 + ENDIF + XX = YA + IF ( YB<=YA ) THEN + YA = YB + YB = XX + JY = NY + KY = -1 + ENDIF + XMIN = MAX(XA,YA) + XMAX = MIN(XB,YB) + IF ( XMIN>=BLIM ) RETURN + IF ( XMAX<=ALIM ) RETURN + IF ( XMINBLIM ) XMAX = BLIM + DO + JX = JX + KX + XJ = X(JX) + IF ( XJ>XMIN ) THEN + IX = JX - KX + XI = X(IX) + IF ( (XJ-XI)>=DELTA ) THEN + FI = F(IX) + FJ = F(JX) + BF = (FJ-FI)/(XJ-XI) + AF = FJ - BF*XJ + DO + JY = JY + KY + YJ = Y(JY) + IF ( YJ>XMIN ) THEN + IY = JY - KY + YI = Y(IY) + IF ( (YJ-YI)>=DELTA ) THEN + GI = G(IY) + GJ = G(JY) + BG = (GJ-GI)/(YJ-YI) + AG = GJ - BG*YJ + X2 = XMIN + GOTO 160 + ENDIF + ENDIF + ENDDO + ENDIF + ENDIF + ENDDO + 160 X1 = X2 + X2 = MIN(XJ,YJ) + IF ( X2>XMAX ) X2 = XMAX + DINT = (AF*AG)*(X2-X1) + (AF*BG+BF*AG)*(X2**2-X1**2) & + /2.D0 + (BF*BG)*(X2**3-X1**3)/3.D0 + ABINT = ABINT + DINT + IF ( DABS(X2-XMAX)=DELTA ) THEN + BF = (FJ-FI)/(XJ-XI) + AF = FJ - BF*XJ + EXIT + ENDIF + ENDDO + ENDIF + DO WHILE ( YJ<=X2 ) + YI = YJ + GI = GJ + IY = JY + JY = JY + KY + YJ = Y(JY) + GJ = G(JY) + IF ( DABS(YJ-YI)>=DELTA ) THEN + BG = (GJ-GI)/(YJ-YI) + AG = GJ - BG*YJ + EXIT + ENDIF + ENDDO + GOTO 160 + END SUBROUTINE FXGINT + + SUBROUTINE CTREND(JYEAR,IDEC,JDEC,CWTI,CWTJ) + IMPLICIT NONE + +!------------------------------------------------------------------- +! Black Carbon interdecadal TAU interpolation is based on linear +! TAU trend (between decadal global TAUmaps) with a superimposed +! intra-decadal time dependence scaled to the Black Carbon Total +! emission rate. +! +! INPUT: JYEAR (Julian year) +! +! CTREND coefficients refer to sep2003_OCI_Koch maps +! CTREND coefficients refer to sep2003_BCI_Koch maps +! -------------------------------------------------- +! +! Map= 1850 1875 1900 1925 1950 1960 1970 1980 1990 +! OUTPUT: IDEC= (0) 1 2 3 4 5 6 7 8 +! JDEC= IDEC + 1 (returned IDEC,JDEC are (1 to 8) +! +! CWTI= (Multiplicative Weight for BC DataMap IDEC) +! CWTJ= (Multiplicative Weight for BC DataMap JDEC) +! +! NOTE: Time dependence is linear before 1950. Industrial BC +! is assumed 0 in 1850 so CWTI=0, and IDEC is set to 1 +!------------------------------------------------------------------- + + INTEGER, INTENT(IN) :: JYEAR + INTEGER, INTENT(OUT) :: IDEC, JDEC + REAL*8, INTENT(OUT) :: CWTI, CWTJ + +! Global Annual Emissions of BC U Emission (Mt/yr) + +! Year Hard_Coal Brown_Coal Diesel Total + REAL*8, PARAMETER, DIMENSION(5,45) :: BCE = RESHAPE((/50.0, & + 2.280581713,0.4449132979, & + 0.1599090248,2.885536671,51.0, & + 2.443193913,0.4855868816, & + 0.1884280443,3.117194653,52.0, & + 2.473641872,0.5115299225, & + 0.2027695477,3.187930107,53.0, & + 2.481340885,0.5448409319, & + 0.2149295360,3.241089582,54.0, & + 2.505670071,0.5780177116, & + 0.2343477309,3.317960978,55.0, & + 2.698692560,0.6238067150, & + 0.2733324766,3.595800638,56.0, & + 2.855226278,0.6531309485, & + 0.3043369055,3.812692404,57.0, & + 2.975781679,0.6821750998, & + 0.3207367063,3.978575468,58.0, & + 3.341105223,0.7035279870, & + 0.3370627165,4.381746292,59.0, & + 3.638528824,0.7075053453, & + 0.3695519567,4.715488434,60.0, & + 3.770926714,0.7416650057, & + 0.3832504749,4.896034241,61.0, & + 3.392980337,0.7805693150, & + 0.4217525721,4.595387459,62.0, & + 3.288835049,0.8179932237, & + 0.4603823125,4.567360401,63.0, & + 3.359177589,0.8604368567, & + 0.5090782642,4.728550911,64.0, & + 3.432664871,0.8952696323, & + 0.5388473868,4.866865158,65.0, & + 3.529418945,0.8819132447, & + 0.5785927773,4.989773750,66.0, & + 3.577459812,0.8817394972, & + 0.6323299408,5.091631413,67.0, & + 3.418204546,0.8635972142, & + 0.6592246890,4.941041946,68.0, & + 3.452457905,0.8943673372, & + 0.7338049412,5.080585003,69.0, & + 3.626069546,0.9298774004, & + 0.7889106274,5.344810009,70.0, & + 3.264039755,0.9229136109, & + 0.8880128860,5.074741840,71.0, & + 3.437611580,0.9374827743, & + 0.9531223178,5.328329086,72.0, & + 3.473345757,0.7836616039, & + 1.0180075170,5.274850368,73.0, & + 3.495583296,0.8056778908, & + 1.1174367670,5.418928623,74.0, & + 3.506143808,0.8251076341, & + 1.0828053950,5.413989067,75.0, & + 3.906814098,0.8527192473, & + 1.0454736950,5.804963112,76.0, & + 4.005736828,0.8900613785, & + 1.1400985720,6.035901546,77.0, & + 4.236912251,0.9103702307, & + 1.2190728190,6.366260529,78.0, & + 4.459666252,0.9303293228, & + 1.2408012150,6.630728722,79.0, & + 4.697422504,0.9856286645, & + 1.3019220830,6.984815121,80.0, & + 4.796229839,0.9959300756, & + 1.2336660620,7.026207924,81.0, & + 4.789204121,1.0459070210, & + 1.1664049630,7.001126766,82.0, & + 4.872739315,1.0975246430, & + 1.1601715090,7.130136490,83.0, & + 4.983223438,1.1424025300, & + 1.1732926370,7.298912525,84.0, & + 5.265352249,1.2178678510, & + 1.2251536850,7.708741188,85.0, & + 5.763637543,1.2965050940, & + 1.2428865430,8.303324699,86.0, & + 5.924767494,1.3386499880, & + 1.2930148840,8.556744576,87.0, & + 6.155550480,1.3738890890, & + 1.3162037130,8.845513344,88.0, & + 6.379704475,1.3670797350, & + 1.3813229800,9.127896309,89.0, & + 6.594299316,1.4169263840, & + 1.4029121400,9.414231300,90.0, & + 6.566919804,1.4685817960, & + 1.4224120380,9.458042145,91.0, & + 6.661097050,1.2067918780, & + 1.4163945910,9.284657478,92.0, & + 7.737902641,1.3509917260, & + 1.4471185210,10.53625107,93.0, & + 7.393332005,1.2448183300, & + 1.4543261530,10.09271908,94.0, & + 7.515841007,1.2333894970, & + 1.4780857560,10.22745800/),(/5,45/)) + + REAL*8 XDEC + INTEGER IBCDEC, JBCDEC, IJYEAR + + IF ( JYEAR<1876 ) THEN + CWTJ = (JYEAR-1850)/25.D0 + IF ( CWTJ<0.D0 ) CWTJ = 0.D0 + CWTI = 0.D0 + IDEC = 1 + JDEC = 1 + GOTO 100 + ENDIF + + IF ( JYEAR<1950 ) THEN + XDEC = (JYEAR-1850)/25.D0 + IDEC = XDEC + JDEC = IDEC + 1 + CWTJ = XDEC - IDEC + CWTI = 1.D0 - CWTJ + GOTO 100 + ENDIF + + IF ( JYEAR<1990 ) THEN + IDEC = (JYEAR-1910)/10 + JDEC = IDEC + 1 + IBCDEC = 1 + (IDEC-4)*10 + JBCDEC = IBCDEC + 10 + IJYEAR = JYEAR - 1949 + CWTJ = (BCE(5,IJYEAR)-BCE(5,IBCDEC)) & + /(BCE(5,JBCDEC)-BCE(5,IBCDEC)) + CWTI = 1.D0 - CWTJ + GOTO 100 + ENDIF + + IF ( JYEAR>1989 ) THEN + IDEC = 7 + JDEC = 8 + IJYEAR = JYEAR - 1949 + IF ( IJYEAR>45 ) IJYEAR = 45 + CWTJ = BCE(5,IJYEAR)/BCE(5,41) + CWTI = 0.D0 + ENDIF + + 100 END SUBROUTINE CTREND + + SUBROUTINE STREND(JYEAR,IDEC,JDEC,SWTI,SWTJ) + IMPLICIT NONE + +!------------------------------------------------------------------- +! Anthropogenic Sulfate inter-decadal TAU interpolation is based +! on a linear TAU trend (between decadal global TAU-maps) with a +! superimposed intradecadal time dependence scaled in proportion +! to the Anthropogenic Sulfate global emission rate. +! +! INPUT: JYEAR (Julian year) +! +! CTREND coefficients refer to sep2003_SUI_Koch maps +! -------------------------------------------------- +! +! Map= 1850 1875 1900 1925 1950 1960 1970 1980 1990 +! OUTPUT: IDEC= (0) 1 2 3 4 5 6 7 8 +! JDEC= IDEC + 1 (returned IDEC,JDEC are (1 to 8) +! +! SWTI= (Multiplicative Weight for SUI DataMap IDEC) +! SWTJ= (Multiplicative Weight for SUI DataMap JDEC) +! +! NOTE: Time dependence linear before 1950. Industrial SUI +! is assumed 0 in 1850 so SWTI=0, and IDEC is set to 1 +!------------------------------------------------------------------- + + INTEGER, INTENT(IN) :: JYEAR + INTEGER, INTENT(OUT) :: IDEC, JDEC + REAL*8, INTENT(OUT) :: SWTI, SWTJ + +! Global Emission of Sulfate + +! Emission (Mt/yr) +! year Anthropogenic_Sulfate Natural_Sulfate + REAL*8, PARAMETER, DIMENSION(3,41) :: SUE = RESHAPE((/1950.0, & + 30.46669769,14.4,1951.0,32.38347244, & + 14.4,1952.0,32.18632889,14.4,1953.0, & + 32.83379745,14.4,1954.0,32.79270935, & + 14.4,1955.0,35.79611969,14.4,1956.0, & + 39.93603897,14.4,1957.0,38.68806839, & + 14.4,1958.0,39.35904312,14.4,1959.0, & + 41.06065369,14.4,1960.0,42.67050934, & + 14.4,1961.0,41.32410431,14.4,1962.0, & + 41.80470276,14.4,1963.0,43.26312637, & + 14.4,1964.0,44.68368530,14.4,1965.0, & + 45.81701660,14.4,1966.0,46.61584091, & + 14.4,1967.0,46.42276001,14.4,1968.0, & + 47.77438354,14.4,1969.0,49.30817032, & + 14.4,1970.0,52.81050873,14.4,1971.0, & + 52.95043945,14.4,1972.0,54.10167694, & + 14.4,1973.0,55.93037415,14.4,1974.0, & + 57.31056213,14.4,1975.0,58.52788162, & + 14.4,1976.0,59.71361542,14.4,1977.0, & + 62.59599304,14.4,1978.0,61.98198318, & + 14.4,1979.0,64.71042633,14.4,1980.0, & + 65.28986359,14.4,1981.0,63.23768234, & + 14.4,1982.0,62.88000488,14.4,1983.0, & + 61.45023346,14.4,1984.0,63.85008621, & + 14.4,1985.0,66.47412872,14.4,1986.0, & + 68.00902557,14.4,1987.0,69.87956238, & + 14.4,1988.0,70.52937317,14.4,1989.0, & + 72.06355286,14.4,1990.0,71.29174805, & + 14.4/),(/3,41/)) + + REAL*8 xdec + INTEGER ISUDEC, JSUDEC, IJYEAR + + IF ( JYEAR<1876 ) THEN + SWTJ = (JYEAR-1850)/25.D0 + IF ( SWTJ<0.D0 ) SWTJ = 0.D0 + SWTI = 0.D0 + IDEC = 1 + JDEC = 1 + GOTO 100 + ENDIF + + IF ( JYEAR<1950 ) THEN + XDEC = (JYEAR-1850)/25.D0 + IDEC = XDEC + JDEC = IDEC + 1 + SWTJ = XDEC - IDEC + SWTI = 1.D0 - SWTJ + GOTO 100 + ENDIF + + IF ( JYEAR<1990 ) THEN + IDEC = (JYEAR-1910)/10 + JDEC = IDEC + 1 + ISUDEC = 1 + (IDEC-4)*10 + JSUDEC = ISUDEC + 10 + IJYEAR = JYEAR - 1949 + SWTJ = (SUE(2,IJYEAR)-SUE(2,ISUDEC)) & + /(SUE(2,JSUDEC)-SUE(2,ISUDEC)) + SWTI = 1.D0 - SWTJ + GOTO 100 + ENDIF + + IF ( JYEAR>1989 ) THEN + IDEC = 7 + JDEC = 8 + IJYEAR = JYEAR - 1949 + IF ( IJYEAR>41 ) IJYEAR = 41 + SWTJ = SUE(2,IJYEAR)/SUE(2,41) + SWTI = 0.D0 + ENDIF + + 100 END SUBROUTINE STREND + + SUBROUTINE SPLINV(X,F,NXF,XX,FF,CUSPWM,CUSPWE,KXTRAP) + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NXF, KXTRAP + REAL*8, INTENT(IN) :: X(NXF), F(NXF), FF, CUSPWM, CUSPWE + REAL*8, INTENT(OUT) :: XX + +!--------------------------------------------------------------------- +! Inverse spline: +! SPLINV locates FF between points (F2,X2)(F3,X3) on 4-point spread +! and returns 4-point Cubic Spline value of XX such that FF = F(XX) +! +! Quadratic Derivatives of Spline are continuous at (F2,X2),(F3,X3) +! (X-Coordinate may be specified in increasing or decreasing order) +! +!--------------------------------------------------------------------- +! +! Custom Control Parameters: CUSPWM,CUSPWE +!------------------------------ +! +! In cases where data points are unevenly spaced and/or data points +! exhibit abrupt changes in value, Spline Interpolation may produce +! undesirable bulging of interpolated values. In more extreme cases +! Linear Interpolation may be less problematic to use. +! +! Interpolation can be weighted between: Cubic Spline and Linear by +! adjusting weights CUSPWM and CUSPWE to values between 1.0 and 0.0 +! +! CUSPWM = Cubic Spline Weight at the (X2-X3) Interval Mid-point +! CUSPWE = Cubic Spline Weight at the (X2-X3) Interval End-points +! +! For example, with: +! +! CUSPWM=1.0,CUSPWE=1.0 FF returns Cubic Spline interpolated value +! CUSPWM=0.0,CUSPWE=0.0 FF returns Linearly interpolated value +! +!--------------------------------------------------------------------- +! +! Extrapolation for XX outside of defined interval: X(1)<->X(NXF) +! +! KXTRAP = 0 No Extrapolation (i.e., sets XX = 0.0) +! 1 Fixed Extrapolation (sets XX=edge value) +! 2 Linear Extrapolation using 2 edge points +! +!--------------------------------------------------------------------- +! +! +! NOTE: F(X) is assumed to be monotonic between F(1) and F(NXF) +! +!------------------------------------------------------------------ + + REAL*8 x1, x2, x3, x4, x21, x32, x43, x31, x42, BETW, FFCUSP, & + FFLINR, CUSPWT + REAL*8 f1, f2, f3, f4, f21, f32, f43, f3221, f4332, a, b, c, d, & + xf, xe, xexm + REAL*8 DX, gg, xg, xy, deltx, slopec, slopel, slopes + INTEGER k, kk + + BETW = (F(2)-FF)*(F(NXF)-F(1)) + IF ( BETW>0.D0 ) THEN + +! Edge Point Interval Interpolation and/or Extrapolation +! ------------------------------------------------------ + BETW = (F(1)-FF)*(F(NXF)-F(1)) + IF ( BETW>0.D0 ) THEN + +! Extrapolation for FF Outside of Interval F(1) - F(2) +! ---------------------------------------------------- +! IF(KXTRAP == 0) (No Extrapolation: sets XX = 0.0) +! IF(KXTRAP == 1) (Extrapolation at Fixed Edge Value) +! IF(KXTRAP == 2) (2 Edge Point Linear Extrapolation) + + IF ( KXTRAP==0 ) XX = 0.D0 + IF ( KXTRAP==1 ) XX = X(1) + IF ( KXTRAP==2 ) XX = X(1) - (F(1)-FF)/(F(2)-F(1)) & + *(X(2)-X(1)) + ELSE + +! F(1),F(2) Edge Point Interval Interpolation +! -------------------------------------------- + DO KK = 2, 6 + X1 = X(1) + X2 = X(2) + X3 = X(3) + F1 = F(1) + F2 = F(2) + F3 = F(3) + XX = X1 + (FF-F(1))/(F(2)-F(1))*(X2-X1) + XF = XX - X1 + X21 = X2 - X1 + F21 = (F2-F1)/X21 + X32 = X3 - X2 + X31 = X3 - X1 + C = ((F3-F2)/X32-F21)/X31 + B = F21 - X21*C + A = F1 + FFCUSP = A + XF*(B+XF*C) + FFLINR = A + XF*F21 + XE = 1.D0 - 2.D0*XF/X21 + XEXM = XE**2 + CUSPWT = (1.D0-XEXM)*CUSPWM + XEXM*CUSPWE + GG = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + SLOPEC = B + 2.D0*C*XF + SLOPEL = F21 + SLOPES = SLOPEC*CUSPWT + SLOPEL*(1.D0-CUSPWT) + XG = XF + DELTX = (GG-FF)/SLOPES + XX = XF - (GG-FF)/SLOPES + X1 + ENDDO + ENDIF + ELSE + BETW = (FF-F(NXF-1))*(F(NXF)-F(1)) + IF ( BETW>0.D0 ) THEN + + BETW = (FF-F(NXF))*(F(NXF)-F(1)) + IF ( BETW>0.D0 ) THEN + +! Extrapolation for F Outside of Interval F(NXF-1)-F(NXF) +! -------------------------------------------------------- +! IF(KXTRAP == 0) (No Extrapolation: sets XX = 0.0) +! IF(KXTRAP == 1) (Extrapolation at Fixed Edge Value) +! IF(KXTRAP == 2) (2 Edge Point Linear Extrapolation) + + IF ( KXTRAP==0 ) XX = 0.D0 + IF ( KXTRAP==1 ) XX = X(NXF) + IF ( KXTRAP==2 ) XX = X(NXF) - (F(NXF)-FF) & + /(F(NXF-1)-F(NXF)) & + *(X(NXF-1)-X(NXF)) + ELSE + +! F(NXF-1),F(NXF) Edge Point Interval Interpolation +! -------------------------------------------------- + DO KK = 3, 7 + X1 = X(NXF-2) + X2 = X(NXF-1) + X3 = X(NXF) + F1 = F(NXF-2) + F2 = F(NXF-1) + F3 = F(NXF) + XX = X2 + (FF-F2)/(F3-F2)*(X3-X2) + XF = XX - X2 + X32 = X3 - X2 + F32 = (F3-F2)/X32 + X21 = X2 - X1 + X31 = X3 - X1 + F21 = (F2-F1)/X21 + +! 3-Point Quadratic Interpolation for Edge Intervals +! -------------------------------------------------- +! +! (Edge Option) ---------------------------------------------- +! For Linear Interpolation within Edge Intervals +! between F(1),F(2), and between F(NXF-1),F(NXF) +! set the value of coefficient C below, to C=0.0 +! ---------------------------------------------- + + C = (F32-F21)/X31 + B = F21 + X21*C + A = F2 + FFCUSP = A + XF*(B+XF*C) + FFLINR = A + XF*F32 + XE = 1.D0 - 2.D0*XF/X32 + IF ( XE<0.D0 ) XE = -XE + XEXM = XE**2 + CUSPWT = (1.D0-XEXM)*CUSPWM + XEXM*CUSPWE + GG = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + SLOPEC = B + 2.D0*C*XF + SLOPEL = F21 + SLOPES = SLOPEC*CUSPWT + SLOPEL*(1.D0-CUSPWT) + XG = XF + DELTX = (GG-FF)/SLOPES + XX = XF - (GG-FF)/SLOPES + X2 + ENDDO + ENDIF + ELSE + + DO K = 3, NXF - 1 + BETW = (FF-F(K-1))*(F(K)-FF) + DX = (FF-F(K-1))/(F(K)-F(K-1)) + XX = X(K-1) + DX*(X(K)-X(K-1)) + IF ( BETW>=0.D0 ) EXIT + ENDDO + + DO KK = 1, 5 + X1 = X(K-2) + X2 = X(K-1) + X3 = X(K) + X4 = X(K+1) + F1 = F(K-2) + F2 = F(K-1) + F3 = F(K) + F4 = F(K+1) + X21 = X2 - X1 + X31 = X3 - X1 + X32 = X3 - X2 + X43 = X4 - X3 + X42 = X4 - X2 + F21 = (F2-F1)/(X21*X21) + F32 = (F3-F2)/(X32*X32) + F43 = (F4-F3)/(X43*X43) + F3221 = (F32+F21)/X31*X21 + F4332 = (F43+F32)/X42*X43 + A = F2 + B = X32*F3221 + C = 3.D0*F32 - F3221 - F3221 - F4332 + D = (F3221+F4332-F32-F32)/X32 + XF = XX - X2 + +! FFCUSP= Cubic Spline Interpolation Result +! ----------------------------------------- + + FFCUSP = A + XF*(B+XF*(C+XF*D)) + XE = (X3+X2-XX-XX)/X32 + IF ( XE<0.D0 ) XE = -XE + XEXM = XE**2 + CUSPWT = (1.D0-XEXM)*CUSPWM + XEXM*CUSPWE + +! FFLINR= Linear Interpolation Result +! ----------------------------------- + FFLINR = A + XF*F32*X32 + GG = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + SLOPEC = B + 2.D0*C*XF + 3.D0*D*XF**2 + SLOPEL = F32*X32 + SLOPES = SLOPEC*CUSPWT + SLOPEL*(1.D0-CUSPWT) + XG = XF + XY = XX + DELTX = (GG-FF)/SLOPES + XX = XF - (GG-FF)/SLOPES + X2 + ENDDO + ENDIF + ENDIF + + END SUBROUTINE SPLINV + + SUBROUTINE THREEPTQUADINTERPOLATION(NVEC,X21,X31,X32,XF,CUSPWM, & + CUSPWE,F21,F32,F2,FF) + IMPLICIT NONE + INTEGER, INTENT(IN) :: NVEC + REAL*8, INTENT(IN) :: X21, X31, X32, XF, CUSPWM, CUSPWE + REAL*8, DIMENSION(NVEC), INTENT(IN) :: F32, F21, F2 + REAL*8, INTENT(OUT) :: FF(NVEC) + +! 3-Point Quadratic Interpolation for Edge Intervals +! -------------------------------------------------- +! +! (Edge Option) ---------------------------------------------- +! For Linear Interpolation within Edge Intervals +! between X(1),X(2), and between X(NXF-1),X(NXF) +! set the value of coefficient C below, to C=0.0 +! ---------------------------------------------- + INTEGER :: K + REAL*8 :: A, B, C, FFCUSP, XE, XEXM, CUSPWT, FFLINR + + DO K = 1, NVEC + C = (F32(K)-F21(K))/X31 + B = F21(K) + X21*C + A = F2(K) + FFCUSP = A + XF*(B+XF*C) + FFLINR = A + XF*F32(K) + XE = 1.D0 - 2.D0*XF/X32 + IF ( XE<0.D0 ) XE = -XE + XEXM = XE**2 + CUSPWT = (1.D0-XEXM)*CUSPWM + XEXM*CUSPWE + FF(K) = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + ENDDO + END SUBROUTINE THREEPTQUADINTERPOLATION + + SUBROUTINE SPLN44(Q,NI,NJ,IR,DR,JN,DN,QQ) + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NI, NJ, IR, JN + REAL*8, INTENT(IN) :: Q(NI,NJ), DR, DN + REAL*8, INTENT(OUT) :: QQ + +!nu REAL*8,save :: CUSPWM=1., CUSPWE=1. ,CUSPWT,fflinr + REAL*8 QK(4) + REAL*8 f1, f2, f3, f4 + INTEGER k, kr, irm, irp + REAL*8, EXTERNAL :: COMPUTE2 + + K = 0 + IRM = IR - 1 + IRP = IR + 2 + DO KR = IRM, IRP + K = K + 1 + F1 = Q(KR,JN-1) + F2 = Q(KR,JN) + F3 = Q(KR,JN+1) + F4 = Q(KR,JN+2) + QK(K) = COMPUTE2(F1,F2,F3,F4,DN) + ENDDO + F1 = QK(1) + F2 = QK(2) + F3 = QK(3) + F4 = QK(4) + QQ = COMPUTE2(F1,F2,F3,F4,DR) + END SUBROUTINE SPLN44 + + SUBROUTINE SPLNI4(Q,NI,NJ,IR,JN,DN,QQ) + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NI, NJ, IR, JN + REAL*8, INTENT(IN) :: Q(NI,NJ), DN + REAL*8, INTENT(OUT) :: QQ + +!nu REAL*8,save :: CUSPWM=1., CUSPWE=1. ,CUSPWT,fflinr + REAL*8 f1, f2, f3, f4 + REAL*8, EXTERNAL :: COMPUTE2 + + F1 = Q(IR,JN-1) + F2 = Q(IR,JN) + F3 = Q(IR,JN+1) + F4 = Q(IR,JN+2) + QQ = COMPUTE2(F1,F2,F3,F4,DN) + END SUBROUTINE SPLNI4 + + ! input parameters + ! SW input ( 6,110) + ! LW input (33,110) + ! SETREL output + ! RQ input (110) + ! 3(6,190),(33,190) + SUBROUTINE SETREL(REFF0,NAER,KDREAD,SRUQEX,SRUQSC,SRUQCB,TRUQEX, & + TRUQSC,TRUQCB,REFU22,Q55U22,FRSULF,SRHQEX, & + SRHQSC,SRHQCB,TRHQAB,RHDATA) + ! RH info (190,9) + + USE FILEMANAGER, ONLY:OPENUNIT, CLOSEUNIT + USE DOMAIN_DECOMP_ATM, ONLY:AM_I_ROOT + IMPLICIT NONE + + INTEGER NAER, KDREAD + REAL*8 REFF0, SRUQEX(6,110), SRUQSC(6,110), SRUQCB(6,110), & + TRUQEX(33,110), TRUQSC(33,110), TRUQCB(33,110), REFU22(110)& + , Q55U22(110), FRSULF(8) + REAL*8 SRHQEX(6,190), SRHQSC(6,190), SRHQCB(6,190), TRHQAB(33,190)& + , RHDATA(190,15) + +! ------------------------------------------------------------------ +! REFF0 = Effective radius for dry aerosol seed size (in microns) +! NAER = Aerosol composition index +! KDREAD = IO READ unit number for Q(m,r),g(m,r) data used by SETREL +! ------------------------------------------------------------------ +! Aerosol index = NAER Composition Input data order = NNA +! 1 SO4 Sulfate 1 +! 2 SEA Sea Salt 2 +! 3 NO3 Nitrate 3 +! Pure Water 4 +! 4 ORG Organic 5 +! ------------------------------------------------------------------ + + CHARACTER*40, SAVE :: dtfile = & + &'oct2003.relhum.nr.Q633G633.table' + LOGICAL qexist + INTEGER i, j, j1, k, k1, in1, ir1, jdry, jwet, jhimax, khimax, & + maxdry, maxwet + INTEGER n, n0, n1, nn, np, nrhn1 + REAL*8 x, xx, xi, xn0, xn1, xr1, ff, fi, gi, gd1, gd2, gw1, gw2, & + grh, qrh, rrh + REAL*8 rh, rhi, rr0, rd1, rd2, rw1, rw2, dwr, qd1, qd2, qw1, qw2, & + xdry, sdry + REAL*8 xwet, swet, qqdmax, qqwmax, rqdmax, rqwmax, q55dry, q63dry,& + dwn + REAL*8 aermas, ddry, dwet, reffi, rhrhi, sum, sumw, vd1, vd2, vw1,& + vw2 + REAL*8 w1, w2, w3, w4, wd1, wd2, ww1, ww2, wtx, wty, wtz, wts, & + wta, xfdry + REAL*8 q55rh1, q55rh2, q55rh3, q55rh4, q550, q633, qgaerx, qscqcb + +! Output variables (RHDATA/RHINFO) + + REAL*8 RHRHRH(190), RHTAUF(190), RHREFF(190), RHWGM2(190), & + RHDGM2(190), RHTGM2(190), RHXMFX(190), RHDENS(190), & + RHQ550(190), TAUM2G(190), XNRRHX(190), ANBCM2(190), & + COSBAR(190), PIZERO(190), ANGSTR(190), RHINFO(190,15) + + EQUIVALENCE (RHINFO(1,1),RHRHRH(1)) + EQUIVALENCE (RHINFO(1,2),RHTAUF(1)) + EQUIVALENCE (RHINFO(1,3),RHREFF(1)) + EQUIVALENCE (RHINFO(1,4),RHWGM2(1)) + EQUIVALENCE (RHINFO(1,5),RHDGM2(1)) + EQUIVALENCE (RHINFO(1,6),RHTGM2(1)) + EQUIVALENCE (RHINFO(1,7),RHXMFX(1)) + EQUIVALENCE (RHINFO(1,8),RHDENS(1)) + EQUIVALENCE (RHINFO(1,9),RHQ550(1)) + EQUIVALENCE (RHINFO(1,10),TAUM2G(1)) + EQUIVALENCE (RHINFO(1,11),XNRRHX(1)) + EQUIVALENCE (RHINFO(1,12),ANBCM2(1)) + EQUIVALENCE (RHINFO(1,13),COSBAR(1)) + EQUIVALENCE (RHINFO(1,14),PIZERO(1)) + EQUIVALENCE (RHINFO(1,15),ANGSTR(1)) + +! ------------------------------------------------------------------ +! RHDATA/ Local +! RHINFO Variable Description +! ------ -------- ---------------------------------------------- +! 1 RHRHRH Relative humidity index RH (DO 110 0.0-0.999) +! 2 RHTAUF Dry TAU multiplication factor due to RH effect +! 3 RHREFF RH dependent effective radius +! 4 RHWGM2 Liquid water content (g/m2) per unit (dry) TAU +! 5 RHDGM2 Dry mass density (g/m2) per unit (dry) TAU +! 6 RHTGM2 Total mass density (g/m2) per unit (dry) TAU +! 7 RHXMFX Dry mass fraction X of total aerosol mass +! 8 RHDENS RH dependent density (g/cm3) +! 9 RHQ550 RH dependent Mie extinction efficiency (550nm) +! 10 TAUM2G RH dependent TAU factor (m2/g) of dry aerosol +! 11 XNRRHX RH dependent real refractive index +! 12 ANBCM2 Aerosol Number density (Billion)/cm2 +! 13 COSBAR RH dependent Mie asymmetry parameter (visible) +! 14 PIZERO RH dependent single scattering albedo(visible) +! 15 ANGSTR Angstrom exponent = -(1-SRHQEX(5)/(0.55-0.815) +! ------------------------------------------------------------------ + + +! Local variables + + REAL*8 R633NR(890), XNR(31), Q633NR(890,31), G633NR(890,31) + REAL*8 Q880M1(890), G880M1(890), Q880M0(890), G880M0(890) + REAL*8 Q880N1(890), Q880N0(890), R550NR(890), SMOOTH(890) + REAL*8 RR0RHX(190), QRH633(190), GRH633(190), DNRX(190) + + + REAL*8 QXAERN(33), QSAERN(33), QGAERN(33), SR1QEX(6), SR1QSC(6), & + SR1QCB(6), SR2QEX(6), SR2QSC(6), SR2QCB(6), SR3QEX(6), & + SR3QSC(6), SR3QCB(6), SR4QEX(6), SR4QSC(6), SR4QCB(6), & + TR1QEX(33), TR1QSC(33), TR1QCB(33), TR2QEX(33), TR2QSC(33),& + TR2QCB(33), TR3QEX(33), TR3QSC(33), TR3QCB(33), TR4QEX(33),& + TR4QSC(33), TR4QCB(33), TRHQEX(33), TRHQSC(33), TRHQCB(33) + + INTEGER, PARAMETER, DIMENSION(4) :: NRHCRY = (/38,47,28,38/) + + CHARACTER*8 AERTYP(4) + DATA AERTYP/'Sulfate ', 'SeaSalt ', 'Nitrate ', 'Organic '/ + +! ------------------------------------------------------------------ +! Hygroscopic aerosols (Sulfate,SeaSalt,Nitrate) physical properties +! formulas from Tang and Munkelwitz (1994, 1996) in JGR 99, JGR 101. +! +! AW=water activity RO=density BX=growth factor RX=refractive index +! SO4 = ammonium sulfate; SEA = sea salt; NO3 = ammonium nitrate +! ------------------------------------------------------------------ + +! functions + + REAL*8 AWSO4, DWSO4, ROSO4, BXSO4, RXSO4, DRWSO4, DRDSO4 + REAL*8 AWSEA, DWSEA, ROSEA, BXSEA, RXSEA, DRWSEA, DRDSEA + REAL*8 RRSEA, VVSEA, GXSEA + REAL*8 AWNO3, DWNO3, RONO3, BXNO3, R1NO3, R2NO3, DRXNO3 + REAL*8 AWOCX, DWOCX, ROOCX, BXOCX, RXOCX, DRWOCX, DRDOCX + + ! Sulfate parametric formulas from Tang Munkelwitz(94,96) + AWSO4(X) = 1.D0 - 0.2715*X + 0.3113*X**2 - 2.336*X**3 + 1.412*X**4 + ! TM94 + DWSO4(X) = -0.2715D0 + 0.6226*X - 7.008*X**2 + 5.648*X**3 + ROSO4(X) = 0.9971D0 + 5.92D-01*X - 5.036D-02*X**2 + 1.024D-02*X**3 + ! TM94 + BXSO4(X) = (1.D0/X*1.760D0/ROSO4(X))**(1.D0/3.D0) ! TM96 + RXSO4(X) = 1.3330 + 0.16730*X - 0.0395*X**2 ! TM91 + DRWSO4(RH) = 1.002146 - 0.00149*RH + 0.001*RH/(1.0+0.911*RH**10) + DRDSO4(RH) = 1.002503 ! ratio of wet dry nr(0.550) / nr(0.633) + + ! SeaSalt parametric formulas from Tang Munkelwitz(94,96) + AWSEA(X) = 1.0D0 - 0.6366*X + 0.8624*X**2 - 11.58*X**3 + & + 15.18*X**4 ! TM96 + DWSEA(X) = -0.6366D0 + 1.7248*X - 34.74*X**2 + 60.72*X**3 + ROSEA(X) = 0.9971 + 0.741*X - 0.3741*X**2 + 2.252*X**3 - & + 2.060*X**4 ! TM96 + BXSEA(X) = (1.D0/X*2.165D0/ROSEA(X))**(1.D0/3.D0) + RRSEA(X) = 3.70958 + (8.95-3.70958)/(1.D0+(1.0-X)/X*58.448/18.0) + VVSEA(X) = (18.0+(58.448-18.0)/(1.0+(1.0-X)/X*58.448/18.0)) & + /ROSEA(X) + GXSEA(X) = SQRT((2.D0*RRSEA(X)+VVSEA(X))/(VVSEA(X)-RRSEA(X))) + ! TM96 + RXSEA(X) = 1.333 + (GXSEA(X)-1.333)*(1.490-1.333)/(1.544-1.333) + DRWSEA(RH) = 1.00212 - 0.001625*RH + 0.00131*RH/(1.0+0.928*RH**3) + DRDSEA(RH) = 1.003007 ! ratio of wet dry nr(0.550) / nr(0.633) + + ! Nitrate parametric formulas from Tang Munkelwitz(94,96) + AWNO3(X) = 1.D0 - 3.65D-01*X - 9.155D-02*X**2 - 2.826D-01*X**3 + ! TM96 + DWNO3(X) = -3.65D-01 - 18.31D-02*X - 8.478D-01*X**3 + RONO3(X) = 0.9971D0 + 4.05D-01*X + 9.0D-02*X**2 ! TM96 + BXNO3(X) = (1.D0/X*1.725D0/RONO3(X))**(1.D0/3.D0) ! TM96 + R1NO3(X) = 1.3330 + 0.119D0*X ! (X<0.205) TWM81 + R2NO3(X) = 1.3285 + 0.145D0*X ! (X>0.205) TWM81 + DRXNO3(RH) = 1.001179 ! ratio of wet dry nr(0.550) / nr(0.633) + + ! Organic Carbon - adapted from Sulfate parametric formulas + ! yields growth factor G=1.1 at RH=0.84 Virkkula et al 1999 + AWOCX(X) = 1D0 - X**8D0 + DWOCX(X) = -8D0*X**7D0 + ROOCX(X) = 1D0 + .5D0*X + BXOCX(X) = (1.5D0/(X*ROOCX(X)))**(1D0/3D0) + RXOCX(X) = 1.3330D0 + .193D0*X + DRWOCX(RH) = 1.00253 - 0.00198*RH + 0.00184*RH/(1.0+0.656*RH**1.1) + DRDOCX(RH) = 1.00253 + +! ------------------------------------------------------------------ +! Q,G Mie data (879x31) at 0.633 microns, use 31 points to cover the +! refractive index from 1.30 to 1.60 with equal spacing of 0.01 +! +! Q,G data effective radius spans the range from 0.0 to 20.4 microns +! in (3) segments of equally spaced data for optimized 4-point Cubic +! Spline interpolation. The equally spaced segments are as follows: +! +! Index: 1 - 303 304 - 603 604 - 879 881 - 885 886 - 890 +! Reff: 0.00-3.02 3.04-9.02 9.04-20.04 2.98-3.04 8.96-9.08 +! Delta: 0.01 0.02 0.04 0.02 0.04 +! +! The last two intervals are constructed to accommodate transitions +! between the (3) segments using 4-point Cubic Spline interpolation +! ------------------------------------------------------------------ + + + INQUIRE (FILE=dtfile,EXIST=qexist) + IF ( .NOT.qexist ) dtfile = 'RH_QG_Mie ' + ! generic name used by GCM + INQUIRE (FILE=dtfile,EXIST=qexist) + IF ( .NOT.qexist ) CALL STOP_MODEL('setrel: no RH_QG files',255) + CALL OPENUNIT(dtfile,kdread,.FALSE.,.TRUE.) ! formatted, old + + READ (KDREAD,7000) (XNR(J),J=1,31) + DO I = 1, 880 + READ (KDREAD,7001) R633NR(I), (Q633NR(I,J),J=1,31) + ENDDO + READ (KDREAD,7000) (XNR(J),J=1,31) + DO I = 1, 880 + READ (KDREAD,7001) R633NR(I), (G633NR(I,J),J=1,31) + ENDDO + CALL CLOSEUNIT(KDREAD) + + J = 880 + DO K = 299, 305 + IF ( K/=300 ) THEN + IF ( K/=302 ) THEN + J = J + 1 + R633NR(J) = R633NR(K) + DO I = 1, 31 + Q633NR(J,I) = Q633NR(K,I) + G633NR(J,I) = G633NR(K,I) + ENDDO + ENDIF + ENDIF + ENDDO + DO K = 600, 606 + IF ( K/=601 ) THEN + IF ( K/=603 ) THEN + J = J + 1 + R633NR(J) = R633NR(K) + DO I = 1, 31 + Q633NR(J,I) = Q633NR(K,I) + G633NR(J,I) = G633NR(K,I) + ENDDO + ENDIF + ENDIF + ENDDO + +! Apply 13-point quadratic least-squares smoothing to large particle +! portion of Mie Qx data to eliminate low-amplitude ripple in Q633NR +! (Monotonic size dependence is needed for inverse Qx interpolation) +! (Smoothing affects 4th decimal of Q633NR for large particle sizes) +! ------------------------------------------------------------------ + DO I = 1, 31 + DO J = 1, 880 + SMOOTH(J) = Q633NR(J,I) + ENDDO + DO J = 881, 886 + SMOOTH(J) = SMOOTH(880) + ENDDO + DO J = 250, 880 + J1 = J - 2 + IF ( SMOOTH(J)>=SMOOTH(J-1) ) EXIT + ENDDO + DO J = J1, 880 + SUM = 4550.D0/13.D0*SMOOTH(J) + DO K = 1, 6 + SUM = SUM + (4550.D0/13.D0-14*K*K) & + *(SMOOTH(J-K)+SMOOTH(J+K)) + ENDDO + Q633NR(J,I) = SUM/2002.D0 + ENDDO + ENDDO + +! Set relative humidity RHRHRH scale +! ---------------------------------- + DO I = 1, 190 + RHRHRH(I) = (I-1)/100.D0 + IF ( I>91 ) RHRHRH(I) = 0.90D0 + (I-91)/1000.D0 + ENDDO + +! Define RH (=AW), RO, BX, RX as functions of X for NAER aerosol +! -------------------------------------------------------------- + NRHN1 = NRHCRY(NAER) + 1 + DO I = 1, 190 + RHI = RHRHRH(I) + RR0RHX(I) = 1.D0 + RHXMFX(I) = 1.D0 + IF ( NAER==1 ) THEN ! Dry Sulfate refrac index and density + XNRRHX(I) = 1.526 + RHDENS(I) = 1.760 + IF ( I=NRHN1 ) DNRX(I) = DRWSO4(RHI) + ENDIF + IF ( NAER==2 ) THEN ! Dry SeaSalt refrac index and density + XNRRHX(I) = 1.490 + RHDENS(I) = 2.165 + IF ( I=NRHN1 ) DNRX(I) = DRWSEA(RHI) + ENDIF + IF ( NAER==3 ) THEN ! Dry Nitrate refrac index and density + XNRRHX(I) = 1.554 + RHDENS(I) = 1.725 + DNRX(I) = DRXNO3(RHRHRH(I)) + ENDIF + IF ( NAER==4 ) THEN ! Dry Organic refrac index and density + XNRRHX(I) = 1.526 ! (representative value) + RHDENS(I) = 1.5 ! (representative value) + IF ( I=NRHN1 ) DNRX(I) = DRWOCX(RHI) + ENDIF + ENDDO + +! Invert X, RO, BX, RX functions of (X) to be functions of RH +! ----------------------------------------------------------- + I = 191 + FF = 1.D0 + XX = 0.D0 + IF ( NAER==1 ) GI = DWSO4(XX) + IF ( NAER==2 ) GI = DWSEA(XX) + IF ( NAER==3 ) GI = DWNO3(XX) + IF ( NAER==4 ) THEN + FF = .9995D0 + XX = (1D0-FF)**.125D0 + GI = DWOCX(XX) + ENDIF + DO + I = I - 1 + FI = RHRHRH(I) + DO K = 1, 5 + XI = XX - (FF-FI)/GI + IF ( NAER==1 ) FF = AWSO4(XI) + IF ( NAER==2 ) FF = AWSEA(XI) + IF ( NAER==3 ) FF = AWNO3(XI) + IF ( NAER==4 ) FF = AWOCX(XI) + IF ( I>0 ) THEN + ENDIF + XX = XI + IF ( NAER==1 ) GI = DWSO4(XX) + IF ( NAER==2 ) GI = DWSEA(XX) + IF ( NAER==3 ) GI = DWNO3(XX) + IF ( NAER==4 ) GI = DWOCX(XX) + ENDDO + RHXMFX(I) = XX + IF ( NAER==1 ) THEN ! RH dependent Sulfate X,R,NR,RO + RHDENS(I) = ROSO4(XX) + RR0RHX(I) = BXSO4(XX) + XNRRHX(I) = RXSO4(XX) + ENDIF + IF ( NAER==2 ) THEN ! RH dependent SeaSalt X,R,NR,RO + RHDENS(I) = ROSEA(XX) + RR0RHX(I) = BXSEA(XX) + XNRRHX(I) = RXSEA(XX) + ENDIF + IF ( NAER==3 ) THEN ! RH dependent Nitrate X,R,NR,RO + RHDENS(I) = RONO3(XX) + RR0RHX(I) = BXNO3(XX) + XNRRHX(I) = R1NO3(XX) + IF ( XX>0.205D0 ) XNRRHX(I) = R2NO3(XX) + ENDIF + IF ( NAER==4 ) THEN ! RH dependent Organic X,R,NR,RO + RHDENS(I) = ROOCX(XX) + RR0RHX(I) = BXOCX(XX) + XNRRHX(I) = RXOCX(XX) + ENDIF + IF ( I<=NRHN1 ) THEN + +! ------------------------------------------------------------------ +! Find Qdry(r),gdry(r) from Q(m,r),g(m,r) maps for each aerosol type +! Find Qwet(r),gwet(r) from Q(m,r),g(m,r) maps for each aerosol type +! also locate MAXDRY,MAXWET pts where Qdry(r),Qwet(r) are at maximum +! (M1 refers to mass fraction X of 1.0, i.e., "dry" aerosol) +! (M0 refers to mass fraction X of 0.0, i.e., "wet" aerosol) +! ------------------------------------------------------------------ + MAXDRY = 1 + MAXWET = 1 + QQDMAX = 0.D0 + QQWMAX = 0.D0 + XDRY = XNRRHX(1) +! IF(MCRYON == 1) XDRY=XNRRHX(NRHN1) ! If "dry" = RHC reference line + SDRY = XDRY*100.D0 - 129 + JDRY = SDRY + DDRY = SDRY - JDRY + XWET = 1.3330D0 ! Pure water Nr = "wet" aerosol + SWET = XWET*100.D0 - 129 + JWET = SWET + DWET = SWET - JWET + DO I = 1, 880 + CALL SPLNI4(Q633NR,890,31,I,JDRY,DDRY,Q880M1(I)) + CALL SPLNI4(G633NR,890,31,I,JDRY,DDRY,G880M1(I)) + CALL SPLNI4(Q633NR,890,31,I,JWET,DWET,Q880M0(I)) + CALL SPLNI4(G633NR,890,31,I,JWET,DWET,G880M0(I)) + IF ( Q880M1(I)>QQDMAX ) THEN + QQDMAX = Q880M1(I) + MAXDRY = I + ENDIF + IF ( Q880M0(I)>QQWMAX ) THEN + QQWMAX = Q880M0(I) + MAXWET = I + ENDIF + ENDDO + RQDMAX = R633NR(MAXDRY) + RQWMAX = R633NR(MAXWET) + +! Define: Qdry(r) and Qwet(r) at the reference wavelength of 550 nm +! using refractive index off-set and size parameter scaling +! ------------------------------------------------------------------ + XDRY = XNRRHX(1)*DNRX(1) ! Dry aerosol Nr at 550 nm +! IF(MCRYON == 1) XDRY=XNRRHX(NRHN1) ! If "dry" = RHC reference line + SDRY = XDRY*100.D0 - 129 + JDRY = SDRY + DDRY = SDRY - JDRY + XWET = 1.3330D0*1.001179 + ! Pure water aerosol Nr at 550 nm + SWET = XWET*100.D0 - 129 + JWET = SWET + DWET = SWET - JWET + DO I = 1, 880 + CALL SPLNI4(Q633NR,890,31,I,JDRY,DDRY,Q880N1(I)) + CALL SPLNI4(Q633NR,890,31,I,JWET,DWET,Q880N0(I)) + R550NR(I) = R633NR(I)*(0.550/0.633) + ! Size shift refers Q to 550 nm + ENDDO + CALL SPLINE(R550NR,Q880N1,880,REFF0,Q55DRY,1.D0,1.D0,1) + CALL SPLINE(R633NR,Q880M1,880,REFF0,Q63DRY,1.D0,1.D0,1) + +! Find Q(RH),g(RH) paths in Q(m,r),g(m,r) maps for seed size = REFF0 +! 2-coordinate paths defined via XN0=XNRRHX(I) RR0=REFF0*RR0RHX(I) +! ------------------------------------------------------------------ + DO I = 1, 190 + XN0 = XNRRHX(I) + XN1 = XN0*100.D0 - 129 + IN1 = XN1 + DWN = XN1 - IN1 + RR0 = REFF0*RR0RHX(I) + IF ( RR0<0.01 ) RR0 = 0.01 + IF ( RR0<=3.00D0 ) XR1 = RR0*100.D0 + 1 + IF ( RR0>3.00D0 .AND. RR0<3.04D0 ) XR1 = RR0*50.0D0 + 732 + IF ( RR0>=3.04D0 .AND. RR0<=9.00D0 ) XR1 = RR0*50.0D0 + & + 152 + IF ( RR0>9.00D0 .AND. RR0<9.08D0 ) XR1 = RR0*25.0D0 + 662 + IF ( RR0>=9.08D0 ) THEN + XR1 = RR0*25.0D0 + 378 + IF ( XR1>877.9999D0 ) XR1 = 877.9999D0 + ENDIF + IR1 = XR1 + DWR = XR1 - IR1 + CALL SPLN44(Q633NR,890,31,IR1,DWR,IN1,DWN,QRH633(I)) + CALL SPLN44(G633NR,890,31,IR1,DWR,IN1,DWN,GRH633(I)) + ENDDO + +! Define Q55(RH) by tracing path in Q(m,r) map for RH dependent size +! via 2-coordinate path XN0=XNRRHX(I)*DNRX(I), RR0=RRH(I)*(.633/.55) +! ------------------------------------------------------------------ + DO I = 1, 190 + XN0 = XNRRHX(I)*DNRX(I) + XN1 = XN0*100.D0 - 129 + IN1 = XN1 + DWN = XN1 - IN1 + RR0 = REFF0*RR0RHX(I)*(0.633D0/0.550D0) + IF ( RR0<0.01 ) RR0 = 0.01 + IF ( RR0<=3.00D0 ) XR1 = RR0*100.D0 + 1 + IF ( RR0>3.00D0 .AND. RR0<3.04D0 ) XR1 = RR0*50.0D0 + 732 + IF ( RR0>=3.04D0 .AND. RR0<=9.00D0 ) XR1 = RR0*50.0D0 + & + 152 + IF ( RR0>9.00D0 .AND. RR0<9.08D0 ) XR1 = RR0*25.0D0 + 662 + IF ( RR0>=9.08D0 ) THEN + XR1 = RR0*25.0D0 + 378 + IF ( XR1>877.9999D0 ) XR1 = 877.9999D0 + ENDIF + IR1 = XR1 + DWR = XR1 - IR1 + CALL SPLN44(Q633NR,890,31,IR1,DWR,IN1,DWN,RHQ550(I)) + RHREFF(I) = RR0RHX(I)*REFF0 + ENDDO + +! Aerosol liquid water content is in kg/m2 per unit optical depth +! of dry aerosol with aerosol effective radius expressed in microns. +! ------------------------------------------------------------------ + + DO I = 1, 190 + RHTAUF(I) = (RHQ550(I)/Q55DRY)*RR0RHX(I)**2 + AERMAS = 1.33333333D0*RHREFF(I)*RHDENS(I)/RHQ550(I) & + *RHTAUF(I) + RHTGM2(I) = AERMAS + RHDGM2(I) = AERMAS*RHXMFX(I) + RHWGM2(I) = RHTGM2(I) - RHDGM2(I) + TAUM2G(I) = 0.75D0/RHDENS(1)/RHREFF(1)*RHQ550(1) & + *RHTAUF(I) + ANBCM2(I) = TAUM2G(I)/(1.5080*RHQ550(I)*RHREFF(I)**2) + ENDDO + +! Determination of RH dependent Mie scattering tables for GCM input. +! Find equivalent aersol dry sizes (RD1,RD2) and wet sizes (RW1,RW2) +! and corresponding weights to match the RH dependent Q(r) and g(r). +! Fits made to form: QRH=X*[Y*QD1+(1-Y)*QD2]+(1-X)*[Z*WD1+(1-Z)*WD2] +! ------------------------------------------------------------------ + J1 = MAXWET + JHIMAX = 881 - MAXWET + K1 = MAXDRY + KHIMAX = 881 - MAXDRY + NP = 190 - NRHN1 + 1 + DO I = 1, 190 + RHRHI = RHRHRH(I) + XFDRY = RHXMFX(I) + REFFI = RHREFF(I) + RRH = RR0RHX(I)*REFF0 + GRH = GRH633(I) + QRH = QRH633(I) + QD1 = QRH + QD2 = QRH + QW1 = QRH + QW2 = QRH + IF ( QW1>QQWMAX ) QW1 = QQWMAX + IF ( QW2>QQWMAX ) QW2 = QQWMAX + CALL SPLINV(R633NR,Q880M0,MAXWET,RW1,QW1,1.D0,1.D0,1) + CALL SPLINV(R633NR(J1),Q880M0(J1),JHIMAX,RW2,QW2,1.D0, & + 1.D0,1) + CALL SPLINE(R633NR,G880M0,880,RW1,GW1,1.D0,1.D0,1) + CALL SPLINE(R633NR,G880M0,880,RW2,GW2,1.D0,1.D0,1) + IF ( I>=NRHN1 .AND. QRH>QQWMAX ) THEN + QD1 = QQWMAX + (QRH-QQWMAX)/XFDRY + ! QD1 such that QRH=X*QD1+(1-X)*QW1 + QD2 = 2.3D0 ! 2 dry sizes are used if QD1>QQWMAX + ENDIF + CALL SPLINV(R633NR,Q880M1,MAXDRY,RD1,QD1,1.D0,1.D0,1) + CALL SPLINV(R633NR(K1),Q880M1(K1),KHIMAX,RD2,QD2,1.D0, & + 1.D0,1) + CALL SPLINE(R633NR,G880M1,880,RD1,GD1,1.D0,1.D0,1) + CALL SPLINE(R633NR,G880M1,880,RD2,GD2,1.D0,1.D0,1) + + IF ( IRQDMAX ) WTY = 0.D0 + WTZ = 1.D0 + ELSE ! Dry/wet weighted average regions (2)-(4) + IF ( QRH<=QQWMAX .AND. REFFIQQWMAX ) THEN ! Medium-size region (3) +! Fit form: QRH=X*(Y*QD1+(1-Y)*QD2)+(1-X)*QWmax QRH=/QD1=/QD2=/QW1 + WTZ = 1.D0 + WTY = ((GRH-GD2)*QRH*QD2+(GD2-GW1) & + *QD2*QW1+(GW1-GRH)*QRH*QW1) & + /((GD1-GRH)*QRH*QD1+(GRH-GD2) & + *QRH*QD2+(GW1-GD1)*QD1*QW1+(GD2-GW1)*QD2*QW1) + WTX = (QRH-QW1)/(WTY*(QD1-QD2)+(QD2-QW1)) + ENDIF + IF ( QRH<=QQWMAX .AND. REFFI>RW1 ) THEN + ! Large size region (4) + WTY = 0.D0 + WTZ = 0.D0 + WTX = (GRH-GW2)/(GD2-GW2) + ENDIF + ENDIF + IF ( REFFI>RQWMAX .AND. RHRHI>0.995 ) THEN + ! High RH region (5) + WTY = 0.D0 + WTX = XFDRY + WTZ = ((GRH-GW2)-(GD2-GW2)*WTX)/((1.D0-WTX)*(GW1-GW2)) + ENDIF + + VD1 = WTX*WTY + VD2 = WTX*(1.D0-WTY) + VW1 = WTZ*(1.D0-WTX) + VW2 = (1.D0-WTZ)*(1.D0-WTX) + RD1 = MIN(RD1,10.D0) + RD2 = MIN(RD2,10.D0) + RW1 = MIN(RW1,10.D0) + RW2 = MIN(RW2,10.D0) + +! Computed weight factors are for Lab reference wavelength of 633nm. +! Rescale spectral extinction to 550 nm renormalize weight factors +! ------------------------------------------------------------------ + CALL SPLINE(R550NR,Q880N1,880,RD1,Q550,1.D0,1.D0,1) + CALL SPLINE(R633NR,Q880M1,880,RD1,Q633,1.D0,1.D0,1) + WD1 = VD1*(Q550/Q633) + CALL SPLINE(R550NR,Q880N1,880,RD2,Q550,1.D0,1.D0,1) + CALL SPLINE(R633NR,Q880M1,880,RD2,Q633,1.D0,1.D0,1) + WD2 = VD2*(Q550/Q633) + CALL SPLINE(R550NR,Q880N0,880,RW1,Q550,1.D0,1.D0,1) + CALL SPLINE(R633NR,Q880M0,880,RW1,Q633,1.D0,1.D0,1) + WW1 = VW1*(Q550/Q633) + CALL SPLINE(R550NR,Q880N0,880,RW2,Q550,1.D0,1.D0,1) + CALL SPLINE(R633NR,Q880M0,880,RW2,Q633,1.D0,1.D0,1) + WW2 = VW2*(Q550/Q633) + SUMW = WD1 + WD2 + WW1 + WW2 + W1 = WD1/SUMW + W2 = WD2/SUMW + W3 = WW1/SUMW + W4 = WW2/SUMW + +! ------------------------------------------------------------------ +! Tabulate relative humidity dependent solar, thermal Mie scattering +! parameters SRHQEX,SRHQSC,SRHQCS, TRHQAB for each aerosol type NAER +! These are mass weighted averages of equivalent dry and wet aerosol +! parameters for sizes matching the relative humidity dependent Q(r) +! ------------------------------------------------------------------ + + N0 = 0 ! Select Mie parameters for Sulfate + IF ( NAER==2 ) N0 = 22 + ! Select Mie parameters for SeaSalt + IF ( NAER==3 ) N0 = 44 + ! Select Mie parameters for Nitrate + IF ( NAER==4 ) N0 = 88 + ! Select Mie parameters for Organic + N1 = N0 + 1 + DO K = 1, 6 ! SW dry sizes RD1 RD2 + DO N = 1, 22 + NN = N0 + N + WTS = FRSULF(NAER) + WTA = 1.D0 - WTS + QXAERN(N) = SRUQEX(K,NN)*WTA + SRUQEX(K,N)*WTS + QSAERN(N) = SRUQSC(K,NN)*WTA + SRUQSC(K,N)*WTS + QGAERX = SRUQCB(K,NN)*SRUQSC(K,NN) & + *WTA + SRUQCB(K,N)*SRUQSC(K,N)*WTS + QGAERN(N) = QGAERX/QSAERN(N) + ENDDO + CALL SPLINE(REFU22,QXAERN,22,RD1,SR1QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RD1,SR1QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RD1,SR1QCB(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QXAERN,22,RD2,SR2QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RD2,SR2QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RD2,SR2QCB(K),1.D0,1.D0, & + 1) + ENDDO + + DO K = 1, 33 ! LW dry sizes RD1 RD2 + DO N = 1, 22 + NN = N0 + N + WTS = FRSULF(NAER) + WTA = 1.D0 - WTS + QXAERN(N) = TRUQEX(K,NN)*WTA + TRUQEX(K,N)*WTS + QSAERN(N) = TRUQSC(K,NN)*WTA + TRUQSC(K,N)*WTS + QGAERX = TRUQCB(K,NN)*TRUQSC(K,NN) & + *WTA + TRUQCB(K,N)*TRUQSC(K,N)*WTS + QGAERN(N) = QGAERX/(QSAERN(N)+1D-10) + ENDDO + CALL SPLINE(REFU22,QXAERN,22,RD1,TR1QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RD1,TR1QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RD1,TR1QCB(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QXAERN,22,RD2,TR2QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RD2,TR2QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RD2,TR2QCB(K),1.D0,1.D0, & + 1) + ENDDO + CALL SPLINE(REFU22,Q55U22(N1),22,RD1,Q55RH1,1.D0,1.D0,1) + CALL SPLINE(REFU22,Q55U22(N1),22,RD2,Q55RH2,1.D0,1.D0,1) + + N0 = 66 ! Select Mie parameters for pure water + N1 = N0 + 1 + DO K = 1, 6 ! SW wet sizes RW1 RW2 + DO N = 1, 22 + NN = N0 + N + QXAERN(N) = SRUQEX(K,NN) + QSAERN(N) = SRUQSC(K,NN) + QGAERN(N) = SRUQCB(K,NN) + ENDDO + CALL SPLINE(REFU22,QXAERN,22,RW1,SR3QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RW1,SR3QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RW1,SR3QCB(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QXAERN,22,RW2,SR4QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RW2,SR4QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RW2,SR4QCB(K),1.D0,1.D0, & + 1) + ENDDO + + DO K = 1, 33 ! LW wet sizes RW1 RW2 + DO N = 1, 22 + NN = N0 + N + QXAERN(N) = TRUQEX(K,NN) + QSAERN(N) = TRUQSC(K,NN) + QGAERN(N) = TRUQCB(K,NN) + ENDDO + CALL SPLINE(REFU22,QXAERN,22,RW1,TR3QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RW1,TR3QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RW1,TR3QCB(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QXAERN,22,RW2,TR4QEX(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QSAERN,22,RW2,TR4QSC(K),1.D0,1.D0, & + 1) + CALL SPLINE(REFU22,QGAERN,22,RW2,TR4QCB(K),1.D0,1.D0, & + 1) + ENDDO + CALL SPLINE(REFU22,Q55U22(N1),22,RW1,Q55RH3,1.D0,1.D0,1) + CALL SPLINE(REFU22,Q55U22(N1),22,RW2,Q55RH4,1.D0,1.D0,1) + + ! Weighted GCM SW Mie scattering parameters + DO K = 1, 6 + SRHQEX(K,I) = W1*SR1QEX(K) + W2*SR2QEX(K) & + + W3*SR3QEX(K) + W4*SR4QEX(K) + SRHQSC(K,I) = W1*SR1QSC(K) + W2*SR2QSC(K) & + + W3*SR3QSC(K) + W4*SR4QSC(K) + QSCQCB = W1*SR1QCB(K)*SR1QSC(K) + W2*SR2QCB(K) & + *SR2QSC(K) + W3*SR3QCB(K)*SR3QSC(K) & + + W4*SR4QCB(K)*SR4QSC(K) + SRHQCB(K,I) = QSCQCB/SRHQSC(K,I) + ENDDO + ! Weighted GCM LW Mie scattering parameters + DO K = 1, 33 + TRHQEX(K) = W1*TR1QEX(K) + W2*TR2QEX(K) + W3*TR3QEX(K)& + + W4*TR4QEX(K) + TRHQSC(K) = W1*TR1QSC(K) + W2*TR2QSC(K) + W3*TR3QSC(K)& + + W4*TR4QSC(K) + QSCQCB = W1*TR1QCB(K)*TR1QSC(K) + W2*TR2QCB(K) & + *TR2QSC(K) + W3*TR3QCB(K)*TR3QSC(K) & + + W4*TR4QCB(K)*TR4QSC(K) + TRHQCB(K) = QSCQCB/TRHQSC(K) + TRHQAB(K,I) = TRHQEX(K) - TRHQSC(K) + ENDDO + + COSBAR(I) = SRHQCB(6,I) + PIZERO(I) = SRHQSC(6,I)/SRHQEX(6,I) + ANGSTR(I) = -(1.D0-SRHQEX(5,I))/(0.550D0-0.815D0) + +! Transfer EQUIVALENCEd SETREL output information to RHDATA + DO J = 1, 15 + RHDATA(I,J) = RHINFO(I,J) + ENDDO + ENDDO + +! Diagnostic output + IF ( AM_I_ROOT() ) THEN + DO I = 1, 190 + IF ( I==1 ) WRITE (99,6000) AERTYP(NAER), NAER, REFF0 + IF ( I==82 ) WRITE (99,6000) AERTYP(NAER), NAER, REFF0 + IF ( I==137 ) WRITE (99,6000) AERTYP(NAER), NAER, & + REFF0 + IF ( I>=27 ) THEN + WRITE (99,6100) I, (RHINFO(I,N),N=1,15), & + SRHQEX(6,I), SRHQEX(5,I), & + SRHQEX(1,I), TRHQAB(1,I) + 6100 FORMAT (I3,F5.3,18F8.4) + ENDIF + ENDDO + ENDIF + EXIT + ENDIF + ENDDO + 7000 FORMAT (12X,F5.3,30F8.3) + 7001 FORMAT (3X,F6.2,31F8.5) + 6000 FORMAT (T90,A8,' NAER=',I2,' REFF0=',F5.2// & + &' RH RHTAUF RHREFF RHWGM2 RHDGM2 RHTGM2 RHXMFX'& + , & + &' RHDENS RHQ550 TAUM2G XNRRHX ANBCM2 COSBAR PIZERO'& + ,' ANGSTR SRHQEX6 SRHQEX5 SRHQEX1 TRHQAB1') + + END SUBROUTINE SETREL + + REAL*8 FUNCTION RHDTNA(TK,NA) + IMPLICIT NONE + + INTEGER, INTENT(IN) :: NA + REAL*8, INTENT(IN) :: TK +! functions + REAL*8 RHDSO4, RHDSEA, RHDNO3, RHDOCX + + RHDSO4(TK) = MIN(1.D0,0.80D0*EXP(25.D0*(298.0D0-TK)/(298.0D0*TK))) + RHDSEA(TK) = MIN(1.D0,0.75D0*EXP(80.D0*(298.0D0-TK)/(298.0D0*TK))) + RHDNO3(TK) = MIN(1.D0,0.62D0*EXP(852.D0*(298.0D0-TK)/(298.0D0*TK))& + ) + RHDOCX(TK) = MIN(1.D0,0.80D0*EXP(25.D0*(298.0D0-TK)/(298.0D0*TK))) + + IF ( NA==1 ) RHDTNA = RHDSO4(TK) + IF ( NA==2 ) RHDTNA = RHDSEA(TK) + IF ( NA==3 ) RHDTNA = RHDNO3(TK) + IF ( NA==4 ) RHDTNA = RHDOCX(TK) + END FUNCTION RHDTNA + + REAL*8 FUNCTION COMPUTE(f1,f2,f3,f4,var)RESULT(RESULT) + IMPLICIT NONE + REAL*8, INTENT(IN) :: f1, f2, f3, f4 + REAL*8, INTENT(IN) :: var + REAL*8 :: F21, F32, F43, F3221, F4332 + REAL*8 :: A, B, C, D, XF, FFCUSP, XEXM, CUSPWT + REAL*8 :: FFLINR + REAL*8, PARAMETER :: CUSPWM = 0.5 + REAL*8, PARAMETER :: CUSPWE = 0.5 + F21 = (F2-F1) + F32 = (F3-F2) + F43 = (F4-F3) + F3221 = (F32+F21)*0.5D0 + F4332 = (F43+F32)*0.5D0 + A = F2 + B = F3221 + C = 3.D0*F32 - F3221 - F3221 - F4332 + D = (F3221+F4332-F32-F32) + XF = var + FFCUSP = A + XF*(B+XF*(C+XF*D)) + XEXM = (1-2*XF)**2 ! = XE**2 + CUSPWT = (1.0-XEXM)*CUSPWM + XEXM*CUSPWE + FFLINR = A + XF*F32 + RESULT = FFCUSP*CUSPWT + FFLINR*(1.D0-CUSPWT) + END FUNCTION COMPUTE + + REAL*8 FUNCTION COMPUTE2(f1,f2,f3,f4,var)RESULT(RESULT) + IMPLICIT NONE + REAL*8, INTENT(IN) :: f1, f2, f3, f4 + REAL*8, INTENT(IN) :: var + REAL*8 :: F21, F32, F43, F3221, F4332 + REAL*8 :: A, B, C, D, XF, FFCUSP, XEXM, XE + F21 = (F2-F1) + F32 = (F3-F2) + F43 = (F4-F3) + F3221 = (F32+F21)*0.5D0 + F4332 = (F43+F32)*0.5D0 + A = F2 + B = F3221 + C = 3.D0*F32 - F3221 - F3221 - F4332 + D = (F3221+F4332-F32-F32) + XF = var + FFCUSP = A + XF*(B+XF*(C+XF*D)) + XE = 1.D0 - XF - XF + IF ( XE<0.0 ) XE = -XE + XEXM = XE**2 +!=1 CUSPWT=(1.D0-XEXM)*CUSPWM+XEXM*CUSPWE +!nu FFLINR=A+XF*F32 + RESULT = FFCUSP + END FUNCTION COMPUTE2 + + MODULE O3MOD +!@sum O3mod administers reading of ozone files +!@auth M. Kelley and original development team + USE TIMESTREAM_MOD, ONLY:TIMESTREAM + IMPLICIT NONE + SAVE +!@var O3stream interface for reading and time-interpolating O3 files +!@+ See usage notes in timestream_mod + TYPE (TIMESTREAM) :: O3stream, delta_O3stream +#ifdef HIGH_FREQUENCY_O3_INPUT + TYPE (TIMESTREAM) :: OxHFstream, PSFforO3stream +#endif +#ifdef GCAP + REAL*8, ALLOCATABLE :: save_to3(:,:) +#endif +!@dbparam use_sol_Ox_cycle if =1, a cycle of ozone is appled to +!@+ o3year, as a function of the solar constant cycle. + INTEGER :: use_sol_Ox_cycle = 0 + REAL*8 :: S0min, S0max + +!@dbparam ozone_use_ppm_interp = 1 uses ppm interpolation in the +!@+ timestream. Otherwise uses linm2m. + INTEGER :: ozone_use_ppm_interp = 1 + +!@var have_o3_file whether an O3file was specified in the rundeck + LOGICAL :: have_o3_file + +!@param NLO3_traditional assumed number of layers in ozone data files. + INTEGER, PARAMETER :: NLO3_TRADITIONAL = 49 +!@var NLO3 number of layers in ozone data files, as read from file. + INTEGER :: NLO3 = 0 +!@var PLBO3_traditional assumed edge pressures in O3 input file. + REAL*8 :: PLBO3_traditional(NLO3_TRADITIONAL+1) & + & = (/984D0,934D0,854D0,720D0,550D0,390D0,285D0,210D0, & + & 150D0,125D0,100D0,80D0,60D0,55D0,50D0,45D0,40D0,35D0, & + & 30D0,25D0,20D0,15D0,10.D0,7.D0,5.D0,4.D0,3.D0,2.D0, & + & 1.5D0,1.D0,7D-1,5D-1,4D-1,3D-1,2D-1,1.5D-1,1D-1,7D-2, & + & 5D-2,4D-2,3D-2,2D-2,1.5D-2,1D-2,7D-3,5D-3,4D-3,3D-3, & + & 1D-3,1D-7/) +!@var PLBO3 edge pressures in O3 input file, as read from file + REAL*8, ALLOCATABLE :: PLBO3(:) + + + CONTAINS + + SUBROUTINE UPDO3D(JYEARO,JJDAYO,O3JDAY,O3JREF) + USE DICTIONARY_MOD + USE RESOLUTION, ONLY:psf + USE DOMAIN_DECOMP_ATM, ONLY:grid, GETDOMAINBOUNDS + USE TIMESTREAM_MOD, ONLY:INIT_STREAM, READ_STREAM, & + & GETNAME_FIRSTFILE + USE PARIO, ONLY:PAR_OPEN, PAR_CLOSE, READ_DIST_DATA, & + & VARIABLE_EXISTS, GET_DIMLEN, READ_DATA + USE FILEMANAGER, ONLY:FILE_EXISTS + IMPLICIT NONE + INTEGER, INTENT(IN) :: JYEARO, JJDAYO + REAL*8, DIMENSION(:,:,:), POINTER :: o3jday, o3jref + + INTEGER :: i, j, l, jyearx, fid + LOGICAL, SAVE :: init = .FALSE. + LOGICAL :: cyclic, exists + REAL*8, ALLOCATABLE :: o3arr(:,:,:) + CHARACTER(LEN=6) :: method + CHARACTER(LEN=32) :: fname1st + + INTEGER :: j_0, j_1, i_0, i_1 + + CALL GETDOMAINBOUNDS(grid,J_STRT=j_0,J_STOP=j_1,I_STRT=i_0, & + & I_STOP=i_1) + + jyearx = ABS(jyearo) + + IF ( .NOT.init ) THEN + init = .TRUE. + + have_o3_file = FILE_EXISTS('O3file') + + IF ( have_o3_file ) THEN + + ! Initialize the timestream for the O3 data file: + cyclic = jyearo<0 + + CALL SYNC_PARAM("ozone_use_ppm_interp",ozone_use_ppm_interp) + IF ( ozone_use_ppm_interp==1 ) THEN + method = 'ppm' + ELSE + method = 'linm2m' + ENDIF + CALL INIT_STREAM(grid,O3stream,'O3file','O3',0D0,1D30, & + & TRIM(method),jyearx,jjdayo,cyclic=cyclic) + ! query the layering + CALL GETNAME_FIRSTFILE(O3stream,fname1st) + fid = PAR_OPEN(grid,TRIM(fname1st),'read') + IF ( VARIABLE_EXISTS(grid,fid,'ple') ) THEN + nlo3 = GET_DIMLEN(grid,fid,'ple') - 1 + ! coord var but one less + IF ( nlo3/=GET_DIMLEN(grid,fid,'plm') ) & + & CALL STOP_MODEL('ple/plm dim problem in O3file', & + & 255) + ALLOCATE (plbo3(nlo3+1)) + CALL READ_DATA(grid,fid,'ple',plbo3,BCAST_ALL=.TRUE.) + ELSE + CALL STOP_MODEL('missing ple info in o3file',255) + ENDIF + CALL PAR_CLOSE(grid,fid) + ELSE + nlo3 = NLO3_TRADITIONAL + ALLOCATE (plbo3(nlo3+1)) + plbo3(:) = plbo3_traditional(:) + ENDIF + +#ifdef GCAP + ALLOCATE (save_to3(grid%I_STRT:grid%I_STOP,grid%J_STRT:grid% & + & J_STOP)) + save_to3 = 0. +#endif + + ALLOCATE (o3jday(nlo3,grid%I_STRT:grid%I_STOP,grid%J_STRT:grid%& + & J_STOP)) + o3jday = 0. + + ALLOCATE (o3jref(NLO3_TRADITIONAL,grid%I_STRT:grid%I_STOP, & + & grid%J_STRT:grid%J_STOP)) + o3jref = 0. + +! The next line is brought over from the original UPDO3D. I think +! it is to prevent "losing" some ozone in the REPART interpolation +! if the (fixed) lowest O3 level pressure is at lower pressure than +! the the (fixed) lowest nominal model pressure: + IF ( plbo3(1) g(O3)/g(air) = kg(O3)/kg(air). So now we have a mass + ! mixing ratio. Then multiply by the air mass in kg/m2: + ! kg(O3)/kg(air) * [kg(air)/m2] --> kg(O3)/m2. + ! + ! The demoninator is obtained starting with the density of ozone + ! at 1 atmosphere and 0 deg C. At those conditions, air density + ! is p/RT. I.e. p, R, T are constants here and reference Earth's + ! atmosphere: p=101325 Pa, R=rgas in J kg-1 K-1, T=tf in K, + ! so units work out to kg(air)/m3. Convert from air to ozone + ! again using the ratio of molecular weights, e.g. on Earth: + ! 1.2922 kg(air)/m3 * [48. g(O3)/n(O3) / 28.9655d g(air)/n(air)] + ! --> 2.1415 kg(O3)/m3. Note that this ratio of molecular weights + ! appears in the numerator and denominator so is skipped below. + ! + ! Now do numerator/denominator and obtain atm-m units, and + ! multiply by 100 to get the desired atm-cm units. This is the + ! cm thickness of O3 one would have under those those specific + ! atmoserpheric conditions. All that results in just: + + DO L = 1, LM + numerator = OxHFarr(i,j,L)*airmass(L) + ! kg O3 / m2 we have + denominator = 101325.D0/(rgas*tf) + ! kg O3 / m3 @ 1 atm and 0 deg C + OxHFarr_Converted(L) = 1.D2*numerator/denominator + ENDDO + + ! Now, interpolate vertically, but this interpolation is not onto + ! the rad code O3 levels, it is just an adjustment over the same + ! LM levels but allowing for different surface pressure than was + ! concurrent when this model input was saved from a previous run: + ! IN + CALL REPART(OxHFarr_Converted,filePressureBottoms,LM+1, & + & OxHFarr_Interpolated,modelPressureBottoms,LM+1) + ! OUT + ! save for use in rad code proper: + o3jday_HF_modelLevels(:,i,j) = OxHFarr_Interpolated(:) + ENDDO + ENDDO + + DEALLOCATE (OxHFarr,psf4o3arr) + + END SUBROUTINE UPDO3D_HIGHFREQUENCY +#endif /* HIGH_FREQUENCY_O3_INPUT */ + + + SUBROUTINE UPDO3D_SOLAR(jjdayo,S0,o3jday) +!@sum UPDO3D_solar adds solar cycle variability to O3JDAY + USE DICTIONARY_MOD + USE DOMAIN_DECOMP_ATM, ONLY:grid, GETDOMAINBOUNDS, AM_I_ROOT + USE TIMESTREAM_MOD, ONLY:INIT_STREAM, READ_STREAM + USE PARIO, ONLY:PAR_OPEN, PAR_CLOSE, READ_DATA + IMPLICIT NONE + INTEGER :: jjdayo + REAL*8 :: S0 + REAL*8, DIMENSION(:,:,:), POINTER :: o3jday +!@var delta_o3_now the difference in O3 between solar max and solar min, +!@+ interpolated to the current day + REAL*8, ALLOCATABLE :: delta_o3_now(:,:,:) +!@var add_sol is [S00WM2(now)-1/2(S00WM2min+S00WM2max)]/ +!@+ [S00WM2max-S00WM2min] so that O3(altered) = O3(default) + +!@+ add_sol*delta_O3_now + REAL*8 :: add_sol + LOGICAL, SAVE :: init = .FALSE. + INTEGER :: i, j, l, fid, jyearx + + INTEGER :: j_0, j_1, i_0, i_1 + + jyearx = 2000 ! nominal year + + IF ( .NOT.init ) THEN + init = .TRUE. + + CALL SYNC_PARAM("use_sol_Ox_cycle",use_sol_Ox_cycle) + + IF ( use_sol_Ox_cycle/=1 ) RETURN + + fid = PAR_OPEN(grid,'delta_O3','read') + CALL READ_DATA(grid,fid,'S0min',S0min,BCAST_ALL=.TRUE.) + CALL READ_DATA(grid,fid,'S0max',S0max,BCAST_ALL=.TRUE.) + CALL PAR_CLOSE(grid,fid) + + CALL INIT_STREAM(grid,delta_O3stream,'delta_O3','O3',-1D30, & + & 1D30,'linm2m',jyearx,jjdayo,CYCLIC=.TRUE.) + + ENDIF + + IF ( use_sol_Ox_cycle/=1 ) RETURN + + CALL GETDOMAINBOUNDS(grid,J_STRT=j_0,J_STOP=j_1,I_STRT=i_0, & + & I_STOP=i_1) + + add_sol = (S0-0.5D0*(S0min+S0max))/(S0max-S0min) + IF ( AM_I_ROOT() ) THEN + WRITE (6,661) JJDAYO, S0, S0min, S0max, add_sol + + 661 FORMAT ('JJDAYO,S0,S0min,S0max,frac=',I4,3F9.2,F7.3) + ENDIF + + ALLOCATE (delta_o3_now(grid%I_STRT_HALO:grid%I_STOP_HALO, & + & grid%J_STRT_HALO:grid%J_STOP_HALO,nlo3)) + + CALL READ_STREAM(grid,delta_O3stream,jyearx,jjdayo,delta_o3_now) + DO j = j_0, j_1 + DO i = i_0, i_1 + O3JDAY(:,I,J) = O3JDAY(:,I,J) + add_sol*delta_O3_now(i,j,:) + ENDDO + ENDDO + + DEALLOCATE (delta_o3_now) + END SUBROUTINE UPDO3D_SOLAR + + END MODULE O3MOD + + SUBROUTINE SET_FPXCO2(PL,FPXCO2,NL,KFPCO2) + USE FILEMANAGER, ONLY:FILE_EXISTS, OPENUNIT, CLOSEUNIT + USE DICTIONARY_MOD, ONLY:SYNC_PARAM, SET_PARAM + IMPLICIT NONE + INTEGER J, N, NL, iu, np, NCOL + REAL*8 PL(NL), FPXCO2(NL) + INTEGER, PARAMETER :: NCOLS = 4 + REAL*8 FPI, FPJ, PFI, PFJ, pf(NCOLS) + REAL*8, ALLOCATABLE :: FPX(:), PFP(:) + CHARACTER*80 title +!@dbparam KFPCO2 selects CO2 profile absorber scaling (if >0 ) + INTEGER :: KFPCO2 + ! KFPCO2 will be set from NL or from rundeck +! +! FPXCO2 scaling factors: 1.0 for P > 50mb, linear in P for P < 50mb +! PFP Pressure scale inflection points: continuous linear line segments +! PL=layerL mean pressure, FPXCO2=CO2 absorber scaling factor +! NL=total number of radiation layers incl. the top 3 rad. only layers +! +! CO2 profile absorber scaling: KFPCO2=0 FPXCO2=1, no scaling +! KFPCO2=1 FPXCO2: 43-layer scaling +! KFPCO2=2 FPXCO2: 99-layer scaling +! KFPCO2=3 FPXCO2: 105-layer scaling (2017) +! KFPCO2=4 FPXCO2: 105-layer scaling plus +! adjust up-flux corr. factors in top 10 layers +! KFPCO2<0 NL determines scaling +! KFPCO2>4 FPXCO2=1, no scaling + + CALL SYNC_PARAM("KFPCO2",KFPCO2) + + FPXCO2 = 1. ! default + +! KFPCO2>2 is reserved for a specific 102-layer modelE (used in year 2017) +! but may also work if the layering is the same above 50 mb; the criterion +! below only checks the number of layers above 50 mb - it may be necessary +! to specify KFPCO2 rather than rely on the automatic selection + IF ( NL>40 ) THEN + IF ( KFPCO2<0 .AND. ABS(PL(NL-38)-45.)<5. ) THEN + KFPCO2 = 4 + CALL SET_PARAM("KFPCO2",KFPCO2,'o') + ENDIF + ENDIF + IF ( KFPCO2>2 .OR. KFPCO2==0 ) RETURN + + IF ( .NOT.FILE_EXISTS('CO2profile') ) THEN + KFPCO2 = 0 + CALL SET_PARAM("KFPCO2",KFPCO2,'o') + RETURN + ENDIF + + CALL OPENUNIT('CO2profile',iu,.FALSE.,.TRUE.) + + READ (iu,'(a)') title + READ (title,*) np + READ (iu,'(a)') title + READ (iu,'(a)') title + READ (iu,'(a)') title + +! Find appropriate column for current layering + IF ( KFPCO2<0 ) THEN + IF ( nl<30 ) THEN + KFPCO2 = 0 + ELSEIF ( nl<80 ) THEN + KFPCO2 = 1 + ELSE + KFPCO2 = 2 + ENDIF + CALL SET_PARAM("KFPCO2",KFPCO2,'o') + ENDIF + + IF ( KFPCO2>2 .OR. KFPCO2<1 ) RETURN + + ncol = 2*KFPCO2 - 1 + + ALLOCATE (FPX(np),PFP(np)) + DO n = 1, np + READ (iu,*) pf + pfp(n) = pf(ncol) + fpx(n) = pf(ncol+1) + ENDDO + + CALL CLOSEUNIT(iu) + +! FPX CO2 scaling profile: (1.0 for P > 50mb) (linear in P for P < 50mb) + j = 1 + FPj = FPX(j) + PFj = PFP(j) + N = 1 + DO WHILE ( PL(N)>=PFj ) + FPXCO2(N) = FPj + N = N + 1 + IF ( N>NL ) GOTO 100 + ENDDO + + DO j = 2, np + FPI = FPj + PFI = PFj + FPj = FPX(j) + PFj = PFP(j) + DO WHILE ( PL(N)>=PFj ) + FPXCO2(N) = FPI - (FPI-FPj)*(PFI-PL(N))/(PFI-PFj) + N = N + 1 + IF ( N>NL ) GOTO 100 + ENDDO + ENDDO + + 100 DEALLOCATE (FPX,PFP) + END SUBROUTINE SET_FPXCO2 + + SUBROUTINE GET_FPXCO2_105(FPZCO2,JLAT,MLAT46,JDAY) + IMPLICIT NONE + INTEGER JLAT, MLAT46, JDAY + + INTENT (IN)JLAT, MLAT46, JDAY + INTENT (OUT)FPZCO2 ! FPZCO2 <==> FPXCO2 + + REAL*8 FPZCO2(39) + REAL*8, DIMENSION(39) :: FPZ_JAN, FPZ_JUL + REAL*8 REFLAT, WTJLAT, REFDAY, WTJDAY, WT1, WT2, WT3 + REAL*8, PARAMETER :: FPX_SPEQNP_JAN(39,3) & + & = RESHAPE((/0.106139D+01,0.106783D+01, & + & 0.106256D+01,0.106812D+01,0.106650D+01, & + & 0.105212D+01,0.100292D+01,0.978585D+00, & + & 0.973002D+00,0.104304D+01,0.103306D+01, & + & 0.969076D+00,0.958428D+00,0.101544D+01, & + & 0.100945D+01,0.993654D+00,0.991752D+00, & + & 0.979623D+00,0.941461D+00,0.937047D+00, & + & 0.928036D+00,0.909102D+00,0.900246D+00, & + & 0.901978D+00,0.874685D+00,0.890840D+00, & + & 0.947327D+00,0.980658D+00,0.101200D+01, & + & 0.102130D+01,0.727029D+00,0.750237D+00, & + & 0.856221D+00,0.852355D+00,0.991601D+00, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.795649D+00,0.704146D+00, & + & 0.727177D+00,0.792645D+00,0.748645D+00, & + & 0.872383D+00,0.778125D+00,0.761280D+00, & + & 0.769040D+00,0.762770D+00,0.787812D+00, & + & 0.795996D+00,0.812415D+00,0.806050D+00, & + & 0.931991D+00,0.879633D+00,0.936397D+00, & + & 0.942009D+00,0.914533D+00,0.932472D+00, & + & 0.905136D+00,0.880848D+00,0.810632D+00, & + & 0.878675D+00,0.901477D+00,0.951314D+00, & + & 0.101205D+01,0.109697D+01,0.105704D+01, & + & 0.120352D+01,0.128532D+01,0.152551D+01, & + & 0.107507D+01,0.993298D+00,0.993298D+00, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.105912D+01,0.104105D+01, & + & 0.103011D+01,0.101845D+01,0.991954D+00, & + & 0.980846D+00,0.948530D+00,0.898252D+00, & + & 0.900887D+00,0.931042D+00,0.913461D+00, & + & 0.885751D+00,0.882327D+00,0.962325D+00, & + & 0.978728D+00,0.984428D+00,0.997767D+00, & + & 0.974346D+00,0.962522D+00,0.951995D+00, & + & 0.935819D+00,0.925180D+00,0.923809D+00, & + & 0.912133D+00,0.915321D+00,0.915390D+00, & + & 0.905317D+00,0.931876D+00,0.976460D+00, & + & 0.974906D+00,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01/),(/39,3/)) + REAL*8, PARAMETER :: FPX_SPEQNP_JUL(39,3) & + & = RESHAPE((/0.101719D+01,0.988671D+00, & + & 0.986317D+00,0.992046D+00,0.979385D+00, & + & 0.962768D+00,0.917461D+00,0.884814D+00, & + & 0.904524D+00,0.954613D+00,0.967657D+00, & + & 0.923239D+00,0.926085D+00,0.942071D+00, & + & 0.948953D+00,0.923623D+00,0.947999D+00, & + & 0.894875D+00,0.928884D+00,0.938342D+00, & + & 0.904316D+00,0.906018D+00,0.893131D+00, & + & 0.876373D+00,0.869938D+00,0.849842D+00, & + & 0.890331D+00,0.913173D+00,0.933819D+00, & + & 0.880337D+00,0.853570D+00,0.710237D+00, & + & 0.826221D+00,0.772355D+00,0.991601D+00, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.813710D+00,0.718946D+00, & + & 0.774912D+00,0.764653D+00,0.790177D+00, & + & 0.781660D+00,0.768685D+00,0.778010D+00, & + & 0.742164D+00,0.823045D+00,0.810695D+00, & + & 0.809154D+00,0.839186D+00,0.890938D+00, & + & 0.912096D+00,0.957669D+00,0.940655D+00, & + & 0.970092D+00,0.949381D+00,0.925820D+00, & + & 0.904259D+00,0.919764D+00,0.842020D+00, & + & 0.892613D+00,0.930514D+00,0.978044D+00, & + & 0.972728D+00,0.108045D+01,0.115574D+01, & + & 0.121910D+01,0.135634D+01,0.165630D+01, & + & 0.109376D+01,0.991629D+00,0.991629D+00, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.109553D+01,0.103307D+01, & + & 0.101880D+01,0.104636D+01,0.105279D+01, & + & 0.103332D+01,0.974511D+00,0.948682D+00, & + & 0.946840D+00,0.100858D+01,0.997002D+00, & + & 0.924039D+00,0.896250D+00,0.963271D+00, & + & 0.977617D+00,0.996577D+00,0.992301D+00, & + & 0.974108D+00,0.947932D+00,0.929054D+00, & + & 0.928114D+00,0.912474D+00,0.912335D+00, & + & 0.915498D+00,0.901183D+00,0.925813D+00, & + & 0.971726D+00,0.104123D+01,0.110262D+01, & + & 0.120227D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01,0.100000D+01,0.100000D+01, & + & 0.100000D+01/),(/39,3/)) +! +! FPXCO2 scaling factors: 1.D0 for P>50mb, for layers 1-66 for NL=105 +! FPXCO2 scaling is applied only to the topmost 39 layers (67-105) +! PLZ=layerN layer-mean pressure, FPZCO2(N)=CO2 absorber scaling factor +! PLZ= input GCM variable PL(N), FPZCO2= output GCM variable FPXCO2(N) +! NL =total number of radiation layers (includes top 3 rad-only layers) +! +! #### operation details #### +!---------------------------------------------------------------------- +!x IF(KFPCO2.GE.3) CALL GET_FPXCO2_105(PL,FPXCO2,JLAT,MLAT46,JDAY) +!x +!x above CALL should be placed in RADIA inside the C**** MAIN J LOOP +!x CO2 absorber scaling in top 39 layers is JLAT and JDAY dependent. +!x Applicable for NL=105, scaling is invoked by KFPCO2=3 or KFPCO2=4 +!x +!x KFPCO2=4 invokes additional cooling rate control in top 10 layers +!x via CALL GET_DXTRU3_CORR in TAUGAS to adjust XTRU(96:105,3) coeff +!x +!x TAPER option is being utilized in TAUGAS +!x xtru(l,2:nrcf+1) = wt_one*1d0 + (1d0-wt_one)*xtru(l,2:nrcf+1) +!x xtrd(l,2:nrcf+1) = wt_one*1d0 + (1d0-wt_one)*xtrd(l,2:nrcf+1) +!x with: xtrd(l,2:nrcf+1) also now included (small smoothing effect) +!---------------------------------------------------------------------- + + FPZCO2 = 1.D0 + + REFLAT = MLAT46/2 + WTJLAT = JLAT/REFLAT + REFDAY = 183.D0 + WTJDAY = JDAY/REFDAY + + IF ( WTJLAT<1.D0 ) THEN + WT1 = 1.D0 - WTJLAT + IF ( WT1>0.9D0 ) WT1 = 1.D0 + WT2 = 1.D0 - WT1 + FPZ_JAN(:) = FPX_SPEQNP_JAN(:,1)*WT1 + FPX_SPEQNP_JAN(:,2)*WT2 + FPZ_JUL(:) = FPX_SPEQNP_JUL(:,1)*WT1 + FPX_SPEQNP_JUL(:,2)*WT2 + ELSE + WT2 = 2.D0 - WTJLAT + IF ( WT2<0.1D0 ) WT2 = 0.D0 + WT3 = 1.D0 - WT2 + FPZ_JAN(:) = FPX_SPEQNP_JAN(:,2)*WT2 + FPX_SPEQNP_JAN(:,3)*WT3 + FPZ_JUL(:) = FPX_SPEQNP_JUL(:,2)*WT2 + FPX_SPEQNP_JUL(:,3)*WT3 + ENDIF + + WT1 = ABS(1.D0-WTJDAY) + WT2 = 1.D0 - WT1 + FPZCO2(:) = FPZ_JAN(:)*WT1 + FPZ_JUL(:)*WT2 + + END SUBROUTINE GET_FPXCO2_105 + + SUBROUTINE GET_DXTRU3_CORR(DXTRU3_10,JLAT,MLAT46,JDAY) + IMPLICIT NONE + INTEGER JLAT, MLAT46, JDAY + + INTENT (IN)JLAT, MLAT46, JDAY + INTENT (OUT)DXTRU3_10 + + REAL*8 DXTRU3_10(10) + REAL*8, DIMENSION(10) :: DX3_JAN(10), DX3_JUL(10) + REAL*8 REFLAT, WTJLAT, REFDAY, WTJDAY, WT1, WT2, WT3 + + REAL*8, PARAMETER :: DXTRU3_SPEQNP_JAN(10,3) & + & = RESHAPE((/0.000000D+00,0.111138D-03, & + & 0.594676D-04,0.770460D-04,0.694530D-04, & + & 0.645742D-04,0.245626D-04,0.248727D-04, & + & -.520744D-05,0.165988D-04,0.000000D+00, & + & -.891406D-05,-.743531D-04,-.160635D-04, & + & -.119857D-04,0.873209D-05,0.473174D-05, & + & 0.158620D-04,0.548129D-05,0.121151D-04, & + & 0.000000D+00,-.176254D-04,-.395480D-04, & + & 0.200113D-04,0.172199D-04,-.661705D-05, & + & 0.399818D-04,0.130381D-04,0.198000D-04, & + & 0.263105D-04/),(/10,3/)) + REAL*8, PARAMETER :: DXTRU3_SPEQNP_JUL(10,3) & + & = RESHAPE((/0.000000D+00,0.120614D-04, & + & 0.809026D-05,0.473324D-05,0.482039D-05, & + & -.863633D-05,-.856459D-06,0.335398D-04, & + & 0.422371D-04,0.512790D-04,0.000000D+00, & + & 0.128452D-04,0.811048D-05,0.153064D-04, & + & 0.799234D-05,0.214280D-04,0.146487D-04, & + & 0.225772D-05,0.327750D-05,0.835161D-05, & + & 0.000000D-04,0.652637D-04,0.651595D-04, & + & 0.637362D-04,0.538371D-04,0.429989D-04, & + & 0.948327D-05,0.194748D-04,-.200184D-06, & + & 0.110353D-04/),(/10,3/)) + +! XTRU(L,3)= CO2 LW up-flux correction factor: layers 96-105 for NL=105 +! DXTRU3_SPEQNP(L,1)= SP region, DXTRU3(L,2)= EQ region, DXTRU3(L,3)=NP +! MLAT46=total number of latitude points, interpolation utilizes JLAT +! JDAY interpolation in time: (JDAY=1 =>JAN data) (JDAY=183 =>JUL data) +! +! #### operation details #### +!---------------------------------------------------------------------- +!x IF(KFPCO2.EQ.4) THEN +!x CALL GET_DXTRU3_CORR(DXTRU3_10,JLAT,MLAT46,JDAY) +!x XTRU(96:105,3)=1.D0+DXTRU3_10 +!x ENDIF +!x above CALL sequence should appear just before RETURN from TAUGAS +!---------------------------------------------------------------------- + + REFLAT = MLAT46/2 + WTJLAT = JLAT/REFLAT + REFDAY = 183.D0 + WTJDAY = JDAY/REFDAY + + IF ( WTJLAT<1.D0 ) THEN + WT1 = 1.D0 - WTJLAT + IF ( WT1>0.9D0 ) WT1 = 1.D0 + WT2 = 1.D0 - WT1 + DX3_JAN(:) = DXTRU3_SPEQNP_JAN(:,1) & + & *WT1 + DXTRU3_SPEQNP_JAN(:,2)*WT2 + DX3_JUL(:) = DXTRU3_SPEQNP_JUL(:,1) & + & *WT1 + DXTRU3_SPEQNP_JUL(:,2)*WT2 + ELSE + WT2 = 2.D0 - WTJLAT + IF ( WT2<0.1D0 ) WT2 = 0.D0 + WT3 = 1.D0 - WT2 + DX3_JAN(:) = DXTRU3_SPEQNP_JAN(:,2) & + & *WT2 + DXTRU3_SPEQNP_JAN(:,3)*WT3 + DX3_JUL(:) = DXTRU3_SPEQNP_JUL(:,2) & + & *WT2 + DXTRU3_SPEQNP_JUL(:,3)*WT3 + ENDIF + + WT1 = ABS(1.D0-WTJDAY) + WT2 = 1.D0 - WT1 + DXTRU3_10(:) = DX3_JAN(:)*WT1 + DX3_JUL(:)*WT2 + + END SUBROUTINE GET_DXTRU3_CORR diff --git a/model/RADIATION.f b/model/RADIATION.f index 15c6bf27..99e67afb 100644 --- a/model/RADIATION.f +++ b/model/RADIATION.f @@ -1774,7 +1774,7 @@ END SUBROUTINE RCOMPT SUBROUTINE RCOMPX use SURF_ALBEDO, only : getsur use O3mod, only : plbo3,nlo3,plbo3_traditional,nlo3_traditional -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use O3mod, only : save_to3 #endif #ifdef SCM @@ -1818,9 +1818,9 @@ SUBROUTINE RCOMPX if(set_gases_internally) then !!! CALL GETO3D(ILON,JLAT) ! may have to be changed ?? if(use_o3_ref > 0 )then - CALL REPART (O3JREF(1,IGCM,JGCM), + CALL REPART (O3JREF(1:1,IGCM,JGCM), * PLBO3_traditional,NLO3_traditional+1, ! in - * U0GAS(1,3),PLB0, NL+1) ! out, ok if L1>1 ? + * U0GAS(1:1,3),PLB0, NL+1) ! out, ok if L1>1 ? ! next block may seem weird but it is here to allow RCOMPX calls with ! reference ozone in part of the atmosphere and tracer below: if(use_tracer_chem(1) > 0) then @@ -1828,8 +1828,8 @@ SUBROUTINE RCOMPX endif FULGAS(3)=1.d0 else - CALL REPART (O3JDAY(1,IGCM,JGCM),PLBO3,NLO3+1, ! in - * U0GAS(1,3),PLB0, NL+1) ! out, ok if L1>1 ? + CALL REPART (O3JDAY(1:1,IGCM,JGCM),PLBO3,NLO3+1, ! in + * U0GAS(1:1,3),PLB0, NL+1) ! out, ok if L1>1 ? #ifdef HIGH_FREQUENCY_O3_INPUT ! Overwrite the lm_gcm levels with higher frequency ozone, leaving ! climatology above those levels: @@ -1861,7 +1861,7 @@ SUBROUTINE RCOMPX endif C-------------------------------- -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Save DU of ozone used in calculation save_to3(igcm,jgcm) = SUM(u0gas(:,3))*1000.0 #endif @@ -3057,16 +3057,16 @@ SUBROUTINE SETAER( GETAER_flag ) DO NA=1,6 IF(MADAER.eq.3) THEN - CALL REPART (A6JDAY(1,NA,IGCM,JGCM),PLBAER,lma+1, ! in + CALL REPART (A6JDAY(1:1,NA,IGCM,JGCM),PLBAER,lma+1, ! in #ifdef REPART_AER_FIX ! passing plb0 instead of plb for approximate consistency with input - * ATAULX(1,NA),PLB0,NL+1) ! out + * ATAULX(1:1,NA),PLB0,NL+1) ! out #else * ATAULX(1,NA),PLB,NL+1) ! out #endif ELSE - CALL REPART (A6JDAY(1,NA,ILON,JLAT),PLBA09,10, ! in - * ATAULX(1,NA),PLB,NL+1) ! out + CALL REPART (A6JDAY(1:1,NA,ILON,JLAT),PLBA09,10, ! in + * ATAULX(1:1,NA),PLB,NL+1) ! out ENDIF END DO @@ -8343,7 +8343,8 @@ SUBROUTINE WRITET(KWRU,INDEX,JYRREF,JYRNOW,JMONTH,KLIMIT) DO 430 I=1,72 ILON=I !!! CALL GETO3D(ILON,JLAT) - CALL REPART(O3JDAY(1,IGCM,JGCM),PLBO3,NLO3+1,U0GAS(1,3),PLB0,NL+1) + CALL REPART(O3JDAY(1:1,IGCM,JGCM),PLBO3,NLO3+1,U0GAS(1:1,3),PLB0, + * NL+1) DO 420 L=1,NL O3(J,L)=O3(J,L)+U0GAS(L,3)/72.D0 420 CONTINUE @@ -8427,7 +8428,8 @@ SUBROUTINE WRITET(KWRU,INDEX,JYRREF,JYRNOW,JMONTH,KLIMIT) DO 520 I=1,72 ILON=I !!! CALL GETO3D(ILON,JLAT) - CALL REPART(O3JDAY(1,IGCM,JGCM),PLBO3,NLO3+1,U0GAS(1,3),PLB0,NL+1) + CALL REPART(O3JDAY(1:1,IGCM,JGCM),PLBO3,NLO3+1,U0GAS(1:1,3),PLB0, + * NL+1) SUMO3=0.D0 DO 510 L=N1,N2 SUMO3=SUMO3+U0GAS(L,3) @@ -8686,12 +8688,8 @@ SUBROUTINE WRITET(KWRU,INDEX,JYRREF,JYRNOW,JMONTH,KLIMIT) RETURN END SUBROUTINE WRITET - END MODULE RADPAR - - SUBROUTINE GTREND(XNOW,TNOW) C - USE RADPAR, only: nghg,ghgyr1,ghgyr2,ghgam IMPLICIT NONE REAL*8 xnow(nghg),tnow,year,dy,frac INTEGER iy,n @@ -8724,3 +8722,4 @@ SUBROUTINE GTREND(XNOW,TNOW) RETURN END SUBROUTINE GTREND + END MODULE RADPAR diff --git a/model/RADIATION2.F90 b/model/RADIATION2.F90 new file mode 100644 index 00000000..e17614bf --- /dev/null +++ b/model/RADIATION2.F90 @@ -0,0 +1,9563 @@ +#include "rundeck_opts.h" + +#ifndef SWFIX_20151201 +#define SWFIX_20151201 +#endif + + MODULE RADPAR +!@sum radiation module based originally on rad00b.radcode1.F +!@auth A. Lacis/V. Oinas/R. Ruedy +#ifndef USE_RAD_OFFLINE + USE CONSTANT, ONLY:pO2, AVOG, MAIR, GRAV, LOSCHMIDT_CONSTANT + USE ATM_COM, ONLY:LM_REQ + USE RESOLUTION, ONLY:LM_GCM => LM +#endif +#ifdef HEALY_LM_DIAGS + USE RESOLUTION, ONLY:JM_DIAG => JM +#endif + IMPLICIT NONE + +!-------------------------------------------------- +! Grid parameters: Vertical resolution/profiles +!-------------------------------------------------- + +!@var LX max.number of vertical layers of the radiation (1D)-model +!@+ +!@+ The Radiation Model can accomodate arbitrary vertical resolution, +!@+ the number of layers may be time or location dependent, +!@+ but it cannot exceed LX. +#ifndef USE_RAD_OFFLINE +!@+ The GCM uses LM_REQ radiative equilibrium layers on top of the LM +!@+ atmospheric layers + INTEGER, PARAMETER :: LX = LM_GCM + LM_REQ +#else + INTEGER, PARAMETER :: LX = 57 +#endif +! optional repartitioning of gases - OFFLINE use only +!@var MRELAY if not 0, gases/aerosols are repartitioned to new layering +!@var KEEP10 if =10 N2 is kept, not repartitioned (only if MRELAY>0) +!@+ n=1-9 N2 not repartitioned and replaces gas n +!@+ n=11-19 N2 not repartitioned and added to gas n-10 +!@var NO3COL if >0 ozone is rescaled before repartitioning if MRELAY>0 +!@var RO3COL = rescaled column amount of O3 if NO3COL>0 (if MRELAY>0) + INTEGER :: MRELAY = 0, KEEP10 = 0, NO3COL = 0 + REAL*8 :: RO3COL = 1. + +! temperature profile within a layer: TLB,TLM,TLT bottom,mid,top T +!@var TLGRAD if >=0 tlt=tlm+dT*TLGRAD, tlb=tlm-dT*TLGRAD where +!@+ dT is chosen to try to minimize discontinuities if TLGRAD=1 +!@+ if TLGRAD<0 tlt,tlm,tlb are all inputs (OFFLINE use) +!@var PTLISO tlt=tlb=tlm above PTLISO mb independent of TLGRAD + REAL*8 :: TLGRAD = 1. ! control param + REAL*8 :: PTLISO = 0D0 ! GCM control param + +!------------------------------------------- +! Grid parameters: Horizontal resolution +!------------------------------------------- + +!@var MLAT46,MLON72 horizontal grid dimensions referred to in this model +!@+ The Radiation Model utilizes Data with 72x46 (lon,lat) resolution. +!@+ For GCM resolution other than 72x46, set JLAT and ILON +!@+ to appropriately Sample (rather than interpolate) the +!@+ 72x46 aerosol, ozone, cloud heterogeneity data sets + INTEGER, PARAMETER :: MLAT46 = 46, MLON72 = 72 + +!@var JNORTH latitude index defining northern hemisphere : jlat>jnorth + INTEGER, PARAMETER :: JNORTH = MLAT46/2 + +! longitudes of box centers (degrees): -177.5,-172.5., ... ,177.5 +!@var DLAT46 latitudes of box centers (degrees) + REAL*8, PARAMETER :: DLAT46(46) & + = (/-90.,-86.,-82.,-78.,-74.,-70.,-66., & + -62.,-58.,-54.,-50.,-46.,-42.,-38.,-34., & + -30.,-26.,-22.,-18.,-14.,-10.,-6.,-2.,2., & + 6.,10.,14.,18.,22.,26.,30.,34.,38.,42.,46.,& + 50.,54.,58.,62.,66.,70.,74.,78.,82.,86., & + 90./) + +!---------------- +! Input data for the 1-d radiation +!---------------- + +!@var LASTVC if >= 0 picks sample atmosph. and ground data, OFFLINE only + INTEGER :: LASTVC = -123456 + +!@var COSZ cosine of zenith angle (1) + REAL*8 cosz +!@var JLAT,ILON lat,lon index w.r.to 72x46 lon-lat grid +!@var JGCM,IGCM host GCM grid indices +!@var NL,L1 highest and lowest above ground layer +!@var LS1_loc local tropopause level, used to limit H2O-scaling + INTEGER :: JLAT, ILON, NL, L1 = 1, LS1_loc + ! Offline deflts L1=LS1_loc=1 + INTEGER :: JGCM, IGCM +!@var JYEAR,JDAY current year, Julian date + INTEGER :: JYEAR = 1980, JDAY = 1 + +!@var PLB layer pressure (mb) at bottom of layer +!@var HLB height (km) at bottom of layer - currently NOT Used +!@var TLm mean layer temperature (K) +!@var TLb,TLt bottom,top layer temperature (K) - derived from TLm +!@+ (unless TLGRAD<0) +!@var SHL,RHL layer specific,relative humidity (1) + REAL*8, DIMENSION(LX+1) :: PLB, HLB, TLB + REAL*8, DIMENSION(LX) :: TLT, TLM, SHL, RHL +!@var KEEPRH if 0: find RH from SH, 1: find SH from RH, 2: keep both + INTEGER :: KEEPRH = 2 + +!@var ULGAS current gas amounts, 13 types (cm atm) (in getgas) +!@var TAUWC,TAUIC opt.depth of water,ice cloud layer (1) +!@var SIZEWC,SIZEIC particle size of water,ice clouds (micron) +!@var CLDEPS cloud heterogeneity; is computed using KCLDEP,EPSCON + REAL*8 :: ULGAS(LX,13), TAUWC(LX), TAUIC(LX), SIZEWC(LX), & + SIZEIC(LX), CLDEPS(LX) +!@var EPSCON cldeps=EPSCON if KCLDEP=1 +!@var KCLDEP KCLDEP=0->CLDEPS=0, 1->=EPSCON, 2->as is, 3,4->isccp + REAL*8 :: EPSCON = 0. + INTEGER :: KCLDEP = 4 ! control param + +!@var KDELIQ Flag for dry(0) or wet(1) air deliquescence + INTEGER :: KDELIQ(LX,4) +!@var KRHDTK if 1, RHlevel for deliquescence is temperature dependent + INTEGER :: KRHDTK = 1 + ! control parameter + +!@var SRBALB,SRXALB diffuse,direct surface albedo (1); see KEEPAL + REAL*8 :: SRBALB(6), SRXALB(6), dalbsn + ! prescr change in snowalbedo +!@var KEEPAL if 0, SRBALB,SRXALB are computed in SET/GETSUR + INTEGER :: KEEPAL = 0 ! control param +!@dbparm KSIALB sea ice albedo computation flag: 0=Hansen 1=Lacis + INTEGER :: KSIALB = 0 +!@var PVT frac. of surf.type (bareWhite+veg*8+bareDark+ocn)(1) +!@var AGESN 1-3 age of snow (over soil,oice,land ice) (days) +!@var SNOWLI amount of snow (over land ice) (kg/m^2) +!@var SNOWD amount of snow (over soil) (m) +!@var SNOWOI amount of snow (over ocean/lake ice) (kg/m^2) +!@var WEARTH soil wetness (1) +!@var WMAG wind speed (m/s) +!@var POCEAN fraction of box covered by ocean or lake (1) +!@var PLAKE fraction of box covered by lake (1) +!@var PEARTH fraction of box covered by soil (1) +!@var POICE fraction of box covered by ocean/lakeice (1) +!@var PLICE fraction of box covered by glacial ice (1) +!@var TGO top layer water temperature (K) of ocean/lake +!@var TGE,TGOI,TGLI top layer ground temperature (K) soil,seaice,landice +!@var TSL surface air temperature (K) + REAL*8 PVT(12), AGESN(3), SNOWD(2), SNOWOI, SNOWLI, WEARTH, WMAG, & + POCEAN, PEARTH, POICE, PLICE, PLAKE, TGO, TGE, TGOI, TGLI, & + TSL +!@var KZSNOW =1 for snow/ice albedo zenith angle dependence + INTEGER :: KZSNOW = 1 +! Additional info for Schramm/Schmidt/Hansen sea ice albedo KSIALB=0 +!@var ZSNWOI depth of snow over ocean ice (m) +!@var zoice depth of ocean ice (m) +!@var zmp depth of melt pond (m) +!@var fmp fraction of melt pond area (1) +!@var zlake lake depth (m) +!@var flags true if snow is wet +!@var snow_frac(2) fraction of snow over bare(1),vegetated(2) soil (1) +!@var snoage_fac_max max snow age reducing-factor for sea ice albedo + REAL*8 :: zsnwoi, zoice, zmp, fmp, zlake, snow_frac(2) + REAL*8 :: snoage_fac_max = .5D0 + +!@var ITRMAX maximum number of optional tracers + INTEGER, PARAMETER :: ITRMAX = 150 +!@var TRACER array to add up to ITRMAX additional aerosol species + REAL*8 :: TRACER(LX,ITRMAX) +!@var FSTOPX,FTTOPX switches on/off aerosol for diagnostics (solar,thermal component) +!@var FSTASC,FTTASC scales optional aerosols (solar,thermal component) + REAL*8 :: FSTOPX(ITRMAX), FTTOPX(ITRMAX) +!@var skip_AOD_in_rad If true, no optical depth calculations in RADIATION.f + LOGICAL :: skip_AOD_in_rad +!@var chem_IN column variable for importing ozone(1) and methane(2) +!@+ fields from rest of model +!@var use_tracer_chem:set U0GAS(L, )=chem_IN( ,L), L=L1,use_tracer_chem( ) +!@var GCCco2_IN column variable for importing CO2 and use_tracer_GCCco2 variable +#ifdef GCC_COUPLE_RAD + REAL*8 :: GCCco2_IN(LX) + INTEGER :: use_tracer_GCCco2 +#endif + REAL*8 :: chem_IN(2,LX) + INTEGER :: use_tracer_chem(2), use_o3_ref = 0 + LOGICAL*4 :: flags +!@var LOC_CHL local chlorophyll value (unit?) for albedo calculation (optional) + REAL*8 :: LOC_CHL +#ifdef HEALY_LM_DIAGS + REAL*8 :: VTAULAT(JM_DIAG) +#endif + + LOGICAL :: set_gases_internally = .TRUE., & + set_aerosols_internally = .TRUE. + +!@var U0GAS reference gas amounts, 13 types (cm atm) (in setgas) +! array with local and global entries: repeat this section in driver + REAL*8 U0GAS(LX,13) +! end of section to be repeated in driver (needed for 'copyin') + +!-------------------------------------------------------- +! Output data (from RCOMPX) grid point dependent +!-------------------------------------------------------- + +!@var TRDFLB,TRUFLB,TRNFLB Thrml down,up,net Flux at Layr Bottom (W/m2) +!@var SRDFLB,SRUFLB,SRNFLB Solar down,up,net Flux at Layr Bottom (W/m2) +!@var TRFCRL,SRFHRL layer LW Cooling Rate,SW Heating Rate (W/m2) +!@var SR.VIS,SR.NIR SW fluxes in vis,near-IR domain (W/m2) +!@var PLA...,ALB... planetary and surface albedos (1) +!@var TR...W,WINDZF fluxes in the window region (W/m2) +!@var BTEMPW,WINDZT Brightness temperature in the window region (K) +!@var SK...,SRK... Spectral breakdown of fluxes/heat.rates (W/m2) +!@var FSRNFG,FTRUFG surface type fractions of SW,LW fluxes (W/m2) +!@var DTRUFG not used (W/m2) +!sl!@var FTAUSL,TAUSL,... surface layer computations commented out: !sl +!@var LBOTCL,LTOPCL bottom and top cloud level (lbot < ltop) +!@var chem_out column variable for exporting radiation code quantities +!@ 1=Ozone, 2=aerosol ext, 3=N2O, 4=CH4,5=CFC11+CFC12 +!@var CO2outCol column CO2 export [mole mole-1] for SUBDD +!@var aesqex saves extinction aerosol optical thickness +!@var aesqsc saves scattering aerosol optical thickness +!@var aesqcb saves aerosol scattering asymmetry factor +!@var aesqex_dry saves dry extinction aerosol optical thickness +!@var aesqsc_dry saves dry scattering aerosol optical thickness +!@var aesqcb_dry saves dry aerosol scattering asymmetry factor + + REAL*8 TRDFLB(LX+1), TRUFLB(LX+1), TRNFLB(LX+1), TRFCRL(LX) + REAL*8 SRDFLB(LX+1), SRUFLB(LX+1), SRNFLB(LX+1), SRFHRL(LX) +!@var GCCco2_out column CO2 for exporting +#ifdef GCC_COUPLE_RAD + REAL*8 :: GCCco2_out(LX) = 0D0 +#endif + REAL*8 :: chem_out(LX,5) = 0D0 + REAL*8 :: CO2outCol(LX) = 0.D0 + REAL*8 SRIVIS, SROVIS, PLAVIS, SRINIR, SRONIR, PLANIR, SRDVIS, & + SRUVIS, ALBVIS, SRDNIR, SRUNIR, ALBNIR, SRTVIS, SRRVIS, & + SRAVIS, SRTNIR, SRRNIR, SRANIR + REAL*8 TRDFGW, TRUFGW, TRUFTW, BTEMPW, SRXVIS, SRXNIR + REAL*8 WINDZF(3), WINDZT(3), TOTLZF(3), TOTLZT(3) + REAL*8 SRKINC(16), SRKALB(16), SRKGAX(16,4), SRKGAD(16,4) + REAL*8, DIMENSION(LX,17) :: SKFHRL + REAL*8, DIMENSION(LX+1,17) :: SKDFLB, SKUFLB, SKNFLB + REAL*8 FSRNFG(4), FTRUFG(4), DTRUFG(4) + ! ,SRXATM(4) +!sl REAL*8 FTAUSL(33),TAUSL(33) ! surf.layer input data +!nu K ,TRDFSL,TRUFSL,TRSLCR,SRSLHR,TRSLWV !nu = not (yet) used +!sl K ,TRSLTS,TRSLTG,TRSLBS + REAL*8 aesqex(LX,6,ITRMAX), aesqsc(LX,6,ITRMAX), & + aesqcb(LX,6,ITRMAX) + REAL*8 aesqex_dry(LX,6,ITRMAX), aesqsc_dry(LX,6,ITRMAX), & + aesqcb_dry(LX,6,ITRMAX) + INTEGER :: LBOTCL, LTOPCL + +!---------------- scratch pad for temporary arrays that are passed to +! Work arrays other routines while working on a lat/lon point; +!---------------- but with openMP, each cpu needs its own copy !! + + REAL*8, DIMENSION(LX,6,8) :: nintaerext, nintaersca, nintaerasy + REAL*8, DIMENSION(LX,6) :: SRAEXT, SRASCT, SRAGCB, SRBEXT, & + SRBSCT, SRBGCB, SRDEXT, SRDSCT, & + SRDGCB, SRVEXT, SRVSCT, SRVGCB, & + SRCEXT, SRCSCT, SRCGCB, SRCPI0 + REAL*8, DIMENSION(LX+1,6) :: DBLEXT, DBLSCT, DBLGCB, DBLPI0 + REAL*8, DIMENSION(LX,33) :: TRTAUK, TRGXLK, TRCALK, TRAALK, & + TRBALK, TRDALK, TRVALK + REAL*8 DFLB(LX+1,33), UFLB(LX+1,33) + REAL*8, DIMENSION(33) :: TRCTCA, DFSL, UFSL, TXCTPG, TSCTPG, & + TGCTPG, AVH2S, TRGALB, BGFEMT, BGFEMD + REAL*8, DIMENSION(LX) :: PL, DPL, O2FHRL, SRAXNL, SRASNL, & + SRAGNL, O2FHRB + REAL*8 BXA(7), PRNB(6,4), PRNX(6,4), Q55H2S, QVH2S(6), SVH2S(6), & + GVH2S(6), XTRU(LX,4), XTRD(LX,4), DXAERU(LX,4,4,LX+4), & + DXAERD(LX,4,4,LX+4) + INTEGER IP24C9(LX) +!**** local except for special radiative aerosol diagnostics aadiag + + REAL*8 :: SRCQPI(6,15), TRCQPI(33,15) !??? to setcld/getcld + ! Temp data used by WRITER, WRITET + REAL*8 :: TRAQAB(33,11), TRBQAB(33,10), TRCQAB(33,15), & + TRDQAB(33,25) + REAL*8 :: AMP_TAB_SPEC(33,ITRMAX) + INTEGER :: NORDER(16), NMWAVA(16), NMWAVB(16) + +!------------------------------------------ +! Reference data, Tables, Climatologies +!------------------------------------------ + + REAL*8, PARAMETER :: DKS0(16) & + = (/.010,.030,.040,.040,.040,.002,.004, & + .013,.002,.003,.003,.072,.200,.480,.050, & + .011/) + + INTEGER :: NKSLAM = 14 + INTEGER, PARAMETER :: KSLAM(16) & + = (/1,1,2,2,5,5,5,5,1,1,1,3,4,6,6,1/) + + ! Model parameters generated by RCOMP1 +! E ,QXDUST(6,8),QSDUST(6,8),QCDUST(6,8),ATDUST(33,8),QDST55(8) !?DST !ron + REAL*8 :: HLB0(LX+1), PLB0(LX+1), TLM0(LX), U0GAS3(LX), & + TKPFW(630), TKPFT(900), AO3(460), FPXCO2(LX), & + FPXOZO(LX), TRAX(LX,33,5), DBLN(30), TCLMIN + !nu ,PIAERO(10) + + LOGICAL :: dust_optics_initialized = .FALSE. + !ron + REAL*8, DIMENSION(:,:), ALLOCATABLE :: QXDUST, QSDUST, QCDUST, & + ATDUST !ron + REAL*8, DIMENSION(:), ALLOCATABLE :: QDST55 !ron + REAL*8, DIMENSION(:), ALLOCATABLE :: taucon_dust + +!@dbparam planck_tmin, planck_tmax temperature range for Planck function +!@+ lookup table. If the requested tmin is less than the default +!@+ value of 124 K, the lookup table is extrapolated at startup to +!@+ cover the requested range (same for tmax exceeding 373 K). + INTEGER :: planck_tmin = 1, planck_tmax = 800 + +!@var transmission_corrections whether to apply correction factors +!@+ to longwave transmission + LOGICAL :: transmission_corrections +! RADDAT_TR_SGP_TABLES read from radfile1, radfile2 + INTEGER, PARAMETER :: NGUX = 1024, NTX = 8, NPX = 19 + REAL*8, DIMENSION(NGUX,NTX,NPX) :: TAUTBL, TAUWV0, TAUCD0, & + TAUO30 + REAL*8 H2O(100), FCO2(100) + REAL*8, DIMENSION(1:800,33) :: PLANCK + REAL*8 XKCFC(12,8,17:20), ULOX(19,16), DUX(19,16), XTFAC(11,9) +! Correction-factor lookup-table sizes +! NLCF : number of layers in ref. atm. used to compute the table +! NWVCF : number of H2O vapor column amounts +! NUCF : number of column amounts for absorbers other than H2O +! NRCF : number of principal absorber regions (H2O, CO2, O3) + INTEGER, PARAMETER, PRIVATE :: NLCF = 43, NWVCF = 9, NUCF = 7, & + NRCF = 3 + REAL*8, DIMENSION(NLCF,NRCF) :: XTU0, XTD0 + REAL*8, DIMENSION(NLCF,NWVCF,NRCF) :: XTRUP, XTRDN, DXUP13, & + DXDN13 + REAL*8, DIMENSION(NLCF,NWVCF,NUCF,NRCF) :: DXUP2, DXUP3, DXUP6, & + DXUP7, DXUP8, DXUP9, DXDN2, DXDN3, DXDN6, DXDN7,& + DXDN8, DXDN9 +!--------------------------------------------------------------------- +! Default h2o continuum is Ma 2000. Other options: Ma 2004 +! Roberts, MT_CKD model (Mlawer/Tobin_Clough/Kneizys/Davies) +!--------------------------------------------------------------------- + REAL*8 H2OCN8(33,8,14), H2OCF8(33,8,5) + +! RADDAT_AERCLD_MIEPAR read from radfile3 + REAL*8 :: SRAQEX(6,11), SRAQSC(6,11), SRAQCB(6,11), Q55A11(11), & + TRAQEX(33,11), TRAQSC(33,11), TRAQCB(33,11), & + REFA11(11), SRBQEX(6,10), SRBQSC(6,10), SRBQCB(6,10), & + Q55B10(10), TRBQEX(33,10), TRBQSC(33,10), & + TRBQCB(33,10), REFB10(10), SRCQEX(6,15), SRCQSC(6,15),& + SRCQCB(6,15), Q55C15(15), TRCQEX(33,15), TRCQSC(33,15)& + , TRCQCB(33,15), REFC15(15), TRCQAL(33,15), VEFC15(15)& + , VEFA11(11), VEFB10(10), SRDQEX(6,25), SRDQSC(6,25), & + SRDQCB(6,25), Q55D25(25), YRDQEX(6,25), YRDQSC(6,25), & + YRDQCB(6,25), Y55D25(25), TRDQEX(33,25), TRDQSC(33,25)& + , TRDQCB(33,25), REFD25(25), TRDQAL(33,25), VEFD25(25)& + , SRVQEX(6,20,6), SRVQSC(6,20,6), SRVQCB(6,20,6), & + TRVQEX(33,20,6), TRVQSC(33,20,6), TRVQCB(33,20,6), & + TRVQAL(33,20,6), Q55V20(20,6), REFV20(20,6), & + VEFV20(20,6), SRUQEX(6,120), SRUQSC(6,120), & + SRUQCB(6,120), Q55U22(120), TRUQEX(33,120), & + TRUQSC(33,120), TRUQCB(33,120), REFU22(120), & + TRUQAL(33,120), VEFU22(120), TRSQAL(33,25), VEFS25(25)& + , SRSQEX(6,25), SRSQSC(6,25), SRSQCB(6,25), Q55S25(25)& + , TRSQEX(33,25), TRSQSC(33,25), TRSQCB(33,25), & + REFS25(25) + + REAL*8 SRQV(6,20), SRSV(6,20), SRGV(6,20), Q55V(20), REFV(20) + REAL*8 TRQV(33,20), TRSV(33,20), TRGV(33,20), TRAV(33,20), & + VEFV(20) + EQUIVALENCE (SRVQEX(1,1,6),SRQV(1,1)) + EQUIVALENCE (SRVQSC(1,1,6),SRSV(1,1)) + EQUIVALENCE (SRVQCB(1,1,6),SRGV(1,1)) + EQUIVALENCE (Q55V20(1,6),Q55V(1)) + EQUIVALENCE (TRVQEX(1,1,6),TRQV(1,1)) + EQUIVALENCE (TRVQSC(1,1,6),TRSV(1,1)) + EQUIVALENCE (TRVQCB(1,1,6),TRGV(1,1)) + EQUIVALENCE (TRVQAL(1,1,6),TRAV(1,1)) + EQUIVALENCE (REFV20(1,6),REFV(1)) + EQUIVALENCE (VEFV20(1,6),VEFV(1)) + +! RADDAT_CLDCOR_TRSCAT read from radfileE + REAL*8 :: RIJTPG(6,49,17,21), FDXTPG(3,49,17,21), & + FEMTPG(3,49,17,21) + +!@var ppmv_to_cm_at_stp Conversion factor for conversion from PPMV to cm at +! STP. Also needs an additional factor dP for the +! conversion. + REAL*8, PARAMETER :: PPMV_TO_CM_AT_STP = 1.0D-05*AVOG/ & + (GRAV*MAIR*LOSCHMIDT_CONSTANT) +!@var h2o_mmr_to_cm_at_stp Conversion factor for conversion from mass +! mixing ratio to cm at STP for water vapor. +! Also needs an additional factor dP for the +! conversion. + REAL*8, PARAMETER :: H2O_MMR_TO_CM_AT_STP = PPMV_TO_CM_AT_STP* & + 1.0D+06*MAIR/18.0153D0 + + +!-------------------------------------- This also should be moved out +! History files (+ control options) of RADPAR, which should just +!-------------------------------------- have to handle 1 point in time + +! -------------------------------------------------------i/o control +!@var MADxxx Model Add-on Data of Extended Climatology Enable Parameter +!@+ ------ if 0 input process is skipped +!@+ 2 MADAER = 1 Reads Aerosol tropospheric climatology +!@+ 3 MADDST = 1 Reads Dust-windblown mineral climatology RFILE6 +!@+ 4 MADVOL = 1 Reads Volcanic 1950-00 aerosol climatology RFILE7 +!@+ 5 MADEPS = 1 Reads Epsilon cloud heterogeneity data RFILE8 +!@+ 6 MADLUV = 1 Reads Lean format Spectral Solar Irrad. RFILE9 +!@+ MADGHG = 1 Enables UPDGHG update. MADGHG=0: no update +!@+ MADSUR = 1 Reads Vegetation,Topography data RFILEC,RFILED +!@+ MADBAK if 1 Adds background aerosols +!@+ MADO2A if > 0 call set/geto2a, activating O2 solar heating +! ------------------------------------------------------------------ + INTEGER :: MADO3M = 1, MADAER = 0, MADDST = 0, MADVOL = 0, & + MADEPS = 0, MADLUV = 1 + INTEGER :: MADGHG = 1, MADSUR = 0, MADBAK = 0 + ! MADSUR=1 for OFF-line use + INTEGER :: MADO2A = 1 + +! ------------------------------------------------------time control +!@var KYEARx,KJDAYx if both are 0 : data are updated to current yr/day +!@+ ------------- only KJDAYx=0: data cycle through year KYEARx +!@+ neither is 0 : yr/day=KYEARx/KJDAYx data are used +!@+ KYEARS,KJDAYS: Solar Trend +!@+ KYEARO,KJDAYO: Ozone Trend +!@+ KYEARD,KJDAYD: Dust Trend +!@+ KYEARE,KJDAYE: CldEps Trend +!@+ KYEARG,KJDAYG: GHG Trend +!@+ KYEARR,KJDAYR: RVegeTrend (Ground Albedo) +!@+ KYEARV,KJDAYV: Volc.Aerosol Trend +!@+ KYEARA,KJDAYA: trop.Aerosol Trend +! ------------------------------------------------------------------ + INTEGER :: KYEARS = 0, KJDAYS = 0, KYEARG = 0, KJDAYG = 0, & + KYEARO = 0, KJDAYO = 0, KYEARA = 0, KJDAYA = 0, & + KYEARD = 0, KJDAYD = 0, KYEARV = 0, KJDAYV = 0, & + KYEARE = 0, KJDAYE = 0, KYEARR = 0, KJDAYR = 0 + + REAL*8, DIMENSION(:,:,:), POINTER :: o3jday, o3jref +#ifdef HIGH_FREQUENCY_O3_INPUT + REAL*8, DIMENSION(:,:,:), POINTER :: o3jday_HF_modelLevels +#endif + +!@var PLBA21 Vert. Layering for tropospheric aerosols (reference) + REAL*8, PARAMETER :: PLBA20(21) & + = (/984.,964.,934.,884.,810.,710.,550., & + 390.,285.,210.,150.,110.,80.,55.,35.,20., & + 10.,3.,1.,0.3,0.1/) +!@var PLBA09 Vert. Layering for tropospheric aerosols/dust (reference) + REAL*8, PARAMETER :: PLBA09(10) & + = (/1010.,934.,854.,720.,550.,390.,255., & + 150.,70.,10./) + REAL*8, DIMENSION(:), POINTER :: plbaer => null() + REAL*8, DIMENSION(:,:,:,:), POINTER :: A6JDAY => null() + + +! RADMAD3_DUST_SEASONAL (user SETDST) radfile6 +! REAL*4 TDUST(72,46,9,8,12) !ron +! REAL*8 DDJDAY(9,8,72,46) !ron + +! RADMAD4_VOLCAER_DECADAL (user SETVOL) radfile7 + INTEGER JVOLYI, JVOLYE, NVOLMON, NVOLLAT, NVOLK + REAL*8, DIMENSION(:), ALLOCATABLE :: ELATVOL, HVOLKM + REAL*8, DIMENSION(:,:,:), ALLOCATABLE :: VTauTJK + ! (NVOLMON,NVOLLAT,NVOLK) + REAL*8, DIMENSION(:,:), ALLOCATABLE :: VReffTJ ! (NVOLMON,NVOLLAT) + + +! RADMAD5_CLDEPS_3D_SEASONAL (user SETCLD) radfile8 + REAL*4 EPLMHC(72,46,12,4) + REAL*8 EPLOW(72,46), EPMID(72,46), EPHIG(72,46), EPCOL(72,46) + +! RADMAD6_SOLARUV_DECADAL (user SETSOL) radfile9 +!@var iy1S0,MS0X first year, max.number of months for S0 history +!@var icycs0 solar cycle in yrs used to extend S0 history before 2000 +!@var icycs0f solar cycle in yrs used to extend S0 history after 2000 +!@var KSOLAR controls which data are used: <0 Thekaekara, else Lean: +!@+ 1: use monthly data, 2: use annual data, 0: constant data +!@+ 9: use annual data from file but with Thekaekara bins + INTEGER :: KSOLAR = 2 ! MADLUV=KSOLAR=0 only possible OFF-line + + INTEGER, PARAMETER :: IY1S0 = 1882, MS0X = 12*(1998-IY1S0+1) + INTEGER, PARAMETER :: ICYCS0 = 11, ICYCS0F = 12 + INTEGER iMS0X + REAL*4 yr1S0, yr2S0 + REAL, ALLOCATABLE, DIMENSION(:,:) :: UV_SSI + REAL, ALLOCATABLE, DIMENSION(:) :: TSI1, TSI2 + REAL*8 FS_SSI(190), W1_SSI(190) + + REAL*8 :: S00WM2 = 1366.2911D0, S0 = 1366.D0, RATLS0 = 1. + + REAL*8 :: WSOLAR(190), FSOLAR(190) + +!*** alternate sources to get WSOLAR,FSOLAR: + REAL*8, DIMENSION(190) :: WS_SSI, DS_SSI, FR_SSI +#ifdef USE_RAD_OFFLINE + COMMON /LEAN1950/ WS_SSI, DS_SSI, FR_SSI + ! for MADLUV=0 uses block data +#endif + REAL*8, PARAMETER :: WTHEK(190) & + = (/.115,.120,.125,.130,.140,.150,.160, & + .170,.180,.190,.200,.210,.220,.225,.230, & + .235,.240,.245,.250,.255,.260,.265,.270, & + .275,.280,.285,.290,.295,.300,.305,.310, & + .315,.320,.325,.330,.335,.340,.345,.350, & + .355,.360,.365,.370,.375,.380,.385,.390, & + .395,.400,.405,.410,.415,.420,.425,.430, & + .435,.440,.445,.450,.455,.460,.465,.470, & + .475,.480,.485,.490,.495,.500,.505,.510, & + .515,.520,.525,.530,.535,.540,.545,.550, & + .555,.560,.565,.570,.575,.580,.585,.590, & + .595,.600,.605,.610,.620,.630,.640,.650, & + .660,.670,.680,.690,.700,.710,.720,.730, & + .740,.750,.760,.770,.780,.790,.800,.810, & + .820,.830,.840,.850,.860,.870,.880,.890, & + .900,.910,.920,.930,.940,.950,.960,0.97, & + 0.98,0.99,1.00,1.05,1.10,1.15,1.20,1.25, & + 1.30,1.35,1.40,1.45,1.50,1.55,1.60,1.65, & + 1.70,1.75,1.80,1.85,1.90,1.95,2.00,2.10, & + 2.20,2.30,2.40,2.50,2.60,2.70,2.80,2.90, & + 3.00,3.10,3.20,3.30,3.40,3.50,3.60,3.70, & + 3.80,3.90,4.00,4.10,4.20,4.30,4.40,4.50, & + 4.60,4.70,4.80,4.9,5.0,6.0,7.0,8.0,9.0, & + 10.0,11.0,12.0,13.0,14.0,15.00/) + ! if KSOLAR<0 + + REAL*8, PARAMETER :: FTHEK(190) & + = (/.007,.900,.007,.007,.030,.070,.230, & + .630,1.25,2.71,10.7,22.9,57.5,64.9,66.7, & + 59.3,63.0,72.3,70.4,104.,130.,185.,232., & + 204.,222.,315.,482.,584.,514.,603.,689., & + 764.,830.,975.,1059.,1081.,1074.,1069., & + 1093.,1083.,1068.,1132.,1181.,1157.,1120., & + 1098.,1098.,1189.,1429.,1644.,1751.,1774., & + 1747.,1693.,1639.,1663.,1810.,1922.,2006., & + 2057.,2066.,2048.,2033.,2044.,2074.,1976., & + 1950.,1960.,1942.,1920.,1882.,1833.,1833., & + 1852.,1842.,1818.,1783.,1754.,1725.,1720., & + 1695.,1705.,1712.,1719.,1715.,1712.,1700., & + 1682.,1666.,1647.,1635.,1602.,1570.,1544., & + 1511.,1486.,1456.,1427.,1402.,1389.,1344., & + 1314.,1290.,1260.,1235.,1211.,1185.,1159., & + 1134.,1109.,1085.,1060.,1036.,1013.,990., & + 968.,947.,926.,908.,891.,880.,869.,858., & + 847.,837.,820.,803.,785.,767.,748.,668., & + 593.,535.,485.,438.,397.,358.,337.,312., & + 288.,267.,245.,223.,202.,180.,159.,142., & + 126.,114.,103.,90.,79.,69.0,62.0,55.0,48.0,& + 43.0,39.0,35.0,31.0,26.0,22.6,19.2,16.6, & + 14.6,13.5,12.3,11.1,10.3,9.5,8.70,7.80, & + 7.10,6.50,5.92,5.35,4.86,4.47,4.11,3.79, & + 1.82,0.99,.585,.367,.241,.165,.117,.0851, & + .0634,.0481/) + +!icb RADMAD7_VEG_TOPOG (user SETSUR) radfileC,radfileD +!icb FVEG11(72,46,11),FOLGIZ(72,46,9) + +! RADMAD8_RELHUM_AERDATA (user SETAER,SETREL) radfileH +!nu KRHAER(4) -1/0/1 flag to base aeros.sizes on 70%/0%/model rel.humi +!nu INTEGER :: KRHAER(4)=(/1,1,1,1/) ! SO4,SSalt,NO3,OC +!@var KRHTRA(ITRMAX) 0/1 to make tracer aerosols rel.humid dependent + INTEGER :: KRHTRA(ITRMAX) = 1 + REAL*8 :: SRHQEX(6,190,4), SRHQSC(6,190,4), SRHQCB(6,190,4), & + TRHQAB(33,190,4), RHINFO(190,15,4), & + SRTQEX(6,190,ITRMAX), SRTQSC(6,190,ITRMAX), & + SRTQCB(6,190,ITRMAX), TRTQAB(33,190,ITRMAX), & + RTINFO(190,15,ITRMAX) + +!new +!new save TSOIL,TVEGE (not implemented) +!nu DIMENSION PI0TRA(11) +!new save FTRUFS,FTRUFV,DTRUFS,DTRUFV (not implemented) + +! ----------------------- +! Ozone absorption tables +! ----------------------- + REAL*8, PARAMETER :: XWAVO3(226) & + = (/.2002,.2012,.2022,.2032,.2042,.2052, & + .2062,.2072,.2082,.2092,.2102,.2112,.2122, & + .2132,.2142,.2152,.2162,.2172,.2182,.2192, & + .2202,.2212,.2222,.2232,.2242,.2252,.2262, & + .2272,.2282,.2292,.2302,.2312,.2322,.2332, & + .2342,.2352,.2362,.2372,.2382,.2392,.2400, & + .2402,.2412,.2422,.2432,.2438,.2444,.2452, & + .2458,.2463,.2472,.2478,.2482,.2490,.2492, & + .2500,.2508,.2519,.2527,.2539,.2543,.2553, & + .2562,.2566,.2571,.2575,.2579,.2587,.2597, & + .2604,.2617,.2624,.2635,.2643,.2650,.2654, & + .2662,.2669,.2675,.2682,.2692,.2695,.2702, & + .2712,.2718,.2722,.2732,.2742,.2746,.2752, & + .2762,.2772,.2782,.2792,.2802,.2812,.2822, & + .2830,.2842,.2852,.2862,.2872,.2882,.2892, & + .2902,.2912,.2922,.2932,.2942,.2952,.2962, & + .2972,.2982,.2992,.2998,.3004,.3016,.3021, & + .3029,.3036,.3037,.3051,.3053,.3059,.3061, & + .3066,.3075,.3077,.3083,.3085,.3092,.3098, & + .3100,.3104,.3106,.3109,.3112,.3130,.3135, & + .3146,.3148,.3151,.3154,.3167,.3170,.3173, & + .3176,.3190,.3194,.3199,.3200,.3209,.3210, & + .3216,.3220,.3223,.3226,.3239,.3242,.3245, & + .3248,.3253,.3255,.3269,.3272,.3275,.3279, & + .3292,.3295,.3299,.3303,.3309,.3312,.3328, & + .3332,.3334,.3338,.3357,.3365,.3369,.3372, & + .3391,.3395,.3398,.3401,.3417,.3421,.3426, & + .3430,.3437,.3439,.3451,.3455,.3460,.3463, & + .3466,.3472,.3481,.3485,.3489,.3493,.3499, & + .3501,.3506,.3514,.3521,.3523,.3546,.3550, & + .3554,.3556,.3561,.3567,.3572,.3573,.3588, & + .3594,.3599,.3600,.3604,.3606,.3639,.3647, & + .3650,.3654,.3660/) + REAL*8 :: UVA(226) + REAL*8, PARAMETER :: FUVKO3(226) & + = (/8.3,8.3,8.1,8.3,8.6,9.0,9.7,10.8,11.7, & + 13.0,14.3,16.0,18.0,20.6,23.0,26.1,29.3, & + 32.6,36.9,40.8,46.9,51.4,56.7,63.4,69.1, & + 76.6,84.0,91.4,99.9,110.0,118.0,126.0, & + 136.0,145.0,154.0,164.0,175.0,186.0,192.0, & + 201.0,210.0,212.0,221.0,230.0,239.0,248.0, & + 250.0,259.0,264.0,264.0,273.0,277.0,275.0, & + 283.0,283.0,290.0,283.0,297.0,290.0,300.0, & + 290.0,302.0,295.0,283.0,293.0,290.0,286.0, & + 297.0,281.0,280.0,271.0,275.0,254.0,264.0, & + 250.0,248.0,242.0,228.0,230.0,216.0,213.0, & + 211.0,199.0,188.0,188.0,178.0,169.0,153.0, & + 155.0,148.0,136.0,127.0,117.0,108.0,97.0, & + 88.7,81.3,78.7,67.9,61.4,54.3,49.6,43.1, & + 38.9,34.6,30.2,27.5,23.9,21.0,18.6,16.2, & + 14.2,12.3,10.7,9.5,8.880,7.520,6.960,6.160,& + 5.810,5.910,4.310,4.430,4.130,4.310,4.020, & + 3.330,3.390,3.060,3.100,2.830,2.400,2.490, & + 2.330,2.320,2.120,2.200,1.436,1.595,1.074, & + 1.138,1.068,1.262,0.818,0.948,0.860,1.001, & + 0.543,0.763,0.665,0.781,0.382,0.406,0.373, & + 0.608,0.484,0.601,0.209,0.276,0.259,0.470, & + 0.319,0.354,0.131,0.223,0.185,0.339,0.080, & + 0.093,0.079,0.184,0.139,0.214,0.053,0.074, & + 0.068,0.152,0.038,0.070,.0540000,.1030000, & + .0240000,.0382500,.0292500,.0550000, & + .0135000,.0155250,.0127500,.0188250, & + .0167250,.0262500,.0115500,.0140250, & + .0099750,.0115500,.0081000,.0104250, & + .0050100,.0057000,.0046650,.0073425, & + .0051825,.0055275,.0040575,.0077700, & + .0048900,.0054600,.0015375,.0017775, & + .0013275,.0014100,.0011550,.0023325, & + .0018825,.0019650,.0009600,.0013650, & + .0011925,.0013200,.0008925,.0009825, & + .0001350,.0006300,.0004500,.0006225,0.0/) + +! ------------------------------------------------------------------ +! NO2 Trace Gas Vertical Distribution and Concentration Profile +! ------------------------------------------------------------------ + + REAL*8, PARAMETER :: CMANO2(42) & + = (/8.66E-06,5.15E-06,2.85E-06,1.50E-06, & + 9.89E-07,6.91E-07,7.17E-07,8.96E-07, & + 3.67E-06,4.85E-06,5.82E-06,6.72E-06, & + 7.77E-06,8.63E-06,8.77E-06,8.14E-06, & + 6.91E-06,5.45E-06,4.00E-06,2.67E-06, & + 1.60E-06,8.36E-07,3.81E-07,1.58E-07, & + 6.35E-08,2.57E-08,1.03E-08,4.18E-09, & + 1.66E-09,6.57E-10,2.58E-10,1.02E-10, & + 4.11E-11,1.71E-11,7.73E-12,9.07E-12, & + 4.63E-12,2.66E-12,1.73E-12,1.28E-12, & + 1.02E-12,1.00E-30/) + ! every 2 km starting at 0km + +! ------------------------------------------------------------------ +! TRACE GAS REFERENCE AMOUNTS DISTRIBUTIONS ARE DEFINED IN SETGAS +! ------------------------------------------------------------------ + +!------------------------- +! Scaling/kill factors +!------------------------- + +!@var FULGAS scales the various atmospheric constituents: +!@+ H2O CO2 O3 O2 NO2 N2O CH4 F11 F12 N2C CFC11 CFC12 SO2 +!@+ Note: FULGAS(1) only acts in the stratosphere (unless LS1_loc=1) + +! H2O CO2 O3 O2 NO2 N2O CH4 F11 F12 N2C CFC11+ CFC12+ SO2 +! 1 2 3 4 5 6 7 8 9 10 11 12 13 + REAL*8 :: FULGAS(13) = (/1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1.,1., & + 0./) ! scales ULGAS +#ifdef ALTER_RADF_BY_LAT +!@var FULGAS_orig saves initial FULGAS values + REAL*8, DIMENSION(13) :: FULGAS_orig +#endif + +!@var FGOLDH scales background aerosols for Glb Ocn Land Desert Haze +! GLOBAL OCEAN LAND DESERT HAZE +! for setbak/getbak only 1 2 3 4 5 + REAL*8 :: FGOLDH(5) = (/1D0,.68D0,.32D0,1.D-20,1.D-20/) + +!@var FSxAER,FTxAER scales solar,thermal opt.depth for var. aerosols: +!@+ x = T:total B:background A:atmClim D:dust V:volcanic + REAL*8 :: FSTAER = 1., FSBAER = 1., FSAAER = 1., FSDAER = 1., & + FSVAER = 1., FTTAER = 1., FTBAER = 1., FTAAER = 1., & + FTDAER = 1., FTVAER = 1. + +!@var FTAUC factor to control cloud optical depth in radiation calc. +!@+ =1 for full expression, =0 for clear sky calculation. + REAL*8 :: FTAUC + ! to be set in calling routine, thread-private ! deflt=1 + +!@var PIVMAX limits PI0 of volcanic aerosols + REAL*8 :: PIVMAX = 1.0 +!@var ECLTRA,KCLDEM scales,enables full cloud scattering correction + REAL*8 :: ECLTRA = 1. + INTEGER :: KCLDEM = 1 +!@var FCLDTR,FCLDSR scales opt.depth of clouds - not used (yet) +!@var FRAYLE scales Rayleigh parameter + REAL*8 :: FCLDTR = 1., FCLDSR = 1., FRAYLE = 1. + +!@var KUVFAC,UVFACT,UVWAVL,KSNORM rescale UV spectral flux distribution + INTEGER :: KUVFAC = 0, KSNORM = 0 + ! no rescaling + REAL*8 :: UVWAVL(3) = (/0.295D0,0.310D0,0.366D0/) + REAL*8 :: UVFACT(3) = (/0.98011D0,0.99467D0,0.99795D0/) + +!@var SRCGSF Scaling Factors for Cloud Asymmetry Parameter for +!@+ Water Ice MieIce + REAL*8 :: SRCGSF(3) = (/1.000,1.000,1.000/) + +!@var TAUWC0,TAUIC0 lower limits for water/ice cloud opt.depths + REAL*8 :: TAUWC0 = 1D-3, TAUIC0 = 1D-3 + +!@var KFPCO2,KPFOZO if > 0 scale CO2,O3 vertical profile + INTEGER :: KFPCO2 = -1, KPFOZO = 0 + +!@var KANORM,KCNORM if > 0 renormalize aerosols,cloud albedos + INTEGER :: KANORM = 0, KCNORM = 0 + +!@var KWVCON ON/OFF flag for water vapor continuum absorption +!@var KUFH2O,KUFCO2 H2O,CO2 column absorb.scaling +!@var KCSELF,KCFORN H2O_ContSelf-Broadening,CO2_ContForeign-Broadening + INTEGER :: KWVCON = 1, KUFH2O = 1, KUFCO2 = 1, KCSELF = 1, & + KCFORN = 1 +!@var XCSELF,XCFORN scaling factors for Cont.Broadening (Deflt: Ma 2000) + REAL*8 :: XCSELF = 1., XCFORN = 1. + +!@var ICE012 pick ice droplet type: 0 liquid, 1 ice non-spher, 2 ice Mie + INTEGER :: ICE012 = 1 + +!@var VEFF0 effective volc. aerosol size distribution variance + REAL*8 :: VEFF0 = 0.35D0, REFF0 = 0.30D0 ! REFF0 not used + +!@var NORMS0 if =1, Incident (TOA) Solar flux is normalized to equal S0 + INTEGER :: NORMS0 = 1 + +!@var fOnOff if =1 fully turns on SW long-path H2O absorption correction + REAL*8 :: fOnOff = 1. + ! if =0. disables SW-H2O correction (tunable) + +!@var KORDER,KWTRAB controls WRITER-output (Mie-scattering info) + INTEGER :: KWTRAB = 0, KORDER = 0 + +!----------------------------------------------------------------------- +! COMPOSITION VERTICAL DISTRIBUTION FOR 5 SPECIFIED AEROSOL TYPES +!----------------------------------------------------------------------- +! TYPE +! 1 STRATOSPHERIC GLOBAL AEROSOL A,B,C ARE GLOBAL AVERAGE VALUES +! 2 TROPOSPHERIC OCEAN AEROSOL A,B,C ARE GLOBAL AVERAGE VALUES +! 3 TROPOSPHERIC LAND AEROSOL A,B,C ARE GLOBAL AVERAGE VALUES +! 4 TROPOSPHERIC DESERT AEROSOL A,B,C ARE LOCAL AVERAGE VALUES +! 5 TROPOSPHERIC HAZE AEROSOL A,B,C ARE LOCAL AVERAGE VALUES + +! 1 2 3 4 5 6 7 8 9 10 11 +! ACID1 SSALT SLFT1 SLFT2 BSLT1 BSLT2 DUST1 DUST2 DUST3 CARB1 CARB2 + REAL*8, DIMENSION(11,5) :: AGOLDH = reshape((/.005,.0,.0,.0,.0, & + .0,.0,.0,.0,.0,.0,.0,.020,.010,.010, & + .005,.0,.010,.0,.0,.005,.0,.0,.0,.0, & + .020,.005,.0,.010,.010,.0,.0,.015,.0,& + .0,.0,.0,.0,.0,.0,.020,.010,.0,.0,.0,& + .0,.0,.010,.0,.0,.0,.0,.0,.0,.005/), & + (/11,5/)) + REAL*8, DIMENSION(11,5) :: BGOLDH = reshape((/20.0,.0,.0,.0,.0, & + .0,.0,.0,.0,.0,.0,.0,1.00,4.00,1.00, & + 4.00,1.00,4.00,.0,.0,1.00,.0,.0,.0, & + .0,0.00,2.00,.0,4.00,2.00,.0,.0,0.00,& + .0,.0,.0,.0,.0,.0,.0,2.00,0.00,.0,.0,& + .0,.0,.0,.0,.0,.0,.0,.0,.0,.0,0.00/),& + (/11,5/)) + REAL*8, DIMENSION(11,5) :: CGOLDH = reshape((/3.00,.0,.0,.0,.0, & + .0,.0,.0,.0,.0,.0,.0,1.00,3.00,2.00, & + 3.00,1.00,2.00,.0,.0,1.00,.0,.0,.0, & + .0,1.00,3.00,.0,1.00,1.00,.0,.0,1.00,& + .0,.0,.0,.0,.0,.0,.0,1.00,1.00,.0,.0,& + .0,.0,.0,1.00,.0,.0,.0,.0,.0,.0, & + 1.00/),(/11,5/)) + +!nu REAL*8, dimension(11) :: PI0VIS=(/ +!nu 1 2 3 4 5 6 +!nu ACID1 SSALT SLFT1 SLFT2 BSLT1 BSLT2 +!nu 1 1.00000, 1.00000, 1.00000, 1.00000, 0.98929, 0.95609, +!nu +!nu 7 8 9 10 11 +!nu DUST1 DUST2 DUST3 CARB1 CARB2 +!nu 2 0.91995, 0.78495, 0.63594, 0.31482, 0.47513/) + +! TROPOSPHERIC AEROSOL COMPOSITIONAL/TYPE PARAMETERS +! SO4 SEA ANT OCX BCI BCB DST VOL + +!nu * ,REFWET=(/0.272, 1.808, 0.398, 0.318, 0.100, 0.100, 1.000,1.000/) +!Koch DRYM2G=(/5.000, 2.866, 8.000, 8.000, 9.000, 9.000, 1.000,1.000/) +!nu RHTMAG=(/1.788, 3.310, 1.756, 1.163, 1.000, 1.000, 1.000,1.000/) +!nu alt RHTMAG=(/1.982, 3.042, 1.708, 1.033, 1.000, 1.000, 1.000,1.000/) +!old * WETM2G=(/8.345, 2.866, 7.811, 5.836, 9.000, 9.000, 1.000,1.000/) +!nu * ,WETM2G=(/9.250, 2.634, 7.598, 5.180, 9.000, 9.000, 1.000,1.000/) + + REAL*8, DIMENSION(8) :: REFDRY = (/0.150,1.000,0.300,0.200, & + 0.080,0.080,1.000,1.000/), & + Q55DRY = (/2.191,2.499,3.069,3.010, & + 1.560,1.560,1.000,1.000/), & + DENAER = (/1.760,2.165,1.725,1.500, & + 1.300,1.300,2.000,2.000/) + +! TROP AEROSOL 1850 BACKGROUND, INDUSTRIAL BIO-BURNING PARAMETERS +! TROPOSPHERIC AEROSOL COMPOSITIONAL/TYPE PARAMETERS +! SO4 SEA ANT OCX BCI BCB DST VOL + + + + REAL*8, DIMENSION(8) :: FS8OPX = (/1.000,1.000,1.000,1.000, & + 1.500,1.500,1.000,1.00/), & + FT8OPX = (/1.000,1.000,1.000,1.000, & + 1.000,1.000,1.300,1.00/), & + FRSULF = (/0.000,0.000,0.000,0.330, & + 0.000,0.000,0.000,1.00/), & + PI0MAX = (/1.000,1.000,1.000,1.000, & + 1.000,1.000,1.000,1.00/) + +!nu * ,A8VEFF=(/ .200, .200, .200, .200, .200, .200, .200, .200/) + +#ifdef ALTER_RADF_BY_LAT +!@var FS8OPX_orig saves initial FS8OPX values +!@var FT8OPX_orig saves initial FT8OPX values + REAL*8, DIMENSION(8) :: FS8OPX_orig, FT8OPX_orig +#endif + +! REAL*8, dimension(8) :: !ron +! MINERAL DUST PARAMETERS +! CLAY SILT +! *REDUST=(/0.132D0,0.23D0,0.416D0,0.766D0,1.386D0,2.773D0,5.545D0, !ron +! 8D0/) ! <- not used; 3 silt only !ron +!nu * ,VEDUST=(/ 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2/) +! * ,RODUST=(/2.5D0,2.5D0,2.5D0,2.5D0,2.65D0,2.65D0,2.65D0, !ron +! 2.65D0/)! <- not used; 3 silt only !ron +!nu * ,FSDUST=(/ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0/) +!nu * ,FTDUST=(/ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0/) + +!@var DUSTAB: specifies relative mixture of particles with Sinyuk 2003 +!@+ and Patterson 1977 SW properties. +!@+ DUSTAB=1.0: all particles have Sinyuk 2003 properties +!@+ DUSTAB=0.0: all particles have Patterson 1977 properties + REAL*8, PARAMETER :: DUSTAB = 0.5 + +!----------------------------------------------------------------------- +! GHG 1980 Reference Concentrations and Vertical Profile Definitions +!----------------------------------------------------------------------- + +!@var KTREND if > 0 table GHG concentrations (Trend G) are used for +!@+ yr/day KYEARG/KJDAYG; if KTREND=0, GHG are set to PPMVK0 + INTEGER :: KTREND = 1 + +!@var PPMV80 reference GHG concentrations (ppm) +! GAS NUMBER 1 2 3 4 5 6 7 +! H2O CO2 O3 O2 NO2 N2O CH4 +#ifdef V2_O2_MODE /* temporary option to exactly match v2_branch */ + REAL*8, DIMENSION(13) :: PPMV80 = (/0D0,337.90D0,0D0,21D4,0D0, & + .3012D0,1.5470D0,.1666D-03,.3003D-03, & + 0D0,.978D-04,.0010D-10,.0420D0/) +#else + REAL*8, DIMENSION(13) :: PPMV80 = (/0D0,337.90D0,0D0,pO2*1.D6, & + 0D0,.3012D0,1.5470D0,.1666D-03, & + .3003D-03,0D0,.978D-04,.0010D-10, & + .0420D0/) +#endif +! CCL3F1 CCL2F2 N2 CFC-Y CFC-Z SO2 +! GAS NUMBER 8 9 10 11 12 13 + +!@var PPMVK0 user set GHG concentrations (ppm), used if KTREND=0 +! GAS NUMBER 1 2 3 4 5 6 7 +! H2O CO2 O3 O2 NO2 N2O CH4 + REAL*8, DIMENSION(12) :: PPMVK0 = (/0D0,337.90D0,0D0,21.D4,0D0, & + .3012D0,1.5470D0,.1666D-03,.3003D-03, & + 0D0,.978D-04,0.0010D-10/) +! CCL3F1 CCL2F2 N2 CFC-Y CFC-Z +! GAS NUMBER 8 9 10 11 12 + +! Makiko GHG Trend Compilation GHG.1850-2050.Dec1999 in GTREND +! --------------------------------------------------------------- +!@var nghg nr. of well-mixed GHgases: CO2 N2O CH4 CFC-11 CFC-12 others +!@var nyrsghg max.number of years of prescr. greenhouse gas history + INTEGER, PARAMETER :: NGHG = 6 + +!@var ghgyr1,ghgyr2 first and last year of GHG history + INTEGER ghgyr1, ghgyr2 +!@var ghgam,xref,xnow GHG-mixing ratios in ppm,ppm,ppm,ppb,ppb,ppb + REAL*8 XREF(NGHG+1), XNOW(NGHG+1) + REAL*8, ALLOCATABLE :: ghgam(:,:) + +! GTREND: 1980., 337.9, .3012, 1.547, .1666, .3003, .0978, +! --------------------------------------------------------------- + +!@var KGGVDF,KPGRAD,KLATZ0 control parameters for vertical GHG profiles +!@+ ----------------------------------------------------------------- +!@+ Minschwaner et al JGR (1998) CH4, N2O, CFC-12 Vertical profiles +!@+ IF(KGGVDF > 0) Then: +!@+ Gas decreases are linear with pressure, from unity at ground to +!@+ the fractional value PPMVDF(NGAS) at the top of the atmosphere. +!@+ Exponential decrease by EXP(-(Z-Z0)/H) is superimposed on this. +!@+ IF(KLATZ0 > 0) Then: Z0 depends on latitude, KGGVDF not used +!@+ KPGRAD>0: Pole-to-Pole lat. gradient (PPGRAD) is also superimposed +!@+ ------------------------------------------------------------------ +!@var Z0,ZH scale heights used for vertical profile (km) +!@var PPMVDF frac. value at top of atmosphere (used if KGGVDF > 0) +!@var PPGRAD Pole-to-Pole latitud.gradient for GHG (used if KPGRAD > 0) + INTEGER :: KGGVDF = 0, KPGRAD = 1, KLATZ0 = 1 + +! NUMBER 1 2 3 4 5 6 7 8 9 10 11 12 +! H2O CO2 O3 O2 NO2 N2O CH4 CFC11 CFC12 N2 CF-Y CF-Z + +! GAS NUMBER 1 2 3 4 5 6 7 +! H2O CO2 O3 O2 NO2 N2O CH4 +! CCL3F1 CCL2F2 N2 CFC-Y CFC-Z +! GAS NUMBER 8 9 10 11 12 + +! GAS NUMBER 1 2 3 4 5 6 7 +! H2O CO2 O3 O2 NO2 N2O CH4 + REAL*8, DIMENSION(12) :: Z0 = (/0.0,0.0,0.0,0.0,0.0,16.,16.,16.,& + 16.,0.0,16.,16./), & + ZH = (/8.0,8.0,8.0,8.0,8.0,30.,50.,30.,& + 30.,0.0,30.,30./), & + PPMVDF = (/1.0,1.0,1.0,1.0,1.0,0.88888,& + 0.88888,0.88888,0.88888,1.0,0.88888, & + 0.88888/), & + PPGRAD = (/0.0,0.0,0.0,0.0,0.0,0.0100, & + 0.0900,0.0600,0.0600,0.0,0.0600, & + 0.0600/) +! CCL3F1 CCL2F2 N2 CFC-Y CFC-Z +! GAS NUMBER 8 9 10 11 12 + +!--------------------- +! Optional Tracers used via setbak/getbak +!--------------------- + INTEGER, DIMENSION(ITRMAX) :: ITR = 1 + INTEGER :: NTRACE = 0 + +! TRACER AEROSOL COMPOSITIONAL/TYPE PARAMETERS +!nu * ,TRVEFF= .2d0 +!loc * ,FSTOPX= 1.d0 +!loc * ,FTTOPX= 1.d0 + REAL*8, DIMENSION(ITRMAX) :: TRRDRY = .1D0, TRADEN = 1.D0, & + FSTASC = 1.D0, FTTASC = 1.D0 + + SAVE + + CONTAINS + + SUBROUTINE RCOMP1(NRFUN) + USE DOMAIN_DECOMP_ATM, ONLY:AM_I_ROOT, grid + USE PARIO, ONLY:PAR_OPEN, PAR_CLOSE, VARIABLE_EXISTS, GET_DIMLEN, & + READ_DATA + USE FILEMANAGER, ONLY:FILE_EXISTS + + IMPLICIT NONE +! ------------------------------------------------------------------ +! Solar,GHG Trend, VolcAer Size Selection Parameters: Defaults +! Process KYEARX KJDAYX +! SolarCon, UV 0 0 +! GH Gas Trend 0 0 +! REFF0= 0.3 +! VEFF0= 0.35 +! ------------------------------------------------------------------ + +! NRFUN is now set as an argument from calling routine so that unit +! numbers can be set automatically + INTEGER :: NRFUN(14) +! radfile1 2 3 4 5 6 7 8 9 A B C D E +!? DATA NRFN0/71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84/ + + INTEGER, SAVE :: IFIRST = 1 + ! ,NRFN0 + CHARACTER*80 EPSTAG, TITLE + + REAL*4 OZONLJ(44,46), R72X46(72,46) + REAL*4, DIMENSION(:,:), ALLOCATABLE :: VTAUR4 !rjh + REAL*4, ALLOCATABLE :: vtau4(:,:,:), vreff4(:,:), hv4(:), & + lat4(:) + + INTEGER :: I, J, K, L, M, N, N1, N2, NRFU, KK, NN, IYEAR, & + IMONTH, JJDAYS, JYEARS, JJDAYG, JYEARG, yr2S0i + REAL*8 :: WAVNA, WAVNB, PFWI, TKOFPF, SUMV, EPK, EPL, DEP, & + SFNORM, D, O, Q, S, OCM, WCM, YQSCCB +!@var GTAU,TGDATA temporary array to read data and pass it to RAD_UTILS + REAL*8 :: GTAU(51,11,143), TGDATA(122,13) + + INTEGER :: N_BIN, fid + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: SSI_IN + REAL*8, ALLOCATABLE, DIMENSION(:) :: calyear, WS_IN, DS_IN, & + TSI_IN + LOGICAL :: have_RADN9_file + +!? IF(LASTVC > 0) NRFUN=NRFN0 + IF ( IFIRST>=1 ) THEN + +! ------------------------------------------------------------------ +! Input data are read as specified in the first CALL RCOMP1 (NRFUN). +! Subsequent calls to RCOMP1 can be used to re-initialize parameters +! in SETXXX subroutines to different values, but no new data is read +! ------------------------------------------------------------------ + +! ------------------------------------------------------------------ +! MADVEL Model Add-on Data of Extended Climatology Enable Parameter +! Each MADVEL digit is ON/OFF switch for corresponding input +! e.g. MADVEL=123456 (zero digit skips input process) +! +! MADO3M = 1 Reads Decadal Ozone files and Ozone trend file +! MADAER = 2 Reads Aerosol 50y tropospheric climatology RFILE5 +! MADDST = 3 Reads Dust-windblown mineral climatology RFILE6 +! MADVOL = 4 Reads Volcanic 1950-00 aerosol climatology RFILE7 +! MADEPS = 5 Reads Epsilon cloud heterogeneity data RFILE8 +! MADLUV = 6 Reads Lean formar Solar Spectral Irrad. RFILE9 +! +! Related Model Add-on Data Parameters set in RADPAR +! +! MADGHG = 1 Default Enables UPDGHG update. (MADGHG=0),no update +! MADSUR = 1 Reads V72X46N.1.cor Vegetation type data RFILEC +! Z72X46N Ocean fraction, topography RFILED +! ------------------------------------------------------------------ + + +! Initialize variables that might not otherwise get defined +! --------------------------------------------------------- + + TAUWC(:) = 0 + TAUIC(:) = 0 + SIZEWC(:) = 0 + SIZEIC(:) = 0 + CLDEPS(:) = 0 + FPXCO2(:) = 1 + FPXOZO(:) = 1 + TLB(:) = 250 + TLT(:) = 250 + TLM(:) = 250 + SHL(:) = 0 + RHL(:) = 0 + SRAEXT(:,:) = 0 + SRASCT(:,:) = 0 + SRAGCB(:,:) = 0 + SRBEXT(:,:) = 0 + SRBSCT(:,:) = 0 + SRBGCB(:,:) = 0 + SRDEXT(:,:) = 0 + SRDSCT(:,:) = 0 + SRDGCB(:,:) = 0 + SRVEXT(:,:) = 0 + SRVSCT(:,:) = 0 + SRVGCB(:,:) = 0 + SRCEXT(:,:) = 0 + SRCSCT(:,:) = 0 + SRCGCB(:,:) = 0 + SRCPI0(:,:) = 0 + DBLPI0(:,:) = 0 + DBLEXT(:,:) = 0 + DBLSCT(:,:) = 0 + DBLGCB(:,:) = 0 + TRAALK(:,:) = 0 + TRBALK(:,:) = 0 + TRDALK(:,:) = 0 + TRVALK(:,:) = 0 + TRCALK(:,:) = 0 + TRGXLK(:,:) = 0 + U0GAS(:,:) = 0 + ULGAS(:,:) = 0 + TRACER(:,:) = 0 + EPLOW(:,:) = 0 + EPMID(:,:) = 0 + EPHIG(:,:) = 0 + + IF ( LASTVC>0 ) CALL SETATM + IF ( NL>LX ) CALL STOP_MODEL('rcomp1: increase LX',255) + +!**** Use (global mean) pressures to get standard mid-latitude summer +!**** values for height, density, temperature, ozone, water vapor + DO L = 1, NL + 1 + PLB0(L) = PLB(L) + CALL PHATMO(PLB0(L),HLB0(L),D,TLB(L),O,Q,S,OCM,WCM,1,2) + ENDDO + DO L = 1, NL + TLT(L) = TLB(L+1) + TLM(L) = 0.5D0*(TLB(L)+TLT(L)) + ENDDO + +!sl De-activate surface layer computations +!sl TAUSL(:)=0.0 +!sl FTAUSL(:)=0.0 + +!----------------------------------------------------------------------- +!R(1) Reads GTAU Asymmetry Parameter Conversion Table used within SGPGXG +! +! (SGPGXG does Multiple Scattering Parameterization used in SOLAR) +! ---------------------------------------------------------------- + + NRFU = NRFUN(1) + READ (NRFU) GTAU, TGDATA + CALL SETGTS(TGDATA) + CALL SET_SGPGXG(GTAU) + + +!----------------------------------------------------------------------- +!R(2) Reads in Merged k-Distribution Tau Tables for Thermal Radiation +! CFCs, H2O Continuum Tau Table, Merged k-Distr Planck Flux Table +! +! (Reads: TAUCD0,TAUTBL,TAUWV0,TAUO30,PLANCK,XKCFC,H2OCN8,H2OCF8 +! DUCH4,SDUCH4,DUN2O,SDUN2O,ULOX,DUX used in TAUGAS) +! ---------------------------------------------------------------- + + NRFU = NRFUN(2) + READ (NRFU) title, TAUTBL + READ (NRFU) title, TAUWV0 + READ (NRFU) title, TAUCD0 + READ (NRFU) title, TAUO30 + READ (NRFU) title, PLANCK + READ (NRFU) title, XKCFC + READ (NRFU) title, ULOX, DUX + + IF ( transmission_corrections ) THEN + NRFU = NRFUN(4) + READ (NRFU) title, XTRUP, XTRDN, XTU0, XTD0 + READ (NRFU) title, XTFAC + READ (NRFU) title, DXUP2, DXDN2 + ! CO2 + READ (NRFU) title, DXUP3, DXDN3 + ! O3 + READ (NRFU) title, DXUP6, DXDN6 + ! N2O + READ (NRFU) title, DXUP7, DXDN7 + ! CH4 + READ (NRFU) title, DXUP8, DXDN8 + ! CFC11 + READ (NRFU) title, DXUP9, DXDN9 + ! CFC12 + READ (NRFU) title, DXUP13, DXDN13 + ! SO2 + ENDIF + +!**** H2O Continuum Tau Tables (Ma_2000 or Ma_2004,Roberts,MT_CKD) + NRFU = NRFUN(5) + READ (NRFU) title, H2OCN8, XCSELF + IF ( AM_I_ROOT() ) WRITE (6,*) title, ' scaling factor:', & + XCSELF + READ (NRFU) title, H2OCF8, XCFORN + IF ( AM_I_ROOT() ) WRITE (6,*) title, ' scaling factor:', & + XCFORN + +! Define Window Flux to Brightness Temperature Conversion Factors +! --------------------------------------------------------------- + + DO i = 1, 100 + TKPFW(i) = TKOFPF(85D1,9D2,.001D0*I) + ENDDO + DO i = 1, 90 + TKPFW(i+100) = TKOFPF(85D1,9D2,.1D0+.01D0*I) + ENDDO + DO i = 1, 440 + TKPFW(i+190) = TKOFPF(85D1,9D2,1.D0+.1D0*I) + ENDDO + DO i = 1, 900 + TKPFT(i) = TKOFPF(0D0,1D4,DBLE(I)) + ENDDO + +! PLANCK Table interpolation limit parameters +! ------------------------------------------- +!----------------------------------------------------------------------- +!R(3) Read Mie Scattering Parameters [Qext, Qscat, AsymParameter] +! (1) Tropospheric Aerosols [11 Background, 8 Trop8 Aerosols] +! (2) Clouds [5 Water, 5 non-spherical Ice, 5 Mie Ice Clouds] +! (3) Desert Dust Aerosols [25 particle sizes - to select 8] +! (4) Volcanic Aerosols [20 particle sizes, 5 size variances] +! (5) Sulfate Aerosols [22 particle sizes, 0.1 - 10. micron] +! (6) Soot Aerosols [25 particle sizes, 0.001 - 5.0 micron] +! ----------------------------------------------------------- + + NRFU = NRFUN(3) + +! GCM 11 background aerosol Mie parameters +! ---------------------------------------- + DO N = 1, 11 + READ (NRFU,3000) TITLE + READ (NRFU,3001) (SRAQEX(K,N),K=1,6) + READ (NRFU,3001) (SRAQSC(K,N),K=1,6) + READ (NRFU,3001) (SRAQCB(K,N),K=1,6) + ENDDO + READ (NRFU,3002) (Q55A11(N),N=1,11) + READ (NRFU,3003) (REFA11(N),N=1,11) + READ (NRFU,3003) (VEFA11(N),N=1,11) + DO N = 1, 11 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRAQEX(K,N),K=1,33) + READ (NRFU,3005) (TRAQSC(K,N),K=1,33) + READ (NRFU,3005) (TRAQCB(K,N),K=1,33) + ENDDO + +! GCM 9 (of 10) climatology aerosol Mie parameters +! ------------------------------------------------ + DO N = 1, 10 + IF ( N/=6 ) THEN + READ (NRFU,3000) TITLE + READ (NRFU,3001) (SRBQEX(K,N),K=1,6) + READ (NRFU,3001) (SRBQSC(K,N),K=1,6) + READ (NRFU,3001) (SRBQCB(K,N),K=1,6) + ENDIF + ENDDO + READ (NRFU,3002) (Q55B10(N),N=1,5), (Q55B10(N),N=7,10) + READ (NRFU,3003) (REFB10(N),N=1,5), (REFB10(N),N=7,10) + READ (NRFU,3003) (VEFB10(N),N=1,5), (VEFB10(N),N=7,10) + DO N = 1, 10 + IF ( N/=6 ) THEN + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRBQEX(K,N),K=1,33) + READ (NRFU,3005) (TRBQSC(K,N),K=1,33) + READ (NRFU,3005) (TRBQCB(K,N),K=1,33) + ENDIF + ENDDO + + +! Cloud Water, Ice-non, Ice-Mie parameters +! ---------------------------------------- + DO N = 1, 15 + READ (NRFU,3000) TITLE + READ (NRFU,3001) (SRCQEX(K,N),K=1,6) + READ (NRFU,3001) (SRCQSC(K,N),K=1,6) + READ (NRFU,3001) (SRCQCB(K,N),K=1,6) + ENDDO + READ (NRFU,3006) (Q55C15(N),N=1,15) + 3006 FORMAT (18X,6(F7.5,1X)/18X,6(F7.5,1X)/18X,6(F7.5,1X)) + READ (NRFU,3007) (REFC15(N),N=1,15) + READ (NRFU,3007) (VEFC15(N),N=1,15) + DO N = 1, 15 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRCQEX(K,N),K=1,33) + READ (NRFU,3005) (TRCQSC(K,N),K=1,33) + READ (NRFU,3005) (TRCQCB(K,N),K=1,33) + READ (NRFU,3005) (TRCQAL(K,N),K=1,33) + ENDDO + +! Desert Dust 25 sizes, Mie parameter data +! ---------------------------------------- + DO N = 1, 25 + READ (NRFU,3001) (SRDQEX(K,N),K=1,6) + READ (NRFU,3001) (SRDQSC(K,N),K=1,6) + READ (NRFU,3001) (SRDQCB(K,N),K=1,6) + ENDDO + READ (NRFU,3008) (Q55D25(N),N=1,25) + READ (NRFU,3009) (REFD25(N),N=1,25) + READ (NRFU,3010) (VEFD25(N),N=1,25) + DO N = 1, 25 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRDQEX(K,N),K=1,33) + READ (NRFU,3005) (TRDQSC(K,N),K=1,33) + READ (NRFU,3005) (TRDQCB(K,N),K=1,33) + READ (NRFU,3005) (TRDQAL(K,N),K=1,33) + ENDDO + + TRDQAB(:,:) = TRDQEX(:,:) - TRDQSC(:,:) + ! used in writer only + +! Volcanic aerosol Mie size, variance data +! ---------------------------------------- + DO M = 1, 5 + IF ( M/=4 ) THEN + DO N = 1, 20 + READ (NRFU,3001) (SRVQEX(K,N,M),K=1,6) + READ (NRFU,3001) (SRVQSC(K,N,M),K=1,6) + READ (NRFU,3001) (SRVQCB(K,N,M),K=1,6) + ENDDO + READ (NRFU,3011) (Q55V20(N,M),N=1,20) + 3011 FORMAT (18X,5(F7.5,1X),3(/18X,5(F7.5,1X))) + READ (NRFU,3012) (REFV20(N,M),N=1,20) + READ (NRFU,3012) (VEFV20(N,M),N=1,20) + DO N = 1, 20 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRVQEX(K,N,M),K=1,33) + READ (NRFU,3005) (TRVQSC(K,N,M),K=1,33) + READ (NRFU,3005) (TRVQCB(K,N,M),K=1,33) + READ (NRFU,3005) (TRVQAL(K,N,M),K=1,33) + ENDDO + ENDIF + ENDDO + DO N = 1, 20 + DO K = 1, 6 + SRVQEX(K,N,4) = (SRVQEX(K,N,3)+SRVQEX(K,N,5))/2.D0 + SRVQSC(K,N,4) = (SRVQSC(K,N,3)+SRVQSC(K,N,5))/2.D0 + SRVQCB(K,N,4) = (SRVQCB(K,N,3)+SRVQCB(K,N,5))/2.D0 + ENDDO + Q55V20(N,4) = (Q55V20(N,3)+Q55V20(N,5))/2.D0 + REFV20(N,4) = (REFV20(N,3)+REFV20(N,5))/2.D0 + VEFV20(N,4) = (VEFV20(N,3)+VEFV20(N,5))/2.D0 + DO K = 1, 33 + TRVQEX(K,N,4) = (TRVQEX(K,N,3)+TRVQEX(K,N,5))/2.D0 + TRVQSC(K,N,4) = (TRVQSC(K,N,3)+TRVQSC(K,N,5))/2.D0 + TRVQCB(K,N,4) = (TRVQCB(K,N,3)+TRVQCB(K,N,5))/2.D0 + TRVQAL(K,N,4) = (TRVQAL(K,N,3)+TRVQAL(K,N,5))/2.D0 + ENDDO + ENDDO + +! Sulfate aerosol, Mie parameter 22-size data +! ------------------------------------------- + DO N = 1, 22 + READ (NRFU,3000) TITLE + READ (NRFU,3001) (SRUQEX(K,N),K=1,6) + READ (NRFU,3001) (SRUQSC(K,N),K=1,6) + READ (NRFU,3001) (SRUQCB(K,N),K=1,6) + ENDDO + READ (NRFU,3008) (Q55U22(N),N=1,22) + READ (NRFU,3013) (REFU22(N),N=1,22) + READ (NRFU,3013) (VEFU22(N),N=1,22) + DO N = 1, 22 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRUQEX(K,N),K=1,33) + READ (NRFU,3005) (TRUQSC(K,N),K=1,33) + READ (NRFU,3005) (TRUQCB(K,N),K=1,33) + READ (NRFU,3005) (TRUQAL(K,N),K=1,33) + ENDDO + +! Soot aerosol, Mie parameter 25-size data +! ---------------------------------------- + DO N = 1, 25 + READ (NRFU,3000) TITLE + READ (NRFU,3001) (SRSQEX(K,N),K=1,6) + READ (NRFU,3001) (SRSQSC(K,N),K=1,6) + READ (NRFU,3001) (SRSQCB(K,N),K=1,6) + ENDDO + READ (NRFU,3008) (Q55S25(N),N=1,25) + READ (NRFU,3013) (REFS25(N),N=1,25) + READ (NRFU,3013) (VEFS25(N),N=1,25) + DO N = 1, 25 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRSQEX(K,N),K=1,33) + READ (NRFU,3005) (TRSQSC(K,N),K=1,33) + READ (NRFU,3005) (TRSQCB(K,N),K=1,33) + READ (NRFU,3005) (TRSQAL(K,N),K=1,33) + ENDDO + +! Seasalt aerosol, Mie parameter 22-size data +! Nitrate aerosol, Mie parameter 22-size data +! (Water) aerosol, Mie parameter 22-size data +! Organic aerosol, Mie parameter 22-size data +! ------------------------------------------- + N1 = 23 + DO KK = 1, 4 + N2 = N1 + 21 + DO N = N1, N2 + READ (NRFU,3000) TITLE + READ (NRFU,3001) (SRUQEX(K,N),K=1,6) + READ (NRFU,3001) (SRUQSC(K,N),K=1,6) + READ (NRFU,3001) (SRUQCB(K,N),K=1,6) + ENDDO + READ (NRFU,3008) (Q55U22(N),N=N1,N2) + READ (NRFU,3013) (REFU22(N),N=N1,N2) + READ (NRFU,3013) (VEFU22(N),N=N1,N2) + N1 = N2 + 1 + ENDDO + N1 = 23 + DO KK = 1, 4 + N2 = N1 + 21 + DO N = N1, N2 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRUQEX(K,N),K=1,33) + READ (NRFU,3005) (TRUQSC(K,N),K=1,33) + READ (NRFU,3005) (TRUQCB(K,N),K=1,33) + READ (NRFU,3005) (TRUQAL(K,N),K=1,33) + ENDDO + N1 = N2 + 1 + ENDDO + +! Sinyuk Desert Dust 25 sizes, Mie parameter data +! ----------------------------------------------- + + DO N = 1, 25 + READ (NRFU,3001) (YRDQEX(K,N),K=1,6) + READ (NRFU,3001) (YRDQSC(K,N),K=1,6) + READ (NRFU,3001) (YRDQCB(K,N),K=1,6) + ENDDO + READ (NRFU,3008) (Y55D25(N),N=1,25) + READ (NRFU,3009) (REFD25(N),N=1,25) + READ (NRFU,3010) (VEFD25(N),N=1,25) + DO N = 1, 25 + READ (NRFU,3000) TITLE + READ (NRFU,3004) (TRDQEX(K,N),K=1,33) + READ (NRFU,3005) (TRDQSC(K,N),K=1,33) + READ (NRFU,3005) (TRDQCB(K,N),K=1,33) + READ (NRFU,3005) (TRDQAL(K,N),K=1,33) + ENDDO + + TRDQAB(:,:) = TRDQEX(:,:) - TRDQSC(:,:) + ! used in writer only + +!----------------------------------------------------------------------- +! Create external mixture of Patterson and Sinyuk dust particles + DO N = 1, 25 + DO K = 1, 6 + YQSCCB = YRDQSC(K,N)*YRDQCB(K,N)*DUSTAB + SRDQSC(K,N) & + *SRDQCB(K,N)*(1.D0-DUSTAB) + SRDQEX(K,N) = DUSTAB*YRDQEX(K,N) + (1.D0-DUSTAB) & + *SRDQEX(K,N) + SRDQSC(K,N) = DUSTAB*YRDQSC(K,N) + (1.D0-DUSTAB) & + *SRDQSC(K,N) + SRDQCB(K,N) = YQSCCB/(1.D-10+SRDQSC(K,N)) + ENDDO + Q55D25(N) = DUSTAB*Y55D25(N) + (1.D0-DUSTAB)*Q55D25(N) + ENDDO + +!----------------------------------------------------------------------- +!R(7) Read Stratospheric Volcanic binary data +! (NVOLMON months (years JVOLYI to JVOLYE) x NVOLLAT latitudes) +! If KyearV<0 use the NVOLMON-month mean as background aerosol +! --------------------------------------------------------- + NRFU = NRFUN(7) + IF ( madvol==1 ) THEN + READ (NRFU) TITLE, NVOLMON, JVOLYI, JVOLYE + NVolLat = 24 + NVolK = 4 + IF ( TITLE(1:9)/='OD Header' ) & + CALL STOP_MODEL('rcomp1: use new RADN7 header file', & + 255) + ALLOCATE (VTauTJK(NVOLMON,NVolLat,NVolK),HVolKM(NVolK+1)) + ALLOCATE (VReffTJ(NVOLMON,NVolLat),VTAUR4(NVOLMON,NVolLat)) + DO K = 1, NVolK + READ (NRFU) TITLE, VTAUR4 + DO J = 1, NVolLat + SUMV = 0. + DO I = 1, NVOLMON + VTauTJK(I,J,K) = VTAUR4(I,J) + SUMV = SUMV + VTAUR4(I,J) + ENDDO + IF ( kyearv<0 ) VTauTJK(1,J,K) = SUMV/NVOLMON + ENDDO + ENDDO + READ (NRFU) TITLE, VTAUR4 + DO J = 1, NVolLat + SUMV = 0. + DO I = 1, NVOLMON + VReffTJ(I,J) = VTAUR4(I,J) + SUMV = SUMV + VTAUR4(I,J) + ENDDO + IF ( kyearv<0 ) VReffTJ(1,J) = SUMV/NVOLMON + ENDDO + DEALLOCATE (VTAUR4) + ELSEIF ( madvol==2 ) THEN + READ (NRFU) TITLE + REWIND NRFU + IF ( TITLE(1:12)/='CMIP6 Header' ) & + CALL STOP_MODEL('rcomp1: use CMIP6 RADN7 header file',& + 255) + READ (NRFU) TITLE, NVOLMON, JVOLYI, JVOLYE, NVolLat, NVolK + ALLOCATE (VTauTJK(NVOLMON,NVolLat,NVolK)) + ALLOCATE (VTau4(NVOLMON,NVolLat,NVolK)) + ALLOCATE (VReff4(NVOLMON,NVolLat)) + ALLOCATE (VReffTJ(NVOLMON,NVolLat)) + ALLOCATE (HVOLKM(NVolK+1),ELATVOL(NVolLat+1)) + ALLOCATE (hv4(NVolK+1),LAT4(NVolLat+1)) + READ (NRFU) TITLE, VTau4 + VTauTJK = VTau4 + READ (NRFU) TITLE, VReff4 + VReffTJ = VReff4 + READ (NRFU) TITLE, hv4 + HVOLKM = hv4 + READ (NRFU) TITLE, LAT4 + ELATVOL = lat4 + DEALLOCATE (VTau4,VReff4,hv4,LAT4) + IF ( kyearv<0 ) THEN + DO j = 1, NVolLat + VReffTJ(1,J) = SUM(VReffTJ(:,j))/nvolmon + DO k = 1, NVolK + VTauTJK(1,J,K) = SUM(VTauTJK(:,j,k))/nvolmon + ENDDO + ENDDO + ENDIF + ENDIF +!----------------------------------------------------------------------- +!R(8) ISCCP Derived Cloud Variance (EPSILON) Cloud Optical Depth Factor +! Low, Mid, High Cloud Optical Depths are Reduced by (1 - EPSILON) +! +! INPUT DATA FILE: UNIT = INFILE +! TAG = EPSTAG (CHARACTER*80) +! DATA = EPLMHC (72,46,12,4) REAL*4 +! +! Data are 72X46 Monthly Mean Low, Mid, High, Column EPSILON Values +! Cloud Heterogeneity selections used in UPDEPS, GETEPS (in SETCLD) +! +! EPSCON Column Cloud Inhomogeneity EPSILON (when KCLDEP=1) +! KCLDEP Selects Cloud Inhomogeneity Option (0-4): +! KCLDEP = 0 Sets Column CLDEPS to Zero +! KCLDEP = 1 Sets Column CLDEPS to EPSCON +! KCLDEP = 2 Keeps whatever is specified in CLDEPS +! KCLDEP = 3 Uses: Column EPCOL(72,46) Climatology +! KCLDEP = 4 Uses: Ht Dep EPLOW, EPMID, EPHIG Data +! -------------------------------------------------------- + + IF ( MADEPS>=1 ) THEN + NRFU = NRFUN(8) + READ (NRFU) EPSTAG, EPLMHC + + + DO N = 1, 4 + DO M = 1, 12 + DO I = 1, 72 +!**** extend northern-most non-neg.value to N.Pole + J = 46 + ! MLAT46 + DO WHILE ( EPLMHC(I,J,M,N)<0 ) + J = J - 1 + ENDDO + IF ( J<46 ) EPLMHC(I,J+1:46,M,N) = EPLMHC(I,J,M,N) +!**** extend southern-most non-neg.value to S.Pole + J = 1 + DO WHILE ( EPLMHC(I,J,M,N)<0 ) + J = J + 1 + ENDDO + IF ( J>1 ) EPLMHC(I,1:J-1,M,N) = EPLMHC(I,J,M,N) + IF ( J/=46 ) THEN + DO +!**** linearly interpolate across remaining intervals with EP<0 + J = J + 1 ! find start of interval: + DO WHILE ( EPLMHC(I,J,M,N)>=0 ) + J = J + 1 + IF ( J>46 ) GOTO 810 + ENDDO + K = J - 1 + EPK = EPLMHC(I,K,M,N) + J = J + 1 ! find end of interval: + DO WHILE ( EPLMHC(I,J,M,N)<0 ) + J = J + 1 + ENDDO + L = J + EPL = EPLMHC(I,L,M,N) + ! EPk>=0, EPk+1,...,EPl-1<0, EPl>=0 + DEP = (EPL-EPK)/(L-K) + DO NN = 1, L - 1 - K + ! replace EP(k+1)...EP(l-1) + EPLMHC(I,K+NN,M,N) = EPK + NN*DEP + ENDDO + IF ( J>=46 ) EXIT + ENDDO + ENDIF + 810 ENDDO + ENDDO + ENDDO + ENDIF + + + +!----------------------------------------------------------------------- +!R(E) +! KCLDEM Selects: Top-Cloud (Thermal) Scattering Correction +! KCLDEM = 0 Utilizes Non-scattering approximation +! KCLDEM = 1 Modifies emission and transmission by +! top cloud (over-rides old correction) +! ---------------------------------------------------------- + + NRFU = NRFUN(14) + READ (NRFU) RIJTPG, FDXTPG, FEMTPG + + +!----------------------------------------------------------------------- +!R(9) Read Judith Lean Solar UV and Solar Constant Variability +! Monthly-Mean Solar UV +! --------------------------------- + iMS0X = MS0X + + IF ( KSOLAR>=0 ) THEN + IF ( MADLUV<1 ) THEN + WS_SSI(:) = WS_SSI(:)/1000.D0 + DS_SSI(:) = DS_SSI(:)/1000.D0 + W1_SSI(:) = WS_SSI(:) - 0.5D0*DS_SSI(:) + GOTO 949 + ENDIF +! NRFU=NRFUN(9) + +! IF(KSOLAR.ne.9) THEN +! READ(NRFU,'(a80)') TITLE +! if(ksolar >= 2 .and. TITLE(1:3).ne.'ANN') +! call stop_model('rcomp1: change RADN9 to ann.file',255) +! if(ksolar < 2 .and. TITLE(1:3)=='ANN') +! call stop_model('rcomp1: change RADN9 to monthly file',255) +! READ(NRFU,'(5F14.2)') WSLEAN ! 1:190 +! READ(NRFU,'(a80)') TITLE +! READ(NRFU,'(5E14.3)') DSLEAN ! 1:190 + + have_RADN9_file = FILE_EXISTS('RADN9') + + IF ( have_RADN9_file ) THEN + fid = PAR_OPEN(grid,'RADN9','read') + iMs0X = GET_DIMLEN(grid,fid,'time') + N_BIN = GET_DIMLEN(grid,fid,'wlen') + ALLOCATE (TSI_IN(iMS0X),calyear(iMS0X)) + ALLOCATE (WS_IN(N_BIN),DS_IN(N_BIN),SSI_IN(N_BIN,iMS0X)) + IF ( VARIABLE_EXISTS(grid,fid,'calyear') ) THEN + CALL READ_DATA(grid,fid,'calyear',calyear, & + BCAST_ALL=.TRUE.) + ELSE + CALL STOP_MODEL('missing calyear in RADN9 file',255) + ENDIF + IF ( VARIABLE_EXISTS(grid,fid,'wlen') ) THEN + CALL READ_DATA(grid,fid,'wlen',WS_IN,BCAST_ALL=.TRUE.) + ELSE + CALL STOP_MODEL( & + &'missing the wlen variable in RADN9 file'& + ,255) + ENDIF + IF ( VARIABLE_EXISTS(grid,fid,'wlenbinsize') ) THEN + CALL READ_DATA(grid,fid,'wlenbinsize',DS_IN, & + BCAST_ALL=.TRUE.) + ELSE + CALL STOP_MODEL('missing wlenbinsize in RADN9 file', & + 255) + ENDIF + IF ( VARIABLE_EXISTS(grid,fid,'ssi') ) THEN + CALL READ_DATA(grid,fid,'ssi',SSI_IN,BCAST_ALL=.TRUE.) + ELSE + CALL STOP_MODEL( & + &'missing the ssi variable in RADN9 file'& + ,255) + ENDIF + IF ( VARIABLE_EXISTS(grid,fid,'tsi') ) THEN + CALL READ_DATA(grid,fid,'tsi',TSI_IN,BCAST_ALL=.TRUE.) + ELSE + CALL STOP_MODEL( & + &'missing the tsi variable in RADN9 file'& + ,255) + ENDIF + CALL PAR_CLOSE(grid,fid) + ELSE + CALL STOP_MODEL('missing the RADN9 file',255) + ENDIF + + WS_SSI(:) = WS_IN(N_BIN-189:N_BIN)/1000.D0 + DS_SSI(:) = DS_IN(N_BIN-189:N_BIN)/1000.D0 + W1_SSI(:) = WS_SSI(:) - 0.5D0*DS_SSI(:) + +! WSLEAN(:)=WSLEAN(:)/1000.D0 +! DSLEAN(:)=DSLEAN(:)/1000.D0 +! W1LEAN(:)=WSLEAN(:)-0.5D0*DSLEAN(:) + +! READ(NRFU,'(a80)') TITLE +! READ(NRFU,'(a80)') TITLE +! READ(NRFU,'(a80)') TITLE +! if(TITLE(1:5).ne.'MS0X=') then ! old no_header file +! backspace (NRFU) +! else +! read (title(6:80),*) iMs0X +! endif +! END IF + ALLOCATE (UV_SSI(iMS0X,190),TSI1(iMS0X),TSI2(iMS0X)) + UV_SSI(:,:) = TRANSPOSE(SSI_IN(N_BIN-189:N_BIN,:)) + TSI1(:) = TSI_IN(:) + TSI2(:) = TSI_IN(:) + yr1S0 = calyear(1) + yr2S0 = calyear(iMS0X) + DEALLOCATE (WS_IN,DS_IN,SSI_IN,TSI_IN,calyear) +! IF(KSOLAR < 2) THEN +!**** Read in monthly-mean data +! DO I=1,iMs0X +! READ(NRFU,'(2I6,3F17.6)') IYEAR,IMONTH,TSI1(I),TSI2(I) +! READ(NRFU,'(5E14.6)') FSLEAN ! 1:190 +! SFNORM = TSI1(I) / SUM(FSLEAN(:)*DSLEAN(:)) +! UVLEAN(I,:)=FSLEAN(:)*SFNORM +! END DO +! ELSE +!**** Read in annual-mean data +! DO I=1,iMs0X +! IF(KSOLAR.ne.9) THEN +! READ(NRFU,'(F12.1,2F15.4)',end=908) yr2S0,TSI1(I),TSI2(I) +! ELSE +! READ(NRFU,'(I6,2F17.6)',end=908) yr2S0i,TSI1(I),TSI2(I) +! yr2S0=real(yr2S0i)+0.5 +! END IF +! if(I==1) yr1S0 = yr2S0 +! IF(KSOLAR.ne.9) THEN +! READ(NRFU,'(5E14.6)') FSLEAN ! 1:190 +! SFNORM=TSI1(I) / SUM(FSLEAN(:)*DSLEAN(:)) +! UVLEAN(I,:)=FSLEAN(:)*SFNORM +! ELSE ! ksolar=9 +! READ(NRFU,'(5E14.6)') (UVLEAN(I,K),K=1,190) +! ENDIF +! END DO + IF ( AM_I_ROOT() ) WRITE (6,*) 'read S0-history: ', yr1S0, & + &' - ', yr2S0 + ENDIF +! END IF + + +!----------------------------------------------------------------------- +!R(C) Read: Elaine Mathews 10 Fractional Vegetation Distributions +! 10 global maps (72x46) depict fractional vegetation/soil types +! Map-1 (bright sand) + Map-10 (black dirt) define desert albedo +! (sum of Maps 1-10 over land-area (ILON,JLAT) grid boxes = 1.0) +! +! Map-11 refers to plankton concentrations over ocean areas that +! are yet to be implemented. +! -------------------------------------------------------------- + + + + + +!----------------------------------------------------------------------- +!R(D) Read: 1 FOCEAN 72x46 ocean fraction (FOCEAN = 0 or 1) +! 2 FLAKE 72x46 lake fraction +! 3 FGRND 72x46 lake fraction +! 4 FGICE 72x46 glacial ice fraction +! (FLAKE + FGRND + FGICE + FOCEAN = 1.000) +! +! 5 ZATMO 72x46 topography (ocean = 0.0) +! 6 HOCEAN 72x46 ocean depth +! 7 HLAKE 72x46 lake depth +! 8 HGICE 72x46 glice depth +! 9 ZSOLID 72x46 topography of solid ground surface +! ----------------------------------------------------- +! +! FOLGIZ is for off-line use only, and is not used in GCM radiation. +! GCM supplies dynamically changing POCEAN,POICE,PEARTH,PLICE values +! ------------------------------------------------------------------ + + + + + 949 IFIRST = 0 + ENDIF + + +! --------------------------------------------------------------- +! LASTVC Initialize: Default Atmospheric Layering, Structure +! (for Off-Line use) as Specified by LASTVC Parameter +! If LASTVC < 0, GCM defines all Radiation Model Input +! otherwise: +! Each LASTVC digit(6) specifies a model configuration +! e.g.: LASTVC= 123456 +! L=0,1,..9 Layers NL= Any,GCM12,GCM23,Pset,Hset,etc +! A=0,1,..6 Atmosphere Any,Trop,MLS,MLW,SAS,SAW,Std +! S=0,1,..9 Surf Types POCEAN=1,PEARTH=1,POICE=1,etc +! T=0,1,..9 Tracer Aer Tau=0, Tau=0.1 Aer Comp(1-9) +! V=0,1,..9 Vegetation Sand,Tundra,Grass,Shrubs, etc +! C=0,1,..9 Cloud,R=10 Clim Cloud Tau in Layer(1,-9) +! ---------------------------------------------------- + + IF ( LASTVC>=0 ) CALL SETATM + +! ------------------------------------------------------- +! Set Solar Constant for Default Reference Time: Jan 1950 +! Default used for KSOLAR(=1) is that specified in RADPAR +! ------------------------------------------------------- + + JJDAYS = 1 + JYEARS = 1950 + IF ( KJDAYS>0 ) JJDAYS = KJDAYS + IF ( KYEARS>0 ) JYEARS = KYEARS +!---------------------------------------------- + CALL SETSOL(JYEARS,JJDAYS) +!---------------------------------------------- + + +! ------------------------------------------------------- +! Set Default Greenhouse Gas Reference Year to: Mid 1980 +! Default used for KTREND(=1) is that specified in RADPAR +! ------------------------------------------------------- + + JJDAYG = 184 + JYEARG = 1980 +!---------------------------------------------- + CALL SETGHG(JYEARG,JJDAYG) +!---------------------------------------------- + IF ( KJDAYG>0 ) JJDAYG = KJDAYG + IF ( KYEARG>0 ) JYEARG = KYEARG +!---------------------------------------------- + CALL UPDGHG(JYEARG,JJDAYG) +!---------------------------------------------- + +!-------------------------------- + CALL SETGAS +! + CALL SETBAK + IF ( MADAER>0 .OR. NTRACE>0 ) CALL SETAER + ! SETDST ops deferred to first call to GETDST once dust info known + !IF(MADDST > 0) CALL SETDST +!-------------------------------- + + +! ----------------------------------------------------- +! Set Volcanic Aerosol Effective Variance Default Value +! Particle Size(REFF0=0.3) when not known from data +! (VEFF0=0.35 is value based on thermal ISAMS data) +! ------------------------------------------------- + +!---------------------------------------------- + IF ( MADVOL>0 ) CALL SETVOL +!---------------------------------------------- + +!-------------------------------- + CALL SETCLD + +!-------------------------------- + + CALL SOLAR0 + 3000 FORMAT (A80) + 3001 FORMAT (18X,6(F7.5,1X)) + 3002 FORMAT (18X,6(F7.5,1X)/18X,6(F7.5,1X)) + 3003 FORMAT (18X,6(F7.3,1X)/18X,5(F7.3,1X)) + 3004 FORMAT (14X,7(F7.5,1X),4(/14X,7(F7.5,1X))) + 3005 FORMAT (/14X,7(F7.5,1X),4(/14X,7(F7.5,1X))) + 3007 FORMAT (18X,6(F7.3,1X)/18X,6(F7.3,1X)/18X,6(F7.3,1X)) + 3008 FORMAT (18X,5(F7.5,1X),4(/18X,5(F7.5,1X))) + 3009 FORMAT (18X,12(F3.1,1X)/18X,12(F3.1,1X)/18X,F3.0) + 3010 FORMAT (18X,12(F3.1,1X)/18X,12(F3.1,1X)/18X,F3.1) + 3012 FORMAT (18X,12(F3.1,1X)/18X,8(F3.1,1X)) + 3013 FORMAT (18X,5(F7.3,1X),4(/18X,5(F7.3,1X))) + + END SUBROUTINE RCOMP1 + + SUBROUTINE RCOMPT + USE SURF_ALBEDO, ONLY:UPDSUR + USE AERPARAM_MOD, ONLY:UPDATEAEROSOL, UPDATEAEROSOL2 + USE DUSTPARAM_MOD, ONLY:UPDDST2 + USE O3MOD, ONLY:UPDO3D, UPDO3D_SOLAR, plbo3, nlo3 +#ifdef HIGH_FREQUENCY_O3_INPUT + USE O3MOD, ONLY:UPDO3D_HIGHFREQUENCY +#endif + IMPLICIT NONE +!----------------------------------------------------------------------- +! +! Time Trend Selection Parameters and Options: +! ------------------------------------------- +! +! The Nominal Default Values are KYEARX = 0, and KJDAYX = 0, +! in which case RADPAR supplied Time JYEAR and JDAY are used +! +! When Non-Zero Values are specified for KYEARX and KJDAYX, +! the JYEAR,JDAY Time Dependence of the Specified Process is +! over-ridden by the Non-Zero KYEARX and KJDAYX Value. +! ---------------------------------------------------------- +! Process KYEARX KJDAYX +! KYEARS,KJDAYS SolarCon, UV 0 0 +! KYEARG,KJDAYG GH Gas Trend 0 0 +! KYEARO,KJDAYO Ozone Distr 0 0 +! KYEARA,KJDAYA AerClimtolgy 0 0 +! KYEARD,KJDAYD Desert Dust 0 0 +! KYEARV,KJDAYV Volcanic Aer 0 0 +! KYEARE,KJDAYE Epsilon Clds 0 0 +! KYEARR,KJDAYR Refl Surface 0 0 + +! ------------------------------------------------------------------ +! MADVEL Model Add-on Data of Extended Climatology Enable Parameter +! Each MADVEL digit is ON/OFF switch for corresponding input +! e.g. MADVEL=123456 (zero digit skips input process) +! +! MADAER = 2 Updates Aerosol 50y tropospheric climatology RFILE5 +! MADDST = 3 Updates Dust-windblown mineral climatology RFILE6 +! MADVOL = 4 Updates Volcanic 1950-00 aerosol climatology RFILE7 +! MADEPS = 5 Updates Epsilon cloud heterogeneity data RFILE8 +! MADLUV = 6 Updates Lean format Spectral Solar Irrad. RFILE9 +! +! Related Model Add-on Data Parameters set in RADPAR +! +! MADGHG = 1 Default Enables UPDGHG update. (MADGHG=0),no update +! MADSUR = 1 V72X46N.1.cor Vegetation type data RFILEC +! Z72X46N Ocean fraction, topography RFILED +! ------------------------------------------------------------------ + INTEGER JJDAYS, JYEARS, JJDAYG, JYEARG, JJDAYO, JYEARO, JJDAYA, & + JYEARA, JJDAYD, JYEARD, JJDAYV, JYEARV, JJDAYE, JYEARE, & + JJDAYR, JYEARR + +! ------------------------------------------------- +! Set Seasonal and Time (JDAY) Dependent Quantities +! ------------------------------------------------- + + JJDAYS = JDAY + JYEARS = JYEAR + IF ( KJDAYS>0 ) JJDAYS = KJDAYS + IF ( KYEARS>0 ) JYEARS = KYEARS +!---------------------------------------------- + IF ( MADLUV>0 ) CALL UPDSOL(JYEARS,JJDAYS) +!---------------------------------------------- + + JJDAYG = JDAY + JYEARG = JYEAR + IF ( KJDAYG>0 ) JJDAYG = KJDAYG + IF ( KYEARG>0 ) JYEARG = KYEARG +!---------------------------------------------- + IF ( MADGHG>0 ) CALL UPDGHG(JYEARG,JJDAYG) +!---------------------------------------------- + + JJDAYO = JDAY + JYEARO = JYEAR + IF ( KJDAYO/=0 ) JJDAYO = KJDAYO + IF ( KYEARO/=0 ) JYEARO = KYEARO +!---------------------------------------------- + CALL UPDO3D(JYEARO,JJDAYO,O3JDAY,O3JREF) +#ifdef HIGH_FREQUENCY_O3_INPUT + CALL UPDO3D_HIGHFREQUENCY(JYEARO,JJDAYO,O3JDAY_HF_modelLevels) +#endif + CALL UPDO3D_SOLAR(JJDAYO,S00WM2*RATLS0,O3JDAY) +!---------------------------------------------- + + JJDAYA = JDAY + JYEARA = JYEAR + IF ( KJDAYA>0 ) JJDAYA = KJDAYA + IF ( KYEARA/=0 ) JYEARA = KYEARA +!---------------------------------------------- + IF ( MADAER==3 ) THEN + CALL UPDATEAEROSOL2(JYEARA,JJDAYA,a6jday,plbaer) + ELSEIF ( MADAER/=0 ) THEN + CALL UPDATEAEROSOL(JYEARA,JJDAYA,a6jday,plbaer) + ENDIF +!---------------------------------------------- + + JJDAYD = JDAY + JYEARD = JYEAR + IF ( KJDAYD>0 ) JJDAYD = KJDAYD + IF ( KYEARD/=0 ) JYEARD = KYEARD +!---------------------------------------------- + IF ( MADDST>0 ) CALL UPDDST2(JYEARD,JJDAYD) +!---------------------------------------------- + + JJDAYV = JDAY + JYEARV = JYEAR + IF ( KJDAYV>0 ) JJDAYV = KJDAYV + IF ( KYEARV/=0 ) JYEARV = KYEARV +!---------------------------------------------- + IF ( MADVOL>0 ) CALL UPDVOL(JYEARV,JJDAYV) +!---------------------------------------------- + + JJDAYE = JDAY + JYEARE = JYEAR + IF ( KJDAYE>0 ) JJDAYE = KJDAYE + IF ( KYEARE>0 ) JYEARE = KYEARE +!---------------------------------------------- + IF ( MADEPS>0 ) CALL UPDEPS(JYEARE,JJDAYE) +!---------------------------------------------- + + JJDAYR = JDAY + JYEARR = JYEAR + IF ( KJDAYR>0 ) JJDAYR = KJDAYR + IF ( KYEARR>0 ) JYEARR = KYEARR +!---------------------------------------------- + CALL UPDSUR(JYEARR,JJDAYR) +!---------------------------------------------- + + END SUBROUTINE RCOMPT + + SUBROUTINE RCOMPX + USE SURF_ALBEDO, ONLY:GETSUR + USE O3MOD, ONLY:plbo3, nlo3, plbo3_traditional, NLO3_TRADITIONAL +#ifdef GCAP + USE O3MOD, ONLY:save_to3 +#endif +#ifdef SCM + USE SCM_COM, ONLY:SCMopt, SCMin +#endif + IMPLICIT NONE + INTEGER k +! ------------------------------------------------------------------ +! MADVEL Model Add-on Data of Extended Climatology Enable Parameter +! Each MADVEL digit is ON/OFF switch for corresponding input +! e.g. MADVEL=123456 (zero digit skips process) +! +! MADO3M = 1 Makiko 1951-1997 Ozone climatology RFILEA +! MADAER = 2 Updates Aerosol 50y tropospheric climatology RFILE5 +! MADDST = 3 Updates Dust-windblown mineral climatology RFILE6 +! MADVOL = 4 Updates Volcanic 1950-00 aerosol climatology RFILE7 +! MADEPS = 5 Epsilon cloud heterogeneity data RFILE8 +! MADLUV = 6 Lean format Spectral Solar Irrad. RFILE9 +! +! Related Model Add-on Data Parameters set in RADPAR +! +! MADGHG = 1 Default Enables UPDGHG update. (MADGHG=0),no update +! MADSUR = 1 V72X46N.1.cor Vegetation type data RFILEC +! Z72X46N Ocean fraction, topography RFILED +! ------------------------------------------------------------------ +! +! ----------------------------------------------------------------- +! Get Surface, Atmosphere, Sun Angle, Radiative Forcing, etc. Input +! to compute Solar/Thermal Radiation for given (JLAT,ILON) Grid-box +! +! The Radiation Model utilizes Data with 72x46 (lon,lat) resolution +! for GCM resolution other than 72x46, set JLAT and ILON +! to appropriately Sample (rather than interpolate) the +! 72x46 aerosol, ozone, cloud heterogeneity data sets +! +! The Radiation Model can accommodate arbitrary vertical resolution +! ----------------------------------------------------------------- + + +!-------------------------------- + IF ( set_gases_internally ) THEN +!!! CALL GETO3D(ILON,JLAT) ! may have to be changed ?? + IF ( use_o3_ref>0 ) THEN + ! in + CALL REPART(O3JREF(1,IGCM,JGCM),PLBO3_traditional, & + NLO3_TRADITIONAL+1,U0GAS(1,3),PLB0,NL+1) + ! out, ok if L1>1 ? + ! next block may seem weird but it is here to allow RCOMPX calls with + ! reference ozone in part of the atmosphere and tracer below: + IF ( use_tracer_chem(1)>0 ) U0GAS(1:use_tracer_chem(1),3) & + = chem_IN(1,1:use_tracer_chem(1)) + FULGAS(3) = 1.D0 + ELSE + ! in + CALL REPART(O3JDAY(1,IGCM,JGCM),PLBO3,NLO3+1,U0GAS(1,3), & + PLB0,NL+1) ! out, ok if L1>1 ? +#ifdef HIGH_FREQUENCY_O3_INPUT + ! Overwrite the lm_gcm levels with higher frequency ozone, leaving + ! climatology above those levels: + U0GAS(1:LM_GCM,3) = O3JDAY_HF_modelLevels(1:LM_GCM,IGCM, & + JGCM) + FULGAS(3) = 1.D0 +#endif +#ifdef SCM + IF ( SCMopt%OZONE ) THEN + ! Overwrite specified SCM levels (indicated by non-zero values), + ! leaving climatology above those levels: + DO k = 1, LM_GCM + IF ( SCMin%O3(k)>0. ) U0GAS(k,3) = SCMin%O3(k) + ENDDO + FULGAS(3) = 1.D0 + ENDIF +#endif + ! considering this move to here from setgas: + ! chem_out(:,1)=U0GAS(:,3)*FULGAS(3) ! save climatology O3 for chem + ! and might then need something like: + ! IF(KPFOZO==1)chem_out(1:NL0,1)=chem_out(1:NL0,1)*FPXOZO(1:NL0) + IF ( use_tracer_chem(1)>0 ) THEN + U0GAS(1:use_tracer_chem(1),3) & + = chem_IN(1,1:use_tracer_chem(1)) + FULGAS(3) = 1.D0 + ENDIF + ENDIF + CALL GETGAS + ELSE + CALL TAUGAS + ENDIF +!-------------------------------- + +#ifdef GCAP + ! Save DU of ozone used in calculation + save_to3(igcm,jgcm) = SUM(u0gas(:,3))*1000.0 +#endif + +!-------------------------------- + IF ( set_aerosols_internally ) THEN + SRBEXT = 1.D-20 + SRBSCT = 0. + SRBGCB = 0. + TRBALK = 0. + IF ( MADBAK>0 ) CALL GETBAK + + IF ( MADAER/=0 .OR. NTRACE>0 ) THEN + CALL GETAER + ELSE + SRAEXT = 0. + SRASCT = 0. + SRAGCB = 0. + TRAALK = 0. + ENDIF + IF ( MADDST>0 ) THEN + CALL GETDST + ELSE + SRDEXT = 0. + SRDSCT = 0. + SRDGCB = 0. + TRDALK = 0. + ENDIF + IF ( MADVOL>0 ) THEN + CALL GETVOL + ELSE + SRVEXT = 0. + SRVSCT = 0. + SRVGCB = 0. + TRVALK = 0. + ENDIF + chem_out(:,2) = SRVEXT(:,6) + ! save 3D aerosol extinction in SUB RADIA + ENDIF +!-------------------------------- + + +!-------------------------------- (GETSUR sets albedo needed by GETCLD) + CALL GETSUR(snoage_fac_max,MLAT46,JNORTH,KEEPAL,KSIALB,KZSNOW, & + MADSUR,COSZ,PLANCK,PLANCK_TMIN,PLANCK_TMAX,ILON,JLAT, & + AGESN,POCEAN,POICE,PEARTH,PLICE,PLAKE,zlake,TGO,TGOI, & + TGE,TGLI,ZOICE,FMP,ZSNWOI,zmp,SNOWOI,SNOWD,SNOWLI, & + SNOW_FRAC,WEARTH,WMAG,PVT,dalbsn,flags,LOC_CHL,BXA, & + PRNB,PRNX,SRBALB,SRXALB,TRGALB,BGFEMD,BGFEMT,DTRUFG, & + FTRUFG) + CALL GETEPS + CALL GETCLD +!-------------------------------- + +!-------------------------------- + CALL THERML + + CALL SOLARM +!-------------------------------- + END SUBROUTINE RCOMPX + + + SUBROUTINE UPDSOL(JYEARS,JJDAYS) + INTEGER, INTENT(IN) :: JYEARS, JJDAYS + CALL SETSOL(JYEARS,JJDAYS,1) + END SUBROUTINE UPDSOL + + SUBROUTINE SETSOL(JYEARS,JJDAYS,UPDSOL_flag) + IMPLICIT NONE +!----------------------------------------------------------------------- +! +! SETSOL Parameters: +!---------------------- +! KSOLAR Selects Solar Spectrum, (Lean vs Thekaekara Flux) +! JYEARS JYEAR Proxy: Sets: Solar Constant Reference Year +! JJDAYS JDAY Proxy: Sets Reference Year Month JDAY/30.5 +! (Nominal Reference: JYEARS= 1950 JJDAYS= January) +! +!----------------------------------------------------------------------- +! KSOLAR SOLSPEC UVWAVLs UVFACTs KUVFAC +!----------------------------------------------------------------------- +! -1 THEK Can be set Can be set (if KUVFAC=1) +!----------------------------------------------------------------------- +! 0 SSI Can be set Can be set (if KUVFAC=1) +!----------------------------------------------------------------------- +! 1 SSI Can be set Can be set (if KUVFAC=1) +!----------------------------------------------------------------------- +! +! (Option to Modify Solar UV Fluxes) +! UVWAVL Specified Edges of UV Flux Variation SubIntervals +! UVFACT Factors to Change the Amplitude of UV Variability +! +! KUVFAC ON/OFF switch for activating UV Flux Modification +! KSNORM Re-Normalize S0 (VIS) (after UV Amplitude Change) +! (Nominal UVWAVLs are: 0.295,0.310,0.366) +! +!----------------------------------------------------------------------- +! SETSOL Output: +!------------------ +! +! AO3 = Ozone Absorption Table AO3(460) +! (Solar UV Flux Weighted Absorption Table is used by the +! FUNCTION AO3ABS(OCM) in SOLAR to compute Ozone Heating) +! AO3 is the fraction of total Solar Flux absorbed by O3. +! +! S00WM2 = Solar Constant Reference Value for Time = JYEARS,JJDAYS +! (Thekaekara, if KSOLAR=-1, Reference = 1367 WATTS/M**2) +! +! +! SETSOL is Generally Called once at Model Initialization to Select +! Solar Flux (SSI,THEK), and to Define S00WM2 (RATLS0=1) +! +!----------------------------------------------------------------------- +! NOTE: +!----- +! S00WM2 = Nominal Reference Solar Constant 1366.448785D0 WATTS/M**2 +! (Spectral Integral: Lean99 Solar Flux for January 1950) +! +! KSOLAR=-1 Reproduces Thekaekhara Ozone Absorption, e.g., XRAD83XX +! KSOLAR= 0 Uses Lean99 Solar Flux as set for Time= (JYEARS,JJDAYS) +! KSOLAR= 1 Sets Lean99 Solar Flux to Current Time= (JYEARS,JJDAYS) +! KSOLAR= 2 same as 1 but based on annual (not monthly) data +! (JJDAYS used to select the specified Monthly-Mean Flux) +! KSOLAR= 9 annual data for current time from file, but Thekaekhara +! wavelength bins +! +!----------------------------------------------------------------------- +! +! UPDSOL Parameters: +!---------------------- +! JYEARS JYEAR Proxy: Selects Solar Constant Current Year +! JJDAYS JDAY Proxy: Selects Lean Data Month JJDAYS/30.5 +! +! UPDSOL Output: +!------------------ +! +! AO3 = Ozone Absorption Table AO3(460) +! (Solar UV Flux Weighted Absorption Table is used by the +! FUNCTION AO3ABS(OCM) in SOLAR to compute Ozone Heating) +! AO3 is the fraction of total Solar Flux absorbed by O3. +! +! RATLS0 = Ratio: Current-Time Solar Constant to Reference S00WM2 +! +!----------------------------------------------------------------------- +! Remark: +! +! UPDSOL is Called in RCOMPT to Update Solar Constant and Ozone AO3 +! Solar UV Absorption Dependence. (Monthly-Mean Data are +! NOT Interpolated in Time, but get Updated with Changing +! Month, i.e., whenever JDAY/30.5 Reaches Integer Value.) +! +!----------------------------------------------------------------------- + REAL*8, PARAMETER :: CORFAC = 1366.2911D0/1366.4487855D0 + INTEGER, INTENT(IN) :: JYEARS, JJDAYS + INTEGER, INTENT(IN), OPTIONAL :: UPDSOL_flag + INTEGER, SAVE :: LMOREF = 0 + INTEGER JMO, LMO, Is0x, K, I, NWSUV, II, J, NUV, icyc + REAL*8 FLXSUM, FFLUX(3), UVNORM, XX, OCM, TAUK, UVWAVA, UVWAVB, & + AO33 + + IF ( PRESENT(UPDSOL_flag) ) THEN + +!-------------------------------- +! ENTRY UPDSOL(JYEARS,JJDAYS) +!-------------------------------- + + IF ( KSOLAR<1 ) RETURN + ! solar constant not time dependent + IF ( JYEARS<1 ) RETURN + ! solar constant not time dependent + + IF ( jyears>2000 ) THEN + icyc = ICYCS0F + ELSE + icyc = ICYCS0 + ENDIF + IF ( Ksolar==1 ) THEN + ! monthly data + icyc = icyc*12 + JMO = 1 + JJDAYS/30.5D0 + IF ( JMO>12 ) JMO = 12 + LMO = (JYEARS-IY1S0)*12 + JMO + IF ( LMO>iMs0X ) LMO = LMO - icyc*((LMO-iMs0X+icyc-1)/icyc) + IF ( LMO<1 ) LMO = LMO + icyc*((icyc-lmo)/icyc) + ELSE ! annual data ksolar=2,9 + Is0x = NINT(yr2s0-yr1s0+1) + lmo = NINT(jyears-yr1s0+1.5) + IF ( LMO>Is0X ) LMO = LMO - icyc*((LMO-Is0X+icyc-1)/icyc) + IF ( LMO<1 ) LMO = LMO + icyc*((icyc-lmo)/icyc) + ENDIF + + IF ( LMO==LMOREF ) RETURN + ! solar constant up-to-date + LMOREF = LMO + +! Select Lean99 Solar Flux +! ------------------------ + IF ( KSOLAR/=9 ) THEN + FLXSUM = SUM(UV_SSI(LMO,1:190)*DS_SSI(1:190)) + ELSE + FLXSUM = TSI2(LMO) + ENDIF +! write(6,*) 'UPDSOLAR::FLXSUM::',FLXSUM + + IF ( KSOLAR/=9 ) THEN + I = 0 + DO K = 1, 50 + I = I + 1 + WSOLAR(I) = W1_SSI(K) + FSOLAR(I) = UV_SSI(LMO,K) + I = I + 1 + WSOLAR(I) = W1_SSI(K+1) + FSOLAR(I) = FSOLAR(I-1) + ENDDO + NWSUV = 100 + ELSE +! Select Thekaekhara Solar Flux +! ----------------------------- + WSOLAR(1:190) = WTHEK(1:190) + FSOLAR(1:190) = UV_SSI(LMO,1:190) + NWSUV = 190 + ENDIF +! Option to Modify Solar UV Flux +! ------------------------------ + IF ( KUVFAC==1 ) THEN + FFLUX(:) = 0.D0 + NUV = 1 + DO I = 1, NWSUV, 2 ! by twos to account for histogram + DO WHILE ( WSOLAR(I+1)>UVWAVL(NUV) ) + NUV = NUV + 1 + IF ( NUV>3 ) GOTO 20 + ENDDO + FFLUX(NUV) = FFLUX(NUV) + FSOLAR(I) & + *(WSOLAR(I+1)-WSOLAR(I)) + FSOLAR(I:I+1) = FSOLAR(I:I+1)*UVFACT(NUV) + ENDDO + 20 UVNORM = SUM(FFLUX(:)*(1D0-UVFACT(:))) + IF ( MADLUV==0 ) UVNORM = UVNORM*CORFAC + IF ( KSNORM==0 ) FLXSUM = FLXSUM - UVNORM + ENDIF + + RATLS0 = FLXSUM/S00WM2 + + DO I = 1, 460 + II = (I-10)/90 - 4 + XX = I - ((I-10)/90)*90 + OCM = XX*10.D0**II + DO J = 1, 226 + TAUK = FUVKO3(J)*OCM + IF ( TAUK>35.D0 ) TAUK = 35.D0 + UVA(J) = 1.D0 - EXP(-TAUK) + ENDDO + UVWAVA = 0.100D0 + UVWAVB = 0.400D0 + CALL FXGINT(UVA,XWAVO3,226,FSOLAR,WSOLAR,NWSUV,UVWAVA, & + UVWAVB,AO33) + AO3(I) = AO33/FLXSUM + ENDDO + GOTO 99999 + ELSE + +! Thekaekhara Solar Flux Option +! ----------------------------- + IF ( KSOLAR<0 ) THEN + WSOLAR(1:190) = WTHEK(1:190) + FSOLAR(1:190) = FTHEK(1:190) + S00WM2 = 1367.D0 + LMOREF = -111 + NWSUV = 190 + GOTO 130 + ENDIF +! Lean99 Solar Flux, UV Option +! ---------------------------- + IF ( jyears>2000 ) THEN + icyc = ICYCS0F + ELSE + icyc = ICYCS0 + ENDIF + IF ( Ksolar<2 ) THEN + ! monthly data + icyc = icyc*12 + JMO = 1 + JJDAYS/30.5D0 + IF ( JMO>12 ) JMO = 12 + LMO = (JYEARS-IY1S0)*12 + JMO + IF ( LMO>iMs0X ) LMO = LMO - icyc*((LMO-iMs0X+icyc-1)/icyc) + IF ( LMO<1 ) LMO = LMO + icyc*((icyc-lmo)/icyc) + ELSE ! annual data + Is0x = NINT(yr2s0-yr1s0+1) + lmo = NINT(jyears-yr1s0+1.5) + IF ( LMO>Is0X ) LMO = LMO - icyc*((LMO-Is0X+icyc-1)/icyc) + IF ( LMO<1 ) LMO = LMO + icyc*((icyc-lmo)/icyc) + ENDIF + LMOREF = LMO + +! IF(MADLUV==0) Default Option is then in force +! Default (FR_SSI) = Lean 1950 Jan Solar, UV flux +! CORFAC accounts for DS_SSI units in BLOCK DATA, +! and TSI1/TSI2 normalization of Lean input data. +! ----------------------------------------------- + +! CORFAC=1366.2911D0/1366.4487855D0 + IF ( KSOLAR/=9 ) THEN + IF ( MADLUV==0 ) S00WM2 = SUM(FR_SSI(:)*DS_SSI(:)*CORFAC) + IF ( MADLUV>0 ) S00WM2 = SUM(UV_SSI(LMO,:)*DS_SSI(:)) + ELSE + S00WM2 = TSI2(LMO) + ENDIF + + IF ( KSOLAR/=9 ) THEN + I = 0 + DO K = 1, 50 + I = I + 1 + WSOLAR(I) = W1_SSI(K) + IF ( MADLUV==0 ) FSOLAR(I) = FR_SSI(K) + IF ( MADLUV>0 ) FSOLAR(I) = UV_SSI(LMO,K) + I = I + 1 + WSOLAR(I) = W1_SSI(K+1) + FSOLAR(I) = FSOLAR(I-1) + ENDDO + NWSUV = 100 + ELSE + IF ( MADLUV==0 ) & + CALL STOP_MODEL("invalid MADLUV for KSOLAR=9",255) + WSOLAR(1:190) = WTHEK(1:190) + FSOLAR(1:190) = UV_SSI(LMO,1:190) + NWSUV = 190 + ENDIF + ENDIF + +! Option to Modify Solar UV Flux +! ------------------------------ + 130 IF ( KUVFAC==1 ) THEN + FFLUX(:) = 0.D0 + NUV = 1 + DO I = 1, NWSUV, 2 ! by twos to account for histogram + DO WHILE ( WSOLAR(I+1)>UVWAVL(NUV) ) + NUV = NUV + 1 + IF ( NUV>3 ) GOTO 50 + ENDDO + FFLUX(NUV) = FFLUX(NUV) + FSOLAR(I)*(WSOLAR(I+1)-WSOLAR(I)) + FSOLAR(I:I+1) = FSOLAR(I:I+1)*UVFACT(NUV) + ENDDO + 50 UVNORM = SUM(FFLUX(:)*(1D0-UVFACT(:))) + IF ( MADLUV==0 ) UVNORM = UVNORM*CORFAC + IF ( KSNORM==0 ) S00WM2 = S00WM2 - UVNORM + ENDIF +! ----------------------------------------------------- +! When KUVFAC=1 option multiplicative factors UVFACT(I) +! are used to change the UV spectral flux distribution, +! KSNORM=1 provides the option to keep S00WM2 constant. +! ----------------------------------------------------- + + RATLS0 = 1.D0 + + DO I = 1, 460 + II = (I-10)/90 - 4 + XX = I - ((I-10)/90)*90 + OCM = XX*10.D0**II + DO J = 1, 226 + TAUK = FUVKO3(J)*OCM + IF ( TAUK>35.D0 ) TAUK = 35.D0 + UVA(J) = 1.D0 - EXP(-TAUK) + ENDDO + UVWAVA = 0.100D0 + UVWAVB = 0.400D0 + CALL FXGINT(UVA,XWAVO3,226,FSOLAR,WSOLAR,NWSUV,UVWAVA,UVWAVB, & + AO33) + AO3(I) = AO33/S00WM2 + ENDDO + +! ------------------------------------------------ +! NOTE: AO3 is the Ozone-path Absorption Function +! AO3 convolves O3 asborption with solar UV +! spectral variations by FXGINT integration +! AO3 is expressed as the absorbed fraction +! of the total solar flux (S00WM2=1366W/m2) +! ----------------------------------------- + + RETURN + +99999 END SUBROUTINE SETSOL + + + SUBROUTINE SETGHG(JYEARG,JJDAYG) + IMPLICIT NONE +! +! +! --------------------------------------------------------------- +! SETGHG Sets Default Greenhouse Gas Reference Year (for FULGAS) +! +! Control Parameter: +! KTREND (specified in RADPAR) activates GH Trend +! Default +! KTREND = 1 +! Selects GTREND +! --------------------------------------------------------------- + INTEGER, INTENT(IN) :: JYEARG, JJDAYG + REAL*8 TREF + INTEGER I +! + TREF = JYEARG + (JJDAYG-0.999D0)/366.D0 +! + IF ( KTREND==0 ) THEN + XREF(1) = PPMV80(2) + XREF(2) = PPMV80(6) + XREF(3) = PPMV80(7) + XREF(4) = PPMV80(8)*1000.D0 + XREF(5) = PPMV80(9)*1000.D0 + XREF(6) = PPMV80(11)*1000.D0 + ! YREF11=PPMV80(11)*1000.D0 + XREF(7) = PPMV80(12)*1000.D0 + ! ZREF12=PPMV80(12)*1000.D0 + RETURN + ENDIF + + CALL GTREND(XREF,TREF) ! finds xref 1-6 (yref11=xx6=xref(6)) + XREF(7) = 1.D-13 ! ZREF12=1.D-13 + DO I = 1, NGHG + IF ( XREF(I)<1.D-06 ) XREF(I) = 1.D-06 + ENDDO + PPMV80(2) = XREF(1) + PPMV80(6) = XREF(2) + PPMV80(7) = XREF(3) + PPMV80(8) = XREF(4)/1000.D0 + PPMV80(9) = XREF(5)/1000.D0 + PPMV80(11) = XREF(6)/1000.D0 ! YREF11/1000.D0 + PPMV80(12) = XREF(7)/1000.D0 ! ZREF12/1000.D0 + END SUBROUTINE SETGHG +! +!-------------------------------- +! ENTRY UPDGHG(JYEARG,JJDAYG) +!-------------------------------- + SUBROUTINE UPDGHG(JYEARG,JJDAYG) + IMPLICIT NONE + INTEGER, INTENT(IN) :: JYEARG, JJDAYG + REAL*8 TNOW +! + TNOW = JYEARG + (JJDAYG-0.999D0)/366.D0 +! + IF ( KTREND==0 ) THEN + FULGAS(2) = PPMVK0(2)/XREF(1) + FULGAS(6) = PPMVK0(6)/XREF(2) + FULGAS(7) = PPMVK0(7)/XREF(3) + FULGAS(8) = PPMVK0(8)/XREF(4) + FULGAS(9) = PPMVK0(9)/XREF(5) + FULGAS(11) = PPMVK0(11)/XREF(6) + ! YREF11 + FULGAS(12) = PPMVK0(12)/XREF(7) + ! .../ZREF12 + RETURN + ENDIF + + CALL GTREND(XNOW,TNOW) ! finds xnow 1-6 (ynow11=xx6=xnow(6)) + XNOW(7) = 1.D-20 ! ZNOW12=1.D-20 + FULGAS(2) = XNOW(1)/XREF(1) + FULGAS(6) = XNOW(2)/XREF(2) + FULGAS(7) = XNOW(3)/XREF(3) + FULGAS(8) = XNOW(4)/XREF(4) + FULGAS(9) = XNOW(5)/XREF(5) + FULGAS(11) = XNOW(6)/XREF(6) + ! YNOW11/YREF11 + FULGAS(12) = XNOW(7)/XREF(7) + ! ZNOW12/ZREF12 +! + END SUBROUTINE UPDGHG + + SUBROUTINE GETGAS + CALL SETGAS(1) + END SUBROUTINE GETGAS + + SUBROUTINE SETGAS(GETGAS_flag) + IMPLICIT NONE +!----------------------------------------------------------------------- +! Global U.S. (1976) Standard Atmosphere P, T, Geo Ht Parameters +!----------------------------------------------------------------------- + INTEGER, OPTIONAL :: GETGAS_flag + REAL*8, PARAMETER :: P0 = 1013.25D0, PI = 3.141592653589793D0 + REAL*8, SAVE :: SINLAT(46) + INTEGER, SAVE :: IFIRST = 1, NL0 + INTEGER NLAY, NATM, L, J, K, N + REAL*8 RHP, EST, FWB, FWT, PLT, DP, EQ, ES, ACM, HI, FI, HL, HJ, & + FJ, DH, FF, GGVDF, ZT, ZB, EXPZT, EXPZB, PARTTR, PARTTG, & + PTRO, DL, DLS, DLN, Z0LAT, ULGASL, UGAS0(LX), UGASR(LX) + + IF ( PRESENT(GETGAS_flag) ) THEN + + +!----------------- +! ENTRY GETGAS +!----------------- +! --------------------------------------------- +! Specify ULGAS: Get Gas Absorption from TAUGAS +! --------------------------------------------- + +! ----------------------------------------------------- +! N20,CH4,F11,F12 Specified Latitudinal Z0 Distribution +! ----------------------------------------------------- + + IF ( KLATZ0>0 ) THEN + PTRO = 100.D0 + DL = DLAT46(JLAT) + DLS = -40.D0 + DLN = 40.D0 + IF ( DLDLN ) PTRO = 189.D0 + (DL-40.D0)*2.22D0 + DO L = 1, NL0 + IF ( PLB0(L)>=PTRO ) Z0LAT = HLB0(L) + ! orig. hlb not hlb0 + ENDDO + DO K = 6, 12 + IF ( K/=10 ) THEN + DO L = 1, NL0 + U0GAS(L,K) = PPMV80(K) & + *PPMV_TO_CM_AT_STP*(PLB0(L)-PLB0(L+1)) + IF ( PLB0(1)>=PTRO ) THEN + ! safety check until P,H hard-coding removed + ZT = (HLB0(L+1)-Z0LAT)/ZH(K) + ! orig. hlb not hlb0 + IF ( ZT>0.D0 ) THEN + ZB = (HLB0(L)-Z0LAT)/ZH(K) + ! orig. hlb not hlb0 + EXPZT = EXP(-ZT) + EXPZB = EXP(-ZB) + IF ( ZB<0.D0 ) EXPZB = 1.D0 - ZB + U0GAS(L,K) = U0GAS(L,K)*(EXPZB-EXPZT) & + /MAX(ZT-ZB,1D-6) + ENDIF + ENDIF ! safety check + ENDDO + ENDIF + ENDDO + ENDIF + + DO L = L1, NL + DPL(L) = PLB(L) - PLB(L+1) + PL(L) = (PLB(L)+PLB(L+1))*0.5D0 + ENDDO + + IF ( KEEPRH/=2 ) THEN ! keep RH,SH + IF ( KEEPRH==1 ) THEN ! find SH from RH + DO L = L1, NL + ES = 10.D0**(9.4051D0-2353.D0/TLM(L)) + SHL(L) = 0.622D0*(RHL(L)*ES) & + /(PL(L)-0.378D0*(RHL(L)*ES)) + ENDDO + ELSE + DO L = L1, NL ! find RH from SH + EQ = PL(L)*SHL(L)/(0.662D0+0.378D0*SHL(L)) + ES = 10.D0**(9.4051D0-2353.D0/TLM(L)) + RHL(L) = EQ/ES + ENDDO + ENDIF + ENDIF + + U0GAS(L1:NL,1) = H2O_MMR_TO_CM_AT_STP*DPL(L1:NL)*SHL(L1:NL) & + /(1-SHL(L1:NL)) +!c*** Adjust water vapor in ALL layers +!c ULGAS(L1:NL,1)=U0GAS(L1:NL,1)*FULGAS(1) +!**** Only adjust stratospheric levels (above LS1_loc) + ULGAS(L1:LS1_loc-1,1) = U0GAS(L1:LS1_loc-1,1) + ULGAS(LS1_loc:NL,1) = U0GAS(LS1_loc:NL,1)*FULGAS(1) +!**** + ULGAS(1:NL0,3) = U0GAS(1:NL0,3)*FULGAS(3) + IF ( KPFOZO==1 ) ULGAS(1:NL0,3) = ULGAS(1:NL0,3)*FPXOZO(1:NL0) + + DO L = L1, NL0 ! =L1,NL for GCM use, =1,NL0 for offline use + PARTTR = (PLB(L)-PLB(L+1))/(PLB0(L)-PLB0(L+1)) + DO K = 2, 12 + IF ( K/=3 ) THEN + PARTTG = PARTTR + IF ( KPGRAD>0 ) & + PARTTG = PARTTG*(1.D0+0.5D0*PPGRAD(K)*SINLAT & + (JLAT)) + ULGAS(L,K) = U0GAS(L,K)*FULGAS(K)*PARTTG + ENDIF + ENDDO + ULGAS(L,13) = U0GAS(L,13)*FULGAS(13) + ENDDO + + chem_out(:,4) = ULGAS(:,7) + ! climatological CH4 saved for chemistry + IF ( use_tracer_chem(2)>0 ) ULGAS(1:use_tracer_chem(2),7) & + = chem_IN(2,1:use_tracer_chem(2)) + ! allow use of tracer CH4. +#ifdef GCC_COUPLE_RAD + GCCco2_out(:) = ULGAS(:,2) + IF ( use_tracer_GCCco2>0 ) THEN + ULGAS(1:use_tracer_GCCco2,2) & + = GCCco2_IN(1:use_tracer_GCCco2) + ULGAS(use_tracer_GCCco2+1:NL,2) & + = GCCco2_IN(use_tracer_GCCco2) + ENDIF +#endif + + IF ( MRELAY>0 ) THEN ! for offline use only + IF ( NO3COL>0 ) ULGAS(1:NL0,3) = U0GAS(1:NL0,3) & + *RO3COL/SUM(U0GAS(1:NL0,3)) + ! rescale ozone to col.amount RO3COL + DO K = 2, 12 ! repartition to new layering + IF ( K/=10 .OR. KEEP10<=0 ) THEN + UGAS0(1:NL0) = ULGAS(1:NL0,K) + CALL REPART(UGAS0,PLB0,NL0+1,UGASR,PLB,NL+1) + ULGAS(1:NL,K) = UGASR(1:NL) + ENDIF + ENDDO + IF ( KEEP10>0 .AND. KEEP10<10 ) ULGAS(1:NL,KEEP10) & + = ULGAS(1:NL,10) + IF ( KEEP10>10 ) ULGAS(1:NL,KEEP10-10) & + = ULGAS(1:NL,KEEP10-10) + ULGAS(L,10) + ENDIF + + IF ( NL>40 ) THEN + IF ( kfpco2>=3 ) CALL GET_FPXCO2_105(FPXCO2(NL-38:NL),jlat, & + MLAT46,jday) + ENDIF + ULGAS(1:NL0,2) = ULGAS(1:NL0,2)*FPXCO2(1:NL0) + + chem_out(:,1) = ULGAS(:,3) + !O3 considering move to RCOMPX; see above +! chem_out(:,2)= _________ ! set in RCOMPX + chem_out(:,3) = ULGAS(:,6) ! N2O +! chem_out(:,4)=ULGAS(:,7) ! CH4 (moved above before tracer option) + chem_out(:,5) = ULGAS(:,8) + ULGAS(:,9) + ! CFC11(+) + CFC12(+) + ! output CO2 in mole CO2 per mole air: + CO2outCol(1:NL) = 1.D-6*ULGAS(1:NL,2) & + /(PPMV_TO_CM_AT_STP*DPL(1:NL)) + +!----------------- + CALL TAUGAS + ELSE + + IF ( IFIRST==1 ) THEN + SINLAT(:) = SIN(DLAT46(:)*PI/180.D0) + NL0 = NL + IFIRST = 0 + ENDIF +! ----------------------------------------------------- +! Use PLB to fix Standard Heights for Gas Distributions +! ----------------------------------------------------- + +!nu PS0=PLB0(1) + + DO L = 1, NL0 + DPL(L) = PLB0(L) - PLB0(L+1) + PL(L) = (PLB0(L)+PLB0(L+1))*0.5D0 +!nu HLB(L)=HLB0(L) + ENDDO +!nu HLB(NL0+1)=HLB0(NL0+1) +!cc CALL RETERP(UFAC36,P36,36,FPXCO2,PL,NL0) + CALL SET_FPXCO2(PL,FPXCO2,NL0,KFPCO2) +!c IUFAC=1 +!c IF(IUFAC==0) FPXCO2(:)=1 + + NLAY = LASTVC/100000 + NATM = (LASTVC-NLAY*100000)/10000 + IF ( NATM<=0 ) THEN + +! ---------------------------------------------------------------- +! Define Default Global Mean Gas Amounts for Off-Line Use Purposes +! +! IGAS=1 Global Mean H2O Distribution +! ---------------------------- + RHP = 0.77D0 + EST = 10.D0**(9.4051D0-2353.D0/TLB(1)) + FWB = 0.662D0*RHP*EST/(PLB0(1)-RHP*EST) + DO L = 1, NL0 + PLT = PLB0(L+1) + DP = PLB0(L) - PLT + RHP = 0.77D0*(PLT/P0-0.02D0)/.98D0 + EST = 10.D0**(9.4051D0-2353.D0/TLT(L)) + FWT = 0.662D0*RHP*EST/(PLT-RHP*EST) + IF ( FWT<=3.D-06 ) THEN + FWT = 3.D-06 + RHP = FWT*PLT/(EST*(FWT+0.662D0)) + ENDIF + ULGASL = 0.5D0*(FWB+FWT)*DP*H2O_MMR_TO_CM_AT_STP + U0GAS(L,1) = ULGASL + SHL(L) = ULGASL/(ULGASL+H2O_MMR_TO_CM_AT_STP*DP) + EQ = 0.5D0*(PLB0(L)+PLT)*SHL(L)/(0.662D0+0.378D0*SHL(L)) + ES = 10.D0**(9.4051D0-2353.D0/TLM(L)) + RHL(L) = EQ/ES + FWB = FWT + ENDDO + ENDIF + +! ---------------------------- +! IGAS=5 Global Mean NO2 Distribution +! ---------------------------- + ACM = 0.D0 + HI = 0.D0 + FI = CMANO2(1) + HL = HLB0(2) + L = 1 + J = 1 + DO + J = J + 1 + IF ( J>42 ) EXIT + HJ = HI + 2.D0 + FJ = CMANO2(J) + DO + DH = HJ - HI + IF ( HJ>HL ) THEN + FF = FI + (FJ-FI)*(HL-HI)/DH + DH = HL - HI + ACM = ACM + (FI+FJ)*DH*0.5D0 + U0GAS(L,5) = ACM + ACM = 0.D0 + HI = HL + FI = FF + IF ( L==NL0 ) GOTO 133 + L = L + 1 + HL = HLB0(L+1) + ELSE + ACM = ACM + (FI+FJ)*DH*0.5D0 + HI = HJ + FI = FJ + EXIT + ENDIF + ENDDO + ENDDO + 133 DO + U0GAS(L,5) = ACM + ACM = 0.D0 + L = L + 1 + IF ( L>=NL0+1 ) THEN +! ----------------------------------------- +! IGAS=2 and 4 (CO2,O2) Uniformly Mixed Gas Distribution +! ----------------------------------------- + DO K = 2, 4, 2 + U0GAS(1:NL0,K) = PPMV80(K) & + *PPMV_TO_CM_AT_STP*DPL(1:NL0) + ENDDO +! ----------------------------------------------------- +! IGAS=6-12 (N20,CH4,F11,F12) Specified Vertical Gas Distribution +! ----------------------------------------------------- + DO K = 6, 12 + IF ( K/=10 ) THEN + DO N = 1, NL0 + GGVDF = 1.D0 - (1.D0-PPMVDF(K)) & + *(1.D0-PLB0(N)/PLB0(1)) + IF ( KGGVDF<1 ) GGVDF = 1.D0 + U0GAS(N,K) = PPMV80(K)*PPMV_TO_CM_AT_STP*DPL(N) & + *GGVDF + ZT = (HLB0(N+1)-Z0(K))/ZH(K) + IF ( ZT>0.D0 ) THEN + ZB = (HLB0(N)-Z0(K))/ZH(K) + EXPZT = EXP(-ZT) + EXPZB = EXP(-ZB) + IF ( ZB<0.D0 ) EXPZB = 1.D0 - ZB + U0GAS(N,K) = U0GAS(N,K)*(EXPZB-EXPZT) & + /MAX(ZT-ZB,1D-6) + ENDIF + ENDDO + ENDIF + ENDDO +! -------------------------------------------- +! Specification of FULGAS Scaled Gas Amounts +! -------------------------------------------- + +!c*** Adjust water vapor in ALL layers ! IGAS=1 +!c ULGAS(1:NL0,1)=U0GAS(1:NL0,1)*FULGAS(1) +!**** Only adjust stratospheric levels (above LS1_loc) + ULGAS(1:LS1_loc-1,1) = U0GAS(1:LS1_loc-1,1) + ULGAS(LS1_loc:NL0,1) = U0GAS(LS1_loc:NL0,1)*FULGAS(1) +!**** + ULGAS(1:NL0,3) = U0GAS(1:NL0,3)*FULGAS(3) ! IGAS=3 + IF ( KPFOZO==1 ) ULGAS(1:NL0,3) = ULGAS(1:NL0,3) & + *FPXOZO(1:NL0) + + DO L = 1, NL0 ! IGAS=2,4-13 +!!! PARTTR = (PLB(L)-PLB(L+1)) / (PLB0(L)-PLB0(L+1)) ! PLB=PLB0 ?? + DO K = 2, 12 +!!! PARTTG=PARTTR ! next line not possible at this point (jlat=???) +!!! IF(KPGRAD > 0) PARTTG=PARTTG*(1.D0+0.5D0*PPGRAD(K)*SINLAT(JLAT)) + IF ( K/=3 ) ULGAS(L,K) = U0GAS(L,K)*FULGAS(K) + !!! *PARTTG + ENDDO + ENDDO + ULGAS(1:NL0,13) = U0GAS(1:NL0,13)*FULGAS(13) + + ULGAS(1:NL0,2) = ULGAS(1:NL0,2)*FPXCO2(1:NL0) + + RETURN + ENDIF + ENDDO + ENDIF +!----------------- + + END SUBROUTINE SETGAS + + + SUBROUTINE GETO2A + CALL SETO2A(1) + END SUBROUTINE GETO2A + + SUBROUTINE SETO2A(GETO2A_flag) + IMPLICIT NONE + INTEGER, OPTIONAL :: GETO2A_flag + + INTEGER, PARAMETER :: NW = 18, NZ = 11, NKO2 = 6 + + REAL*8, PARAMETER :: SFWM2(NW) & + = (/2.196E-3,0.817E-3,1.163E-3,1.331E-3, & + 1.735E-3,1.310E-3,1.311E-3,2.584E-3, & + 2.864E-3,4.162E-3,5.044E-3,6.922E-3, & + 6.906E-3,10.454E-3,5.710E-3,6.910E-3, & + 14.130E-3,18.080E-3/), SIGMA(NW,NKO2) & + = RESHAPE & + ((/2.74E-19,2.74E-19,2.74E-19,2.74E-19, & + 2.74E-19,2.74E-19,4.33E-21,4.89E-21, & + 6.63E-21,1.60E-20,7.20E-20,1.59E-18, & + 2.10E-21,2.32E-21,3.02E-21,6.30E-21, & + 3.46E-20,7.52E-19,5.95E-22,9.72E-22, & + 2.53E-21,7.57E-21,7.38E-20,7.44E-19, & + 3.33E-22,1.02E-22,4.09E-21,1.63E-20, & + 8.79E-20,3.81E-19,1.09E-21,1.16E-21, & + 1.45E-21,3.32E-21,2.00E-20,4.04E-19, & + 1.15E-21,1.30E-21,1.90E-21,4.89E-21, & + 2.62E-20,4.08E-19,3.90E-22,4.90E-22, & + 9.49E-22,3.33E-21,2.14E-20,2.39E-19, & + 1.29E-22,2.18E-22,8.28E-22,3.46E-21, & + 1.94E-20,1.06E-19,6.26E-23,7.80E-23, & + 2.62E-22,1.83E-21,1.25E-20,3.95E-20, & + 2.74E-23,3.58E-23,8.64E-23,4.03E-22, & + 2.13E-21,1.95E-20,1.95E-23,2.44E-23, & + 4.89E-23,2.87E-22,1.95E-21,1.36E-20, & + 1.84E-23,1.96E-23,2.71E-23,8.52E-23, & + 6.48E-22,3.89E-21,1.80E-23,1.81E-23, & + 1.87E-23,2.69E-23,1.34E-22,1.52E-21, & + 1.80E-23,1.80E-23,1.82E-23,2.40E-23, & + 5.71E-23,5.70E-22,1.76E-23,1.76E-23, & + 1.76E-23,1.76E-23,1.76E-23,3.50E-23, & + 1.71E-23,1.71E-23,1.71E-23,1.71E-23, & + 1.71E-23,2.68E-23,1.00E-23,1.00E-23, & + 1.00E-23,1.00E-23,1.00E-23,1.00E-23/), & + (/NW,NKO2/)), WTKO2(NKO2) & + = (/0.05,0.20,0.25,0.25,0.20,0.05/), & + STPMOL = 2.68714D+19 + + REAL*8, SAVE :: ZTABLE(LX+1,11) + INTEGER, SAVE :: NL0 + INTEGER, SAVE :: IFIRST = 1 + REAL*8 FSUM, SUMMOL, ZCOS, WSUM, TAU, DLFLUX, WTI, WTJ + INTEGER I, J, K, L, JI, JJ, N + + IF ( PRESENT(GETO2A_flag) ) THEN + +!----------------- +! ENTRY GETO2A +!----------------- + +! --------------------------------------------------------- +! UV absorption by Oxygen is expressed as a fraction of the +! total solar flux S0. Hence, O2FHRL(L)=ZTABLE(L,J) must be +! normalized within SOLARM, dividing the GETO2A absorptions +! O2FHRL(L) and O2FHRB(L) by the fraction of the solar flux +! within the spectral interval DKS0(15), nominally by 0.05. +! --------------------------------------------------------- + ! offline: may not yet work properly if NL>NL0 + ZCOS = 1.D0 + 10.D0*COSZ + JI = ZCOS + IF ( JI>10 ) JI = 10 + JJ = JI + 1 + WTJ = ZCOS - JI + WTI = 1.0 - WTJ + O2FHRL(L1:NL) = WTI*ZTABLE(L1:NL,JI) + WTJ*ZTABLE(L1:NL,JJ) + O2FHRB(L1:NL) = ZTABLE(L1:NL,6) + GOTO 99999 + ENDIF + + IF ( mado2a==0 ) THEN + ZTABLE(:,:) = 0. + RETURN + ENDIF + + IF ( IFIRST==1 ) THEN + NL0 = NL + DO N = 1, NL0 + ULGAS(N,4) = PPMV80(4)*PPMV_TO_CM_AT_STP*(PLB0(N)-PLB0(N+1)) + ENDDO + IFIRST = 0 + ENDIF + + FSUM = SUM(SFWM2(:)) + ZTABLE(NL0+1,:) = FSUM + + SUMMOL = 0.D0 + DO L = NL0, 1, -1 + SUMMOL = SUMMOL + ULGAS(L,4)*STPMOL + DO J = 1, NZ + ZCOS = 0.01D0*(1/J) + 0.1D0*(J-1) + FSUM = 0.D0 + DO I = 1, NW + WSUM = 0.D0 + DO K = 1, NKO2 + TAU = SIGMA(I,K)*SUMMOL/ZCOS + IF ( TAU>30 ) TAU = 30 + WSUM = WSUM + WTKO2(K)*EXP(-TAU) + ENDDO + FSUM = FSUM + WSUM*SFWM2(I) + ENDDO + ZTABLE(L,J) = FSUM + ENDDO + ENDDO + DO J = 1, NZ + DO L = 1, NL0 + DLFLUX = ZTABLE(L+1,J) - ZTABLE(L,J) + ZTABLE(L,J) = DLFLUX/1366.D0 + ENDDO + ENDDO + + RETURN + +99999 END SUBROUTINE SETO2A + + + SUBROUTINE GETBAK + CALL SETBAK(1) + END SUBROUTINE GETBAK + + SUBROUTINE SETBAK(GETBAK_flag) + IMPLICIT NONE + INTEGER, OPTIONAL :: GETBAK_flag +! ------------------------------------------------------------------ +! SETBAK,GETBAK Initializes Background Aerosol Specification, i.e., +! Aerosol Composition and Distribution that is set in +! RADPAR by AGOLDH, BGOLDH, CGOLDH Factors +! and controlled by FGOLDH ON/OFF Scaling Parameters. +! Optional tracers may be added in SETAER/GETAER +! ------------------------------------------------------------------ +! Tau Scaling Factors: Solar Thermal apply to: +! FSTAER FTTAER ! Total Aerosol +! FSBAER FTBAER ! Bgrnd Aerosol +! +! Control Parameters/Aerosol Scaling (kill) Factors +! FSTAER SW (All-type) Aerosol Optical Depth +! FTTAER LW (All-type) Aerosol Optical Depth +! FSBAER SW SETBAKonly Aerosol Optical Depth +! FTBAER LW SETBAKonly Aerosol Optical Depth +! ----------------------------------------------- + + REAL*8, SAVE :: SRAX(LX,6,5), SRAS(LX,6,5), SRAC(LX,6,5) + INTEGER, SAVE :: IFIRST = 1 + INTEGER, SAVE :: NL0 = 0 + + REAL*8 SGOLDH(5), TGOLDH(5), C, BC, ABC, HXPB, HXPT, ABCD + INTEGER I, J, K, L + + IF ( PRESENT(GETBAK_flag) ) THEN + +!----------------- +! ENTRY GETBAK +!----------------- +! ------------------------------------------------------------------ +! GETBAK Specifies Background Aerosol Contribution and Initializes +! (1) Thermal Radiation Aerosol Coefficient Table: +! TRAALK(L,K), for (L=1,NL), (K=1,33) +! +! (2) Solar Radiation Coefficient Tables: +! SRAEXT(L,K),SRASCT(L,K),SRAGCB(L,K) for (K=1,6) +! --------------------------------------------------- +! Warning: MRELAY-section missing: not ready if NL.ne.NL0 +! (Thermal) +! --------- + TGOLDH(:) = FTTAER*FTBAER*FGOLDH(:) ! 1:5 + DO K = 1, 33 + DO L = L1, NL0 + TRBALK(L,K) = SUM(TGOLDH(:)*TRAX(L,K,:)) + 1.D-20 + ENDDO + ENDDO + +! (Solar) +! ------- + + SGOLDH(:) = FSTAER*FSBAER*FGOLDH(:) ! 1:5 + DO K = 1, 6 + DO L = L1, NL0 + SRBEXT(L,K) = SUM(SGOLDH(:)*SRAX(L,K,:)) + 1.D-20 + SRBSCT(L,K) = SUM(SGOLDH(:)*SRAS(L,K,:)) + 1.D-30 + SRBGCB(L,K) = SUM(SGOLDH(:)*SRAS(L,K,:)*SRAC(L,K,:)) & + /SRBSCT(L,K) + ENDDO + ENDDO + GOTO 99999 + ENDIF + +!**** Background aerosols +! ------------------------------------------------------------------ +! Thermal: Set (5) Aerosol Type Compositions Vertical Distribution +! ------------------------------------------------------------------ + IF ( IFIRST==1 ) THEN + NL0 = NL + IFIRST = 0 + ENDIF + + TRAX(:,:,:) = 0 ! 1:NL0,1:NKBAND,1:5 + + DO I = 1, 11 + DO J = 1, 5 + IF ( AGOLDH(I,J)>=1.D-06 ) THEN + C = CGOLDH(I,J) + BC = EXP(-BGOLDH(I,J)/C) + ABC = AGOLDH(I,J)*(1.D0+BC) + + HXPB = 1.D0 + DO L = 1, NL0 + HXPT = HLB0(L+1)/C ! orig. hlb not hlb0 + IF ( HXPT<=80.D0 ) THEN + HXPT = EXP(HXPT) + ABCD = ABC/(1.D0+BC*HXPB) - ABC/(1.D0+BC*HXPT) + HXPB = HXPT + TRAX(L,:,J) = TRAX(L,:,J) & + + ABCD*(TRAQEX(:,I)-TRAQSC(:,I)) + ! 1:NKBAND + ENDIF + ENDDO + ENDIF + ENDDO + TRAQAB(:,I) = TRAQEX(:,I) - TRAQSC(:,I) + ENDDO + + TRBALK(:,:) = 0 ! 1:NL0,1:NKBAND + +!----------------------------------------------------------------------- +! SOLAR: Set (5) Aerosol Type Compositions Vertical Distribution +!----------------------------------------------------------------------- + + SRAX(:,:,:) = 1.D-20 ! 1:NL0,1:6,1:5 + SRAS(:,:,:) = 1.D-30 + SRAC(:,:,:) = 0 + + DO I = 1, 11 + DO J = 1, 5 + IF ( AGOLDH(I,J)>=1.D-06 ) THEN + C = CGOLDH(I,J) + BC = EXP(-BGOLDH(I,J)/C) + ABC = AGOLDH(I,J)*(1.D0+BC) + + HXPB = 1.D0 + DO L = 1, NL0 + HXPT = HLB0(L+1)/C ! orig. hlb not hlb0 + IF ( HXPT<=80.D0 ) THEN + HXPT = EXP(HXPT) + ABCD = ABC/(1.D0+BC*HXPB) - ABC/(1.D0+BC*HXPT) + HXPB = HXPT + SRAX(L,:,J) = SRAX(L,:,J) + ABCD*SRAQEX(:,I) + SRAS(L,:,J) = SRAS(L,:,J) + ABCD*SRAQSC(:,I) + SRAC(L,:,J) = SRAC(L,:,J) + ABCD*SRAQCB(:,I) & + *SRAQSC(:,I) + ENDIF + ENDDO + ENDIF + ENDDO + ENDDO + + SRAC(:,:,:) = SRAC(:,:,:)/SRAS(:,:,:) ! 1:NL0,1:6,1:5 + + SRBEXT(:,:) = 1.D-20 ! 1:NL0,1:6 + SRBSCT(:,:) = 0 + SRBGCB(:,:) = 0 +!nu SRBPI0(:,:) = 0 + + RETURN + + +99999 END SUBROUTINE SETBAK + + + SUBROUTINE GETAER + CALL SETAER(1) + END SUBROUTINE GETAER + + SUBROUTINE SETAER(GETAER_flag) +!c INCLUDE 'rad00def.radCOMMON.f' +#if (defined TRACERS_AMP) || (defined TRACERS_TOMAS) + USE RESOLUTION, ONLY:LM +#endif + USE AERPARAM_MOD, ONLY:DRYM2G + USE AERPARAM_MOD, ONLY:LMA + IMPLICIT NONE + INTEGER, OPTIONAL :: GETAER_flag +! --------------------------------------------------------------- +! GISS MONTHLY-MEAN (1850-2050) TROPOSPHERIC AEROSOL CLIMATOLOGY +! --------------------------------------------------------------- + +! Tau Scaling Factors: Solar Thermal apply to: +! FSTAER FTTAER ! Total Aerosol +! FSAAER FTAAER ! AClim Aerosol + +! Control Parameters/Aerosol Scaling (kill) Factors +! FSTAER SW (All-type) Aerosol Optical Depth +! FTTAER LW (All-type) Aerosol Optical Depth +! FSAAER SW AClim Aer Aerosol Optical Depth +! FTAAER LW AClim Aer Aerosol Optical Depth +! ----------------------------------------------- + +!nu DIMENSION ATAU09(9) +!c DIMENSION PLBA09(10) ! Aerosol data pressure levels +!c DATA PLBA09/1010.,934.,854.,720.,550.,390.,255.,150.,70.,10./ +! Crystallization RH Deliquescence RH + REAL*8, PARAMETER, DIMENSION(4) :: RHC = (/.38D0,.47D0,.28D0,.38D0 /), & + RHD = (/.80D0,.75D0,.62D0,.80D0 /) + +! ------------------------------------------------------------------ +! Define aerosol size according to REFDRY specification +! (if KRHAER(NA)=0, REFWET is used) +! FRSULF= Sulfate fraction of basic aerosol composition +! +! Set size SO4 (NA=1) = Sulfate aerosol (Nominal dry Reff=0.2) +! Set size SEA (NA=2) = SeaSalt aerosol (Nominal dry Reff=1.0) +! Set size ANT (NA=3) = Nitrate aerosol (Nominal dry Reff=0.3) +! Set size OCX (NA=4) = Organic aerosol (Nominal dry Reff=0.3) +! ------------------------------------------------------------------ + REAL*8 AREFF, XRH, FSXTAU, FTXTAU, SRAGQL, RHFTAU, q55, RHDNA, & + RHDTNA + REAL*8 ATAULX(LX,6), TTAULX(LX,ITRMAX), SRBGQL, FAC, RHFTAU_dry +#if (defined TRACERS_AMP) || (defined TRACERS_TOMAS) + REAL*8, DIMENSION(LM,6) :: EXT, SCT, GCB + REAL*8, DIMENSION(LM,33) :: TAB +#endif + INTEGER NRHNAN(LX,8), K, L, NA, N, NRH, M, KDREAD, NT + + +#if (defined TRACERS_AMP) || (defined TRACERS_TOMAS) + IF ( skip_AOD_in_rad ) THEN + ! rad_interact_aer>0 +#ifdef TRACERS_AMP + CALL SETAMP(EXT,SCT,GCB,TAB) +#endif +#ifdef TRACERS_TOMAS + CALL SETTOMAS(EXT,SCT,GCB,TAB) +#endif +!radiation has 3 extra levels on the top - aerosols are zero +! SW + SRBEXT(L1:LM,:) = EXT(L1:LM,:) + SRBSCT(L1:LM,:) = SCT(L1:LM,:) + SRBGCB(L1:LM,:) = GCB(L1:LM,:) +! LW + TRBALK(L1:LM,:) = TAB(L1:LM,:) + + RETURN + ! nothing else to do here, everything handled in SETAMP/SETTOMAS + ENDIF +#endif + + IF ( PRESENT(GETAER_flag) ) THEN + + +!----------------- +! ENTRY GETAER +!----------------- + + NRHNAN(:,:) = 1 + DO L = L1, NL + IF ( RHL(L)>0.9005D0 ) THEN + XRH = (RHL(L)-0.899499D0)*1000.D0 + NRH = XRH + 90 + IF ( NRH>189 ) NRH = 189 + ELSE + XRH = RHL(L)*100.D0 + 0.5D0 + NRH = XRH + IF ( NRH<0 ) NRH = 0 + ENDIF + DO NA = 1, 4 + IF ( KDELIQ(L,NA)==0 ) THEN + RHDNA = RHD(NA) + IF ( KRHDTK==1 ) RHDNA = RHDTNA(TLM(L),NA) + IF ( RHL(L)>RHDNA ) KDELIQ(L,NA) = 1 + ELSE + IF ( RHL(L)0 ) THEN + + DO NA = 1, 6 + IF ( MADAER==3 ) THEN +#ifdef REPART_AER_FIX + ! passing plb0 instead of plb for approximate consistency with input + ! in + CALL REPART(A6JDAY(1,NA,IGCM,JGCM),PLBAER,lma+1, & + ATAULX(1,NA),PLB0,NL+1) ! out +#else + ! in + CALL REPART(A6JDAY(1,NA,IGCM,JGCM),PLBAER,lma+1, & + ATAULX(1,NA),PLB,NL+1) ! out +#endif + ELSE + ! in + CALL REPART(A6JDAY(1,NA,ILON,JLAT),PLBA09,10, & + ATAULX(1,NA),PLB,NL+1) ! out + ENDIF + ENDDO + + FSXTAU = FSTAER*FSAAER + 1.D-10 + FTXTAU = FTTAER*FTAAER + ! (Solar BCI,BCB components) + DO L = L1, NL + nintaerext(L,:,5) = SRBQEX(:,5)*ATAULX(L,5) & + *FSXTAU*FS8OPX(5) + nintaerext(L,:,6) = SRBQEX(:,6)*ATAULX(L,6) & + *FSXTAU*FS8OPX(6) + nintaersca(L,:,5) = SRBQSC(:,5)*ATAULX(L,5) & + *FSXTAU*FS8OPX(5) + nintaersca(L,:,6) = SRBQSC(:,6)*ATAULX(L,6) & + *FSXTAU*FS8OPX(6) + nintaerasy(L,:,5) = SRBQCB(:,5) + nintaerasy(L,:,6) = SRBQCB(:,6) + SRAEXT(L,:) = nintaerext(L,:,5) + nintaerext(L,:,6) + SRASCT(L,:) = nintaersca(L,:,5) + nintaersca(L,:,6) + SRAGCB(L,:) = (nintaersca(L,:,5)*nintaerasy(L,:,5)+ & + nintaersca(L,:,6)*nintaerasy(L,:,6)) & + /(SRASCT(L,:)+1.D-10) + ENDDO + ! (Thermal BCI,BCB components) + DO L = L1, NL + TRAALK(L,:) = TRBQAB(:,5)*ATAULX(L,5)*FTXTAU*FT8OPX(5) & + + TRBQAB(:,6)*ATAULX(L,6)*FTXTAU*FT8OPX(6) + ! 1:33 + IF ( PLB(L)<=10 ) TRAALK(L,:) = 0 + ENDDO + + DO NA = 1, 4 + DO L = L1, NL + RHFTAU = RHINFO(NRHNAN(L,NA),2,NA)*ATAULX(L,NA) & + *FSXTAU*FS8OPX(NA) + DO K = 1, 6 + nintaerext(L,K,NA) = SRHQEX(K,NRHNAN(L,NA),NA) & + *RHFTAU + nintaersca(L,K,NA) = SRHQSC(K,NRHNAN(L,NA),NA) & + *RHFTAU + nintaerasy(L,K,NA) = SRHQCB(K,NRHNAN(L,NA),NA) + SRAEXT(L,K) = SRAEXT(L,K) + nintaerext(L,K,NA) + SRAGQL = SRAGCB(L,K)*SRASCT(L,K) & + + nintaerasy(L,K,NA)*nintaersca(L,K,NA) + SRASCT(L,K) = SRASCT(L,K) + nintaersca(L,K,NA) + SRAGCB(L,K) = SRAGQL/(SRASCT(L,K)+1.D-10) + ENDDO + ENDDO + ENDDO + + DO NA = 1, 4 + DO L = L1, NL + RHFTAU = RHINFO(NRHNAN(L,NA),2,NA)*ATAULX(L,NA) & + *FTXTAU*FT8OPX(NA) + TRAALK(L,:) = TRAALK(L,:) + TRHQAB(:,NRHNAN(L,NA),NA) & + *RHFTAU ! 1:33 + ENDDO + ENDDO + ENDIF + + + IF ( NTRACE<=0 ) RETURN + +! ------------------------------------------------------------------ +! Option to add on Tracer Type aerosol thermal solar contributions +! +! NOTE: Aerosol carried as a tracer is assumed to be in kg/m2 units +! ------------------------------------------------------------------ + + DO NT = 1, NTRACE + IF ( ITR(NT)==7 ) THEN + FAC = 1D3*.75D0/TRADEN(NT)*RTINFO(1,9,NT)/TRRDRY(NT) + ELSE + FAC = 1D3*.75D0/DENAER(ITR(NT))*Q55DRY(ITR(NT)) & + /TRRDRY(NT) + ENDIF + TTAULX(L1:NL,NT) = TRACER(L1:NL,NT)*FAC + ENDDO + + FSXTAU = FSTAER*FSBAER + 1.D-10 + FTXTAU = FTTAER*FTBAER + + DO NT = 1, NTRACE + NA = ITR(NT) + DO L = L1, NL + RHFTAU = RTINFO(NRHNAN(L,NA),2,NT)*TTAULX(L,NT)*FSXTAU + RHFTAU_dry = RTINFO(1,2,NT)*TTAULX(L,NT)*FSXTAU + IF ( FSTOPX(NT)>0 ) THEN + RHFTAU = RHFTAU*FSTOPX(NT)*FSTASC(NT) + RHFTAU_dry = RHFTAU_dry*FSTOPX(NT)*FSTASC(NT) + DO K = 1, 6 + SRBEXT(L,K) = SRBEXT(L,K) & + + SRTQEX(K,NRHNAN(L,NA),NT)*RHFTAU + SRBGQL = SRBGCB(L,K)*SRBSCT(L,K) & + + SRTQCB(K,NRHNAN(L,NA),NT) & + *SRTQSC(K,NRHNAN(L,NA),NT)*RHFTAU + SRBSCT(L,K) = SRBSCT(L,K) & + + SRTQSC(K,NRHNAN(L,NA),NT)*RHFTAU + SRBGCB(L,K) = SRBGQL/(SRBSCT(L,K)+1.D-10) + ENDDO + ENDIF + aesqex(L,:,nt) = srtqex(:,nrhnan(L,na),nt)*rhftau + ! 1:6 + aesqsc(L,:,nt) = srtqsc(:,nrhnan(L,na),nt)*rhftau + aesqcb(L,:,nt) = srtqcb(:,nrhnan(L,na),nt)*aesqsc(L,:,nt) + aesqex_dry(L,:,nt) = srtqex(:,1,nt)*rhftau_dry + ! 1:6 + aesqsc_dry(L,:,nt) = srtqsc(:,1,nt)*rhftau_dry + aesqcb_dry(L,:,nt) = srtqcb(:,1,nt)*aesqsc_dry(L,:,nt) + ENDDO + ENDDO + + DO NT = 1, NTRACE + NA = ITR(NT) + DO L = L1, NL + RHFTAU = RTINFO(NRHNAN(L,NA),2,NT)*TTAULX(L,NT) & + *FTXTAU*FTTOPX(NT)*FTTASC(NT) + TRBALK(L,:) = TRBALK(L,:) + TRTQAB(:,NRHNAN(L,NA),NT) & + *RHFTAU ! 1:33 + ENDDO + ENDDO + ELSE + + IF ( MADAER>0 ) THEN + DO NA = 1, 4 + AREFF = REFDRY(NA) +!nu IF(KRHAER(NA) < 0) AREFF=REFWET(NA) + CALL GETMIE(NA,AREFF,SRHQEX(1,1,NA),SRHQSC(1,1,NA), & + SRHQCB(1,1,NA),TRHQAB(1,1,NA),Q55DRY(NA)) + DRYM2G(NA) = 0.75D0/DENAER(NA)*Q55DRY(NA)/AREFF +!nu IF(KRHAER(NA) < 0) DRYM2G(NA)=WETM2G(NA) + RHINFO(1,1,NA) = 0.D0 ! Rel Hum + RHINFO(1,2,NA) = 1.D0 ! TAUFAC + RHINFO(1,3,NA) = AREFF ! AerSize + RHINFO(1,4,NA) = 0.D0 ! LW g/m2 + RHINFO(1,5,NA) = 1.33333333D0*AREFF*DENAER(NA)/Q55DRY(NA) + ! Dryg/m2 + RHINFO(1,6,NA) = 1.33333333D0*AREFF*DENAER(NA)/Q55DRY(NA) + ! Totg/m2 + RHINFO(1,7,NA) = 1.D0 ! Xmas fr + RHINFO(1,8,NA) = DENAER(NA) ! Density + RHINFO(1,9,NA) = Q55DRY(NA) ! Q55 Ext + ENDDO + +! Set size BCI (NA=5) = Black Carbon (Industrial) (Nominal Reff=0.1) +! Set size BCB (NA=6) = Black Carbon (BioBurning) (Nominal Reff=0.1) +! ------------------------------------------------------------------ + DO NA = 5, 6 + AREFF = REFDRY(NA) + CALL GETMIE(NA,AREFF,SRBQEX(1,NA),SRBQSC(1,NA), & + SRBQCB(1,NA),TRBQAB(1,NA),Q55DRY(NA)) + DRYM2G(NA) = 0.75D0/DENAER(NA)*Q55DRY(NA)/AREFF + ENDDO + + ! Extend default dry aerosol coefficients for N=2,190 + DO N = 2, 190 + DO NA = 1, 4 + SRHQEX(:,N,NA) = SRHQEX(:,1,NA) + ! 1:6 + SRHQSC(:,N,NA) = SRHQSC(:,1,NA) + ! 1:6 + SRHQCB(:,N,NA) = SRHQCB(:,1,NA) + ! 1:6 + TRHQAB(:,N,NA) = TRHQAB(:,1,NA) + ! 1:33 + RHINFO(N,1:9,NA) = RHINFO(1,1:9,NA) + ENDDO + ENDDO + ! Over-write dry coefficients if KRHAER(NA)=1 + KDREAD = 71 ! default unit number for offline use only + DO NA = 1, 4 +!nu IF(KRHAER(NA) > 0) THEN + CALL SETREL(REFDRY(NA),NA,kdread,SRUQEX,SRUQSC,SRUQCB, & + TRUQEX,TRUQSC,TRUQCB,REFU22,Q55U22,FRSULF, & + SRHQEX(1,1,NA),SRHQSC(1,1,NA),SRHQCB(1,1,NA),& + TRHQAB(1,1,NA),RHINFO(1,1,NA)) +!nu ENDIF + ENDDO + ENDIF + + IF ( NTRACE<=0 ) RETURN + +!**** Optional Tracer aerosols initializations + DO NT = 1, NTRACE + NA = ITR(NT) + AREFF = TRRDRY(NT) + CALL GETMIE(NA,AREFF,SRTQEX(1,1,NT),SRTQSC(1,1,NT), & + SRTQCB(1,1,NT),TRTQAB(1,1,NT),Q55) + RTINFO(1,1,NT) = 0.0 + RTINFO(1,2,NT) = 1.0 + RTINFO(1,3,NT) = AREFF + RTINFO(1,4,NT) = 0.0 + RTINFO(1,5,NT) = 1.33333333D0*AREFF*DENAER(NA)/Q55 + RTINFO(1,6,NT) = 1.33333333D0*AREFF*DENAER(NA)/Q55 + RTINFO(1,7,NT) = 1.0 + RTINFO(1,8,NT) = DENAER(NA) + RTINFO(1,9,NT) = Q55 + ENDDO + ! Define default dry aerosol coefficients for N=2,190 + DO N = 2, 190 + DO NT = 1, NTRACE + SRTQEX(:,N,NT) = SRTQEX(:,1,NT) + ! 1:6 + SRTQSC(:,N,NT) = SRTQSC(:,1,NT) + ! 1:6 + SRTQCB(:,N,NT) = SRTQCB(:,1,NT) + ! 1:6 + TRTQAB(:,N,NT) = TRTQAB(:,1,NT) + ! 1:33 + RTINFO(N,1:9,NT) = RTINFO(1,1:9,NT) + ENDDO + ENDDO + ! Over-write dry coefficients if KRHTRA(NT)=1 + KDREAD = 71 ! default unit number for offline use only + DO NT = 1, NTRACE + NA = ITR(NT) + IF ( KRHTRA(NT)>0 .AND. NA<=4 ) & + CALL SETREL(TRRDRY(NT),NA,KDREAD,SRUQEX,SRUQSC,SRUQCB, & + TRUQEX,TRUQSC,TRUQCB,REFU22,Q55U22,FRSULF, & + SRTQEX(1,1,NT),SRTQSC(1,1,NT),SRTQCB(1,1,NT), & + TRTQAB(1,1,NT),RTINFO(1,1,NT)) + ENDDO + + RETURN + ENDIF + + END SUBROUTINE SETAER + +!----------------- +! ENTRY GETDST +!----------------- + SUBROUTINE GETDST +! --------------------------------------------------------------- +! MONTHLY-MEAN DESERT DUST CLIMATOLOGY +! --------------------------------------------------------------- + +! OUTPUT: via SRDEXT(L,K) D Dust Extinction Optical Depth +! SRDSCT(L,K) D Dust Scattering Optical Depth +! SRDGCB(L,K) D Dust Asymmetry Parameter g +! TRDALK(L,K) Thermal Absorption Optical Depth + +! Tau Scaling Factors: Solar Thermal apply to: +! FSTAER FTTAER ! Total Aerosol +! FSDAER FTDAER ! Dust Aerosol +! +! Control Parameters/Aerosol Scaling (kill) Factors +! FSTAER SW (All-type) Aerosol Optical Depth +! FTTAER LW (All-type) Aerosol Optical Depth +! FSDAER SW Dust Aer Aerosol Optical Depth +! FTDAER LW Dust Aer Aerosol Optical Depth +! ----------------------------------------------- + USE DUSTPARAM_MOD + IMPLICIT NONE + REAL*8 FSXTAU, FTXTAU, DTAULX(LX+1,nsized) + !ron + INTEGER K, L, N + REAL*8 :: TDUST_col(lmd) + + IF ( .NOT.dust_optics_initialized ) THEN + dust_optics_initialized = .TRUE. + ALLOCATE (QXDUST(6,nsized),QSDUST(6,nsized),QCDUST(6,nsized), & + ATDUST(33,nsized),QDST55(nsized)) + + ALLOCATE (taucon_dust(nsized)) + DO N = 1, nsized + CALL GETMIE(7,REDUST(N),QXDUST(1,N),QSDUST(1,N),QCDUST(1,N),& + ATDUST(1,N),QDST55(N)) + ! save the factor for converting from concentration to AOT + TAUCON_dust(N) = 0.75E+03*QDST55(N)/(RODUST(N)*REDUST(N)) + ENDDO + ENDIF + + DO N = 1, nsized + TDUST_col(:) = DDJDAY(:,N,IGCM,JGCM)*taucon_dust(n) + ! kg/m2 -> tau +#ifdef REPART_AER_FIX + ! passing plb0 instead of plb for approximate consistency with input + CALL REPART(TDUST_col,PLBdust,lmd+1,DTAULX(1,N),PLB0,NL+1) +#else + CALL REPART(TDUST_col,PLBdust,lmd+1,DTAULX(1,N),PLB,NL+1) +#endif + ENDDO + +! Apply Solar/Thermal Optical Depth Scaling Factors +! Dust Aerosol Solar FSXD=FSTAER*FSDAER +! Dust Aerosol Thermal FTXD=FSTAER*FTDAER +! ---------------------------------------- + + FSXTAU = FSTAER*FSDAER + 1.D-10 + FTXTAU = FTTAER*FTDAER + + DO K = 1, 6 + DO L = L1, NL + SRDEXT(L,K) = 2.D-10 + SRDSCT(L,K) = 1.D-10 + SRDGCB(L,K) = 0.D0 + ENDDO + ENDDO + + DO L = L1, NL + DO K = 1, 6 + nintaerext(L,K,7) = SUM(QXDUST(K,:)*DTAULX(L,:)) & + *FSXTAU*FS8OPX(7) + nintaersca(L,K,7) = SUM(QSDUST(K,:)*DTAULX(L,:)) & + *FSXTAU*FS8OPX(7) + SRDEXT(L,K) = SRDEXT(L,K) + nintaerext(L,K,7) + SRDSCT(L,K) = SRDSCT(L,K) + nintaersca(L,K,7) + nintaerasy(L,K,7) = SUM(QCDUST(K,:)*QSDUST(K,:)*DTAULX(L,:))& + *FSXTAU*FS8OPX(7)/(SRDSCT(L,K)+1.D-10) + SRDGCB(L,K) = nintaerasy(L,K,7) + ENDDO + ENDDO + + DO L = L1, NL + DO K = 1, 33 + TRDALK(L,K) = SUM(ATDUST(K,:)*DTAULX(L,:)*FTXTAU*FT8OPX(7)) + ! 1:nsized !ron + ENDDO + ENDDO + + END SUBROUTINE GETDST + + + SUBROUTINE UPDVOL(JYEARV,JDAYVA) + INTEGER, INTENT(IN) :: JYEARV, JDAYVA + CALL SETVOL(JYEARV,JDAYVA) + END SUBROUTINE UPDVOL + + SUBROUTINE GETVOL + CALL SETVOL(GETVOL_FLAG=1) + END SUBROUTINE GETVOL + + SUBROUTINE SETVOL(JYEARV,JDAYVA,GETVOL_flag) + IMPLICIT NONE + + + REAL*8, SAVE :: E46LAT(47), SIZLAT(46), TAULAT(46) + INTEGER, SAVE :: NJ46 + REAL*8, PARAMETER :: HVOL00(5) = (/15.0,20.0,25.0,30.0,35.0/) +!x INTEGER, SAVE :: LATVOL = 0 ! not ok for grids finer than 72x46 + +!nu REAL*8, PARAMETER :: htplim=1.d-3 + REAL*8, SAVE :: FSXTAU, FTXTAU + INTEGER, INTENT(IN), OPTIONAL :: JYEARV, JDAYVA, GETVOL_flag + INTEGER J, L, MI, MJ, K + REAL*8 XYYEAR, XYI, WMI, WMJ, SIZVOL + !nu ,SUMHTF + REAL*8, SAVE, ALLOCATABLE :: gdata(:), hlattf(:), HTFLAT(:,:) + REAL*8, SAVE, ALLOCATABLE :: HTPROF(:) +#ifdef HEALY_LM_DIAGS + INTEGER, SAVE :: NJDG + REAL*8, SAVE :: EDGLAT(JM_DIAG) +#endif + +! ------------------------------------------------------------------ +! Tau Scaling Factors: Solar Thermal apply to: +! FSTAER FTTAER ! Total Aerosol +! FSVAER FTVAER ! SETVOL Aer + +! Control Parameters/Aerosol Scaling (kill) Factors +! FSTAER SW (All-type) Aerosol Optical Depth +! FTTAER LW (All-type) Aerosol Optical Depth +! FSVAER SW SETVOLonly Aerosol Optical Depth +! FTVAER LW SETVOLonly Aerosol Optical Depth +! ----------------------------------------------- + +! ----------------------------------------------------------------- +! VEFF0 Selects Size Distribution Variance (this affects Thermal) +! REFF0 Selects Effective Particle Size for Archive Volcanic Data +! ----------------------------------------------------------------- + + IF ( PRESENT(JYEARV) ) THEN ! UPDVOL + + +!-------------------------------- +! ENTRY UPDVOL(JYEARV,JDAYVA) +!-------------------------------- + +! (Volcanic data) +! ------------------------- + XYYEAR = JYEARV + JDAYVA/366.D0 + IF ( XYYEARNVOLMON-.001D0 ) XYI = NVOLMON - .001D0 +!! write(6,'(a,2f9.1,3i7)') 'VOLCYEAR=', +!! . XYI,XYYEAR,JVOLYI,JYEARV,JDAYVA + MI = XYI + WMJ = XYI - MI + WMI = 1.D0 - WMJ + MJ = MI + 1 + DO J = 1, NVolLat + GDATA(J) = WMI*VReffTJ(MI,J) + WMJ*VReffTJ(MJ,J) +!! write(6,'(a,2I7,2f8.1,2f10.4)')'VOLCREFF:: ',MI,MJ, +!! . XYYEAR,XYI,VReffTJ(MI,J),VReffTJ(MJ,J) + ENDDO + CALL RETERP(GDATA,ELATVol,NVolLat+1,SIZLAT,E46LAT,NJ46) + DO K = 1, NVOLK + DO J = 1, NVolLat + GDATA(J) = WMI*VTauTJK(MI,J,K) + WMJ*VTauTJK(MJ,J,K) +!! write(6,'(a,3I7,2f8.1,2F10.4)')'VOLCAER:: ',K,MI,MJ, +!! . XYYEAR,XYI,VTauTJK(MI,J,K),VTauTJK(MJ,J,K) + ENDDO + CALL RETERP(GDATA,ELATVOL,NVolLat+1,HTFLAT(1,K),E46LAT,NJ46) + ENDDO +! + +#ifdef HEALY_LM_DIAGS + DO J = 1, 46 + TAULAT(J) = SUM(HTFLAT(J,:)) + ENDDO + CALL RETERP(TAULAT,E46LAT,NJ46,VTAULAT,EDGLAT,NJDG) +#endif + + + RETURN + ELSEIF ( PRESENT(GETVOL_flag) ) THEN ! GETVOL + + +!----------------- +! ENTRY GETVOL +!----------------- +!x IF(MRELAY > 0) GO TO 300 +!x IF(JLAT==LATVOL) GO TO 350 ! not ok for grids finer than 72x46 + +! Set JLAT Dependent Aerosol Distribution and Size +! ------------------------------------------------ +!x300 CONTINUE + + HLATTF(1:NVolK) = HTFLAT(JLAT,1:NVolK) + CALL REPART(HLATTF,HVOLKM,NVolK+1,HTPROF,HLB0,NL+1) +!nu LHPMAX=0 ! not used +!nu LHPMIN=NL ! not used +!nu DO L=L1,NL +!nu N=NL+1-L +!nu IF(HTPROF(L) >= HTPLIM) LHPMAX=L +!nu IF(HTPROF(N) >= HTPLIM) LHPMIN=N +!nu END DO +!nu SUMHTF=1.D-10 + DO L = L1, NL + IF ( HTPROF(L)<0. ) HTPROF(L) = 0.D0 +!nu SUMHTF=SUMHTF+HTPROF(L) + ENDDO + + SIZVOL = SIZLAT(JLAT) + +! Select H2SO4 Q,S,C,A Tables for Size = SIZVOL +! ---------------------------------------------- + +!------------------------ + CALL GETQVA(SIZVOL) +!------------------------ + +!x LATVOL=JLAT +!x350 CONTINUE +! ------------------------------------ +! H2SO4 Thermal Contribution in TRVALK +! ------------------------------------ + DO K = 1, 33 + TRVALK(L1:NL,K) = HTPROF(L1:NL)*AVH2S(K)*FTXTAU*FT8OPX(8) + ENDDO + +! H2SO4 Solar Contribution in SRVEXT,SRVSCT,SRVGCB +! ------------------------------------------------ + + DO K = 1, 6 + nintaerext(L1:NL,K,8) = QVH2S(K)*HTPROF(L1:NL) & + *FSXTAU*FS8OPX(8) + nintaersca(L1:NL,K,8) = SVH2S(K)*HTPROF(L1:NL) & + *FSXTAU*PIVMAX*FS8OPX(8) + nintaerasy(L1:NL,K,8) = GVH2S(K) + SRVEXT(L1:NL,K) = nintaerext(L1:NL,K,8) + SRVSCT(L1:NL,K) = nintaersca(L1:NL,K,8) + SRVGCB(L1:NL,K) = nintaerasy(L1:NL,K,8) + ENDDO + GOTO 99999 + ENDIF + + FSXTAU = FSTAER*FSVAER + FTXTAU = FTTAER*FTVAER + +! Set Grid-Box Edge Latitudes for Data Repartitioning +! --------------------------------------------------- + IF ( madvol==1 ) THEN + ALLOCATE (ELATVOL(NVolLat+1)) + DO J = 2, 24 + ! NVolLat + ELATVOL(J) = -90.D0 + (J-1.5D0)*180.D0/23.D0 + ENDDO + ELATVol(1) = -90.D0 + ELATVol(25) = 90.D0 + HVolKM = HVOL00 + ENDIF + NJ46 = 46 + 1 + DO J = 2, 46 + E46LAT(J) = -90.D0 + (J-1.5D0)*180.D0/(MLAT46-1) + ENDDO + E46LAT(1) = -90.D0 + E46LAT(NJ46) = 90.D0 +#ifdef HEALY_LM_DIAGS + NJDG = JM_DIAG + 1 + DO J = 2, JM_DIAG + EDGLAT(J) = -90.D0 + (J-1.5D0)*180.D0/(JM_DIAG-1) + ENDDO + EDGLAT(1) = -90.D0 + EDGLAT(NJDG) = 90.D0 +#endif + ALLOCATE (gdata(NVolLat),hlattf(NVolK),HTFLAT(NJ46,NVOLK)) + ALLOCATE (HTPROF(NL)) + + HTPROF(:) = 0 + +! ----------------------------------------------- +! Initialize H2SO4 Q,S,C,A Tables for Input VEFF0 +! ----------------------------------------------- +! ------------------ + CALL SETQVA(VEFF0) +! ------------------ + + RETURN + +99999 END SUBROUTINE SETVOL + + + SUBROUTINE GETQVA(SIZVOL) + REAL*8, INTENT(IN) :: SIZVOL + CALL SETQVA(SIZVOL=SIZVOL) + END SUBROUTINE GETQVA + + SUBROUTINE SETQVA(VEFF,SIZVOL) + IMPLICIT NONE +! ------------------------------------------------------------------ +! SETQVA Selects (interpolates) H2SO4 Mie Parameters for specified +! Variance VEFF for subsequent Size interpolation by GETQVA +! ------------------------------------------------------------------ + +!eq REAL*8 SRQV( 6,20),SRSV( 6,20),SRGV( 6,20),Q55V( 20),REFV(20) +!eq REAL*8 TRQV(33,20),TRSV(33,20),TRGV(33,20),TRAV(33,20),VEFV(20) + REAL*8 TRAB(33,20), Q5(5), RV20(20), QV20(20) + REAL*8, PARAMETER :: V5(5) = (/.1D0,.2D0,.3D0,.4D0,.5D0/) + SAVE TRAB + +! ------------------------------------------------------------------ +! SRVQEX Volcanic Aerosol sizes (Reff) range from 0.1 to 5.0 microns +! To utilize equal interval interpolation, Reff N=9,20 are redefined +! so Volcanic Aerosol sizes have effective range of 0.1-2.0 microns. +! ------------------------------------------------------------------ + REAL*8, INTENT(IN), OPTIONAL :: SIZVOL, VEFF + REAL*8 REFN, RADX, WTJHI, WTJLO + INTEGER K, N, JRXLO, JRXHI + + IF ( PRESENT(SIZVOL) ) THEN + +!------------------------- +! ENTRY GETQVA(SIZVOL) +!------------------------- +! ------------------------------------------------------------------ +! Volcanic Aerosol sizes have effective range of 0.1 - 2.0 microns. +! ------------------------------------------------------------------ + + RADX = SIZVOL*10.D0 + IF ( RADX<1.000001D0 ) RADX = 1.000001D0 + IF ( RADX>19.99999D0 ) RADX = 19.99999D0 + JRXLO = RADX + WTJHI = RADX - JRXLO + WTJLO = 1.D0 - WTJHI + JRXHI = JRXLO + 1 + + QVH2S(:) = WTJLO*SRQV(:,JRXLO) + WTJHI*SRQV(:,JRXHI) + ! 1:6 + SVH2S(:) = WTJLO*SRSV(:,JRXLO) + WTJHI*SRSV(:,JRXHI) + GVH2S(:) = WTJLO*SRGV(:,JRXLO) + WTJHI*SRGV(:,JRXHI) + + Q55H2S = WTJLO*Q55V(JRXLO) + WTJHI*Q55V(JRXHI) + + AVH2S(:) = WTJLO*TRAB(:,JRXLO) + WTJHI*TRAB(:,JRXHI) + ! 1:33 + GOTO 99999 + ENDIF + + DO N = 1, 20 + RV20(N) = REFV20(N,1) + VEFV(N) = VEFF + REFV(N) = N/10.D0 + Q5(:) = Q55V20(N,:5) + CALL SPLINE(V5,Q5,5,VEFF,Q55V(N),1.D0,1.D0,1) + DO K = 1, 6 + Q5(:) = SRVQEX(K,N,:5) + CALL SPLINE(V5,Q5,5,VEFF,SRQV(K,N),1.D0,1.D0,1) + Q5(:) = SRVQSC(K,N,:5) + CALL SPLINE(V5,Q5,5,VEFF,SRSV(K,N),1.D0,1.D0,1) + Q5(:) = SRVQCB(K,N,:5) + CALL SPLINE(V5,Q5,5,VEFF,SRGV(K,N),1.D0,1.D0,1) + ENDDO + DO K = 1, 33 + Q5(:) = TRVQEX(K,N,:5) + CALL SPLINE(V5,Q5,5,VEFF,TRQV(K,N),1.D0,1.D0,1) + Q5(:) = TRVQSC(K,N,:5) + CALL SPLINE(V5,Q5,5,VEFF,TRSV(K,N),1.D0,1.D0,1) + Q5(:) = TRVQCB(K,N,:5) + CALL SPLINE(V5,Q5,5,VEFF,TRGV(K,N),1.D0,1.D0,1) + Q5(:) = TRVQAL(K,N,:5) + CALL SPLINE(V5,Q5,5,VEFF,TRAV(K,N),1.D0,1.D0,1) + ENDDO + TRAB(:,N) = TRQV(:,N) - TRSV(:,N) + ! 1:33 + ENDDO + + QV20(:) = Q55V(:) ! 1:20 + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,Q55V(N),1.D0,1.D0,1) + ENDDO + DO K = 1, 6 + QV20(:) = SRQV(K,:) + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,SRQV(K,N),1.D0,1.D0,1) + ENDDO + QV20(:) = SRSV(K,:) + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,SRSV(K,N),1.D0,1.D0,1) + ENDDO + QV20(:) = SRGV(K,:) + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,SRGV(K,N),1.D0,1.D0,1) + ENDDO + ENDDO + DO K = 1, 33 + QV20(:) = TRQV(K,:) + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,TRQV(K,N),1.D0,1.D0,1) + ENDDO + QV20(:) = TRSV(K,:) + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,TRSV(K,N),1.D0,1.D0,1) + ENDDO + QV20(:) = TRGV(K,:) + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,TRGV(K,N),1.D0,1.D0,1) + ENDDO + QV20(:) = TRAV(K,:) + DO N = 9, 20 + REFN = REFV(N) + CALL SPLINE(RV20,QV20,20,REFN,TRAV(K,N),1.D0,1.D0,1) + ENDDO + DO N = 9, 20 + TRAB(K,N) = TRQV(K,N) - TRSV(K,N) + ENDDO + ENDDO + + RETURN + +99999 END SUBROUTINE SETQVA + + SUBROUTINE SETCLD + IMPLICIT NONE +!----------------------------------------------------------------------- +! Control Parameters used in SETCLD,GETCLD,GETEPS: defined in RADPAR +! +! ICE012 Selects Water, Non-Mie, Mie Ice Cloud Qex,Qsc,Pi0 +! TAUWC0 Minimum Optical Depth for Water Clouds +! TAUIC0 Minimum Optical Depth for Ice Clouds +! FCLDTR Scaling Factor for Thermal Cloud Optical Depth +! FCLDSR Scaling Factor for Solar Cloud Optical Depth +! EPSCON Column Cloud Inhomogeneity EPSILON (when KCLDEP=1) +! KCLDEP Selects Cloud Inhomogeneity Option (0-4): +! KCLDEP = 0 Sets Column CLDEPS to Zero +! KCLDEP = 1 Sets Column CLDEPS to EPSCON +! KCLDEP = 2 Keeps whatever is specified in CLDEPS +! KCLDEP = 3 Uses: Column EPCOL(72,46) Climatology +! KCLDEP = 4 Uses: Ht Dep EPLOW, EPMID, EPHIG Data +! +!----------------------------------------------------------------------- +! Define Cloud Absorption Cross-Sections +! +! Selected by: ICE012 = 0 Liquid Water Droplets (N = 1 - 5) +! ICE012 = 1 Ice - Non-Spherical (N = 6 - 10) +! ICE012 = 2 Ice - Mie (Spherical) (N = 11 - 15) +! +! Define Solar,Thermal Cloud Single Scattering Albedo: SRCQPI( 6,15) +! TRCQPI(33,15) +!----------------------------------------------------------------------- + + TRCQAB(:,:) = TRCQEX(:,:) - TRCQSC(:,:) + ! 1:33,1:15 + TRCQPI(:,:) = TRCQSC(:,:)/TRCQEX(:,:) + + SRCQPI(:,:) = SRCQSC(:,:)/SRCQEX(:,:) ! 1:6,1:15 + +! Initialize GETCLD Output Parameters to Zero +! -------------------------------------------- + TRCTCA(:) = 0 ! 1:33 + TRCALK(:,:) = 0 ! 1:NL,1:33 + SRCEXT(:,:) = 1.D-20 ! 1:NL,1:6 + SRCSCT(:,:) = 0 + SRCGCB(:,:) = 0 + + END SUBROUTINE SETCLD +!----------------- +! ENTRY GETCLD +!----------------- + SUBROUTINE GETCLD + IMPLICIT NONE + REAL*8 SIZWCL, SIZICL, XRW, XMW, XPW, EPS, VEP, VEP1, VEP2, VEPP, & + TAUWCL, TAUICL, QAWATK, QPWATK, SRCGFW, QXWATK, QSWATK, & + QGWATK, XRI, XMI, XPI, QAICEK, QPICEK, SRCGFC, QXICEK, & + QSICEK, QGICEK, SCTTAU, GCBICE, SCTGCB, TCTAUW, TCTAUC, & + ALWATK, WTI, WTW, ALICEK, TRCTCI + INTEGER K, L, LBOTCW, LTOPCW, LBOTCI, LTOPCI, IRWAT, IRICE + +!----------------------------------------------------------------------- +! Define: TRCALK(LX,33) Thermal Radiation Cloud Absorption +! TRCTCA(33) Thermal Radiation Top Cloud Albedo +! +! SRCEXT(LX,6) Solar Radiation Cloud Ext Op Depth +! SRCSCT(LX,6) Solar Radiation Cloud Sct Op Depth +! SRCGCB(LX,6) Solar Radiation Cloud Asym Param g +! +! LTOPCL Top Cloud Layer Location +! LBOTCL Bot Cloud Layer Location +! +! LTOPCW Top Water Cloud Layer Location +! LBOTCW Bot Water Cloud Layer Location +! +! LTOPCI Top Ice Cloud Layer Location +! LBOTCI Bot Ice Cloud Layer Location +! +!----------------------------------------------------------------------- + + LBOTCW = 0 + LTOPCW = 0 + LBOTCI = 0 + LTOPCI = 0 + TRCTCA(:) = 0 ! 1:33 + DO L = L1, NL + TRCALK(L,:) = 0 + SRCEXT(L,:) = 1.D-20 ! 1:6 + SRCSCT(L,:) = 1.D-30 + SRCGCB(L,:) = 0 + SRCPI0(L,:) = 0 +! Water Cloud Size Interpolation +! ------------------------------ + + IF ( FTAUC*TAUWC(L)>TAUWC0 ) THEN + SIZWCL = SIZEWC(L) + LTOPCW = L + IF ( LBOTCW==0 ) LBOTCW = L + IF ( SIZWCL<15.D0 ) THEN + IF ( SIZWCL<3.0D0 ) SIZWCL = 3.0D0 + IRWAT = 2 + XRW = SIZWCL/10.0D0 - 1.00D0 + ELSE + IF ( SIZWCL>25.D0 ) SIZWCL = 25.D0 + IRWAT = 4 + XRW = SIZWCL/10.0D0 - 2.00D0 + ENDIF + XMW = 1.D0 - XRW - XRW + XPW = 1.D0 + XRW + XRW + EPS = CLDEPS(L) + VEP = EPS/(1.D0-EPS) + VEP1 = 1.D0 + VEP + TAUWCL = FTAUC*TAUWC(L) + DO K = 1, 33 + QAWATK = XMW*XPW*TRCQAB(K,IRWAT) & + - XMW*XRW*TRCQAB(K,IRWAT-1) & + + XPW*XRW*TRCQAB(K,IRWAT+1) + QPWATK = XMW*XPW*TRCQPI(K,IRWAT) & + - XMW*XRW*TRCQPI(K,IRWAT-1) & + + XPW*XRW*TRCQPI(K,IRWAT+1) + VEPP = VEP*QPWATK + TRCALK(L,K) = TRCALK(L,K) + TAUWCL*QAWATK/(VEP1-VEPP) + ENDDO + SRCGFW = SRCGSF(1) + DO K = 1, 6 + QXWATK = XMW*XPW*SRCQEX(K,IRWAT) & + - XMW*XRW*SRCQEX(K,IRWAT-1) & + + XPW*XRW*SRCQEX(K,IRWAT+1) + QSWATK = XMW*XPW*SRCQSC(K,IRWAT) & + - XMW*XRW*SRCQSC(K,IRWAT-1) & + + XPW*XRW*SRCQSC(K,IRWAT+1) + QGWATK = XMW*XPW*SRCQCB(K,IRWAT) & + - XMW*XRW*SRCQCB(K,IRWAT-1) & + + XPW*XRW*SRCQCB(K,IRWAT+1) + QPWATK = XMW*XPW*SRCQPI(K,IRWAT) & + - XMW*XRW*SRCQPI(K,IRWAT-1) & + + XPW*XRW*SRCQPI(K,IRWAT+1) + QGWATK = QGWATK*SRCGFW + VEPP = VEP*QPWATK + VEP2 = VEP1 - VEPP + SRCEXT(L,K) = SRCEXT(L,K) + TAUWCL*QXWATK/VEP1 + SRCSCT(L,K) = TAUWCL*QSWATK/(VEP1*VEP2) + SRCGCB(L,K) = QGWATK*VEP2/(VEP1-VEPP*QGWATK) + ENDDO + ENDIF +! Ice Cloud Size Interpolation +! ---------------------------- + IF ( FTAUC*TAUIC(L)>TAUIC0 ) THEN + SIZICL = SIZEIC(L) + LTOPCI = L + IF ( LBOTCI==0 ) LBOTCI = L + IF ( SIZICL<25.D0 ) THEN + IF ( SIZICL<3.0D0 ) SIZICL = 3.0D0 + IRICE = 2 + ICE012*5 + XRI = SIZICL/20.D0 - 0.75D0 + ELSE + IF ( SIZICL>75.D0 ) SIZICL = 75.D0 + IRICE = 4 + ICE012*5 + XRI = SIZICL/50.D0 - 1.00D0 + ENDIF + XMI = 1.D0 - XRI - XRI + XPI = 1.D0 + XRI + XRI + EPS = CLDEPS(L) + VEP = EPS/(1.D0-EPS) + VEP1 = 1.D0 + VEP + TAUICL = FTAUC*TAUIC(L) + DO K = 1, 33 + QAICEK = XMI*XPI*TRCQAB(K,IRICE) & + - XMI*XRI*TRCQAB(K,IRICE-1) & + + XPI*XRI*TRCQAB(K,IRICE+1) + QPICEK = XMI*XPI*TRCQPI(K,IRICE) & + - XMI*XRI*TRCQPI(K,IRICE-1) & + + XPI*XRI*TRCQPI(K,IRICE+1) + VEPP = VEP*QPICEK + TRCALK(L,K) = TRCALK(L,K) + TAUICL*QAICEK/(VEP1-VEPP) + ENDDO + + SRCGFC = SRCGSF(2) + IF ( ICE012==2 ) SRCGFC = SRCGSF(3) + DO K = 1, 6 + QXICEK = XMI*XPI*SRCQEX(K,IRICE) & + - XMI*XRI*SRCQEX(K,IRICE-1) & + + XPI*XRI*SRCQEX(K,IRICE+1) + QSICEK = XMI*XPI*SRCQSC(K,IRICE) & + - XMI*XRI*SRCQSC(K,IRICE-1) & + + XPI*XRI*SRCQSC(K,IRICE+1) + QGICEK = XMI*XPI*SRCQCB(K,IRICE) & + - XMI*XRI*SRCQCB(K,IRICE-1) & + + XPI*XRI*SRCQCB(K,IRICE+1) + QPICEK = XMI*XPI*SRCQPI(K,IRICE) & + - XMI*XRI*SRCQPI(K,IRICE-1) & + + XPI*XRI*SRCQPI(K,IRICE+1) + QGICEK = QGICEK*SRCGFC + VEPP = VEP*QPICEK + VEP2 = VEP1 - VEPP + SRCEXT(L,K) = SRCEXT(L,K) + TAUICL*QXICEK/VEP1 + SCTTAU = TAUICL*QSICEK/(VEP1*VEP2) + GCBICE = QGICEK*VEP2/(VEP1-VEPP*QGICEK) + SCTGCB = SRCSCT(L,K)*SRCGCB(L,K) + SCTTAU*GCBICE + SRCSCT(L,K) = SRCSCT(L,K) + SCTTAU + SRCGCB(L,K) = SCTGCB/SRCSCT(L,K) + ENDDO + ENDIF + ENDDO + +! ------------------------------------------------------------------ +! Identify Top Cloud (LTOPCL) and define top cloud albedo correction +! +! Full Scattering Correction: KCLDEM=1 ECLTRA=1.0 (default) +! Partial(rad99a) Correction: KCLDEM=0 ECLTRA=1.0 +! No Scattering Correction: KCLDEM=0 ECLTRA=0.0 +! +! KCLDEM=1 Top-cloud scattering correction uses TXCTPG,TSCTPG,TGCTPG +! to generate correction (over-rides old ECLTRA correction) +! (KCLDEM correction is computed in THRMAL at LTOPCL level) +! ------------------------------------------------------------------ + + LTOPCL = LTOPCI + IF ( LTOPCI>LTOPCW ) THEN + LTOPCL = LTOPCI + TCTAUC = FTAUC*TAUIC(LTOPCL) + DO K = 1, 33 + ALICEK = XMI*XPI*TRCQAL(K,IRICE) - XMI*XRI*TRCQAL(K,IRICE-1)& + + XPI*XRI*TRCQAL(K,IRICE+1) + QXICEK = XMI*XPI*TRCQEX(K,IRICE) - XMI*XRI*TRCQEX(K,IRICE-1)& + + XPI*XRI*TRCQEX(K,IRICE+1) + TRCTCA(K) = (1.D0-EXP(-FTAUC*TAUIC(LTOPCL)*QXICEK)) & + *ALICEK*ECLTRA + QSICEK = XMI*XPI*TRCQSC(K,IRICE) - XMI*XRI*TRCQSC(K,IRICE-1)& + + XPI*XRI*TRCQSC(K,IRICE+1) + QGICEK = XMI*XPI*TRCQCB(K,IRICE) - XMI*XRI*TRCQCB(K,IRICE-1)& + + XPI*XRI*TRCQCB(K,IRICE+1) + TXCTPG(K) = QXICEK*TCTAUC + TSCTPG(K) = QSICEK*TCTAUC + TGCTPG(K) = QGICEK + ENDDO + LBOTCL = LBOTCI + IF ( LBOTCW/=0 ) LBOTCL = LBOTCW + ELSEIF ( LTOPCW<1 ) THEN + LBOTCL = 0 + LTOPCL = 0 + ELSE + LTOPCL = LTOPCW + TCTAUW = FTAUC*TAUWC(LTOPCL) + DO K = 1, 33 + ALWATK = XMW*XPW*TRCQAL(K,IRWAT) - XMW*XRW*TRCQAL(K,IRWAT-1)& + + XPW*XRW*TRCQAL(K,IRWAT+1) + QXWATK = XMW*XPW*TRCQEX(K,IRWAT) - XMW*XRW*TRCQEX(K,IRWAT-1)& + + XPW*XRW*TRCQEX(K,IRWAT+1) + TRCTCA(K) = (1.D0-EXP(-FTAUC*TAUWC(LTOPCL)*QXWATK)) & + *ALWATK*ECLTRA + QSWATK = XMW*XPW*TRCQSC(K,IRWAT) - XMW*XRW*TRCQSC(K,IRWAT-1)& + + XPW*XRW*TRCQSC(K,IRWAT+1) + QGWATK = XMW*XPW*TRCQCB(K,IRWAT) - XMW*XRW*TRCQCB(K,IRWAT-1)& + + XPW*XRW*TRCQCB(K,IRWAT+1) + TXCTPG(K) = QXWATK*TCTAUW + TSCTPG(K) = QSWATK*TCTAUW + TGCTPG(K) = QGWATK + ENDDO + LBOTCL = LBOTCW + IF ( LBOTCI>=1 ) THEN + IF ( LBOTCI<=LBOTCW ) LBOTCL = LBOTCI + IF ( LTOPCI==LTOPCW ) THEN + TCTAUW = FTAUC*TAUWC(LTOPCL) + TCTAUC = FTAUC*TAUIC(LTOPCL) + WTI = TAUIC(LTOPCL)/(TAUIC(LTOPCL)+TAUWC(LTOPCL)) + WTW = TAUWC(LTOPCL)/(TAUIC(LTOPCL)+TAUWC(LTOPCL)) + DO K = 1, 33 + ALICEK = XMI*XPI*TRCQAL(K,IRICE) & + - XMI*XRI*TRCQAL(K,IRICE-1) & + + XPI*XRI*TRCQAL(K,IRICE+1) + QXICEK = XMI*XPI*TRCQEX(K,IRICE) & + - XMI*XRI*TRCQEX(K,IRICE-1) & + + XPI*XRI*TRCQEX(K,IRICE+1) + TRCTCI = (1.D0-EXP(-FTAUC*TAUIC(LTOPCL)*QXICEK)) & + *ALICEK*ECLTRA + TRCTCA(K) = WTW*TRCTCA(K) + WTI*TRCTCI + QSICEK = XMI*XPI*TRCQSC(K,IRICE) & + - XMI*XRI*TRCQSC(K,IRICE-1) & + + XPI*XRI*TRCQSC(K,IRICE+1) + QGICEK = XMI*XPI*TRCQCB(K,IRICE) & + - XMI*XRI*TRCQCB(K,IRICE-1) & + + XPI*XRI*TRCQCB(K,IRICE+1) + TXCTPG(K) = TXCTPG(K) + QXICEK*TCTAUC + SCTGCB = TSCTPG(K)*TGCTPG(K) + QSICEK*TCTAUC*QGICEK + TSCTPG(K) = TSCTPG(K) + QSICEK*TCTAUC + TGCTPG(K) = SCTGCB/(1.D-10+TSCTPG(K)) + ENDDO + ENDIF + ENDIF + ENDIF + + END SUBROUTINE GETCLD + +!-------------------------------- +! ENTRY UPDEPS(JYEARE,JJDAYE) +!-------------------------------- + SUBROUTINE UPDEPS(JYEARE,JJDAYE) +! Select ISCCP-Based Cloud Heterogeneity Time Dependence +! ------------------------------------------------------ + IMPLICIT NONE + INTEGER, INTENT(IN) :: JYEARE, JJDAYE + REAL*8 XJDAY, XMO, WTMJ, WTMI + INTEGER MI, MJ + + XJDAY = JJDAYE - 0.999D0 + XMO = XJDAY/30.5D0 + .5D0 + MI = XMO + WTMJ = XMO - MI + WTMI = 1.D0 - WTMJ + IF ( MI<1 ) MI = 12 + MJ = MI + 1 + IF ( MJ>12 ) MJ = 1 + + EPLOW(:,:) = WTMI*EPLMHC(:,:,MI,1) + WTMJ*EPLMHC(:,:,MJ,1) ! 72,46 + EPMID(:,:) = WTMI*EPLMHC(:,:,MI,2) + WTMJ*EPLMHC(:,:,MJ,2) + EPHIG(:,:) = WTMI*EPLMHC(:,:,MI,3) + WTMJ*EPLMHC(:,:,MJ,3) + EPCOL(:,:) = WTMI*EPLMHC(:,:,MI,4) + WTMJ*EPLMHC(:,:,MJ,4) + + END SUBROUTINE UPDEPS + +!----------------- +! ENTRY GETEPS +!----------------- + SUBROUTINE GETEPS +! ---------------------------------------------------------- +! Select Cloud Heterogeneity CLDEPS Options +! EPSCON Column Cloud Inhomogeneity EPSILON (when KCLDEP=1) +! KCLDEP Selects Cloud Inhomogeneity Option (0-4): +! KCLDEP = 0 Sets Column CLDEPS to Zero +! KCLDEP = 1 Sets Column CLDEPS to EPSCON +! KCLDEP = 2 Keeps whatever is specified in CLDEPS +! KCLDEP = 3 Uses: Column EPCOL(72,46) Climatology +! KCLDEP = 4 Uses: Ht Dep EPLOW, EPMID, EPHIG Data +! -------------------------------------------------- + IMPLICIT NONE + INTEGER L + + IF ( KCLDEP==0 ) CLDEPS(L1:NL) = 0 + IF ( KCLDEP==1 ) CLDEPS(L1:NL) = EPSCON + IF ( KCLDEP==3 ) CLDEPS(L1:NL) = EPCOL(ILON,JLAT) + IF ( KCLDEP==4 ) THEN + DO L = L1, NL + CLDEPS(L) = EPMID(ILON,JLAT) + IF ( PLB(L)>750 ) CLDEPS(L) = EPLOW(ILON,JLAT) + IF ( PLB(L)<430 ) CLDEPS(L) = EPHIG(ILON,JLAT) + ENDDO + ENDIF + + END SUBROUTINE GETEPS + + SUBROUTINE TAUGAS + IMPLICIT NONE +! ------------------------------------------------------------- +! TAUGAS INPUT REQUIRES: L1,NL,PL,DPL,TLM,ULGAS, TAUTBL,TAUWV0 +! TAUCD0,TAUO30, XKCFC,H2OCN8,H2OCF8 +! ULOX,DUX,XTRUP,XTU0,XTRDN,XTD0 +! DXUP2,DXDN2,DXUP3,DXDN3,DXUP6,DXDN6 +! DXUP7,DXDN7,DXUP8,DXDN8,DXUP9,DXDN9 +! DXUP13,DXDN13 +! TAUGAS OUTPUT DATA IS: TRGXLK,XTRU,XTRD +! ---------------------------------------------------------- + + INTEGER, PARAMETER :: NPU2 = 14, NPU = 5 + REAL*8, PARAMETER :: TLOX = 181.D0, DTX = 23.D0, P0 = 1013.25D0 + + REAL*8, PARAMETER :: PX(NPX) = (/1000D0,750D0,500D0,300D0,200D0,& + 100D0,50D0,20D0,10D0,5D0,2D0,1D0,.5D0,.2D0,& + .1D0,.03D0,.01D0,.003D0,.001D0/) + + INTEGER, PARAMETER :: NGX(4) = (/12,12,8,33/), IG1X(4) & + = (/2,14,26,1/) + REAL*8, PARAMETER :: PDPU2(NPU2) & + = (/1.D4,1.D5,2.D5,5.D5,1.D6,2.D6,5.D6, & + 1.D7,2.D7,5.D7,1.D8,2.D8,5.D8,1.D9/) + REAL*8, PARAMETER :: PU(NPU) = (/50.,200.,800.,3200.,12800./) + INTEGER, PARAMETER :: IGASX(21) & + = (/1,2,3,1,1,2,2,3,3,6,6,6,7,7,13,13,8,8,& + 9,9,1/) + INTEGER, PARAMETER :: KGX(21) & + = (/1,2,3,2,3,1,3,1,2,1,2,3,1,3,1,3,2,3,2,& + 3,4/) + INTEGER, PARAMETER :: NUX(16) & + = (/25,9,9,9,9,5,5,5,5,2,2,2,2,2,2,2/) + INTEGER, PARAMETER :: IGUX(16) & + = (/0,300,408,480,588,660,720,760,820,880,& + 904,928,944,968,984,1008/) + + + REAL*8, PARAMETER :: XKH2OW(8) & + = (/.432D-5,.943D-5,.188D-4,.352D-4, & + .623D-4,.105D-3,.170D-3,.262D-3/) + + REAL*8, PARAMETER :: XKCFCW(8,2) & + = RESHAPE((/11.0,11.7,11.5,10.9,10.3,9.90, & + 9.90,9.90,5.75,5.72,5.95,5.95,5.90,6.51, & + 6.51,6.51/),(/8,2/)) + + REAL*8, PARAMETER :: PCF(NLCF) & + = (/0.98981D+03,0.96840D+03,0.94446D+03, & + 0.91796D+03,0.88891D+03,0.85579D+03, & + 0.81757D+03,0.77425D+03,0.72686D+03, & + 0.67692D+03,0.62545D+03,0.57296D+03, & + 0.52098D+03,0.47104D+03,0.42365D+03, & + 0.37932D+03,0.33855D+03,0.30186D+03, & + 0.26874D+03,0.23867D+03,0.21115D+03, & + 0.18567D+03,0.16172D+03,0.13900D+03, & + 0.11800D+03,0.99000D+02,0.81500D+02, & + 0.65000D+02,0.50000D+02,0.37000D+02, & + 0.25500D+02,0.15000D+02,0.78100D+01, & + 0.43900D+01,0.24700D+01,0.13900D+01, & + 0.78100D+00,0.43900D+00,0.24700D+00, & + 0.13900D+00,0.75000D-01,0.35000D-01, & + 0.10000D-01/) + + REAL*8, PARAMETER :: DPCF(NLCF) & + = (/0.20380D+02,0.22430D+02,0.25470D+02, & + 0.27520D+02,0.30580D+02,0.35670D+02, & + 0.40770D+02,0.45860D+02,0.48920D+02, & + 0.50960D+02,0.51980D+02,0.53000D+02, & + 0.50960D+02,0.48920D+02,0.45860D+02, & + 0.42810D+02,0.38720D+02,0.34660D+02, & + 0.31590D+02,0.28540D+02,0.26500D+02, & + 0.24460D+02,0.23440D+02,0.22000D+02, & + 0.20000D+02,0.18000D+02,0.17000D+02, & + 0.16000D+02,0.14000D+02,0.12000D+02, & + 0.11000D+02,0.10000D+02,0.43800D+01, & + 0.24600D+01,0.13800D+01,0.78000D+00, & + 0.43800D+00,0.24600D+00,0.13800D+00, & + 0.78000D-01,0.50000D-01,0.30000D-01, & + 0.20000D-01/) + + REAL*8, PARAMETER :: PLBCF(NLCF+1) & + = (/0.10000D+04,0.97962D+03,0.95719D+03, & + 0.93172D+03,0.90420D+03,0.87362D+03, & + 0.83795D+03,0.79718D+03,0.75132D+03, & + 0.70240D+03,0.65144D+03,0.59946D+03, & + 0.54646D+03,0.49550D+03,0.44658D+03, & + 0.40072D+03,0.35791D+03,0.31919D+03, & + 0.28453D+03,0.25294D+03,0.22440D+03, & + 0.19790D+03,0.17344D+03,0.15000D+03, & + 0.12800D+03,0.10800D+03,0.90000D+02, & + 0.73000D+02,0.57000D+02,0.43000D+02, & + 0.31000D+02,0.20000D+02,0.10000D+02, & + 0.56200D+01,0.31600D+01,0.17800D+01, & + 0.10000D+01,0.56200D+00,0.31600D+00, & + 0.17800D+00,0.10000D+00,0.50000D-01, & + 0.20000D-01,0.00000D+00/) + + + REAL*8, PARAMETER :: DLOG2 = .30103D0, ULMNH2 = 1.85124D0, & + ULMNCH = -.8160D0, ULMNN2 = -1.527D0, & + ULMNF1 = -4.780D0, ULMNO3 = -1.368D0, & + ULMNCO = 1.523D0, ULMNF2 = -4.524D0, & + USO2S = .042D0 + REAL*8, DIMENSION(NLCF,NRCF) :: XTU, XTD + REAL*8, DIMENSION(NLCF,NWVCF,NRCF) :: DXUP, DXDN + REAL*8 PRATCF(NLCF) + INTEGER MLGAS(21) + INTEGER I, IM, L, LCF, LCFdn, LCFup, NLPrat, IULOW, IPX, ITX, & + IGAS, NG, KK, IK1, IK2, IPU, IK, NU, IUA, nsum, IUB, & + IH2O0, IG, ICDlow, ICO20, IO3low, IO30, IUW, IU1, IU2, & + i2u1, i2u2, i3u1, i3u2, i6u1, i6u2, i7u1, i7u2, i8u1, & + i8u2, i9u1, i9u2 + + REAL*8 UH2O, UCO2L, UO3LL, UCH4L, UN2OL, UCF1L, UCF2L, USO2, & + UCH4L1, CH4RAT, DUH2, DU1, DU2, DUCO, D2U1, D2U2, DUO3, & + D3U1, D3U2, DUCH, D7U1, D7U2, DUN2, D6U1, D6U2, DUF1, D8U1,& + D8U2, DUF2, D9U1, D9U2, SUM1, SUM2, sumPR, TAUT1, TAUT2, & + TAUCF, TAUIPG, TAUSUM, TAU11, TAU12, QAA, QAB, QBA, QBB, & + PLL, PU2, U, UP, UGAS, UAA, UAB, UBA, UBB, WPB, WTB, WTPU, & + XA, XB, XK, XUA, XUB, WAA, WAB, WBA, WBB, WAAA, WAAB, WABA,& + WABB, WBAA, WBAB, WBBA, WBBB + REAL*8 PRAT(LX), WT(LX) + INTEGER LCFofL(LX) + + ! The variation of correction factors with the water vapor + ! profile is determined via a two-step procedure. + ! As for the other absorbers, a lookup-table dependence upon + ! total column absorber amount is constructed by multiplying + ! a reference vapor profile by a set of powers of 2 that index + ! the tables. + ! The actual shape of the water vapor profile for which fluxes + ! are being computed is then folded into this column-oriented + ! framework via per-layer interpolations for downward/upward flux + ! correction factors that select the reference profile having + ! the same column amount above/below each layer. + ! In rare cases for which water vapor mixing ratios increase upward + ! in the lower troposphere, an additional correction is performed. + ! Since the interpolations in absorber amount are performed + ! on the layers of the reference atmosphere, a call to REPART + ! is needed to regrid the GCM water vapor to the reference layers. + + ! Interp. weights/indices and their prerequisites for downward-flux + ! correction factors + REAL*8, DIMENSION(NLCF) :: qabove, uh2otl, duh2o1dn, duh2o2dn + INTEGER, DIMENSION(NLCF) :: iuh2o1dn, iuh2o2dn + REAL*8, PARAMETER :: UCMRCF(NLCF) & + = (/0.10000D+01,0.11031D+01,0.12329D+01, & + 0.14042D+01,0.16222D+01,0.19138D+01, & + 0.23456D+01,0.29937D+01,0.40048D+01, & + 0.55959D+01,0.81519D+01,0.12375D+02, & + 0.19808D+02,0.32524D+02,0.54780D+02, & + 0.93174D+02,0.15748D+03,0.25287D+03, & + 0.37309D+03,0.50049D+03,0.60868D+03, & + 0.71320D+03,0.84524D+03,0.10234D+04, & + 0.12685D+04,0.16078D+04,0.20909D+04, & + 0.28557D+04,0.41673D+04,0.66299D+04, & + 0.12554D+05,0.26315D+05,0.59589D+05, & + 0.10604D+06,0.18859D+06,0.33480D+06, & + 0.59602D+06,0.10608D+07,0.18872D+07, & + 0.33520D+07,0.59729D+07,0.11972D+08, & + 0.30143D+08/) + + + ! Interp. weights/indices and their prerequisites for upward-flux + ! correction factors + REAL*8, DIMENSION(NLCF) :: qbelow, uh2oul, duh2o1up, duh2o2up + INTEGER, DIMENSION(NLCF) :: iuh2o1up, iuh2o2up + REAL*8, PARAMETER :: UCMUCF(NLCF) & + = (/0.10701D+02,0.52946D+01,0.34738D+01, & + 0.26072D+01,0.20943D+01,0.17432D+01, & + 0.15016D+01,0.13328D+01,0.12176D+01, & + 0.11398D+01,0.10879D+01,0.10532D+01, & + 0.10317D+01,0.10186D+01,0.10108D+01, & + 0.10064D+01,0.10040D+01,0.10027D+01, & + 0.10020D+01,0.10016D+01,0.10014D+01, & + 0.10012D+01,0.10010D+01,0.10008D+01, & + 0.10006D+01,0.10005D+01,0.10004D+01, & + 0.10002D+01,0.10002D+01,0.10001D+01, & + 0.10000D+01,0.10000D+01,0.10000D+01, & + 0.10000D+01,0.10000D+01,0.10000D+01, & + 0.10000D+01,0.10000D+01,0.10000D+01, & + 0.10000D+01,0.10000D+01,0.10000D+01, & + 0.10000D+01/) + + REAL*8 :: dudp(LX), ddudp + ! ddudp is vertical gradient of water vapor + REAL*8 :: dxtru3_10(10) + ! optional correction of top 10 layers <.2mb + +#ifdef TAPER_UTCF + REAL*8 :: pcen_tap, wt_one, pwid_tap +#endif + + ! compute QABOVE/QBELOW, the WV amount above/below each reference level + CALL REPART(ULGAS(1,1),PLB,NL+1,QABOVE,PLBCF,NLCF+1) + QBELOW = QABOVE + DO L = 2, NLCF + QBELOW(L) = QBELOW(L) + QBELOW(L-1) + ENDDO + DO L = NLCF - 1, 1, -1 + QABOVE(L) = QABOVE(L) + QABOVE(L+1) + ENDDO + DO L = 1, NLCF + IF ( QABOVE(L)>0. ) THEN + UH2OTL(L) = LOG10(UCMRCF(L)*QABOVE(L)) + ELSE + UH2OTL(L) = 0. + ! should not happen + ENDIF + IF ( QBELOW(L)>0. ) THEN + UH2OUL(L) = LOG10(UCMUCF(L)*QBELOW(L)) + ELSE + UH2OUL(L) = 0. + ! below ground + ENDIF + ENDDO + +! MLGAS DEF. +! ---------- +! H2O: 1,4,5 CO2: 2,6,7 O3: 3,8,9 N2O: 10,11,12 CH4: 13,14 +! SO2: 15,16 CFC: 17-20 WVCON: 21 + + MLGAS(:) = 1 + ! 1:21 + +! KWVCON = ON/OFF flag for water vapor continuum absorption +! --------------------------------------------------------- + IF ( KWVCON<1 ) MLGAS(21) = 0 + +!**** Find correction factors XTU and XTD +! Prepare interpolation from PL to PCF pressure levels + LCF = 2 + NLPrat = NL + DO L = L1, NL + PLL = PL(L) +! Find LCF s.t. PLLmid is between PCF(LCF) and PCF(LCF-1) + DO WHILE ( PLLNLCF ) THEN ! PL-levels higher than PCF_top + NLPrat = L - 1 + GOTO 100 + ENDIF + ENDDO + LCFofL(L) = LCF + WT(L) = (PLL-PCF(LCF))/(PCF(LCF-1)-PCF(LCF)) + WT(L) = MIN(WT(L),1D0) + Prat(L) = DPL(L)/(DPCF(LCF-1)*WT(L)+DPCF(LCF)*(1-WT(L))) + ENDDO + + 100 ICDlow = 0 ! default: CO2 not low + IO3low = 0 ! default: O3 not low + IUlow = 0 ! water vapor not low + + UH2O = 1D-10 + SUM(ULGAS(L1:NL,1)) + IF ( UH2O<1.1D-10 ) THEN ! low water vapor + IUlow = 1 + XTU(:,:) = XTU0(:,:) ! 1:NLCF,1:NRCF + XTD(:,:) = XTD0(:,:) ! 1:NLCF,1:NRCF + GOTO 180 ! if no water vapor + ENDIF + + UCO2L = LOG10(1D-10+SUM(ULGAS(L1:NL,2))) + UO3LL = LOG10(1D-10+SUM(ULGAS(L1:NL,3))) + UCH4L = LOG10(1D-10+SUM(ULGAS(L1:NL,7))) + UN2OL = LOG10(1D-10+SUM(ULGAS(L1:NL,6))) + UCF1L = LOG10(1D-10+SUM(ULGAS(L1:NL,8))) + UCF2L = LOG10(1D-10+SUM(ULGAS(L1:NL,9))) + USO2 = SUM(ULGAS(L1:NL,13)) + + CH4RAT = 1. + IF ( UCH4L>.7 ) THEN ! high CH4 concentration case + IF ( UCH4L<1.1 ) THEN + UCH4L1 = 1.15*UCH4L - .1 + ELSEIF ( UCH4L<1.7 ) THEN + UCH4L1 = 0.70*UCH4L + .4 + ELSE + UCH4L1 = 0.375*UCH4L + .95 + ENDIF + CH4RAT = 10**UCH4L1/10**UCH4L + UCH4L = UCH4L1 + ENDIF + + IF ( UCO2L<-9.958607315D0 ) ICDlow = 1 ! if UCO2<1.1d-10 (low CO2) + IF ( UO3LL<-9.6 ) IO3LOW = 1 ! low ozone + + DUCO = UCO2L - ULMNCO + IF ( DUCO<0. ) DUCO = 0. + I2U1 = DUCO/DLOG2 + 1 + IF ( I2U1<1 ) I2U1 = 1 + IF ( I2U1>NUCF-1 ) I2U1 = NUCF - 1 + I2U2 = I2U1 + 1 + D2U1 = DUCO - (I2U1-1)*DLOG2 + D2U2 = DLOG2 - D2U1 + + DUO3 = UO3LL - ULMNO3 + IF ( DUO3<0. ) DUO3 = 0. + I3U1 = DUO3/DLOG2 + 1 + IF ( I3U1<1 ) I3U1 = 1 + IF ( I3U1>NUCF-1 ) I3U1 = NUCF - 1 + I3U2 = I3U1 + 1 + D3U1 = DUO3 - (I3U1-1)*DLOG2 + D3U2 = DLOG2 - D3U1 + + DUCH = UCH4L - ULMNCH + I7U1 = DUCH/DLOG2 + 1 + IF ( I7U1<1 ) I7U1 = 1 + IF ( I7U1>NUCF-1 ) I7U1 = NUCF - 1 + I7U2 = I7U1 + 1 + D7U1 = DUCH - (I7U1-1)*DLOG2 + D7U2 = DLOG2 - D7U1 + + DUN2 = UN2OL - ULMNN2 + IF ( DUN2<0. ) DUN2 = DUN2*.5 + IF ( DUN2<-.56 ) DUN2 = -.56 + I6U1 = DUN2/DLOG2 + 1 + IF ( I6U1<1 ) I6U1 = 1 + IF ( I6U1>NUCF-1 ) I6U1 = NUCF - 1 + I6U2 = I6U1 + 1 + D6U1 = DUN2 - (I6U1-1)*DLOG2 + D6U2 = DLOG2 - D6U1 + + DUF1 = UCF1L - ULMNF1 + IF ( DUF1<-.25 ) DUF1 = -.25 + I8U1 = DUF1/DLOG2 + 1 + IF ( I8U1<1 ) I8U1 = 1 + IF ( I8U1>NUCF-1 ) I8U1 = NUCF - 1 + I8U2 = I8U1 + 1 + D8U1 = DUF1 - (I8U1-1)*DLOG2 + D8U2 = DLOG2 - D8U1 + + DUF2 = UCF2L - ULMNF2 + IF ( DUF2<-.2 ) DUF2 = -.2 + I9U1 = DUF2/DLOG2 + 1 + IF ( I9U1<1 ) I9U1 = 1 + IF ( I9U1>NUCF-1 ) I9U1 = NUCF - 1 + I9U2 = I9U1 + 1 + D9U1 = DUF2 - (I9U1-1)*DLOG2 + D9U2 = DLOG2 - D9U1 +! IF(I9U1.GT.9xxxfixthis) THEN +! I9U1=1 +! I9U2=2 +! D9U1=0. +! D9U2=0. +! end if + +! Find pressure ratios on PCF levels by averaging Prat +! Fill missed layers copying from the nearest layer above + LCFdn = 1 ! bottom of current segment + LCFup = LCFofL(L1) ! top of current segment + sumPR = Prat(L1) + PratCF(LCFdn:LCFup) = sumPR + nsum = 1 + DO L = L1 + 1, NLPrat + LCF = LCFofL(L) + IF ( LCF==LCFup ) THEN + ! update the current PratLCF segment + sumPR = sumPR + Prat(L) + NSUM = NSUM + 1 + PratCF(LCFdn:LCFup) = sumPR/DFLOAT(NSUM) + ELSE ! start next PratLCF segment + sumPR = Prat(L) + PratCF(LCFup+1:LCF) = sumPR + NSUM = 1 + LCFdn = LCFup + 1 + LCFup = LCF + ENDIF + ENDDO + PratCF(LCFup+1:NLCF) = PratCF(LCFup) + ! at top fill from below + + DO I = 1, NLCF + DUH2 = UH2OUL(I) - ULMNH2 + IF ( DUH2<0. ) DUH2 = 0. + IU1 = DUH2/DLOG2 + 1. + IF ( IU1<1 ) IU1 = 1 + IF ( IU1>NWVCF-1 ) IU1 = NWVCF - 1 + IU2 = IU1 + 1 + DUH2O1up(I) = DUH2 - (IU1-1)*DLOG2 + DUH2O2up(I) = DLOG2 - DUH2O1up(I) + IUH2O1up(I) = IU1 + IUH2O2up(I) = IU2 + ENDDO + + DO I = 1, NLCF + DUH2 = UH2OTL(I) - ULMNH2 + IF ( DUH2<0. ) DUH2 = 0. + IU1 = DUH2/DLOG2 + 1. + IF ( IU1<1 ) IU1 = 1 + IF ( IU1>NWVCF-1 ) IU1 = NWVCF - 1 + IU2 = IU1 + 1 + DUH2O1dn(I) = DUH2 - (IU1-1)*DLOG2 + DUH2O2dn(I) = DLOG2 - DUH2O1dn(I) + IUH2O1dn(I) = IU1 + IUH2O2dn(I) = IU2 + ENDDO + + DO IM = 1, NRCF + DO I = 1, NLCF + DO IUW = IUH2O1up(I), IUH2O2up(I) + + SUM1 = (DXUP2(I,IUW,I2U2,IM)*D2U1+DXUP2(I,IUW,I2U1,IM) & + *D2U2) & + + (DXUP3(I,IUW,I3U2,IM)*D3U1+DXUP3(I,IUW,I3U1,IM) & + *D3U2) + PratCF(I) & + *((DXUP7(I,IUW,I7U2,IM)*D7U1+DXUP7(I,IUW,I7U1,IM) & + *D7U2) & + +(DXUP6(I,IUW,I6U2,IM)*D6U1+DXUP6(I,IUW,I6U1,IM) & + *D6U2)) & + + (DXUP8(I,IUW,I8U2,IM)*D8U1+DXUP8(I,IUW,I8U1,IM) & + *D8U2) & + + (DXUP9(I,IUW,I9U2,IM)*D9U1+DXUP9(I,IUW,I9U1,IM) & + *D9U2) + DXUP(I,IUW,IM) = SUM1/DLOG2 + DXUP13(I,IUW,IM)*USO2/USO2S + ENDDO + DO IUW = IUH2O1dn(I), IUH2O2dn(I) + + SUM2 = (DXDN2(I,IUW,I2U2,IM)*D2U1+DXDN2(I,IUW,I2U1,IM) & + *D2U2) & + + (DXDN3(I,IUW,I3U2,IM)*D3U1+DXDN3(I,IUW,I3U1,IM) & + *D3U2) + PratCF(I) & + *((DXDN7(I,IUW,I7U2,IM)*D7U1+DXDN7(I,IUW,I7U1,IM) & + *D7U2) & + +(DXDN6(I,IUW,I6U2,IM)*D6U1+DXDN6(I,IUW,I6U1,IM) & + *D6U2)) & + + (DXDN8(I,IUW,I8U2,IM)*D8U1+DXDN8(I,IUW,I8U1,IM) & + *D8U2) & + + (DXDN9(I,IUW,I9U2,IM)*D9U1+DXDN9(I,IUW,I9U1,IM) & + *D9U2) + DXDN(I,IUW,IM) = SUM2/DLOG2 + DXDN13(I,IUW,IM)*USO2/USO2S + ENDDO + ENDDO + ! LAYER + ENDDO ! IM + + DO IM = 1, NRCF + DO I = 1, NLCF + DU1 = DUH2O1up(I) + DU2 = DUH2O2up(I) + IU1 = IUH2O1up(I) + IU2 = IUH2O2up(I) + XTU(I,IM) = ((XTRUP(I,IU2,IM)+DXUP(I,IU2,IM))*DU1+(XTRUP(I, & + IU1,IM)+DXUP(I,IU1,IM))*DU2)/DLOG2 + DU1 = DUH2O1dn(I) + DU2 = DUH2O2dn(I) + IU1 = IUH2O1dn(I) + IU2 = IUH2O2dn(I) + XTD(I,IM) = ((XTRDN(I,IU2,IM)+DXDN(I,IU2,IM))*DU1+(XTRDN(I, & + IU1,IM)+DXDN(I,IU1,IM))*DU2)/DLOG2 + ENDDO + ENDDO + +!**** Interpolate correction factors to model grid: XTU/D=>XTRU/D + + 180 IF ( transmission_corrections ) THEN + ! note window region is position 1 in XTRU, XTRD + XTRU(:,1) = 1. + XTRD(:,1) = 1. + + DO L = L1, MIN(NLPrat,NL-1) + LCF = LCFofL(L) + XTRU(L,2:NRCF+1) = 1. - PRAT(L) & + *(1.-XTU(LCF-1,:)*WT(L)-XTU(LCF,:) & + *(1.-WT(L))) + XTRD(L,2:NRCF+1) = 1. - PRAT(L) & + *(1.-XTD(LCF-1,:)*WT(L)-XTD(LCF,:) & + *(1.-WT(L))) + ENDDO + + DO L = NLPrat + 1, NL - 1 + XTRU(L,2:NRCF+1) = XTU(NLCF,:) + XTRD(L,2:NRCF+1) = XTD(NLCF,:) + ENDDO + + XTRU(NL,2:NRCF+1) = 1. + XTRD(NL,2:NRCF+1) = 1. + +#ifdef TAPER_UTCF + ! force upward transmission correction factors to 1 near the model top + !pcen_tap = 1d0 ! center pressure (mb) of blending region + pcen_tap = .1D0 + ! center pressure (mb) of blending region + pwid_tap = .5D0*pcen_tap + ! width (mb) of blending region + DO l = nl, 1, -1 + wt_one = .5D0*(1D0+TANH((pcen_tap-plb(l))/pwid_tap)) + ! blending weight + xtru(l,2:NRCF+1) = wt_one*1D0 + (1D0-wt_one) & + *xtru(l,2:NRCF+1) + xtrd(l,2:NRCF+1) = wt_one*1D0 + (1D0-wt_one) & + *xtrd(l,2:NRCF+1) + IF ( wt_one<1D-3 ) EXIT + ! far from model top + ENDDO +#endif + + ! correction for cases when water vapor mixing ratio increases upward + DO L = 1, NL + DUDP(L) = ULGAS(L,1)/(PLB(L)-PLB(L+1)) + ENDDO + DO L = 2, NL - 1 + IF ( PLB(L)<600. ) EXIT + !DDUDP=(DUDP(L)-DUDP(L+1))/(PLB(L)-PLB(L+1)) + DDUDP = (DUDP(L-1)-DUDP(L))/(PL(L-1)-PL(L)) + IF ( DDUDP>=0. ) CYCLE + IF ( DDUDP>-.00037D0 ) THEN ! avoid nonzero effect for DDUDP==0 + XTRD(L,2) = XTRD(L,2) - 100D0*DDUDP + ELSE + XTRD(L,2) = XTRD(L,2) + (.035D0-5.25D0*DDUDP) + ENDIF + ENDDO + + ELSE + XTRU(:,:) = 1. + XTRD(:,:) = 1. + ENDIF + +!**** Find TRGXLK + TRGXLK(L1:NL,1:33) = 0.D0 + IPX = 2 + DO L = L1, NL + DO +! Locate model layer pressure between IPX and IPX-1 + WPB = (PL(L)-PX(IPX))/(PX(IPX-1)-PX(IPX)) + IF ( WPB>=0 .OR. IPX>=NPX ) THEN +! Locate model layer temperature between ITX and ITX+1 + WTB = (TLM(L)-TLOX)/DTX + 1 + ITX = WTB + IF ( ITX<1 ) ITX = 1 + IF ( ITX>=NTX ) ITX = NTX - 1 + WTB = WTB - ITX + + WBB = WPB*WTB + WBA = WPB - WBB + WAB = WTB - WBB + WAA = 1 - (WBB+WBA+WAB) + + DO IGAS = 1, 21 + IF ( MLGAS(IGAS)>=1 ) THEN + KK = IG1X(KGX(IGAS)) + NG = NGX(KGX(IGAS)) + UGAS = ULGAS(L,IGASX(IGAS)) + IF ( IGAS==13 .OR. IGAS==14 ) UGAS = UGAS*CH4RAT + IF ( IGAS==17 .OR. IGAS==18 ) UGAS = UGAS + & + ULGAS(L,11) + + IF ( IGAS>=21 ) THEN + +! IGAS = 21 Apply water vapor continuum absorption +! --------- -------------------------------------- +! KCSELF = ON/FF flag for H2O self broadening continuum +! ----------------------------------------------------- + IF ( KCSELF>0 ) THEN + + DO IK1 = 1, 2 + IF ( IK1==1 ) THEN + IK2 = 1 + U = UGAS*1.15D0 + ! thermal K-domain 1 + ELSE + ! IK1=2 + IK2 = 33 + U = UGAS*XCSELF + ! thermal K-domain 2-33 + ENDIF + PU2 = PL(L)/DPL(L)*U**2 + IF ( PU2>PDPU2(1) ) THEN + IPU = 2 + DO WHILE ( PU2>PDPU2(IPU) .AND. & + IPU=1 ) THEN + KK = IG1X(KGX(IGAS)) + DO IK1 = 1, 2 + IF ( IK1==1 ) THEN + IK2 = 1 + U = UGAS*1.15D0 + ELSE + ! IK1=2 + IK2 = 33 + U = UGAS*XCFORN + ENDIF + UP = PL(L)/P0*U + IF ( UP>PU(1) ) THEN + IPU = 2 + DO WHILE ( UP>PU(IPU) .AND. IPU=NU-1 ) THEN + XUA = NU - 1 + IUA = NU - 2 + QAA = UGAS/(ULOX(IPX,IGAS)+DUX(IPX,IGAS) & + *(NU-2)) + QAB = UGAS/(ULOX(IPX,IGAS)+DUX(IPX,IGAS) & + *(NU-1)) + ENDIF + QBA = 1 + QBB = 1 + IF ( XUB<=0 ) THEN + XUB = 0 + IUB = 0 + QBA = UGAS/ULOX(IPX-1,IGAS) + QBB = UGAS/(ULOX(IPX-1,IGAS)+DUX(IPX-1,IGAS)) + ENDIF + IF ( XUB>=NU-1 ) THEN + XUB = NU - 1 + IUB = NU - 2 + QBA = UGAS/(ULOX(IPX-1,IGAS)+DUX(IPX-1,IGAS) & + *(NU-2)) + QBB = UGAS/(ULOX(IPX-1,IGAS)+DUX(IPX-1,IGAS) & + *(NU-1)) + ENDIF + UAB = XUA - IUA + UBB = XUB - IUB + UAA = 1 - UAB + UBA = 1 - UBB + + WAAA = WAA*UAA*QAA + WAAB = WAA*UAB*QAB + WABA = WAB*UAA*QAA + WABB = WAB*UAB*QAB + WBAA = WBA*UBA*QBA + WBAB = WBA*UBB*QBB + WBBA = WBB*UBA*QBA + WBBB = WBB*UBB*QBB + + IH2O0 = 0 + IF ( (IGAS==6 .OR. IGAS==8 .OR. IGAS==10 .OR. & + IGAS==13 .OR. IGAS==15) .AND. IULOW==1 ) & + IH2O0 = 1 + + ICO20 = 0 + IF ( (IGAS==4 .OR. IGAS==9 .OR. IGAS==11) .AND. & + ICDLOW==1 ) ICO20 = 1 + + IO30 = 0 + IF ( (IGAS==5 .OR. IGAS==7 .OR. IGAS==12 .OR. & + IGAS==14 .OR. IGAS==16) .AND. IO3LOW==1 ) & + IO30 = 1 + +!!! WARNING: If IH2O0+ICO20+IO30=2 accuracy is reduced +!!! WARNING: If IH2O0+ICO20+IO30=3 result is unusable + + DO IG = 1, NG + IF ( IH2O0==1 ) THEN + TAUIPG = WAAA*TAUWV0(IG+IGUX(IGAS)+NG*IUA,& + ITX,IPX) & + + WAAB*TAUWV0(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX,IPX) & + + WABA*TAUWV0(IG+IGUX(IGAS) & + +NG*IUA,ITX+1,IPX) & + + WABB*TAUWV0(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX+1,IPX) & + + WBAA*TAUWV0(IG+IGUX(IGAS) & + +NG*IUB,ITX,IPX-1) & + + WBAB*TAUWV0(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX,IPX-1) & + + WBBA*TAUWV0(IG+IGUX(IGAS) & + +NG*IUB,ITX+1,IPX-1) & + + WBBB*TAUWV0(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX+1,IPX-1) + ! low H2O + ELSEIF ( ICO20==1 ) THEN + TAUIPG = WAAA*TAUCD0(IG+IGUX(IGAS)+NG*IUA,& + ITX,IPX) & + + WAAB*TAUCD0(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX,IPX) & + + WABA*TAUCD0(IG+IGUX(IGAS) & + +NG*IUA,ITX+1,IPX) & + + WABB*TAUCD0(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX+1,IPX) & + + WBAA*TAUCD0(IG+IGUX(IGAS) & + +NG*IUB,ITX,IPX-1) & + + WBAB*TAUCD0(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX,IPX-1) & + + WBBA*TAUCD0(IG+IGUX(IGAS) & + +NG*IUB,ITX+1,IPX-1) & + + WBBB*TAUCD0(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX+1,IPX-1) + ! low CO2 + ELSEIF ( IO30==1 ) THEN + TAUIPG = WAAA*TAUO30(IG+IGUX(IGAS)+NG*IUA,& + ITX,IPX) & + + WAAB*TAUO30(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX,IPX) & + + WABA*TAUO30(IG+IGUX(IGAS) & + +NG*IUA,ITX+1,IPX) & + + WABB*TAUO30(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX+1,IPX) & + + WBAA*TAUO30(IG+IGUX(IGAS) & + +NG*IUB,ITX,IPX-1) & + + WBAB*TAUO30(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX,IPX-1) & + + WBBA*TAUO30(IG+IGUX(IGAS) & + +NG*IUB,ITX+1,IPX-1) & + + WBBB*TAUO30(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX+1,IPX-1) + ! low O3 + ELSE + !! if H2O, CO2, O3 are present (I..0=0) + TAUIPG = WAAA*TAUTBL(IG+IGUX(IGAS)+NG*IUA,& + ITX,IPX) & + + WAAB*TAUTBL(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX,IPX) & + + WABA*TAUTBL(IG+IGUX(IGAS) & + +NG*IUA,ITX+1,IPX) & + + WABB*TAUTBL(IG+IGUX(IGAS) & + +NG*(IUA+1),ITX+1,IPX) & + + WBAA*TAUTBL(IG+IGUX(IGAS) & + +NG*IUB,ITX,IPX-1) & + + WBAB*TAUTBL(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX,IPX-1) & + + WBBA*TAUTBL(IG+IGUX(IGAS) & + +NG*IUB,ITX+1,IPX-1) & + + WBBB*TAUTBL(IG+IGUX(IGAS) & + +NG*(IUB+1),ITX+1,IPX-1) + ENDIF + + TAUSUM = TRGXLK(L,KK) + TAUIPG + IF ( TAUSUM>0 ) TRGXLK(L,KK) = TAUSUM + KK = KK + 1 + ENDDO + ELSE +! IGAS=17-20 Chloro Fluoro Carbons +! ---------- --------------------- + DO IK = 1, NG + XA = WTB*(XKCFC(IK,ITX+1,IGAS) & + -XKCFC(IK,ITX,IGAS)) & + + XKCFC(IK,ITX,IGAS) + XB = WTB*(XKCFC(IK,ITX+1,IGAS) & + -XKCFC(IK,ITX,IGAS)) & + + XKCFC(IK,ITX,IGAS) + XK = WPB*(XA-XB) + XB + TAUCF = XK*UGAS + TRGXLK(L,KK) = TRGXLK(L,KK) + TAUCF + KK = KK + 1 + ENDDO + ENDIF + ENDIF + ENDDO + + +!------------------------------------------------------------------- +! H2O WINDOW ABSORPTION (2013) +!------------------------------------------------------------------- + IF ( MLGAS(1)==1 ) THEN + XK = WTB*(XKH2OW(ITX+1)-XKH2OW(ITX)) + XKH2OW(ITX) + TRGXLK(L,1) = TRGXLK(L,1) + XK*ULGAS(L,1) + ENDIF + +! CFC11 and CFC12 Window Absorption (1997) +! ---------------------------------------- + + IF ( MLGAS(17)==1 .OR. MLGAS(18)==1 ) THEN + XK = WTB*(XKCFCW(ITX+1,1)-XKCFCW(ITX,1)) & + + XKCFCW(ITX,1) + TAU11 = XK*(ULGAS(L,8)+ULGAS(L,11)) + TRGXLK(L,1) = TRGXLK(L,1) + TAU11 + ENDIF + IF ( MLGAS(19)==1 .OR. MLGAS(20)==1 ) THEN + XK = WTB*(XKCFCW(ITX+1,2)-XKCFCW(ITX,2)) & + + XKCFCW(ITX,2) + TAU12 = XK*ULGAS(L,9) + TRGXLK(L,1) = TRGXLK(L,1) + TAU12 + ENDIF + EXIT + ELSE + IPX = IPX + 1 + ENDIF + ENDDO + ENDDO + +! Optional LW up-flux correction for top 10 layers above 0.2 mb + IF ( kfpco2==4 ) THEN + CALL GET_DXTRU3_CORR(dxtru3_10,jlat,MLAT46,jday) + xtru(nl-9:nl,3) = 1.D0 + dxtru3_10(1:10) + ENDIF + + END SUBROUTINE TAUGAS + + SUBROUTINE THERML +#ifdef PLANET_PARAMS + USE CONSTANT, ONLY:KAPA ! exceptional use of external module +#endif + IMPLICIT NONE +! ------------------------------------------------------------------ +! Top-cloud Thermal Scattering Correction Control Parameters +! ---------------------------------------------------------- +! +! ECLTRA = 1.0 Scattering correction is enabled +! with KCLDEM = 1, Rigorous scattering correction is applied +! with KCLDEM = 0, Approximate scattering correction is used +! +! ECLTRA = 0.0 No scattering correction is used +! (Independent of KCLDEM value) +! +! ------------------------------------------------------------------ +! Lower Edge Temperature Interpolation +! ------------------------------------ +! TLGRAD=1.0 (Default) +! Layer-mean temperatures (TLM) supplied by GCM are used +! to define the layer edge temperature TLT (top) and TLB +! (bottom) using overall atmospheric temperature profile +! to establish temperature gradient within each layer so +! as to minimize the temperature discontinuities between +! layer edges and to conserve layer thermal energy. +! +! TLGRAD=0.0 This results in isothermal layers with TLT = TLB = TLM +! +! TLGRAD<0.0 TLT and TLB are used as specified, without any further +! adjustments. This is mainly for off-line use when the +! temperature profile (TLM,TLT,TLB) can be fully defined +! from a continuous temperature profile. +! +! NOTE: TLGRAD can also accommodate values between 0.0 and 1.0 +! +! PTLISO (Default PTLISO=2.5mb) +! Pressure level above which model layers are defined to +! be isothermal. This is appropriate for optically thin +! layers where emitted flux depends on mean temperature. +! ------------------------------------------------------------------ + REAL*8 :: PX(9) = (/1001.,973.,934.,865.,752.,603.,439.,283., & + 156./) + REAL*8 :: ALG2 = .30103D0, TAUMNL = -2.20412D0 + + REAL*8, PARAMETER :: R6 = .16666667D0, R24 = 4.1666667D-02 + REAL*8, PARAMETER :: A = 0.3825D0, B = 0.5742D0, C = 0.0433D0 + +#ifndef PLANET_PARAMS + REAL*8, PARAMETER :: KAPA = .286D0 +#endif + + REAL*8 TA, TB, TC, P1, P2, P3, P4, DT1CPT, DTHALF, CLTAUX, CLTAUS,& + CLCOSB, CTX, DT2, DT1, CTG, DG2, DG1, WT1, WT2, WT3, WT4, & + WT5, WT6, WT7, WT8, BG, DNACUM, DNBCUM, DNCCUM, TAUAG, & + TAUAP, TAUBP, TAUCP, TAUAX, TAUBX, TAUCX, XTRDL, BTOP, & + BBOT, BBAR, TX, PLBN, F, TAUA, TAUB, TAUC, BDIF, BBTA, & + BBTB, BBTC, TRANA, TRANB, TRANC, DEC, DEB, DEA, COALB1, & + COALB2, COALB3, FDNABC, UNA, UNB, UNC, FUNABC, PFW, DPF, & + CTP, DP1, DP2, TAUBG, TAUCG, DDFLUX, XTRUL, FSUM, XFSUM, & + PLL, DTAU0, TAUPLG, AP1, AP2, XTF, XTFACN + REAL*8 ENA(LX), ENB(LX), ENC(LX), TRA(LX), TRB(LX), TRC(LX) + REAL*8 DNA(LX), DNB(LX), DNC(LX), WTLB(LX), WTLT(LX) + REAL*8 RIJTCK(6,33), FDXTCK(3,33), FEMTCK(3,33), ALBTCK(3,33) + REAL*8 CLPI0(33), CLPI0K + INTEGER K, L, LL, II, ITL, ICT, IT1, IT2, IP1, IP2, ICG, IG1, IG2,& + IMOL, IPF, ICP, ITLT(LX), ITLB(LX), IP, IPX0, ITAU1, & + ITAU2, LTOPA, LCL(LX), ia, iaa, ic, iu, lvlo, lvhi, lskip,& + lcbot, nclds, icomb + +!----------------------------------------------------------------------- +! Layer edge temperature interpolation +!----------------------------------------------------------------------- + IF ( TLGRAD>=0.D0 ) THEN + TA = TLM(L1) + TB = TLM(L1+1) + P1 = PLB(L1) + P2 = PLB(L1+1) + P3 = PLB(L1+2) + DT1CPT = .5*TA*(P1**KAPA-P2**KAPA)/PL(L1)**KAPA + DTHALF = (TA-TB)*(P1-P2)/(P1-P3) + IF ( DTHALF>DT1CPT ) DTHALF = DT1CPT + TLB(L1) = TA + DTHALF*TLGRAD + TLT(L1) = TA - DTHALF*TLGRAD + DO L = L1 + 1, NL - 1 + TC = TLM(L+1) + P4 = PLB(L+2) + DTHALF = .5*((TA-TB)/(P1-P3)+(TB-TC)/(P2-P4))*(P2-P3)*TLGRAD + TLB(L) = TB + DTHALF + TLT(L) = TB - DTHALF + TA = TB + TB = TC + P1 = P2 + P2 = P3 + P3 = P4 + ENDDO + DTHALF = (TA-TB)*(P2-P3)/(P1-P3)*TLGRAD + TLB(NL) = TC + DTHALF + TLT(NL) = TC - DTHALF + DO L = NL, L1, -1 + IF ( PLB(L)>PTLISO ) EXIT + TLT(L) = TLM(L) + TLB(L) = TLM(L) + ENDDO + ENDIF + TLB(NL+1) = TLT(NL) + +! ------------------------------------------------------------------ +! weight assignments for Planck function interpolation +! (Effective range (K) is from TK = planck_tmin to TK = planck_tmax) +! ------------------------------------------------------------------ + + DO L = L1, NL + ITLB(L) = TLB(L) + WTLB(L) = TLB(L) - ITLB(L) + IF ( ITLB(L)planck_tmax-1 ) ITLB(L) = planck_tmax - 1 + ITLT(L) = TLT(L) + WTLT(L) = TLT(L) - ITLT(L) + IF ( ITLT(L)planck_tmax-1 ) ITLT(L) = planck_tmax - 1 + ENDDO + + IF ( LTOPCL/=0 ) THEN + + DO K = 1, 33 + CLTAUX = TXCTPG(K) + TRGXLK(LTOPCL,K) + 1D-10 + CLTAUS = TSCTPG(K) + CLCOSB = TGCTPG(K) + CLPI0K = CLTAUS*ECLTRA/CLTAUX + CLPI0(K) = CLPI0K + CTX = CLTAUX*10.D0 + IF ( CLTAUX>=3.D0 ) THEN + CTX = CLTAUX*2 + 24 + IF ( CTX>47.999999D0 ) CTX = 47.999999D0 + ENDIF + ICT = CTX + DT2 = CTX - ICT + DT1 = 1.D0 - DT2 + IT1 = ICT + 1 + IT2 = ICT + 2 + CTP = CLPI0K*20.D0 + ICP = CTP + DP2 = CTP - ICP + DP1 = 1.D0 - DP2 + IP1 = ICP + 1 + IP2 = ICP + 2 + CTG = CLCOSB*20.D0 + ICG = CTG + DG2 = CTG - ICG + DG1 = 1.D0 - DG2 + IG1 = ICG + 1 + IG2 = ICG + 2 + WT1 = DT1*DP1*DG1 + WT2 = DT2*DP1*DG1 + WT3 = DT2*DP2*DG1 + WT4 = DT1*DP2*DG1 + WT5 = DT1*DP1*DG2 + WT6 = DT2*DP1*DG2 + WT7 = DT2*DP2*DG2 + WT8 = DT1*DP2*DG2 + RIJTCK(:,K) = WT1*RIJTPG(:,IT1,IP1,IG1) & + + WT2*RIJTPG(:,IT2,IP1,IG1) & + + WT3*RIJTPG(:,IT2,IP2,IG1) & + + WT4*RIJTPG(:,IT1,IP2,IG1) & + + WT5*RIJTPG(:,IT1,IP1,IG2) & + + WT6*RIJTPG(:,IT2,IP1,IG2) & + + WT7*RIJTPG(:,IT2,IP2,IG2) & + + WT8*RIJTPG(:,IT1,IP2,IG2) ! 1:6 + FEMTCK(:,K) = WT1*FEMTPG(:,IT1,IP1,IG1) & + + WT2*FEMTPG(:,IT2,IP1,IG1) & + + WT3*FEMTPG(:,IT2,IP2,IG1) & + + WT4*FEMTPG(:,IT1,IP2,IG1) & + + WT5*FEMTPG(:,IT1,IP1,IG2) & + + WT6*FEMTPG(:,IT2,IP1,IG2) & + + WT7*FEMTPG(:,IT2,IP2,IG2) & + + WT8*FEMTPG(:,IT1,IP2,IG2) ! 1:3 + FDXTCK(:,K) = WT1*FDXTPG(:,IT1,IP1,IG1) & + + WT2*FDXTPG(:,IT2,IP1,IG1) & + + WT3*FDXTPG(:,IT2,IP2,IG1) & + + WT4*FDXTPG(:,IT1,IP2,IG1) & + + WT5*FDXTPG(:,IT1,IP1,IG2) & + + WT6*FDXTPG(:,IT2,IP1,IG2) & + + WT7*FDXTPG(:,IT2,IP2,IG2) & + + WT8*FDXTPG(:,IT1,IP2,IG2) + ENDDO + ENDIF + + TRDFLB(:) = 0.D0 + TRUFLB(:) = 0.D0 + + BG = BGFEMT(1) + TOTLZF(1:3) = 0.D0 +!sl TRSLTS=0.D0 +!sl TRSLTG=0.D0 +!sl TRSLBS=0.D0 + +! ------------------------------------------------------------------ +! LOOP OVER K-BANDS +! ------------------------------------------------------------------ + K = 0 + IMOL = 0 + 200 DO + K = K + 1 + IF ( K>33 ) THEN + + TRNFLB(L1:NL+1) = TRUFLB(L1:NL+1) - TRDFLB(L1:NL+1) + TRFCRL(L1:NL) = TRNFLB(L1+1:NL+1) - TRNFLB(L1:NL) + +!**** Window region and spectr. integrated total flux diagnostics + DO II = 0, 3 + IF ( II>0 ) THEN + PFW = TOTLZF(II) + IF ( PFW<1 ) PFW = 1 + IF ( PFW>899.999D0 ) PFW = 899.999D0 + IPF = PFW + TOTLZT(II) = TKPFT(IPF) + (PFW-IPF) & + *(TKPFT(IPF+1)-TKPFT(IPF)) + + PFW = 10*WINDZF(II) + ELSE + PFW = 10*TRUFTW + ENDIF + IF ( PFW<1.0001D-2 ) PFW = 1.0001D-2 + IF ( PFW>719.999D0 ) PFW = 719.999D0 + IPF = PFW + IF ( PFW<1 ) THEN + PFW = 100.*PFW + IPF = PFW + DPF = PFW - IPF ! IPF= 1- 99 + ELSEIF ( PFW<10 ) THEN + PFW = 10.*PFW + IPF = PFW + DPF = PFW - IPF + IPF = IPF + 90 ! IPF=100-189 + ELSE + IPF = PFW + DPF = PFW - IPF + IPF = IPF + 180 ! IPF=190-899 + ENDIF + IF ( II>0 ) THEN + WINDZT(II) = TKPFW(IPF) & + + DPF*(TKPFW(IPF+1)-TKPFW(IPF)) + ELSE + BTEMPW = TKPFW(IPF) + DPF*(TKPFW(IPF+1)-TKPFW(IPF)) + ENDIF + ENDDO + GOTO 99999 + ELSE + BG = BGFEMT(K) + IF ( K>1 .AND. K<14 ) IMOL = 1 + IF ( K>13 .AND. K<26 ) IMOL = 2 + IF ( K>25 ) IMOL = 3 + DFLB(NL+1,K) = 0.D0 + DNACUM = 0.D0 + DNBCUM = 0.D0 + DNCCUM = 0.D0 +!**** Find top layer with absorbers: LtopA + DO L = NL, L1, -1 + LTOPA = L + TAUAG = TRGXLK(L,K) + TAUAP = TRCALK(L,K) + TRAALK(L,K) + TRBALK(L,K) & + + TRDALK(L,K) + TRVALK(L,K) + TAUAX = TAUAG + TAUAP + IF ( TAUAX>1.D-06 ) GOTO 211 + DFLB(L,K) = 0.D0 + ENA(L) = 0.D0 + DNA(L) = 0.D0 + TRA(L) = 1.D0 + ENB(L) = 0.D0 + DNB(L) = 0.D0 + TRB(L) = 1.D0 + ENC(L) = 0.D0 + DNC(L) = 0.D0 + TRC(L) = 1.D0 + ENDDO + UFLB(L1:NL+1,K) = BG ! no absorbers in whole column + TRUFLB(L1:NL+1) = TRUFLB(L1:NL+1) + BG + TOTLZF(1) = TOTLZF(1) + BG + TOTLZF(2) = TOTLZF(2) + BG + TOTLZF(3) = TOTLZF(3) + BG + ENDIF + ENDDO + + 211 FSUM = 0. + XFSUM = 0. + XTFACN = 0. + IPX0 = 9 +! ------------------------------------------------------------------ +! DOWNWARD FLUX COMPUTATION +! ------------------------------------------------------------------ + DO L = LTOPA, L1, -1 + BTOP = PLANCK(ITLT(L),K) & + - (PLANCK(ITLT(L),K)-PLANCK(ITLT(L)+1,K))*WTLT(L) + BBOT = PLANCK(ITLB(L),K) & + - (PLANCK(ITLB(L),K)-PLANCK(ITLB(L)+1,K))*WTLB(L) + TAUAG = TRGXLK(L,K) + TAUAP = TRCALK(L,K) + TRAALK(L,K) + TRBALK(L,K) + TRDALK(L,K) & + + TRVALK(L,K) + TAUAX = TAUAG + TAUAP + IF ( TAUAP>=.003 ) THEN + PLL = PL(L) + DO IP = IPX0, 1, -1 + IP1 = IP + IF ( PLL10 ) ITAU1 = 10 + ITAU2 = ITAU1 + 1 + DT1 = DTAU0 - (ITAU1-1)*ALG2 + DT2 = ALG2 - DT1 + AP1 = (XTFAC(ITAU2,IP1)*DT1+XTFAC(ITAU1,IP1)*DT2)/ALG2 + AP2 = (XTFAC(ITAU2,IP2)*DT1+XTFAC(ITAU1,IP2)*DT2)/ALG2 + XTF = (AP2*(PLL-PX(IP1))+AP1*(PX(IP2)-PLL)) & + /(PX(IP2)-PX(IP1)) + FSUM = FSUM + XTF/(1.+1.75*XFSUM**2)**2 + XTFACN = FSUM + IF ( XTFACN>1. ) XTFACN = 1. + IF ( XTFACN<0. ) XTFACN = 0. + XFSUM = XFSUM + XTF + ENDIF + + XTRDL = XTRD(L,IMOL+1) + XTRDL = XTRDL + XTFACN*(1.-XTRDL) + +! Optically thin limit emission/transmission approximation +! -------------------------------------------------------- + + IF ( TAUAX>=1.D-04 ) THEN + +! TAUB absorber-dependent extinction path adjustment +! -------------------------------------------------- + + PLBN = PLB(L) + ICOMB = 0 + IF ( TAUAG>TAUAP ) THEN + ICOMB = 1 + TAUAG = TAUAX + ENDIF + TAUBG = TAUAG + TAUAG + TAUCG = 10.D0*TAUAG + + F = 1 + IF ( IMOL==3 .AND. PLBN>500 .AND. TAUAG>.05D0 .AND. & + TAUAG<.25 ) THEN + F = 23.71D0*TAUAG**2 - 7.113D0*TAUAG + 1.296D0 + GOTO 221 + ENDIF + + IF ( TAUAG>.1D0 ) THEN + IF ( IMOL==1 ) THEN + IF ( PLBN>250.D0 ) THEN + F = .761D0 + IF ( TAUAG<3.D0 ) F = .92D0 - .053D0*TAUAG + IF ( TAUAG<.2D0 ) F = 1.091D0 - .906D0*TAUAG + ELSE + F = .718D0 + IF ( TAUAG<2.5D0 ) F = .90D0 - .073D0*TAUAG + IF ( TAUAG<.2D0 ) F = 1.115D0 - 1.146D0*TAUAG + ENDIF + ELSEIF ( IMOL==2 ) THEN + IF ( PLBN>250.D0 ) THEN + F = .590D0 + IF ( TAUAG<3.5D0 ) F = .93D0 - .097D0*TAUAG + IF ( TAUAG<.2D0 ) F = 1.089D0 - .894D0*TAUAG + ELSE + F = .703D0 + IF ( TAUAG<3.5D0 ) F = .92D0 - .062D0*TAUAG + IF ( TAUAG<.2D0 ) F = 1.092D0 - .924D0*TAUAG + ENDIF + ELSEIF ( IMOL==3 ) THEN + IF ( PLBN>250.D0 ) THEN + F = .982D0 + IF ( TAUAG<.5D0 ) F = .99D0 - .016D0*TAUAG + IF ( TAUAG<.2D0 ) F = 1.013D0 - .132D0*TAUAG + ELSE + F = .748D0 + IF ( TAUAG<3.7D0 ) F = .97D0 - .060D0*TAUAG + IF ( TAUAG<.2D0 ) F = 1.042D0 - .420D0*TAUAG + ENDIF + ENDIF + ENDIF + 221 TAUBG = TAUBG*F + +! TAUC absorber-dependent extinction path adjustment +! -------------------------------------------------- + F = 1 + IF ( IMOL==3 .AND. PLBN>500 .AND. TAUAG>.01D0 .AND. & + TAUAG<.25 ) THEN + F = 26.14D0*TAUAG**2 - 6.796D0*TAUAG + 1.065D0 + GOTO 222 + ENDIF + + IF ( TAUAG>.01D0 ) THEN + IF ( IMOL==1 ) THEN + IF ( PLBN>250.D0 ) THEN + F = .712D0 + IF ( TAUAG<.37D0 ) F = .96D0 - .67D0*TAUAG + IF ( TAUAG<.02D0 ) F = 1.053D0 - 5.34D0*TAUAG + ELSE + F = .536D0 + IF ( TAUAG<.47D0 ) F = .87D0 - .71D0*TAUAG + IF ( TAUAG<.02D0 ) F = 1.144D0 - 14.42D0*TAUAG + ENDIF + ELSEIF ( IMOL==2 ) THEN + IF ( PLBN>250.D0 ) THEN + F = .710D0 + IF ( TAUAG<.75D0 ) F = .95D0 - .32D0*TAUAG + IF ( TAUAG<.02D0 ) F = 1.056D0 - 5.64D0*TAUAG + ELSE + F = .487D0 + IF ( TAUAG<.70D0 ) F = .90D0 - .59D0*TAUAG + IF ( TAUAG<.02D0 ) F = 1.112D0 - 11.18D0*TAUAG + ENDIF + ELSEIF ( IMOL==3 ) THEN + IF ( PLBN>250.D0 ) THEN + F = .961D0 + IF ( TAUAG<.5D0 ) F = .98D0 - .039D0*TAUAG + IF ( TAUAG<.02D0 ) F = 1.021D0 - 2.08D0*TAUAG + ELSE + F = .777D0 + IF ( TAUAG<.70D0 ) F = .98D0 - .29D0*TAUAG + IF ( TAUAG<.02D0 ) F = 1.026D0 - 2.58D0*TAUAG + ENDIF + ENDIF + ENDIF + 222 TAUCG = TAUCG*F + + IF ( ICOMB==0 ) THEN + TAUBP = TAUAP + TAUAP + TAUCP = 10.D0*TAUAP + TAUA = TAUAG + TAUAP + TAUB = TAUBG + TAUBP + TAUC = TAUCG + TAUCP + ELSE + TAUA = TAUAG + TAUB = TAUBG + TAUC = TAUCG + ENDIF + + IF ( L==LTOPCL .AND. KCLDEM==1 ) THEN + +! --------------------------------------------- +! Top-cloud multiple scattering corrections for +! emitted, transmitted, and reflected radiances +! and fluxes at the top-cloud (L=LTOPCL) level. +! --------------------------------------------- + + IF ( ICOMB==1 ) THEN + TAUBP = TAUAP*(TAUBG/TAUAG) + TAUCP = TAUAP*(TAUCG/TAUAG) + TAUBG = TRGXLK(L,K)*(TAUBG/TAUAG) + TAUCG = TRGXLK(L,K)*(TAUCG/TAUAG) + TAUAG = TAUAG - TAUAP + ENDIF + TRA(L) = EXP(-TAUAG-TAUAP*FDXTCK(3,K)) + TRB(L) = EXP(-TAUBG-TAUBP*FDXTCK(2,K)) + TRC(L) = EXP(-TAUCG-TAUCP*FDXTCK(1,K)) + DEC = C*DNCCUM*RIJTCK(1,K) + B*DNBCUM*RIJTCK(2,K) & + + A*DNACUM*RIJTCK(3,K) + DEB = C*DNCCUM*RIJTCK(2,K) + B*DNBCUM*RIJTCK(4,K) & + + A*DNACUM*RIJTCK(5,K) + DEA = C*DNCCUM*RIJTCK(3,K) + B*DNBCUM*RIJTCK(5,K) & + + A*DNACUM*RIJTCK(6,K) + ALBTCK(1,K) = C*RIJTCK(1,K) + B*RIJTCK(2,K) & + + A*RIJTCK(3,K) + ALBTCK(2,K) = C*RIJTCK(2,K) + B*RIJTCK(4,K) & + + A*RIJTCK(5,K) + ALBTCK(3,K) = C*RIJTCK(3,K) + B*RIJTCK(5,K) & + + A*RIJTCK(6,K) + COALB1 = 1.D0 - ALBTCK(1,K) + COALB2 = 1.D0 - ALBTCK(2,K) + COALB3 = 1.D0 - ALBTCK(3,K) + TAUA = TAUAG + TAUAP*FEMTCK(3,K) + TAUB = TAUBG + TAUBP*FEMTCK(2,K) + TAUC = TAUCG + TAUCP*FEMTCK(1,K) + TRANA = EXP(-TAUA) + TRANB = EXP(-TAUB) + TRANC = EXP(-TAUC) + BDIF = BBOT - BTOP + BBTA = BDIF/TAUA + BBTB = BDIF/TAUB + BBTC = BDIF/TAUC + ENA(L) = (BTOP+BBTA-(BBOT+BBTA)*TRANA)*COALB3 + DNA(L) = (BBOT-BBTA-(BTOP-BBTA)*TRANA)*COALB3 + TX = TRA(L)*XTRDL + ! ; if(TX > 1) TX=1 + DNACUM = DNACUM*TX + DNA(L) + ENB(L) = (BTOP+BBTB-(BBOT+BBTB)*TRANB)*COALB2 + DNB(L) = (BBOT-BBTB-(BTOP-BBTB)*TRANB)*COALB2 + TX = TRB(L)*XTRDL + ! ; if(TX > 1) TX=1 + DNBCUM = DNBCUM*TX + DNB(L) + ENC(L) = (BTOP+BBTC-(BBOT+BBTC)*TRANC)*COALB1 + DNC(L) = (BBOT-BBTC-(BTOP-BBTC)*TRANC)*COALB1 + TX = TRC(L)*XTRDL + ! ; if(TX > 1) TX=1 + DNCCUM = DNCCUM*TX + DNC(L) + ENC(L) = ENC(L) + DEC + ENB(L) = ENB(L) + DEB + ENA(L) = ENA(L) + DEA + ELSE + + BDIF = BBOT - BTOP + BBTA = BDIF/TAUA + BBTB = BDIF/TAUB + BBTC = BDIF/TAUC + +! Optically thick limit non-scattering emission approximation +! ----------------------------------------------------------- + + IF ( TAUA>9.D0 ) THEN + TRA(L) = 0.D0 + TRB(L) = 0.D0 + TRC(L) = 0.D0 + ENA(L) = BTOP + BBTA + ENB(L) = BTOP + BBTB + ENC(L) = BTOP + BBTC + DNA(L) = BBOT - BBTA + DNB(L) = BBOT - BBTB + DNC(L) = BBOT - BBTC + DNACUM = BBOT - BBTA + DNBCUM = BBOT - BBTB + DNCCUM = BBOT - BBTC + GOTO 230 + ENDIF + + IF ( TAUA<0.5D0 ) THEN + TRANA = 1 - TAUA + (.5-R6*TAUA+R24*(TAUA*TAUA)) & + *(TAUA*TAUA) + ELSE + TRANA = EXP(-TAUA) + ENDIF + IF ( TAUB<0.5D0 ) THEN + TRANB = 1 - TAUB + (.5-R6*TAUB+R24*(TAUB*TAUB)) & + *(TAUB*TAUB) + ELSE + TRANB = EXP(-TAUB) + ENDIF + IF ( TAUC<0.5D0 ) THEN + TRANC = 1 - TAUC + (.5-R6*TAUC+R24*(TAUC*TAUC)) & + *(TAUC*TAUC) + ELSE + TRANC = EXP(-TAUC) + ENDIF + + TRA(L) = TRANA + ENA(L) = BTOP + BBTA - (BBOT+BBTA)*TRANA + DNA(L) = BBOT - BBTA - (BTOP-BBTA)*TRANA + TX = TRANA*XTRDL + ! ; if(TX > 1) TX=1 + DNACUM = DNACUM*TX + DNA(L) + TRB(L) = TRANB + ENB(L) = BTOP + BBTB - (BBOT+BBTB)*TRANB + DNB(L) = BBOT - BBTB - (BTOP-BBTB)*TRANB + TX = TRANB*XTRDL + ! ; if(TX > 1) TX=1 + DNBCUM = DNBCUM*TX + DNB(L) + TRC(L) = TRANC + ENC(L) = BTOP + BBTC - (BBOT+BBTC)*TRANC + DNC(L) = BBOT - BBTC - (BTOP-BBTC)*TRANC + TX = TRANC*XTRDL + ! ; if(TX > 1) TX=1 + DNCCUM = DNCCUM*TX + DNC(L) + ENDIF + ELSE + TAUBX = TAUAX + TAUAX + TAUCX = 10.D0*TAUAX + BBAR = 0.5D0*(BTOP+BBOT) + TRA(L) = 1.D0 - TAUAX + ENA(L) = BBAR*TAUAX + DNA(L) = ENA(L) + TX = TRA(L)*XTRDL + ! ; if(TX > 1) TX=1 + DNACUM = DNACUM*TX + DNA(L) + TRB(L) = 1.D0 - TAUBX + ENB(L) = BBAR*TAUBX + DNB(L) = ENB(L) + TX = TRB(L)*XTRDL + ! ; if(TX > 1) TX=1 + DNBCUM = DNBCUM*TX + DNB(L) + TRC(L) = 1.D0 - TAUCX + ENC(L) = BBAR*TAUCX + DNC(L) = ENC(L) + TX = TRC(L)*XTRDL + ! ; if(TX > 1) TX=1 + DNCCUM = DNCCUM*TX + DNC(L) + ENDIF + 230 FDNABC = A*DNACUM + B*DNBCUM + C*DNCCUM + TRDFLB(L) = TRDFLB(L) + FDNABC + DFLB(L,K) = FDNABC + ENDDO + +! Old form of scattering correction is skipped when KCLDEM=1 +! ---------------------------------------------------------- + + IF ( KCLDEM==0 .AND. LTOPCL>0 ) THEN + ENA(LTOPCL) = ENA(LTOPCL)*(1-TRCTCA(K)) + TRCTCA(K) & + *DFLB(LTOPCL+1,K) + ENB(LTOPCL) = ENB(LTOPCL)*(1-TRCTCA(K)) + TRCTCA(K) & + *DFLB(LTOPCL+1,K) + ENC(LTOPCL) = ENC(LTOPCL)*(1-TRCTCA(K)) + TRCTCA(K) & + *DFLB(LTOPCL+1,K) + ENDIF + +!sl ------------------------------------------------------------------ +!sl SURFACE LAYER FLUX COMPUTATION +!sl with TAUSL,FTAUSL=0 defaults, surface layer calculation is skipped +!sl ------------------------------------------------------------------ + + DFSL(K) = FDNABC +!sl TAUA=TAUSL(K)+FTAUSL(K) +!sl if (TAUA > 1.D-06) GO TO 24 + BG = BG + FDNABC*TRGALB(K) + UNA = BG + UNB = BG + UNC = BG + FUNABC = BG +!sl GO TO 245 +!sl24 CONTINUE +!sl ITS=TSL +!sl WTS=TSL-ITS +!sl WTS1=1-WTS +!sl BS = PLANCK(ITS,K)*WTS1 + PLANCK(ITS+1,K)*WTS +!sl TA=EXP(-TAUA) +!sl TB=TA*TA +!sl TC=(TB*TB*TA)**2 +!sl DNA(1)=(DNA(1)-BS)*TA+BS +!sl DNB(1)=(DNB(1)-BS)*TB+BS +!sl DNC(1)=(DNC(1)-BS)*TC+BS +!sl FDNABC=A*DNA(1)+B*DNB(1)+C*DNC(1) +!sl BG=BGFEMT(K)+FDNABC*TRGALB(K) +!sl UNA=(BG-BS)*TA+BS +!sl UNB=(BG-BS)*TB+BS +!sl UNC=(BG-BS)*TC+BS +!sl FUNABC=A*UNA+B*UNB+C*UNC +!sl BSP = PLANCK(ITS+1,K)*WTS1 + PLANCK(ITS+2,K)*WTS +!sl BSM = PLANCK(ITS-1,K)*WTS1 + PLANCK(ITS ,K)*WTS +!sl SLABS=1.D0-A*TA-B*TB-C*TC +!sl TRSLTS=TRSLTS+(BSP-BSM)*SLABS +!sl TRSLTG=TRSLTG+BGFEMD(K)*SLABS +!sl TRSLBS=TRSLBS+BS*SLABS + +! ------------------------------------------------------------------ +! UPWARD FLUX COMPUTATION +! ------------------------------------------------------------------ + + DO L = L1, NL + TRUFLB(L) = TRUFLB(L) + FUNABC + UFLB(L,K) = FUNABC + +! ---------------------------------------------------------------- +! At top-cloud level, find component of upwelling flux reflected +! downward by cloud bottom and add to downwelling flux below cloud +! ---------------------------------------------------------------- + + IF ( L==LTOPCL .AND. KCLDEM==1 ) THEN + DEC = C*UNC*RIJTCK(1,K) + B*UNB*RIJTCK(2,K) & + + A*UNA*RIJTCK(3,K) + DEB = C*UNC*RIJTCK(2,K) + B*UNB*RIJTCK(4,K) & + + A*UNA*RIJTCK(5,K) + DEA = C*UNC*RIJTCK(3,K) + B*UNB*RIJTCK(5,K) & + + A*UNA*RIJTCK(6,K) + DO LL = L, L1, -1 + DNA(LL) = DNA(LL) + DEA + DNB(LL) = DNB(LL) + DEB + DNC(LL) = DNC(LL) + DEC + DDFLUX = A*DEA + B*DEB + C*DEC + TRDFLB(LL) = TRDFLB(LL) + DDFLUX + DFLB(LL,K) = DFLB(LL,K) + DDFLUX + IF ( LL==L1 ) EXIT + ! LL-loop + DEA = DEA*TRA(LL-1) + DEB = DEB*TRB(LL-1) + DEC = DEC*TRC(LL-1) + ENDDO + ENDIF + XTRUL = XTRU(L,IMOL+1) + TX = TRA(L)*XTRUL + ! ; if(TX > 1) TX=1 + UNA = UNA*TX + ENA(L) + TX = TRB(L)*XTRUL + ! ; if(TX > 1) TX=1 + UNB = UNB*TX + ENB(L) + TX = TRC(L)*XTRUL + ! ; if(TX > 1) TX=1 + UNC = UNC*TX + ENC(L) + FUNABC = A*UNA + B*UNB + C*UNC + ENDDO + + IF ( K==1 ) THEN + TRUFTW = FUNABC + TRDFGW = TRDFLB(1) + TRUFGW = BG + WINDZF(1) = UNA + WINDZF(2) = UNB + WINDZF(3) = UNC + ENDIF + + TRUFLB(NL+1) = TRUFLB(NL+1) + FUNABC + UFLB(NL+1,K) = FUNABC + UFSL(K) = UFLB(1,K) + TOTLZF(1) = TOTLZF(1) + UNA + TOTLZF(2) = TOTLZF(2) + UNB + TOTLZF(3) = TOTLZF(3) + UNC + + GOTO 200 ! next K + +99999 END SUBROUTINE THERML + + SUBROUTINE SOLAR0 + IMPLICIT NONE + + INTEGER, PARAMETER, DIMENSION(17) & + :: NMKWAV = (/200,360,770,795,805,& + 810,860,1250,1500,1740,2200,3000, & + 3400,3600,3800,4000,9999/) + INTEGER, PARAMETER, DIMENSION(16) & + :: LORDER = (/15,14,8,7,6,5,13,12,& + 4,3,2,1,11,10,9,16/) + INTEGER I + + DO I = 1, 30 + DBLN(I) = 2**I + ENDDO + + NORDER(1:16) = LORDER(1:16) + NMWAVA(1:16) = NMKWAV(1:16) + NMWAVB(1:16) = NMKWAV(2:17) + + TCLMIN = MIN(TAUIC0,TAUWC0) + + CALL SETO2A + + END SUBROUTINE SOLAR0 + + SUBROUTINE SOLARM + IMPLICIT NONE +! ------------------------------------------------------------------ +! SOLARM Returns: +! SRDFLB Solar downward flux at layer bottom edge +! SRUFLB Solar upward flux at layer bottom edge +! SRNFLB Solar net downward flux (in Watts/m**2) +! SRFHRL Solar heating rate/layer (in Watts/m**2) +! FSRNFG Solar flux abs at ground by surface-type +! (see explanatory note at end of SOLARM) +! Also: +! TOA: SRIVIS SROVIS PLAVIS SRINIR SRONIR PLANIR +! BOA: SRDVIS SRUVIS ALBVIS SRDNIR SRUNIR ALBNIR +! ATM: SRTVIS SRRVIS SRAVIS SRTNIR SRRNIR SRANIR +! SRXVIS SRXNIR (Direct beam only at ground) +! +! Spectral: (by k-distribution/pseudo-spectral) breakdown: +! SKDFLB Solar downward flux at layer bottom edge +! SKUFLB Solar upward flux at layer bottom edge +! SKNFLB Solar net downward flux (in Watts/m**2) +! SKFHRL Solar heating rate/layer (in Watts/m**2) +! +! SRKALB Planetary albedo (by spectral breakdown) +! SRKINC Incident fluxedo (by spectral breakdown) +! SRKGAX Direct k-d flux absorbed by ground-type +! SRKGAD Diffuse k-d flux absorbed by ground-type +! ------------------------------------------------------------------ +! Remarks: +! NORMS0=1 Incident (TOA) Solar flux normalized to equal S0 +! (COSZ dependence included in calculated results) +! The returned solar fluxes have to be multiplied +! by COSZ to yield actual atmospheric heating rate +! +! NMKWAV Spectral/k-distribution subdivisions are nominal +! (due to spectral trading of absorption features) +! +! VIS Designates solar visible wavelengths ( <770nm) +! NIR Designates solar near-IR wavelengths (770> nm) +! VIS comprises .53 of S0, NIR comprises .47 of S0 +! ------------------------------------------------------------------ +! +! ------------------------------------------------------------------ +! Fractional solar flux k-distribution/pseudo-spectral intervals +! +! KSLAM= 1 1 2 2 5 5 5 5 +! K= 1 2 3 4 5 6 7 8 +! DATA DKS0/ .010, .030, .040, .040, .040, .002, .004, .013, +! KSLAM= 1 1 1 3 4 6 6 1 +! K= 9 10 11 12 13 14 15 16 +! + .002, .003, .003, .072, .200, .480, .050, .011/ +! +! ------------------------------------------------------------------ +! The nominal spectral order for k-dist/pseudo-spectral intervals is +! (WavA and WavB designate approximate spectral interval boundaries) +! +! L= 12 11 10 9 6 5 4 3 +! WavA (nm)= 3000 2200 1740 1500 810 805 795 770 +! WavB (nm)= 3400 3000 2200 1740 860 810 805 795 +! K= 1 2 3 4 5 6 7 8 +! DATA DKS0/ .010, .030, .040, .040, .040, .002, .004, .013, +! +! L= 15 14 13 8 7 2 1 16 +! WavA (nm)= 3800 3500 3400 1250 860 360 200 4000 +! WavB (nm)= 4000 3800 3600 1500 1250 770 360 9999 +! K= 9 10 11 12 13 14 15 16 +! + .002, .003, .003, .072, .200, .480, .050, .011/ +! +! ------------------------------------------------------------------ +! 6 spectral intervals overlap the 16 solar k-distribution intervals +! +! Cloud and aerosol Mie scattering parameters (also surface albedos) +! are averaged over these spectral intervals. These intervals are in +! reverse spectral order. Thus spectral interval 6 refers to visible +! (VIS) wavelengths, intervals 1-5 refer to nearIR (NIR) wavelengths +! KSLAM designates the spectral interval of first 14 k-distributions +! (K=15 for UV ozone absorption refers to (VIS) spectral interval 6) +! (K=16 represents strong absorbing spectral regions via interval 1) +! +! The nominal Mie scattering spectral band subdivisions are: +! +! -------------NIR------------ VIS +! L= 1 2 3 4 5 6 +! WavA (nm)= 2200 1500 1250 860 770 300 +! WavB (nm)= 4000 2200 1500 1250 860 770 +! +! ------------------------------------------------------------------ + + REAL*8 COLEXT(6), COLSCT(6), COLGCB(6) ! ,ALLGCB(6) + +! ------------------------------------------- +! NO2, O3 Chappuis Band, Rayleigh, parameters +! ------------------------------------------- + REAL*8, PARAMETER :: XCMNO2 = 5.465D0, XCMO3 = .0399623D0 + REAL*8, PARAMETER :: SIGMA_RAY = 4.4028450689125004D-07 +! Rayleigh scattering cross-section [m2/mol] + REAL*8 RNB(LX), RNX(LX), TNB(LX), TNX(LX), XNB(LX), XNX(LX) + REAL*8 SRB(LX), SRX(LX), VRU(LX+1), VRD(LX+1), FAC(LX+1) + REAL*8 AO3D(LX), AO3U(LX), AO3X(LX) + REAL*8 S0COSZ, COSMAG, SECZ, TAURAY, RTAU, SUMEXT, COLPFG, SURFBB,& + TAUSBB, ALLTAU, TAULAY, GCBLAY, RTAUL, DKS0X, RBNB, RBNX, & + RCNB, RCNX, TLN, PLN, ULN, TERMA, TERMB, TAU1, TAU, PIZERO,& + PR, PT, DBLS, XANB, XANX, TANB, TANX, XXT, RASB, RASX, & + BNORM, XNORM, RARB, RARX, XATB, DENOM, DB, DX, UB, UX, & + RBXTOA, ATOPX, ATOPD, O3CMX, O3CMD, SUMSCT, SUMGCB, XXG, & + SURX, PFF, XATC, XBNB, XBNX, TBNB, TBNX, XBTB, ABOTX, & + ABOTD, AO3UXN, AO3UDN, SRKA16, DKS0XX, TRNC, CLX, TRNU, & + TRN1, TRN2, TRN3, TAUG, TAU2, TAU3, S0VIS, S0NIR, SGPG + INTEGER I, K, KK, L, N, NN, KLAM, NDBLS + REAL*8 :: WVCOL, ZWPATH, ALPH, BETA, FACK12, ROOT, PTROOT, TAUK,& + FACK13 + + S0COSZ = S0 + IF ( NORMS0==0 ) S0COSZ = S0*COSZ + + SRDFLB(L1:NL+1) = 0 + SRUFLB(L1:NL+1) = 0 + SRNFLB(L1:NL+1) = 0 + SRFHRL(L1:NL) = 0 + + SKDFLB(L1:NL+1,16) = 0 + SKUFLB(L1:NL+1,16) = 0 + + SRKALB(1:16) = 0.D0 ! for WRITER only + dblext = 0. + dblsct = 0. + dblgcb = 0. + dblpi0 = 0. ! for writer only + skdflb = 0. + sknflb = 0. + skuflb = 0. ! for writer only + skfhrl = 0. + srkgax = 0. + srkgad = 0. ! for writer only + +! TOA solar flux VIS/NIR subdivision +! (incident, outgoing, plane albedo) +! ---------------------------------- + SRIVIS = 0.D0 + SROVIS = 0.D0 + PLAVIS = 1.D0 + SRINIR = 0.D0 + SRONIR = 0.D0 + PLANIR = 1.D0 +! BOA solar flux VIS/NIR subdivision +! (incident, upward, surface albedo) +! ---------------------------------- + SRDVIS = 0.D0 + SRUVIS = 0.D0 + ALBVIS = 1.D0 + SRDNIR = 0.D0 + SRUNIR = 0.D0 + ALBNIR = 1.D0 +! Fractional atmos only flux VIS/NIR subdivision +! (fractions reflected, transmitted, absorbed) +! ---------------------------------------------- + SRRVIS = 1.D0 + SRTVIS = 0.D0 + SRAVIS = 0.D0 + SRRNIR = 0.D0 + SRTNIR = 0.D0 + SRANIR = 0.D0 +! Direct beam, fractional S0 VIS/NIR subdivision +! ---------------------------------------------- + SRXVIS = 0.D0 + SRXNIR = 0.D0 +! Ground surface absorbed solar flux subdivision +! according to 4 fractional surface-type albedos +! ---------------------------------------------- + FSRNFG(1:4) = 0 + + IF ( COSZ<0.001D0 ) RETURN + COSMAG = 35.D0/SQRT(1224.D0*COSZ*COSZ+1.D0) + SECZ = 1.D0/COSZ + +! Compute Rayleigh optical depth, still missing dP in units of mbar + TAURAY = SIGMA_RAY/(GRAV*MAIR*1D-3)*1D+2*FRAYLE + + DO K = 1, 6 + RTAU = 1.D-10 + IF ( K==6 ) RTAU = TAURAY + COLEXT(K) = 0.D0 + COLSCT(K) = 0.D0 + COLGCB(K) = 0.D0 + DO L = L1, NL + RTAUL = RTAU*(PLB(L)-PLB(L+1)) + SUMEXT = RTAUL + SRCEXT(L,K) + SRAEXT(L,K) + SRBEXT(L,K) & + + SRDEXT(L,K) + SRVEXT(L,K) + SUMSCT = RTAUL + SRCSCT(L,K) + SRASCT(L,K) + SRBSCT(L,K) & + + SRDSCT(L,K) + SRVSCT(L,K) + SUMGCB = SRCSCT(L,K)*SRCGCB(L,K) + SRASCT(L,K)*SRAGCB(L,K) & + + SRBSCT(L,K)*SRBGCB(L,K) + SRDSCT(L,K)*SRDGCB(L,K)& + + SRVSCT(L,K)*SRVGCB(L,K) + DBLEXT(L,K) = SUMEXT + DBLSCT(L,K) = SUMSCT + DBLGCB(L,K) = SUMGCB/(SUMSCT+1.D-10) + DBLPI0(L,K) = SUMSCT/(SUMEXT+1.D-10) + COLEXT(K) = COLEXT(K) + DBLEXT(L,K) + COLSCT(K) = COLSCT(K) + DBLSCT(L,K) + COLGCB(K) = COLGCB(K) + DBLSCT(L,K)*DBLGCB(L,K) + ENDDO + COLGCB(K) = COLGCB(K)/(COLSCT(K)+1.D-10) + + IF ( KANORM>0 ) THEN +! ----------------------------------------------------------------- +! KANORM (default = 0) Option to renormalize aerosol column albedo +! to make column albedo less dependent on the +! number of model layers due to SGP treatment +! +! KANORM=1 aerosol column only is normalized +! +! KANORM=2 aerosol plus ground is normalized +! with Tau equivalent ground albedo +! --------------------------------- + COLPFG = COLGCB(K) + SURFBB = SRBALB(K) + TAUSBB = 0.D0 + IF ( KANORM>1 ) CALL GTSALB(XXG,XXT,SURX,SURFBB,COLPFG, & + TAUSBB,2) + DBLEXT(NL+1,K) = TAUSBB + ALLTAU = TAUSBB + COLEXT(K) + CALL SGPGXG(COSZ,ALLTAU,COLPFG,SGPG) +!c ALLGCB(K)=SGPG + DBLGCB(L1:NL,K) = SGPG + ELSE + + DO L = L1, NL + TAULAY = DBLEXT(L,K) + GCBLAY = DBLGCB(L,K) + CALL SGPGXG(COSZ,TAULAY,GCBLAY,SGPG) + DBLGCB(L,K) = SGPG + ENDDO + ENDIF + + IF ( LTOPCL/=0 ) THEN + RTAU = 1.D-10 + IF ( K==6 ) RTAU = TAURAY + COLEXT(K) = 0.D0 + COLSCT(K) = 0.D0 + COLGCB(K) = 0.D0 + DO L = L1, NL + IF ( SRCEXT(L,K)>=TCLMIN ) THEN + RTAUL = RTAU*(PLB(L)-PLB(L+1)) + SUMEXT = RTAUL + SRCEXT(L,K) + SRAEXT(L,K) & + + SRBEXT(L,K) + SRDEXT(L,K) + SRVEXT(L,K) + SUMSCT = RTAUL + SRCSCT(L,K) + SRASCT(L,K) & + + SRBSCT(L,K) + SRDSCT(L,K) + SRVSCT(L,K) + SUMGCB = SRCSCT(L,K)*SRCGCB(L,K) + SRASCT(L,K) & + *SRAGCB(L,K) + SRBSCT(L,K)*SRBGCB(L,K) & + + SRDSCT(L,K)*SRDGCB(L,K) + SRVSCT(L,K) & + *SRVGCB(L,K) + DBLEXT(L,K) = SUMEXT + DBLSCT(L,K) = SUMSCT + DBLGCB(L,K) = SUMGCB/(SUMSCT+1.D-10) + DBLPI0(L,K) = SUMSCT/(SUMEXT+1.D-10) + COLEXT(K) = COLEXT(K) + DBLEXT(L,K) + COLSCT(K) = COLSCT(K) + DBLSCT(L,K) + COLGCB(K) = COLGCB(K) + DBLSCT(L,K)*DBLGCB(L,K) + ENDIF + ENDDO + COLGCB(K) = COLGCB(K)/(COLSCT(K)+1.D-10) + +! ----------------------------------------------------------------- +! KCNORM (default = 0) Option to renormalize cloud column albedo +! to make column albedo less dependent on the +! number of model layers due to SGP treatment +! +! KCNORM=1 cloud column only is normalized +! +! KCNORM=2 cloud plus ground is normalized +! with Tau equivalent ground albedo +! --------------------------------- + IF ( KCNORM>0 ) THEN + COLPFG = COLGCB(K) + SURFBB = SRBALB(K) + TAUSBB = 0.D0 + IF ( KCNORM>1 ) CALL GTSALB(XXG,XXT,SURX,SURFBB,COLPFG, & + TAUSBB,2) + DBLEXT(NL+1,K) = TAUSBB + ALLTAU = TAUSBB + COLEXT(K) + CALL SGPGXG(COSZ,ALLTAU,COLPFG,SGPG) +!c ALLGCB(K)=SGPG + DO L = L1, NL + IF ( SRCEXT(L,K)>=TCLMIN ) DBLGCB(L,K) = SGPG + ENDDO + ELSE + DO L = L1, NL + IF ( SRCEXT(L,K)>=TCLMIN ) THEN + TAULAY = DBLEXT(L,K) + GCBLAY = DBLGCB(L,K) + CALL SGPGXG(COSZ,TAULAY,GCBLAY,SGPG) + DBLGCB(L,K) = SGPG + ENDIF + ENDDO + ENDIF + ENDIF + ENDDO + + WVCOL = SUM(ULGAS(:,1)) + ZWPATH = WVCOL*(1D0/COSZ+2D0*srbalb(6)) + +#ifdef SWFIX_20151201 + FACK12 = 0.09325D0*((ZWPATH**0.97D0)/(1.D0+5.D-4*(ZWPATH**1.31D0))& + )*0.462D-05 + FACK13 = 0.0001982D0*((WVCOL**1.08D0)*(1.D0+6.D-5*(WVCOL**0.93D0))& + )*0.277D-05 +#endif + + K = 0 + DO + K = K + 1 + + KLAM = KSLAM(K) + DKS0X = DKS0(K)*S0COSZ + +! write(*,'(a,3i5,3(e12.4,1x))')'RADIATION1: ', +! . ILON,JLAT,K,DKS0(K),S0COSZ,DKS0X + + RBNB = SRBALB(KLAM) + RBNX = SRXALB(KLAM) + RCNB = 0.D0 + RCNX = 0.D0 + SRKINC(K) = DKS0X + + DO N = L1, NL + + SRB(N) = RBNB + SRX(N) = RBNX + TLN = TLM(N) + PLN = PL(N) + ULN = ULGAS(N,1) + +! Select parameterized k-distribution gas absorption by H2O, O2, CO2 +! ------------------------------------------------------------------ + + SELECT CASE (K) + CASE (1) +!--------K=6-------H2O DS0=.01 + TERMA = (35.66+TLN*(.0416-.0004622*TLN+.001057*PLN)) & + *(1.+.04286*PLN) + TERMB = (1.+.00171*ULN)*(1.+PLN*(189.088+.1316*PLN)) + IF ( TERMB<1000. ) TERMB = 1000. + TAU1 = TERMA/TERMB + !IF(TAU1 > 0.02343) TAU1=0.02343 + IF ( TAU1>.05 ) TAU1 = .05 + TAU = TAU1*ULN + + CASE (2) +!--------K=5-------H2O DS0=.03 + TERMA = (2.792+TLN*(.0914-.0002848*TLN+.0003395*PLN)) & + *(1.+.02964*PLN) + TERMB = (1.0+.000657*ULN)*(1.+PLN*(240.70+.13847*PLN)) + IF ( TERMB<1000. ) TERMB = 1000. + TAU1 = TERMA/TERMB + !IF(TAU1 > 0.00520) TAU1=0.00520 + IF ( TAU1>.01 ) TAU1 = .01 + TAU = TAU1*ULN + + CASE (3) +!--------K=4-------H2O DS0=.04 + TERMA = (.4768+.467E-04*PLN*TLN) & + *(1.+TLN*(.00191-.719E-05*TLN)) + TERMB = (1.+.717E-04*ULN)*(1.+PLN*(130.56+.0876*PLN)) & + /(1.+.0266*PLN) + IF ( TERMB<1000. ) TERMB = 1000. + TAU1 = TERMA/TERMB + !IF(TAU1 > 0.00150) TAU1=0.0015 + IF ( TAU1>.01 ) TAU1 = .01 + TAU = TAU1*ULN + + CASE (4) +!--------K=3-------H2O DS0=.04 + TERMA = (.000247*TLN-.091+PLN*(.00035+.78E-06*TLN)) & + *(1.+.2847*PLN) + TERMB = (1.+.2066E-04*ULN)*(1.+PLN*(137.17+.16132*PLN)) + IF ( TERMA<20. ) TERMA = 20. + IF ( TERMB<1000. ) TERMB = 1000. + TAU = (TERMA/TERMB)*ULN + + CASE (5) +!--------K=2-------H2O DS0=.04 + TERMA = (PLN*(1.974/TLN+.0001117*TLN)-10.713) & + *(1.+.005788*TLN)*(1.+.001517*PLN) + TERMB = (1.+.3218E-04*ULN)*(1.+PLN*(863.44+.2048*PLN)) + IF ( TERMA<20. ) TERMA = 20. + IF ( TERMB<1000. ) TERMB = 1000. + TAU = (TERMA/TERMB)*ULN + + CASE (6) +!--------K=4-------O2 DS0=.002 + ULN = ULGAS(N,4) + TERMA = (.2236E-05-.1181E-09*TLN) & + *(1.+PLN*(.6364E-05*PLN+.001168)) + TERMB = 1. + .1521E-05*ULN + TAU = (TERMA/TERMB)*ULN + + CASE (7) +!--------K=3-------O2 DS0=.004 + ULN = ULGAS(N,4) + TERMA = (.3179E-06-.9263E-11*TLN) & + *(1.+PLN*(.8832E-05*PLN+.0005292)) + TERMB = 1. + .1968E-06*ULN + TAU = (TERMA/TERMB)*ULN + + CASE (8) +!--------K=2-------O2 DS0=.013 + ULN = ULGAS(N,4) + TERMA = (.2801E-07-.1638E-12*TLN) & + *(1.+PLN*(.1683E-04*PLN-.001721)) + TERMB = 1. + .8097E-07*ULN + TAU = (TERMA/TERMB)*ULN + + CASE (9) +!--------K=4-------CO2 DS0=.002 + ULN = ULGAS(N,2) + TERMA = (50.73-.03155*TLN-PLN*(.5543+.00091*TLN)) & + *(1.-.1004*PLN) + TERMB = (1.+.006468*ULN)*(1.+PLN*(49.51+.8285*PLN)) + TAU = (TERMA/TERMB)*ULN + IF ( PLN<175.0 ) TAU = (.00018*PLN+0.00001)*ULN + + CASE (10) +!--------K=3-------CO2 DS0=.003 + ULN = ULGAS(N,2) + TERMA = (1.+.01319*TLN) & + *(PLN*(.008001*ULN+.4589E-03)-.8396*ULN) + TERMB = ULN*(PLN+295.7+1.967*ULN) + .15126*PLN + TAU = (TERMA/TERMB)*ULN + + CASE (11) +!--------K=2-------CO2 DS0=.003 + ULN = ULGAS(N,2) + TERMA = (1.+.02257*TLN) & + *(PLN*(.002295*ULN-.5489E-04)-.7571*ULN) + TERMB = ULN*(PLN+803.9+2.477*ULN) - .09899*PLN + TAU = (TERMA/TERMB)*ULN + +! ------------------------------------------------------------------- +! fOnOff (default = 1.) scales SW long-path H2O absorption correction +! =1. fully turned on, =0. disables correction (older version) +! fOnOff is 'tunable' from 0. to 1. (introduced 7/3/2014) + + CASE (12) + !ULN=ULGAS(N,1) ! not needed because uln set to this before select case +#ifdef SWFIX_20151201 + PTROOT = (((PLN+10.0)/1000.0)**0.5D0)/SQRT(TLN/296.D0) + TAUK = PTROOT*ULN + TAU = TAUK*FACK12*FONOFF +#else + ALPH = 0.002D0 + BETA = 0.200D0 + !FACK12=1.05D-04*ZWPATH/(1.D0-1.D-05*ZWPATH) + FACK12 = .525D-04*ZWPATH/(1.D0+2.73D-04*ZWPATH) + ROOT = SQRT(((PLN+50.0)/1000.0) & + **2+1000.0*BETA*ULN/(PLN+50.0)) + TAUK = ALPH*(ROOT-(PLN+50.0)/1000.0) + TAU = TAUK*FACK12*fOnOff +#endif + + CASE (13) + !ULN=ULGAS(N,1) ! not needed because uln set to this before select case +#ifdef SWFIX_20151201 + PTROOT = (((PLN+10.0)/1000.0)**0.5D0)/SQRT(TLN/296.D0) + TAUK = PTROOT*ULN + TAU = TAUK*FACK13*FONOFF +#else + ALPH = 0.004D0 + BETA = 0.200D0 + !FACK13=1.05D-04*ZWPATH/(1.D0-1.D-05*ZWPATH) + FACK13 = .525D-04*ZWPATH/(1.D0+2.73D-04*ZWPATH) + ROOT = SQRT(((PLN+50.0)/1000.0) & + **2+1000.0*BETA*ULN/(PLN+50.0)) + TAUK = ALPH*(ROOT-(PLN+50.0)/1000.0) + TAU = TAUK*FACK13*fOnOff +#endif + + CASE (14) + TAU = XCMNO2*ULGAS(N,5) + XCMO3*ULGAS(N,3) + ENDSELECT + +! With 10 doublings to get to Tau=1.0, maximum seed tau is < 1/1024. +! ------------------------------------------------------------------ + + IF ( TAU<0.D0 ) TAU = 0.D0 + + TAU = TAU + DBLEXT(N,KLAM) + IF ( TAU>=1.D-06 ) THEN + PIZERO = DBLSCT(N,KLAM)/TAU + IF ( PIZERO>=0.001D0 ) THEN + + PFF = DBLGCB(N,KLAM) + + NDBLS = 0 + PR = 1.D0 - PFF + PT = 1.D0 + PFF + IF ( TAU>0.0019531D0 ) THEN + DBLS = 10.D0 + 1.44269D0*LOG(TAU) + NDBLS = DBLS + TAU = TAU/DBLN(NDBLS) + ENDIF + +! Set optically thin limit values of R,T,X using PI0 renormalization +! ------------------------------------------------------------------ + + XANB = EXP(-TAU-TAU) + XANX = EXP(-TAU*SECZ) + TANB = PT*XANB + XXT = (SECZ-2.D0)*TAU + TANX = PT*SECZ*(.5D0+XXT*(.25D0+XXT*(.0833333D0+XXT*( & + .0208333D0+XXT))))*XANX + RASB = PR*(1.D0-TAU*(2.D0-2.66667D0*TAU*(1.D0-TAU))) + XXT = (SECZ+2.D0)*TAU + RASX = PR*SECZ*(.5D0-XXT*(.25D0-XXT*(.0833333D0-XXT*( & + .0208333D0-XXT)))) + BNORM = (1.D0-XANB)/(RASB+TANB)*PIZERO + XNORM = (1.D0-XANX)/(RASX+TANX)*PIZERO + RASB = RASB*BNORM + RASX = RASX*XNORM + TANB = TANB*BNORM + TANX = TANX*XNORM + +! Compute and record R,T,X atmospheric layer doubling/adding results +! ------------------------------------------------------------------ + + IF ( NDBLS>=1 ) THEN + DO NN = 1, NDBLS + RARB = RASB*RASB + RARX = XANX*RASX + XATB = XANB + TANB + DENOM = 1.D0 - RARB + DB = (TANB+XANB*RARB)/DENOM + DX = (TANX+RARX*RASB)/DENOM + UB = RASB*(XANB+DB) + UX = RARX + RASB*DX + RASB = RASB + XATB*UB + RASX = RASX + XATB*UX + TANB = XANB*TANB + XATB*DB + TANX = XANX*TANX + XATB*DX + XANB = XANB*XANB + XANX = XANX*XANX + ENDDO + ENDIF + RARB = RASB*RBNB + RARX = RASB*RBNX + XATB = XANB + TANB + DENOM = 1.D0 - RARB + DB = (TANB+XANB*RARB)/DENOM + DX = (TANX+XANX*RARX)/DENOM + UB = RBNB*(XANB+DB) + UX = RBNX*XANX + RBNB*DX + RBNB = RASB + XATB*UB + RBNX = RASX + XATB*UX + XATC = XATB/(1.D0-RASB*RCNB) + RCNX = RASX + (XANX*RCNX+TANX*RCNB)*XATC + RCNB = RASB + RCNB*XATB*XATC + GOTO 190 + ENDIF + ENDIF + RASB = 0.D0 + RASX = 0.D0 + TANB = 0.D0 + TANX = 0.D0 + XANB = EXP(-TAU-TAU) + XANX = EXP(-TAU*SECZ) + DX = 0.D0 + UX = RBNX*XANX + RBNB = RBNB*XANB*XANB + RBNX = UX*XANB + RCNB = RCNB*XANB*XANB + RCNX = RCNX*XANX*XANB + 190 RNB(N) = RASB + RNX(N) = RASX + TNB(N) = TANB + TNX(N) = TANX + XNB(N) = XANB + XNX(N) = XANX + ENDDO + +! Record fluxes, spectral components at TOA, top-layer bottom edge +! ------------------------------------------------------------------ + + SRDFLB(NL+1) = SRDFLB(NL+1) + DKS0X + SRUFLB(NL+1) = SRUFLB(NL+1) + DKS0X*RBNX + SRDFLB(NL) = SRDFLB(NL) + DKS0X*(XANX+DX) + SRUFLB(NL) = SRUFLB(NL) + DKS0X*UX + SKDFLB(NL+1,K) = DKS0X + SKUFLB(NL+1,K) = DKS0X*RBNX + SKDFLB(NL,K) = DKS0X*(XANX+DX) + SKUFLB(NL,K) = DKS0X*UX + RBXTOA = RBNX + SRKALB(K) = RBNX + +! Add successively layer N (at bottom) to form upper composite layer +! ------------------------------------------------------------------ + + DO N = NL - 1, L1, -1 + XBNB = XNB(N) + XBNX = XNX(N) + RBNX = RNX(N) + IF ( RBNX>1.D-05 ) THEN + RBNB = RNB(N) + TBNB = TNB(N) + TBNX = TNX(N) + RARB = RASB*RBNB + XBTB = XBNB + TBNB + DENOM = 1.D0 - RARB + TANX = TBNX*XANX + XBTB*(TANX+XANX*RBNX*RASB)/DENOM + RASB = RBNB + XBTB*XBTB*RASB/DENOM + ELSE + RASB = RASB*XBNB*XBNB + TANX = TANX*XBNB + ENDIF + XANX = XANX*XBNX + RBNB = SRB(N) + RBNX = SRX(N) + DX = (TANX+XANX*RBNX*RASB)/(1.D0-RASB*RBNB) + UX = RBNX*XANX + RBNB*DX + SRUFLB(N) = SRUFLB(N) + DKS0X*UX + SRDFLB(N) = SRDFLB(N) + DKS0X*(XANX+DX) + SKUFLB(N,K) = DKS0X*UX + SKDFLB(N,K) = DKS0X*(XANX+DX) + ENDDO + +! Record absorbed spectral flux at ground for surface type fractions +! ------------------------------------------------------------------ + + SRKGAX(K,1:4) = DKS0X*XANX*(1.D0-PRNX(KLAM,1:4)) + SRKGAD(K,1:4) = DKS0X*DX*(1.D0-PRNB(KLAM,1:4)) + + IF ( K==NKSLAM ) THEN + + SRIVIS = DKS0X + SROVIS = DKS0X*RBXTOA + SRDVIS = SKDFLB(1,K) + SRUVIS = SKUFLB(1,K) + SRRVIS = DKS0X*RCNX + SRTVIS = DKS0X*(TANX+XANX) + SRXVIS = SRXVIS + DKS0X*XANX + +! write(*,'(a,3i5,3(e12.4,1x))')'RADIATION2: ', +! . ILON,JLAT,K,XANX,DKS0X,SRXVIS + +! ------------------------------------------------------------------ +! UV absorption by O3 and O2 within solar spectral band DKS0(15)=.05 +! ------------------------------------------------------------------ + + K = 15 + DKS0X = DKS0(K)*S0COSZ + SRKINC(K) = DKS0X +! write(*,'(a,3i5,3(e12.4,1x))')'RADIATION3: ', +! . ILON,JLAT,K,DKS0(K),S0COSZ,DKS0X + + N = NL + 1 + ATOPX = 0.D0 + ATOPD = 0.D0 + O3CMX = 0.D0 + O3CMD = 0.D0 + DO + N = N - 1 + O3CMX = O3CMX + COSMAG*ULGAS(N,3) + O3CMD = O3CMD + 1.90D0*ULGAS(N,3) + CALL AO3ABS(O3CMX,ABOTX) + CALL AO3ABS(O3CMD,ABOTD) + AO3X(N) = (ABOTX-ATOPX)/DKS0(15) + AO3D(N) = (ABOTD-ATOPD)/DKS0(15) + ATOPX = ABOTX + ATOPD = ABOTD + IF ( N<=L1 ) THEN + DO + O3CMX = O3CMX + 1.90D0*ULGAS(N,3) + O3CMD = O3CMD + 1.90D0*ULGAS(N,3) + CALL AO3ABS(O3CMX,ATOPX) + CALL AO3ABS(O3CMD,ATOPD) + AO3UXN = (ATOPX-ABOTX)/DKS0(15) + AO3UDN = (ATOPD-ABOTD)/DKS0(15) + AO3U(N) = XNX(N)*AO3UXN + (1.D0-XNX(N))*AO3UDN + ABOTX = ATOPX + ABOTD = ATOPD + N = N + 1 + IF ( N>=NL+1 ) THEN + RBNB = SRBALB(KLAM) + RBNX = SRXALB(KLAM) + RCNB = 0.D0 + RCNX = 0.D0 +! ------------------------------------- +! Get Oxygen UV absorption contribution +! ------------------------------------- +!---------------- + CALL GETO2A +!---------------- +! ------------------------------------------------------ +! Add Layers from Ground up. Retain Composite RBNB, RBNX +! R,T,X of "A" (above) layer are corrected for O3 absorption +! ---------------------------------------------------------- + + DO N = L1, NL + O2FHRL(N) = O2FHRL(N)/DKS0(15)*FULGAS(4) + O2FHRB(N) = O2FHRB(N)/DKS0(15)*FULGAS(4) + SRB(N) = RBNB + SRX(N) = RBNX + XANX = XNX(N)*(1.D0-AO3X(N)-O2FHRL(N)) + XANB = XNB(N)*(1.D0-AO3D(N)-O2FHRB(N)) + RASX = RNX(N)*(1.D0-AO3U(N)) + RASB = RNB(N)*(1.D0-AO3U(N)) + TANX = TNX(N)*(1.D0-AO3D(N)) + TANB = TNB(N)*(1.D0-AO3D(N)) +!nu ABSRTX=1.D0-XANX-TANX-RASX +!nu ABSRTB=1.D0-XANB-TANB-RASB + RARB = RASB*RBNB + RARX = RASB*RBNX + XATB = XANB + TANB + DENOM = 1.D0 - RARB + DB = (TANB+XANB*RARB)/DENOM + DX = (TANX+XANX*RARX)/DENOM + UB = RBNB*(XANB+DB) + UX = RBNX*XANX + RBNB*DX + RBNB = RASB + XATB*UB + RBNX = RASX + XATB*UX + XATC = XATB/(1.D0-RASB*RCNB) + RCNX = RASX + (XANX*RCNX+TANX*RCNB)*XATC + RCNB = RASB + RCNB*XATB*XATC + ENDDO + VRD(NL+1) = 1.D0 + VRU(NL+1) = RBNX + SRKALB(15) = RBNX + N = NL + VRD(N) = XANX + DX + VRU(N) = UX + DO + N = N - 1 + XBNX = XNX(N)*(1.D0-AO3X(N)-O2FHRL(N)) + XBNB = XNB(N)*(1.D0-AO3D(N)-O2FHRB(N)) + RBNX = RNX(N)*(1.D0-AO3U(N)) + RBNB = RNB(N)*(1.D0-AO3U(N)) + TBNX = TNX(N)*(1.D0-AO3D(N)) + TBNB = TNB(N)*(1.D0-AO3D(N)) + +! Add successively layer N (at bottom) to form upper composite layer +! ------------------------------------------------------------------ + + RARB = RASB*RBNB + XBTB = XBNB + TBNB + DENOM = 1.D0/(1.D0-RARB) + TANX = TBNX*XANX + XBTB*(TANX+XANX*RBNX*RASB)& + *DENOM + RASB = RBNB + XBTB*XBTB*RASB*DENOM + XANX = XANX*XBNX + +! Add upper bottom composite layers to get flux at layer interface +! ------------------------------------------------------------------ + + RBNB = SRB(N) + RBNX = SRX(N) + DX = (TANX+XANX*RBNX*RASB)/(1.D0-RASB*RBNB) + UX = RBNX*XANX + RBNB*DX + VRD(N) = XANX + DX + VRU(N) = UX + IF ( N<=1 ) THEN + SRKGAX(15,1:4) & + = DKS0X*XANX*(1-PRNX(6,1:4)) + SRKGAD(15,1:4) = DKS0X*DX*(1-PRNB(6,1:4)) + + DO N = L1, NL + 1 + VRD(N) = VRD(N)*DKS0X + VRU(N) = VRU(N)*DKS0X + SKDFLB(N,K) = VRD(N) + SKUFLB(N,K) = VRU(N) + ENDDO + SRIVIS = SRIVIS + VRD(NL+1) + SROVIS = SROVIS + VRU(NL+1) + PLAVIS = SROVIS/SRIVIS + SRDVIS = SRDVIS + VRD(L1) + SRUVIS = SRUVIS + VRU(L1) + ALBVIS = SRUVIS/(SRDVIS+1.D-10) + SRRVIS = SRRVIS + DKS0X*RCNX + SRTVIS = SRTVIS + DKS0X*(TANX+XANX) + SRXVIS = SRXVIS + DKS0X*XANX + SRAVIS = 1.D0 - SRRVIS - SRTVIS + +! K16 strong absorbing contributions are computed without scattering +! ------------------------------------------------------------------ + + K = 16 + DKS0X = DKS0(16)*S0COSZ + SRKINC(16) = DKS0X + SRKA16 = 0.D0 + SRKGAX(16,1:4) = 0.D0 + SRKGAD(16,1:4) = 0.D0 + DO KK = 1, 3 + IF ( KK==1 ) & + DKS0XX = DKS0X*0.002D0/0.011D0 + IF ( KK==2 ) & + DKS0XX = DKS0X*0.008D0/0.011D0 + IF ( KK==3 ) & + DKS0XX = DKS0X*0.001D0/0.011D0 + TRNC = 1.D0 + DO N = NL, L1, -1 + PLN = PL(N) + CLX = DBLEXT(N,1) - DBLSCT(N,1) + +!--------K=5-------CO2 DS0=.002 + IF ( KK==1 ) THEN + TRN1 = 0.D0 + ULN = ULGAS(N,2)*SECZ + IF ( ULN>7.D0 ) ULN = 7.D0 + TERMA = .003488*PLN* & + (1.+39.59*EXP(- & + 8.769*ULN/(1.+4.419*ULN))) & + *(1.+ & + ULN*(.001938*PLN-.00503*ULN)) + TERMB = & + (1.+.04712*PLN*(1.+.4877*ULN)) + TAUG = TERMA/TERMB*ULN + TAU1 = TAUG + CLX*SECZ + IF ( TAU1<10.0 ) & + TRN1 = EXP(-TAU1) + FAC(N) = TRN1 + ENDIF + +!--------K=7-------H2O DS0=.008 + IF ( KK==2 ) THEN + TRN2 = 0.D0 + ULN = ULGAS(N,1)*SECZ + TERMA = .001582*PLN* & + (1.+6.769*EXP(- & + 9.59*ULN/(1.+5.026*ULN))) & + *(1.+ULN* & + (.2757E-03*PLN+.001429*ULN)) + TERMB = & + (1.+.003683*PLN*(1.+1.187*ULN)& + ) + TAUG = TERMA/TERMB*ULN + TAU2 = TAUG + CLX*SECZ + IF ( TAU2<10.0 ) & + TRN2 = EXP(-TAU2) + FAC(N) = TRN2 + ENDIF + +!--------K=5-------O2 DS0=.001 + IF ( KK==3 ) THEN + TRN3 = 0.D0 + ULN = ULGAS(N,4)*SECZ + TERMA = (.1366E-03-.2203E-07*TLN)& + * & + (1.+PLN*(.1497E-06*ULN+.001261& + )) + TERMB = (1.+.3867E-03*ULN) & + /(1.+.2075E-04*ULN) + TAUG = TERMA/TERMB*ULN + TAU3 = TAUG + CLX*SECZ + IF ( TAU3<10.0 ) & + TRN3 = EXP(-TAU3) + FAC(N) = TRN3 + ENDIF + + TRNC = TRNC*FAC(N) + SRDFLB(N) = SRDFLB(N) + DKS0XX*TRNC + SKDFLB(N,K) = SKDFLB(N,K) & + + DKS0XX*TRNC + ENDDO + SRDFLB(NL+1) = SRDFLB(NL+1) + DKS0XX + SRUFLB(L1) = SRUFLB(L1) & + + DKS0XX*TRNC*SRXALB(1) + SKDFLB(NL+1,K) = SKDFLB(NL+1,K) & + + DKS0XX + SKUFLB(L1,K) = SKUFLB(L1,K) & + + DKS0XX*TRNC*SRXALB(1) + +! For completeness, any incident flux at ground is relflected upward +! ------------------------------------------------------------------ + + TRNU = TRNC + DO N = L1 + 1, NL + 1 + TRNU = TRNU*FAC(N-1) + SRUFLB(N) = SRUFLB(N) & + + DKS0XX*TRNC*SRXALB(1)*TRNU + SKUFLB(N,K) = SKUFLB(N,K) & + + DKS0XX*TRNC*SRXALB(1)*TRNU + ENDDO + SRKGAX(16,1:4) = SRKGAX(16,1:4) & + + DKS0XX*TRNC*(1-PRNX(1,1:4)) + SRKA16 = SRKA16 + TRNU*SRXALB(1) + + SRINIR = SRINIR + DKS0XX + SRONIR = SRONIR + DKS0XX*TRNU*SRXALB(1) + SRDNIR = SRDNIR + SKDFLB(L1,K) + SRUNIR = SRUNIR + SKUFLB(L1,K) + ENDDO + PLANIR = SRONIR/SRINIR + ALBNIR = SRUNIR/(SRDNIR+1.D-10) + SRKALB(16) = SRKA16/DKS0X + + SRDFLB(L1:NL+1) = SRDFLB(L1:NL+1) & + + VRD(L1:NL+1) + SRUFLB(L1:NL+1) = SRUFLB(L1:NL+1) & + + VRU(L1:NL+1) + SRNFLB(L1:NL+1) = SRDFLB(L1:NL+1) & + - SRUFLB(L1:NL+1) + SRFHRL(L1:NL) = SRNFLB(L1+1:NL+1) & + - SRNFLB(L1:NL) + SRRNIR = SRRNIR + DKS0X*RCNX + SRTNIR = SRTNIR + DKS0X*(TANX+XANX) + SRXNIR = SRXNIR + DKS0X*XANX + + S0VIS = 0.53D0*S0 + SRTVIS = SRTVIS/S0VIS + SRRVIS = SRRVIS/S0VIS + SRXVIS = SRXVIS/S0VIS + SRAVIS = 1.D0 - SRTVIS - SRRVIS + + S0NIR = 0.47D0*S0 + SRTNIR = SRTNIR/S0NIR + SRRNIR = SRRNIR/S0NIR + SRXNIR = SRXNIR/S0NIR + SRANIR = 1.D0 - SRTNIR - SRRNIR + + +! ------------------------------------------------------------------ +! FSRNFG defines the total solar flux absorbed at the ground surface +! taking into account the albedo of different surface types +! Thus: +! SRNFLB(1)=POCEAN*FSRNFG(1)+PEARTH*FSRNFG(2) +! + POICE*FSRNFG(3)+ PLICE*FSRNFG(4) +! +! NOTE: If any surface type POCEAN, PEARTH, POICE, PLICE are Zero +! the corresponding FSRNFG(I) absorbed solar flux at ground +! is computed with that surface-type albedo set equal to 0. +! --------------------------------------------------------- + + DO I = 1, 4 + FSRNFG(I) = SUM(SRKGAX(1:16,I)) & + + SUM(SRKGAD(1:16,I)) + ENDDO + + + DO K = 1, 16 + SKNFLB(L1:NL+1,K) = SKDFLB(L1:NL+1,K) & + - SKUFLB(L1:NL+1,K) + ENDDO + + DO K = 1, 16 + SKFHRL(L1:NL,K) = SKNFLB(L1+1:NL+1,K) & + - SKNFLB(L1:NL,K) + ENDDO + + DO L = L1, NL + 1 + SKDFLB(L,17) = SUM(SKDFLB(L,1:16)) + SKUFLB(L,17) = SUM(SKUFLB(L,1:16)) + SKNFLB(L,17) = SUM(SKNFLB(L,1:16)) + ENDDO + DO L = L1, NL + SKFHRL(L,17) = SUM(SKFHRL(L,1:16)) + ENDDO + GOTO 99999 + ENDIF + ENDDO + ENDIF + ENDDO + ENDIF + ENDDO + ELSE + SRINIR = SRINIR + DKS0X + SRONIR = SRONIR + DKS0X*RBXTOA + SRDNIR = SRDNIR + SKDFLB(1,K) + SRUNIR = SRUNIR + SKUFLB(1,K) + SRRNIR = SRRNIR + DKS0X*RCNX + SRTNIR = SRTNIR + DKS0X*(TANX+XANX) + SRXNIR = SRXNIR + DKS0X*XANX + ENDIF + ENDDO + +99999 END SUBROUTINE SOLARM + + + + + SUBROUTINE GETMIE(NA,AREFF,SQEX,SQSC,SQCB,TQAB,Q55) + +! INCLUDE 'rad00def.radCOMMON.f' + + INTEGER, INTENT(IN) :: NA + REAL*8, INTENT(IN) :: areff + REAL*8 SQEX(6), SQSC(6), SQCB(6), TQEX(33), TQSC(33), TQAB(33), & + Q55 + REAL*8 QXAERN(25), QSAERN(25), QGAERN(25), Q55AER(25) + + REAL*8 wts, wta, QGAERX, pi, vreff + INTEGER n0, k, n, nn + ! 1 2 3 4 + IF ( NA<5 ) THEN ! NA : Aerosol compositions SO4,SEA,ANT,OCX + N0 = 0 + IF ( NA==2 ) N0 = 22 + IF ( NA==3 ) N0 = 44 + IF ( NA==4 ) N0 = 88 + DO K = 1, 6 + DO N = 1, 22 + NN = N0 + N + WTS = FRSULF(NA) + WTA = 1.D0 - WTS + QXAERN(N) = SRUQEX(K,NN)*WTA + SRUQEX(K,N)*WTS + QSAERN(N) = SRUQSC(K,NN)*WTA + SRUQSC(K,N)*WTS + QGAERX = SRUQCB(K,NN)*SRUQSC(K,NN)*WTA + SRUQCB(K,N) & + *SRUQSC(K,N)*WTS + QGAERN(N) = QGAERX/QSAERN(N) + ENDDO + CALL SPLINE(REFU22,QXAERN,22,AREFF,SQEX(K),1.D0,1.D0,1) + CALL SPLINE(REFU22,QSAERN,22,AREFF,SQSC(K),1.D0,1.D0,1) + CALL SPLINE(REFU22,QGAERN,22,AREFF,SQCB(K),1.D0,1.D0,1) + + PI = SQSC(K)/SQEX(K) + IF ( PI>PI0MAX(NA) ) SQSC(K) = SQSC(K)*PI0MAX(NA)/PI + ENDDO + DO K = 1, 33 + DO N = 1, 22 + NN = N0 + N + WTS = FRSULF(NA) + WTA = 1.D0 - WTS + QXAERN(N) = TRUQEX(K,NN)*WTA + TRUQEX(K,N)*WTS + QSAERN(N) = TRUQSC(K,NN)*WTA + TRUQSC(K,N)*WTS + QGAERX = TRUQCB(K,NN)*TRUQSC(K,NN)*WTA + TRUQCB(K,N) & + *TRUQSC(K,N)*WTS + QGAERN(N) = QGAERX/(QSAERN(N)+1.D-20) + ENDDO + CALL SPLINE(REFU22,QXAERN,22,AREFF,TQEX(K),1.D0,1.D0,1) + CALL SPLINE(REFU22,QSAERN,22,AREFF,TQSC(K),1.D0,1.D0,1) + TQAB(K) = TQEX(K) - TQSC(K) + ENDDO + DO N = 1, 22 + NN = N0 + N + WTS = FRSULF(NA) + WTA = 1.D0 - WTS + Q55AER(N) = Q55U22(NN)*WTA + Q55U22(N)*WTS + ENDDO + CALL SPLINE(REFU22,Q55U22,22,AREFF,Q55,1.D0,1.D0,1) + ENDIF + + ! 5 6 + IF ( NA==5 .OR. NA==6 ) THEN + ! NA : Aerosol compositions BIC,BCB +!c AREFF=REFDRY(NA) + DO K = 1, 6 + QXAERN(:) = SRSQEX(K,:) + ! 1:25 + QSAERN(:) = SRSQSC(K,:) + ! 1:25 + QGAERN(:) = SRSQCB(K,:) + ! 1:25 + CALL SPLINE(REFS25,QXAERN,25,AREFF,SQEX(K),1.D0,1.D0,1) + CALL SPLINE(REFS25,QSAERN,25,AREFF,SQSC(K),1.D0,1.D0,1) + CALL SPLINE(REFS25,QGAERN,25,AREFF,SQCB(K),1.D0,1.D0,1) + ENDDO + DO K = 1, 33 + QXAERN(:) = TRSQEX(K,:) + ! 1:25 + QSAERN(:) = TRSQSC(K,:) + ! 1:25 + QGAERN(:) = TRSQCB(K,:) + ! 1:25 + CALL SPLINE(REFS25,QXAERN,25,AREFF,TQEX(K),1.D0,1.D0,1) + CALL SPLINE(REFS25,QSAERN,25,AREFF,TQSC(K),1.D0,1.D0,1) + TQAB(K) = TQEX(K) - TQSC(K) + ENDDO + CALL SPLINE(REFS25,Q55S25,25,AREFF,Q55,1.D0,1.D0,1) + ENDIF + + ! 7 + IF ( NA==7 ) THEN ! NA : Aerosol composition DST +!c AREFF=REFDRY(NA) + DO K = 1, 6 + QXAERN(:) = SRDQEX(K,:) + ! 1:25 + QSAERN(:) = SRDQSC(K,:) + ! 1:25 + QGAERN(:) = SRDQCB(K,:) + ! 1:25 + CALL SPLINE(REFD25,QXAERN,25,AREFF,SQEX(K),1.D0,1.D0,1) + CALL SPLINE(REFD25,QSAERN,25,AREFF,SQSC(K),1.D0,1.D0,1) + CALL SPLINE(REFD25,QGAERN,25,AREFF,SQCB(K),1.D0,1.D0,1) + ENDDO + DO K = 1, 33 + QXAERN(:) = TRDQEX(K,:) + ! 1:25 + QSAERN(:) = TRDQSC(K,:) + ! 1:25 + QGAERN(:) = TRDQCB(K,:) + ! 1:25 + CALL SPLINE(REFD25,QXAERN,25,AREFF,TQEX(K),1.D0,1.D0,1) + CALL SPLINE(REFD25,QSAERN,25,AREFF,TQSC(K),1.D0,1.D0,1) + TQAB(K) = TQEX(K) - TQSC(K) + ENDDO + CALL SPLINE(REFD25,Q55D25,25,AREFF,Q55,1.D0,1.D0,1) + ENDIF + + ! 8 + IF ( NA==8 ) THEN ! NA : Aerosol composition(H2SO4) VOL + VREFF = AREFF + IF ( VREFF<0.1D0 ) VREFF = 0.1D0 + IF ( VREFF>2.0D0 ) VREFF = 2.0D0 + CALL GETQVA(VREFF) + SQEX(:) = QVH2S(:) ! 1:6 + SQSC(:) = SVH2S(:) ! 1:6 + SQCB(:) = GVH2S(:) ! 1:6 + TQAB(:) = AVH2S(:) ! 1:33 + Q55 = Q55H2S + ENDIF + END SUBROUTINE GETMIE + + SUBROUTINE AO3ABS(OCM,O3ABS) + IMPLICIT NONE +! --------------------------------------------------------- +! UV absorption by Ozone is expressed as a fraction of the +! total solar flux S0. Hence O3ABS (fraction of total solar +! flux absored by OCM cm ofozone) must be normalized within +! SOLARM by dividing O3ABS by the corresponding fraction of +! the solar flux within the spectral interval DKS0(15)=0.05 +! --------------------------------------------------------- + REAL*8, INTENT(IN) :: OCM + REAL*8, INTENT(OUT) :: O3ABS + REAL*8 XX, DX + INTEGER IP, IX + + O3ABS = AO3(460) + IP = 0 + XX = OCM*1.D+04 + IX = XX + IF ( IX>99 ) THEN + DO + IP = IP + 90 + XX = XX*0.1D0 + IX = XX + IF ( IX<=99 ) EXIT + ENDDO + ELSEIF ( IX<1 ) THEN + O3ABS = XX*AO3(1) + GOTO 140 + ENDIF + DX = XX - IX + IX = IX + IP + IF ( IX<=459 ) O3ABS = AO3(IX) + DX*(AO3(IX+1)-AO3(IX)) + + 140 END SUBROUTINE AO3ABS + + SUBROUTINE WRITER(KWRU,INDEX) +! +! USE SURF_ALBEDO, only : AVSCAT, ANSCAT, AVFOAM, ANFOAM, +! * WETTRA, WETSRA, ZOCSRA, ZSNSRA, ZICSRA, ZDSSRA, ZVGSRA, +! * EOCTRA, ESNTRA, EICTRA, EDSTRA, EVGTRA, AGEXPF, ALBDIF + USE SURF_ALBEDO, ONLY:GET_ALBEDO_DATA + USE DOMAIN_DECOMP_ATM, ONLY:AM_I_ROOT + USE DUSTPARAM_MOD, ONLY:REDUST + IMPLICIT NONE +! +! ------------------------------------------------------------------ +! WRITER Radiative Input/Output Cloud/Aerosol Data/Conrol Parameters +! +! INDEX +! 0 control parameter defaults in RADPAR +! 1 RADPAR Radiative control/scaling params; GHG defaults +! 2 RADPAR Atmospheric composition P,H,T,Cld,Aer profiles +! 3 RADPAR Computed LW SW fluxes cooling and heating rates +! 4 Aerosol and Cloud: Mie scattering radiative parameters +! A SW aerosol Mie scattering Qx,Qs,g in use parameters +! B SW cloud Mie scattering Qx,Qs,g in use parameters +! C SW cld+aer Mie scattering Qx,Qs,g in use parameters +! D SW LW aerosol 11-compositon Mie Qx,Qs,g parameters +! E SW LW aerosol 6-compositon Mie Qx,Qs,g parameters +! F SW LW aerosol 8-size D dust Mie Qx,Qs,g parameters +! G SW LW cloud 15-size/phase Mie Qx,Qs,g parameters +! 5 LW cld,aer,gas total optical k-distribution extinction +! 6 LW gas absorb: total optical k-distribution extinction +! 7 A LW cloud TRCALK optical k-distribution extinction +! B LW aerosol TRAALK optical k-distribution extinction +! 8 SW Spectral/k-dist flux, albedo, absorption components +! A Spectral components of downward upward solar flux +! B Spectral components of net solar flux, heating rate +! 9 LW flux contribution from each k-distribution interval +! 1 Downward LW flux from each k-distribution interval +! 2 Upward LW flux from each k-distribution interval +! 3 Net (Up) LW flux from each k-distribution interval +! 4 Flux cooling rate from each k-distribution interval +! 5 Fraction coolrate from each k-distribution interval +! NOTE: +! KWTRAB sets LW Mie parameters in 4-D,E,F,G +! KWTRAB=0 (default) sets LW output to be Mie Qab +! KWTRAB=1 sets LW output to be Mie Qex +! KWTRAB=2 sets LW output to be Mie Qsc +! KWTRAB=3 sets LW output to be Mie Qcb +! KWTRAB=4 sets LW output to be Mie Pi0 +! +! INDEX 0-9 : show item 'INDEX' only +! INDEX 11-19: show items 1->last digit of 'INDEX' +! INDEX 21-29: show items 0->last digit of 'INDEX' +! KWRU directs the output to selected (KWRU) file number +! ------------------------------------------------------------------ +! + INTEGER, INTENT(IN) :: INDEX + REAL*8 AVSCAT, ANSCAT, AVFOAM, ANFOAM, WETTRA, WETSRA, ZOCSRA, & + ZSNSRA, ZICSRA, ZDSSRA, ZVGSRA, EOCTRA, ESNTRA, EICTRA, & + EDSTRA, EVGTRA, AGEXPF(3,2), ALBDIF(3,2) +!!nu TROPOSPHERIC AEROSOL effective radius +!!nu BCI OCI SUI SEA SUN ANT OCN OCB BCB SSB + REAL*8, DIMENSION(10) :: REAERO = (/0.1,0.3,0.3,2.0,0.3,1.0,0.3,& + 0.3,0.2,0.5/) + ! no longer needed except in writer + CHARACTER*8, PARAMETER :: FTYPE(5) & + = (/'DOWNWARD',' UPWARD','UPWD NET',& + &'COOLRATE','FRACTION'/) + CHARACTER*6, PARAMETER :: GHG(12) & + = (/' H2O',' CO2',' O3', & + &' O2',' NO2',' N2O',' CH4', & + &'CCL3P1','CCL2P2',' N2',' CFC-Y', & + &' CFC-Z'/) + CHARACTER*3 TRABCD(5), TRAXSG(5), snotyp + DATA TRABCD/'TRA', 'TRB', 'TRC', 'TRD', 'TRE'/ + DATA TRAXSG/'QAB', 'QEX', 'QSC', 'QCB', 'PI0'/ + + REAL*8 TKEFF(3), TRPI0K(25) + REAL*8 WFLB(LX,33), WFSL(33), UXGAS(LX,9) + REAL*8 BGFLUX(33), BGFRAC(33), TAUSUM(33) + REAL*8 SUM0(20), SUM1(LX+1), SUM2(LX+1), SUM3(LX+1) + REAL*8, DIMENSION(LX,6) :: WSREXT, WSRSCT, WSRGCB, WSRPI0 + REAL*8 FSR1(17), FSR2(17) + INTEGER :: ISR1(16), KWRU + INTEGER, PARAMETER :: KSLAMW(16) & + = (/1,1,2,2,5,5,5,5,1,1,1,3,4,6,6,1/), & + IORDER(16) & + = (/12,11,10,9,6,5,4,3,15,14,13,8,7,2,1, & + 16/) + + CHARACTER*1, PARAMETER :: AUXGAS(4) = (/'0','L','X','X'/) + REAL*8, PARAMETER :: P0 = 1013.25, SIGMA = 5.6697D-08 + REAL*8 ACOLX, BCOLX, DCOLX, VCOLX, TCOLX, FACTOR, PPMCO2, PPMO2, & + PPMN2O, PPMCH4, PPMF11, PPMF12, PPMY11, PPMZ12, EPS, TAER, & + HLM, TLAPS, TAU55, TGMEAN, PSUM, SRALB, STNFLB, CRHRF, & + STFHR, TRDCR, SRDHR, STDHR, PFW, DPF, FRACSL, SIGT4, WTG, & + SUMK, SUMT, SUMK1, SUMK2, ASUM1, BSUM1, CSUM1, DSUM1, & + ESUM1, FSUM1, ASUM2, BSUM2, CSUM2, DSUM2, ESUM2, FSUM2, & + ASUM3, BSUM3, CSUM3, DSUM3, ESUM3, FSUM3, SUML, SUMA, SUMB,& + SUMC, SUMD, SUME, SUMF + INTEGER I, J, K, L, KW, INDJ, INDI, INDX, KPAGE, NPAGE, LUXGAS, & + LGS, IPI0, IRHL, N, II, IPF, ITG, LK, KK, NW, LINFIL + + CALL GET_ALBEDO_DATA(AVSCAT,ANSCAT,AVFOAM,ANFOAM,WETTRA,WETSRA, & + ZOCSRA,ZSNSRA,ZICSRA,ZDSSRA,ZVGSRA,EOCTRA, & + ESNTRA,EICTRA,EDSTRA,EVGTRA,AGEXPF,ALBDIF) + + KW = KWRU + INDJ = MOD(INDEX,10) + IF ( INDJ<1 .AND. INDEX>0 ) INDJ = 10 + INDI = 1 + IF ( INDEX>20 .OR. INDEX==0 ) INDI = 0 + IF ( INDEX<11 ) INDI = INDJ + + IF ( INDJ>0 ) THEN + DO K = 1, 6 + DO L = L1, NL + WSREXT(L,K) = SRAEXT(L,K) + SRBEXT(L,K) + SRDEXT(L,K) & + + SRVEXT(L,K) + WSRSCT(L,K) = SRASCT(L,K) + SRBSCT(L,K) + SRDSCT(L,K) & + + SRVSCT(L,K) + WSRGCB(L,K) = SRASCT(L,K)*SRAGCB(L,K) + SRBSCT(L,K) & + *SRBGCB(L,K) + SRDSCT(L,K)*SRDGCB(L,K) & + + SRVSCT(L,K)*SRVGCB(L,K) + WSRPI0(L,K) = WSRSCT(L,K)/(WSREXT(L,K)+1.E-10) + WSRGCB(L,K) = WSRGCB(L,K)/(WSRSCT(L,K)+1.D-10) + ENDDO + ENDDO +! + ACOLX = SUM(SRAEXT(L1:NL,6)) + BCOLX = SUM(SRBEXT(L1:NL,6)) + DCOLX = SUM(SRDEXT(L1:NL,6)) + VCOLX = SUM(SRVEXT(L1:NL,6)) + TCOLX = ACOLX + BCOLX + DCOLX + VCOLX + ENDIF + + DO INDX = INDI, INDJ + + KPAGE = 1 + IF ( INDX/=0 ) THEN + + IF ( INDX==1 ) THEN +! +!------------- +!------------- +! + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6101) +! + 6101 FORMAT (' (1)FUL: 1',7X,'2',8X,'3',7X,'6',7X,'7',8X,'8',& + 8X,'9',8X,'11',7X,'12',4X, & + &'RADPAR 1/F: (Control/Default', & + &'/Scaling Parameters)') + WRITE (KW,6102) + 6102 FORMAT (4X,'GAS: ','H2O',5X,'CO2',7X,'O3',5X,'N2O',5X, & + &'CH4',5X,'CFC-11',3X,'CFC-12',3X,'CFY-11',3X, & + &'CFZ-12',2X, & + &'Aerosol Global Ocean Land Desert Haze'& + ) + FACTOR = 1D0/((PLB(L1)-PLB(L1+1))*PPMV_TO_CM_AT_STP) + PPMCO2 = ULGAS(L1,2)*FACTOR + PPMO2 = ULGAS(L1,4)*FACTOR + PPMN2O = ULGAS(L1,6)*FACTOR + PPMCH4 = ULGAS(L1,7)*FACTOR + PPMF11 = ULGAS(L1,8)*FACTOR + PPMF12 = ULGAS(L1,9)*FACTOR + PPMY11 = ULGAS(L1,11)*FACTOR + PPMZ12 = ULGAS(L1,12)*FACTOR + WRITE (KW,6103) (FULGAS(I),I=1,3), (FULGAS(I),I=6,9), & + FULGAS(11), FULGAS(12), (FGOLDH(I),I=1,5) + 6103 FORMAT (1X,'FULGAS=',F5.3,F10.5,F7.3,F9.5,F8.5,4F9.5,2X, & + &'FGOLDH=',F7.5,2F9.6,2F8.5) +! IF(KGASSR > 0) +! +WRITE(KW,6104) (FULGAS(I+9),I=1,2),(FULGAS(I+9),I=4,9) +! + ,FULGAS(11),FULGAS(12), (FGOLDH(I+9),I=1,5) + WRITE (KW,6105) PPMCO2, PPMN2O, PPMCH4, PPMF11, PPMF12, & + PPMY11, PPMZ12, (FSTOPX(I),I=1,4), & + PPMV80(2), (PPMV80(I),I=6,9), & + (PPMV80(I),I=11,12), KTREND, JYEAR, JDAY,& + LASTVC +!6104 FORMAT('+',T84,'T' +! + /1X,'FULGAS=',1P,1E7.1,1P,2E8.1,1P,2E8.1,1P,4E9.1 +! + ,' S','FGOLDH=',1P,1E7.1,1P,2E9.2,1P,2E8.1) + 6105 FORMAT (1X,'PPM(1)=(now)',2X,F8.3,8X,F8.5,F8.5,4(1X,F8.7)& + ,2X,'TRACER=',F7.5,2F9.6,F8.5/' PPMV80=(ref)=', & + 0P,F9.3,8X,2F8.5,4(1X,F8.7),2X,'KTREND=',I1,2X, & + &'JYEAR=',I4,' JDAY=',I3,5X,'LASTVC=',I7) + WRITE (KW,6106) TAUWC0, FCLDTR, EOCTRA, ZOCSRA, KZSNOW, & + KCLDEM, NTRACE, FSAAER, FTTAER, KCLDEP, & + MADO3M, L1 + 6106 FORMAT (1X,'TAUWC0=',1P,E6.0,' FCLDTR=',0P,F4.2, & + &' EOCTRA=',F3.1,1X,'ZOCSRA=',F3.1,' KZSNOW=',I4, & + &' KCLDEM=',I3,1X,'NTRACE=',I3,2X,'FSTAER=',F3.1, & + &' FTTAER=',F3.1,1X,'KCLDEP=',I1,1X,'MADO3M=',I2, & + &' L1=',I3) + WRITE (KW,6107) TAUIC0, FCLDSR, ESNTRA, ZSNSRA, WETTRA, & + KSIALB, ITR(1), ITR(5), FSBAER, FTBAER, & + KEEPAL, NL + 6107 FORMAT (1X,'TAUIC0=',1P,E6.0,' FCLDSR=',0P,F4.2, & + &' ESNTRA=',F3.1,1X,'ZSNSRA=',F3.1,1X,'WETTRA=', & + F4.2,' KSIALB=',I3,1X,'ITR(1)=',2I2,1X,'FSBAER=',& + F3.1,' FTBAER=',F3.1,1X,'KEEPAL=',I1,1X, & + ' ',' ',' NL=',I3) + WRITE (KW,6108) FRAYLE, EICTRA, ZICSRA, WETSRA, KCNORM, & + ITR(2), ITR(6), FSAAER, FTAAER, KEEP10, & + MLAT46 + 6108 FORMAT (1X,' ',6X,' FRAYLE=',0P,F4.1,' EICTRA=', & + F3.1,1X,'ZICSRA=',F3.1,1X,'WETSRA=',F4.2, & + &' KCNORM=',I3,1X,'ITR(2)=',2I2,1X,'FSAAER=',F3.1,& + &' FTAAER=',F3.1,1X,'KEEP10=',I1,1X,' ',' ',& + &' MLAT46=',I2) + WRITE (KW,6109) TLGRAD, ECLTRA, EDSTRA, ZDSSRA, KANORM, & + KPGRAD, ITR(3), ITR(7), FSDAER, FTDAER, & + KWVCON, ICE012, MLON72 + 6109 FORMAT (1X,'TLGRAD=',F6.2,' ECLTRA=',0P,F4.2,' EDSTRA=', & + F3.1,1X,'ZDSSRA=',F3.1,1X,'KANORM=',I4, & + ' KPGRAD=',I3,1X,'ITR(3)=',2I2,1X,'FSDAER=',F3.1,& + &' FTDAER=',F3.1,1X,'KWVCON=',I1,1X,'ICE012=',I1, & + &' MLON72=',I2) + WRITE (KW,6110) PTLISO, EVGTRA, ZVGSRA, KEEPRH, KLATZ0, & + ITR(4), ITR(8), FSVAER, FTVAER, KSOLAR, & + NORMS0 + 6110 FORMAT (1X,'PTLISO=',F6.1,1X,' ',' EVGTRA=', & + F3.1,1X,'ZVGSRA=',F3.1,1X,'KEEPRH=',I4, & + ' KLATZ0=',I3,1X,'ITR(4)=',2I2,1X,'FSVAER=',F3.1,& + &' FTVAER=',F3.1,1X,'KSOLAR=',I1,1X,'NORMS0=',I1, & + &' ') + CYCLE + ELSEIF ( INDX==2 ) THEN +! +!------------- +!------------- +! + NPAGE = 0 + LUXGAS = 0 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6201) AUXGAS(LUXGAS+1), S00WM2, S0, COSZ + 6201 FORMAT (' (2) RADPAR G/L: (Input Data)',2X, & + &'Absorber Amount per Layer:',' U',1A1, & + &'GAS(L,K) in cm**3(STP)/cm**2',2X,'S00WM2=',F9.4,& + 1X,'S0=',F9.4,2X,'COSZ=',F6.4/ & + &' LN PL HLM TLM TLAP SHL .RH ', & + &'H2O CO2 O3 N2O CH4 CFC-11', & + &' CFC-12 NO2 WC.SIZ.IC WC.TAU.IC CLEP A TAU PI0'& + ) + DO K = 1, 9 + DO L = L1, NL + UXGAS(L,K) = ULGAS(L,K) + ENDDO + ENDDO + IF ( LUXGAS>=2 ) THEN + LGS = (LUXGAS-2)*9 + DO L = L1, NL + UXGAS(L,1) = U0GAS(L,1)*FULGAS(1+LGS) + UXGAS(L,3) = U0GAS(L,3)*FULGAS(3+LGS) + UXGAS(L,5) = U0GAS(L,5)*FULGAS(5+LGS) + ENDDO +! + DO L = L1, NL + UXGAS(L,2) = U0GAS(L,2)*FULGAS(2+LGS) + UXGAS(L,4) = U0GAS(L,4)*FULGAS(4+LGS) + UXGAS(L,6) = U0GAS(L,6)*FULGAS(6+LGS) + UXGAS(L,7) = U0GAS(L,7)*FULGAS(7+LGS) + UXGAS(L,8) = U0GAS(L,8)*FULGAS(8+LGS) + UXGAS(L,9) = U0GAS(L,9)*FULGAS(9+LGS) + ENDDO + ENDIF + DO L = NL, L1, -1 + EPS = CLDEPS(L) + TAER = WSREXT(L,6) + IPI0 = WSRPI0(L,6)*1000.D0 + 1.D-05 + HLM = 0.5D0*(HLB0(L+1)+HLB0(L)) + TLAPS = (TLT(L)-TLB(L))/MAX(1D-3,HLB0(L+1)-HLB0(L)) + IRHL = RHL(L)*100.0 + IF ( PL(L)<1.D0 ) THEN + WRITE (KW,6212) L, PL(L), HLM, TLM(L), TLAPS, & + SHL(L), IRHL, (UXGAS(L,K),K=1,3), & + (UXGAS(L,K),K=6,9), UXGAS(L,5), & + SIZEWC(L), SIZEIC(L), & + FTAUC*TAUWC(L), FTAUC*TAUIC(L), & + EPS, TAER, IPI0 + 6212 FORMAT (1X,I2,F7.4,F5.1,F7.2,F5.1,1X,F7.6,I3,F8.5, & + F6.2,1X,F6.5,1X,F5.4,F7.4,1P,3E8.1,0P, & + 2F5.1,F6.2,F5.2,1X,F4.3,F6.3,I5) + ELSEIF ( UXGAS(L,1)>=1.D0 ) THEN + WRITE (KW,6202) L, PL(L), HLM, TLM(L), TLAPS, & + SHL(L), IRHL, (UXGAS(L,K),K=1,3), & + (UXGAS(L,K),K=6,9), UXGAS(L,5), & + SIZEWC(L), SIZEIC(L), & + FTAUC*TAUWC(L), FTAUC*TAUIC(L), & + EPS, TAER, IPI0 + 6202 FORMAT (1X,I2,F7.2,F5.1,F7.2,F5.1,1X,F7.6,I3,F8.2, & + F6.2,1X,F6.5,1X,F5.4,F7.4,1P,3E8.1,0P, & + 2F5.1,F6.2,F5.2,1X,F4.3,F6.3,I5) + ELSE + WRITE (KW,6211) L, PL(L), HLM, TLM(L), TLAPS, & + SHL(L), IRHL, (UXGAS(L,K),K=1,3), & + (UXGAS(L,K),K=6,9), UXGAS(L,5), & + SIZEWC(L), SIZEIC(L), & + FTAUC*TAUWC(L), FTAUC*TAUIC(L), & + EPS, TAER, IPI0 + 6211 FORMAT (1X,I2,F7.2,F5.1,F7.2,F5.1,1X,F7.6,I3,F8.5, & + F6.2,1X,F6.5,1X,F5.4,F7.4,1P,3E8.1,0P, & + 2F5.1,F6.2,F5.2,1X,F4.3,F6.3,I5) + ENDIF + ENDDO + DO I = 1, 16 + SUM0(I) = 0. + ENDDO + DO L = L1, NL + DO I = 1, 9 + SUM0(I) = SUM0(I) + ULGAS(L,I) + ENDDO + DO I = 1, 4 + SUM0(12+I) = SUM0(12+I) + TRACER(L,I) & + *1D3*.75D0/DENAER(ITR(I)) & + *Q55DRY(ITR(I))/TRRDRY(I) + ENDDO + SUM0(10) = SUM0(10) + FTAUC*TAUWC(L) + SUM0(11) = SUM0(11) + FTAUC*TAUIC(L) + ENDDO + TAU55 = 0.0 + DO L = L1, NL + TAU55 = TAU55 + WSREXT(L,6) + ENDDO + SUM0(12) = TAU55 + TGMEAN = POCEAN*TGO**4 + PEARTH*TGE**4 + PLICE*TGLI**4 + & + POICE*TGOI**4 + TGMEAN = SQRT(TGMEAN) + TGMEAN = SQRT(TGMEAN) + WRITE (KW,6203) (SUM0(I),I=1,3), (SUM0(I),I=6,9), SUM0(5)& + , SUM0(10), SUM0(11), SUM0(12) + 6203 FORMAT (24X,' Column Amount',F7.1,F7.2,1X,F6.5,1X,F5.4, & + F7.4,1P,3E8.1,0P,10X,F6.2,F5.2,5X,F6.3) + WRITE (KW,6204) POCEAN, TGO, PLAKE, zlake, SUM0(13), & + JYEAR, BXA(4:5), LASTVC + 6204 FORMAT (1X,'PWATER=',F6.4,' TGO=',F6.2,1X,' PLAKE=', & + F6.3,1X,' ZLAKE=',F6.3,' TRACER 1=',F5.3, & + &' JYEAR=',I4,3X,'BSNVIS=',F6.4,' BSNNIR=',F6.4, & + 7X,'LASTVC=',I7) + WRITE (KW,6205) PEARTH, TGE, SNOWD, ZSNWOI, SUM0(14), & + JDAY, BXA(6:7) + 6205 FORMAT (' PEARTH=',F6.4,' TGE=',F6.2,' SNOWD=',2F6.3,& + &' ZSNOW=',F6.3,' Sums: 2=',F5.3,' JDAY=',I4, & + 2X,' XSNVIS=',F6.4,' XSNNIR=',F6.4,8X, & + &'NIRALB VISALB') + WRITE (KW,6206) POICE, TGOI, SNOWOI, ZOICE, SUM0(15), & + JLAT, (SRBALB(I),I=1,6) + 6206 FORMAT (' POICE=',F6.4,' TGOI=',F6.2,' SNOWOI=',F6.3, & + &' ZOICE=',F6.3,' 3=',F5.3,' JLAT=',I4, & + 2X,' SRBALB=',F6.4,4F7.4,F7.4) + WRITE (KW,6207) PLICE, TGLI, SNOWLI, zmp, SUM0(16), ILON,& + (SRXALB(I),I=1,6) + 6207 FORMAT (' PLICE=',F6.4,' TGLI=',F6.2,' SNOWLI=',F6.3, & + &' ZMLTP=',F6.3,' 4=',F5.3,' ILON=',I4, & + 2X,' SRXALB=',F6.4,4F7.4,F7.4) + PSUM = POCEAN + PEARTH + POICE + PLICE + snotyp = 'DRY' + IF ( flags ) snotyp = 'WET' + WRITE (KW,6208) TGMEAN, snotyp, fmp, PSUM, TSL, WMAG, & + LS1_loc, (PVT(I),I=1,11) + 6208 FORMAT (8X,6('-'),' TGMEAN=',F6.2,' SNOW : ',a3, & + &' FMLTP=',F6.3, & + &' BSAND TUNDRA GRASSL SHRUBS TREES DECIDF', & + &' EVERGF',' RAINF',' CROPS',' BDIRT', & + ' ALGAE'/' PSUM=',F6.4,' TSL=',F6.2, & + &' WINDSP=',F6.3,' LS1L=',I2,T54,'PVT=',F6.4, & + 10F7.4) + WRITE (kw,6213) snow_frac(1), snow_frac(2), agesn(1), & + agesn(2), agesn(3), wearth, fulgas(4), & + fulgas(5), fulgas(10) + 6213 FORMAT (1X,'FSNWds=',F6.4,' FSNWvg=',F6.4,' AGESN=[EA:',& + F6.3,' OI:',F6.3,' LI:',F6.3,'] WEARTH=',F6.4,1X,& + &' FULGAS[ 4=O2:',F3.1,' 5=NO2:',F3.1,' 10=N2C:', & + F3.1,']') + WRITE (KW,6209) (PRNB(1:2,I),PRNX(1:2,I),I=1,4), BXA(1:3) + 6209 FORMAT ( & + &' BOCVIS BOCNIR XOCVIS XOCNIR BEAVIS BEANIR XEAVIS XEANIR'& + , & + &' BOIVIS BOINIR XOIVIS XOINIR BLIVIS BLINIR XLIVIS XLINIR'& + ,' EXPSNE EXPSNO EXPSNL'/1X,F6.4,18F7.4) + WRITE (KW,6210) + 6210 FORMAT (' ') +! + CYCLE + ELSEIF ( INDX==3 ) THEN +! +!------------- +!------------- +! + NPAGE = 0 + IF ( INDEX<11 ) NPAGE = KPAGE + IF ( NL>13 ) NPAGE = 1 + L = NL + 1 + SRALB = SRUFLB(L)/(SRDFLB(L)+1.E-10) + STNFLB = SRNFLB(L) - TRNFLB(L) + WRITE (KW,6301) NORMS0 +! +! + 6301 FORMAT (/' (3) RADPAR M/S: (Output Data)',T37, & + &'Thermal Fluxes (W/M**2)',4X, & + &'Solar Fluxes (W/M**2)',1X,'NORMS0=',I1, & + &' Energy Input Heat/Cool Deg/Day Alb', & + &'do'/' LN PLB HLB TLB TLT ', & + &' TRDFLB TRUFLB TRNFLB TRFCRL SRDFLB SRUFLB SRNFLB'& + ,' SRFHRL STNFLB STFHR SR-TR TR=CR SR=HR SRALB') + WRITE (KW,6302) L, PLB(L), HLB0(L), TLT(L-1), TRDFLB(L), & + TRUFLB(L), TRNFLB(L), SRDFLB(L), & + SRUFLB(L), SRNFLB(L), STNFLB, SRALB + ! TLB(LN+1) unused/set + 6302 FORMAT (1X,I2,F9.3,F6.2,1X,F6.2,8X,3F7.2,8X,3F8.2,7X, & + F8.2,26X,F6.4) + DO L = NL, L1, -1 + CRHRF = 8.4167/(PLB(L)-PLB(L+1)) + STNFLB = SRNFLB(L) - TRNFLB(L) + STFHR = SRFHRL(L) - TRFCRL(L) + TRDCR = TRFCRL(L)*CRHRF + SRDHR = SRFHRL(L)*CRHRF + STDHR = STFHR*CRHRF + SRALB = SRUFLB(L)/(SRDFLB(L)+1.E-10) +!eq SRXVIS=SRXATM(1) +!eq SRXNIR=SRXATM(2) + IF ( PLB(L)<1.D0 ) THEN + WRITE (KW,6313) L, PLB(L), HLB0(L), TLB(L), TLT(L),& + TRDFLB(L), TRUFLB(L), TRNFLB(L), & + TRFCRL(L), SRDFLB(L), SRUFLB(L), & + SRNFLB(L), SRFHRL(L), STNFLB, & + STFHR, STDHR, TRDCR, SRDHR, SRALB + 6313 FORMAT (1X,I2,F9.5,F6.2,2F7.2,1X,F7.4,2F7.2,F7.4, & + 1X,3F8.2,F7.4,1X,F7.2,F7.4,1X,3F6.2,1X, & + F5.4) + ELSE + WRITE (KW,6303) L, PLB(L), HLB0(L), TLB(L), TLT(L),& + TRDFLB(L), TRUFLB(L), TRNFLB(L), & + TRFCRL(L), SRDFLB(L), SRUFLB(L), & + SRNFLB(L), SRFHRL(L), STNFLB, & + STFHR, STDHR, TRDCR, SRDHR, SRALB + 6303 FORMAT (1X,I2,F9.3,F6.2,2F7.2,1X,3F7.2,F7.2,1X, & + 3F8.2,F7.2,1X,F7.2,1X,F6.2,1X,3F6.2,1X, & + F5.4) + ENDIF + ENDDO +! + DO II = 1, 3 + PFW = TRDFLB(L1) + IF ( II==2 ) PFW = TRUFLB(L1) + IF ( II==3 ) PFW = TRUFLB(NL+1) + IPF = PFW + DPF = PFW - IPF + IF ( IPF<1 ) IPF = 1 + IF ( IPF>899 ) IPF = 899 + TKEFF(II) = TKPFT(IPF) + DPF*(TKPFT(IPF+1)-TKPFT(IPF)) + ENDDO +! + WRITE (KW,6304) WINDZF(1), WINDZT(1), TOTLZF(1), & + TOTLZT(1), (FSRNFG(I),I=1,4), LTOPCL, & + JLAT, JYEAR + 6304 FORMAT (1X,'XMU WINDZF WINDZT TOTLZF TOTLZT'/1X,'1.0',& + 1X,F7.3,F7.2,2X,F7.3,F7.2,2X,'FR.SRNLB1', & + &' OCEAN=',F7.2,' EARTH=',F7.2,' OICE=',F7.2, & + &' LICE=',F7.2,1X,' LTOPCL=',I2,' JLAT=',I2, & + &' JYEAR=',I4) + WRITE (KW,6305) WINDZF(2), WINDZT(2), TOTLZF(2), & + TOTLZT(2), (FTRUFG(I),I=1,4), LBOTCL, & + ILON, JDAY + 6305 FORMAT (1X,'0.5',1X,F7.3,F7.2,2X,F7.3,F7.2,2X, & + 'FR.TRULB1',' OCEAN=',F7.4,' EARTH=',F7.4, & + &' OICE=',F7.4,' LICE=',F7.4,1X,' LBOTCL=',I2, & + &' ILON=',I2,' JDAY=',I4) + IF ( KORDER==0 ) WRITE (KW,6306) WINDZF(3), WINDZT(3), & + TOTLZF(3), TOTLZT(3), (I,I=1,16) + 6306 FORMAT (1X,'0.1',1X,F7.3,F7.2,2X,F7.3,F7.2,2X,'L=',I3, & + 15I6) + IF ( KORDER==1 ) WRITE (KW,6307) WINDZF(3), WINDZT(3), & + TOTLZF(3), TOTLZT(3), (I,I=1,16) + 6307 FORMAT (1X,'0.1',1X,F7.3,F7.2,2X,F7.3,F7.2,2X,'K=',I3, & + 15I6) + FRACSL = 0.D0 + IF ( KORDER==0 ) WRITE (KW,6308) TKEFF(1), TKEFF(2), & + TKEFF(3), & + (SRKALB(NORDER(I)),I=1,16), & + BTEMPW, TRUFTW, SRIVIS, SROVIS, & + PLAVIS, SRINIR, SRONIR, PLANIR + IF ( KORDER==1 ) WRITE (KW,6308) TKEFF(1), TKEFF(2), & + TKEFF(3), (SRKALB(I),I=1,16), & + BTEMPW, TRUFTW, SRIVIS, SROVIS, & + PLAVIS, SRINIR, SRONIR, PLANIR + WRITE (KW,6309) TRDFGW, TRUFGW, SRDVIS, SRUVIS, ALBVIS, & + SRDNIR, SRUNIR, ALBNIR + 6309 FORMAT (1X,'At Bot of Atm: ',' TRDFGW=',F6.3,1X, & + &' TRUFGW=',F6.3,2X,' SRDVIS=',F6.2,' SRUVIS=', & + F6.2,' ALBVIS=',F6.4,2X,' SRDNIR=',F6.2, & + &' SRUNIR=',F6.2,' ALBNIR=',F6.4) + WRITE (KW,6310) SRXVIS, SRXNIR, SRTVIS, SRRVIS, SRAVIS, & + SRTNIR, SRRNIR, SRANIR + 6310 FORMAT (1X,'In Atmosphere: ',' SRXVIS=',F6.4,1X, & + &' SRXNIR=',F6.4,2X,' SRTVIS=',F6.4,' SRRVIS=', & + F6.4,' SRAVIS=',F6.4,2X,' SRTNIR=',F6.4, & + &' SRRNIR=',F6.4,' SRANIR=',F6.4) + 6311 FORMAT (' ') + CYCLE + ELSEIF ( INDX==4 ) THEN +! +!------------- +!------------- +! +! (4A) Total Aerosol Qx, Qs, g, Pi0 +! ---------------------------------- + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6401) +! + 6401 FORMAT (' (4A) Aerosol Input for Solar Radiation:', & + &' Aerosol Radiative Parameters',T81, & + &'LIST: SRAEXT(L,K),SRASCT(L,K),SRAGCB(L,K),SRAPI0(L,K)'& + //T42,'TAU -- EXTINCTION',T99,'TAU -- SCATTERING',/T24,& + 53('-'),4X,53('-')) + DO K = 1, 6 + SUM1(K) = 0. + SUM2(K) = 0. + SUM3(K) = 0. + DO L = L1, NL + SUM1(K) = SUM1(K) + WSREXT(L,K) + SUM2(K) = SUM2(K) + WSRSCT(L,K) + SUM3(K) = SUM3(K) + WSRSCT(L,K)*WSRGCB(L,K) + ENDDO + SUM3(K) = SUM3(K)/(SUM2(K)+1.D-10) + SUM0(K) = SUM2(K)/(SUM1(K)+1.D-10) + ENDDO + WRITE (KW,6402) (K,K=1,6), (K,K=1,6) + 6402 FORMAT (' LN PLB HLB K=',I3,5I9,7X,'K=',I3, & + 5I9) + DO L = NL, L1, -1 + WRITE (KW,6403) L, PLB(L), HLB0(L), & + (WSREXT(L,J),J=1,6), & + (WSRSCT(L,J),J=1,6) + 6403 FORMAT (1X,I2,2F8.3,3X,6F9.6,3X,6F9.6) + ENDDO + WRITE (KW,6404) (SUM1(K),K=1,6), (SUM2(K),K=1,6) + 6404 FORMAT (/1X,T7,'COLUMN AMOUNT=',2X,6F9.6,3X,6F9.6) + NPAGE = 0 + IF ( NL>13 ) NPAGE = 1 + WRITE (KW,6405) KANORM + 6405 FORMAT (6X,'KANORM=',1I1/T48,'COSBAR',T105,'PIZERO',/T24,& + 53('-'),4X,53('-')) + WRITE (KW,6406) (K,K=1,6), (K,K=1,6) + 6406 FORMAT (' LN PL DPL K=',I3,5I9,7X,'K=',I3, & + 5I9) + DO L = NL, L1, -1 + WRITE (KW,6407) L, PL(L), DPL(L), (WSRGCB(L,J),J=1,6),& + (WSRPI0(L,J),J=1,6) + 6407 FORMAT (1X,I2,2F8.3,3X,6F9.6,3X,6F9.6) + ENDDO + WRITE (KW,6408) (SUM3(K),K=1,6), (SUM0(K),K=1,6) + 6408 FORMAT (/1X,T7,'COLUMN MEAN=',2X,6F9.6,3X,6F9.6) +! WRITE(KW,6420) (SRBALB(K),K=1,6) +! WRITE(KW,6421) (SRXALB(K),K=1,6) +! WRITE(KW,6422) + SUMT = 0. + DO J = 1, 5 + TAU55 = 0. + DO I = 1, 11 + ! NAERO + TAU55 = TAU55 + AGOLDH(I,J)*FGOLDH(J) + ENDDO + WRITE (KW,6423) J, FGOLDH(J), TAU55 + SUMT = SUMT + TAU55 + ENDDO + WRITE (KW,6438) SUMT + WRITE (KW,6424) BCOLX, ACOLX, DCOLX, VCOLX, TCOLX + 6424 FORMAT (/T11, & + &'SUM COLUMN TAU(0.55) = BkGrnd ClimAer D Dust'& + ,' VolAer TotAer'/T33,5F10.5) + DO I = 1, 8 + WRITE (KW,6425) + ENDDO +! +! (4B) Water/Ice Cloud Qx, Qs, g, Pi0 +! ------------------------------------ + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6411) +! + 6411 FORMAT (' (4B) Cloud Input for Solar Radiation:', & + &' Cloud Radiative Parameters',T81, & + &'LIST: SRCEXT(L,K),SRCSCT(L,K),SRCGCB(L,K),SRCPI0(L,K)'& + //T42,'TAU -- EXTINCTION',T99,'TAU -- SCATTERING',/T24,& + 53('-'),4X,53('-')) + DO K = 1, 6 + SUM1(K) = 0. + SUM2(K) = 0. + SUM3(K) = 0. + DO L = L1, NL + SUM1(K) = SUM1(K) + SRCEXT(L,K) + SUM2(K) = SUM2(K) + SRCSCT(L,K) + SUM3(K) = SUM3(K) + SRCSCT(L,K)*SRCGCB(L,K) + SRCPI0(L,K) = SRCSCT(L,K)/(SRCEXT(L,K)+1.D-10) + ENDDO + SUM3(K) = SUM3(K)/(SUM2(K)+1.D-10) + SUM0(K) = SUM2(K)/(SUM1(K)+1.D-10) + ENDDO + WRITE (KW,6412) (K,K=1,6), (K,K=1,6) + 6412 FORMAT (' LN PLB HLB K=',I3,5I9,7X,'K=',I3, & + 5I9) + DO L = NL, L1, -1 + WRITE (KW,6413) L, PLB(L), HLB0(L), & + (SRCEXT(L,J),J=1,6), & + (SRCSCT(L,J),J=1,6) + 6413 FORMAT (1X,I2,2F8.3,3X,6F9.6,3X,6F9.6) + ENDDO + WRITE (KW,6414) (SUM1(K),K=1,6), (SUM2(K),K=1,6) + 6414 FORMAT (/1X,T7,'COLUMN AMOUNT=',2X,6F9.6,3X,6F9.6) + NPAGE = 0 + IF ( NL>13 ) NPAGE = 1 + WRITE (KW,6415) KANORM + 6415 FORMAT (6X,'KANORM=',1I1/T48,'COSBAR',T105,'PIZERO',/T24,& + 53('-'),4X,53('-')) + WRITE (KW,6416) (K,K=1,6), (K,K=1,6) + 6416 FORMAT (' LN PL DPL K=',I3,5I9,7X,'K=',I3, & + 5I9) + DO L = NL, L1, -1 + WRITE (KW,6417) L, PL(L), DPL(L), (SRCGCB(L,J),J=1,6),& + (SRCPI0(L,J),J=1,6) + 6417 FORMAT (1X,I2,2F8.3,3X,6F9.6,3X,6F9.6) + ENDDO + WRITE (KW,6418) (SUM3(K),K=1,6), (SUM0(K),K=1,6) + 6418 FORMAT (/1X,T7,'COLUMN MEAN=',2X,6F9.6,3X,6F9.6) + WRITE (KW,6420) (SRBALB(K),K=1,6) +! + 6420 FORMAT (/1X,T7,'ALBEDO RSURFB=',2X,6F9.6,3X,6F9.6) + WRITE (KW,6421) (SRXALB(K),K=1,6) + 6421 FORMAT (1X,T7,'ALBEDO RSURFX=',2X,6F9.6,3X,6F9.6) + WRITE (KW,6422) + 6422 FORMAT (///T44,'AEROSOL COMPOSITION AND TYPE MIX:',T81, & + &'FACTOR',6X,'VALUE',T107,'TAU(0.55)'/) + SUMT = 0. + DO J = 1, 5 + TAU55 = 0. + DO I = 1, 11 + ! NAERO + TAU55 = TAU55 + AGOLDH(I,J)*FGOLDH(J) + ENDDO + WRITE (KW,6423) J, FGOLDH(J), TAU55 + SUMT = SUMT + TAU55 + ENDDO + WRITE (KW,6438) SUMT + DO I = 1, 2 + WRITE (KW,6425) + ENDDO +! +! (4C) Aerosol + Cloud Qx, Qs, g, Pi0 +! ------------------------------------ + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6426) +! + 6426 FORMAT (' (4C) Cloud+Aerosol Output from SOLARM/SGPGXG:'& + ,' Cloud+Aerosol Rad Parameters',T81, & + &'LIST: DBLEXT(L,K),DBLSCT(L,K),DBLGCB(L,K),DBLPI0(L,K)'& + //T42,'TAU -- EXTINCTION',T99,'TAU -- SCATTERING',/T24,& + 53('-'),4X,53('-')) + DO K = 1, 6 + SUM1(K) = 0. + SUM2(K) = 0. + SUM3(K) = 0. + DO L = L1, NL + SUM1(K) = SUM1(K) + DBLEXT(L,K) + SUM2(K) = SUM2(K) + DBLSCT(L,K) + SUM3(K) = SUM3(K) + DBLSCT(L,K)*DBLGCB(L,K) + DBLPI0(L,K) = DBLSCT(L,K)/(DBLEXT(L,K)+1.E-10) + ENDDO + SUM3(K) = SUM3(K)/(SUM2(K)+1.E-10) + SUM0(K) = SUM2(K)/(SUM1(K)+1.E-10) + ENDDO + WRITE (KW,6427) (K,K=1,6), (K,K=1,6) + 6427 FORMAT (' LN PLB HLB K=',I3,5I9,7X,'K=',I3, & + 5I9) + DO L = NL, L1, -1 + WRITE (KW,6428) L, PLB(L), HLB0(L), & + (DBLEXT(L,J),J=1,6), & + (DBLSCT(L,J),J=1,6) + 6428 FORMAT (1X,I2,2F8.3,3X,6F9.6,3X,6F9.6) + ENDDO + WRITE (KW,6429) (SUM1(K),K=1,6), (SUM2(K),K=1,6) + 6429 FORMAT (/1X,T7,'COLUMN AMOUNT=',2X,6F9.6,3X,6F9.6) + NPAGE = 0 + IF ( NL>13 ) NPAGE = 1 + WRITE (KW,6430) KANORM + 6430 FORMAT (6X,'KANORM=',1I1/T48,'COSBAR',T105,'PIZERO',/T24,& + 53('-'),4X,53('-')) + WRITE (KW,6431) (K,K=1,6), (K,K=1,6) + 6431 FORMAT (' LN PL DPL K=',I3,5I9,7X,'K=',I3, & + 5I9) + DO L = NL, L1, -1 + WRITE (KW,6432) L, PL(L), DPL(L), (DBLGCB(L,J),J=1,6),& + (DBLPI0(L,J),J=1,6) + 6432 FORMAT (1X,I2,2F8.3,3X,6F9.6,3X,6F9.6) + ENDDO + WRITE (KW,6433) (SUM3(K),K=1,6), (SUM0(K),K=1,6) + 6433 FORMAT (/1X,T7,'COLUMN MEAN=',2X,6F9.6,3X,6F9.6) + WRITE (KW,6434) (SRBALB(K),K=1,6) + 6434 FORMAT (/1X,T7,'ALBEDO RSURFB=',2X,6F9.6,3X,6F9.6) + WRITE (KW,6435) (SRXALB(K),K=1,6) + 6435 FORMAT (1X,T7,'ALBEDO RSURFX=',2X,6F9.6,3X,6F9.6) + WRITE (KW,6436) + 6436 FORMAT (///T44,'AEROSOL COMPOSITION AND TYPE MIX:',T81, & + &'FACTOR',6X,'VALUE',T107,'TAU(0.55)'/) + SUMT = 0. + DO J = 1, 5 + TAU55 = 0. + DO I = 1, 11 + ! NAERO + TAU55 = TAU55 + AGOLDH(I,J)*FGOLDH(J) + ENDDO + WRITE (KW,6437) J, FGOLDH(J), TAU55 + 6437 FORMAT (T81,'FGOLDH(',I1,') =',1P,E9.2,5X,0P,F7.4) + SUMT = SUMT + TAU55 + ENDDO + WRITE (KW,6438) SUMT + DO I = 1, 2 + WRITE (KW,6439) + 6439 FORMAT (' ') + ENDDO +! +! (4D) 11-Comp Aerosol Qx, Qs, g, Pi0 +! ------------------------------------ + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6440) KWTRAB, (N,N=1,11) +! + 6440 FORMAT (' (4D) Background Aerosol Solar and Thermal Mie '& + ,'Scattering Parameters:',T81, & + &'List: SRAQEX(L,K),SRAQST(L,K),SRAQCB(L,K), TRAB Q S G'& + /' KWTRAB=',I1/7X,11I8/ & + &' AEROSOL ACID1 SSALT SLFT1 SLFT2 BSLT1', & + &' BSLT2 DUST1 DUST2 DUST3 CARB1 CARB2'/ & + &' SIZE 0.5 2.0 0.3 1.0 0.5 ', & + &' 2.0 0.5 2.0 8.0 0.1 0.5 ') + WRITE (KW,6441) + 6441 FORMAT (' K SRAQEX') + DO K = 1, 6 + WRITE (KW,6442) K, (SRAQEX(K,N),N=1,11) + ENDDO + WRITE (KW,6443) + 6443 FORMAT (' K SRAQSC') + DO K = 1, 6 + WRITE (KW,6442) K, (SRAQSC(K,N),N=1,11) + ENDDO + WRITE (KW,6444) + 6444 FORMAT (' K SRAQCB') + DO K = 1, 6 + WRITE (KW,6442) K, (SRAQCB(K,N),N=1,11) + ENDDO + WRITE (KW,6445) TRABCD(1), TRAXSG(KWTRAB+1) + 6445 FORMAT (' K ',2A3) + DO K = 1, 33 + IF ( KWTRAB==0 ) WRITE (KW,6442) K, & + (TRAQAB(K,N),N=1,11) + IF ( KWTRAB==1 ) WRITE (KW,6442) K, & + (TRAQEX(K,N),N=1,11) + IF ( KWTRAB==2 ) WRITE (KW,6442) K, & + (TRAQSC(K,N),N=1,11) + IF ( KWTRAB==3 ) WRITE (KW,6442) K, & + (TRAQCB(K,N),N=1,11) + IF ( KWTRAB==4 ) THEN + DO N = 1, 11 + TRPI0K(N) = TRAQSC(K,N)/(1.D-10+TRAQEX(K,N)) + ENDDO + WRITE (KW,6442) K, (TRPI0K(N),N=1,11) + ENDIF + ENDDO + DO I = 1, 1 + WRITE (KW,6446) + 6446 FORMAT (' ') + ENDDO +! +! +! (4E) 10-Comp Aerosol Qx, Qs, g, Pi0 +! ------------------------------------ + WRITE (KW,6450) KWTRAB, (N,N=1,6), (REFDRY(N),N=1,6) +! + 6450 FORMAT ( & + &' (4E) Climatology Aerosol Solar and Thermal Mie '& + ,'Scattering Parameters:',T81, & + &'List: SRBQEX(L,K),SRBQST(L,K),SRBQCB(L,K), TRAB Q S G'& + /' KWTRAB=',I1/7X, & + &6I8/' AEROSOL SO4 SEA ANT OCX BCI '& + ,' BCB'/' SIZE ',6F8.1) + ! OCN OCB BCB SSB + WRITE (KW,6451) + 6451 FORMAT (' K SRBQEX - DRY') + DO K = 1, 6 + WRITE (KW,6452) K, (SRHQEX(K,1,N),N=1,4), & + (SRBQEX(K,N),N=5,6) + ENDDO + WRITE (KW,6453) + 6453 FORMAT (' K SRBQSC - DRY') + DO K = 1, 6 + WRITE (KW,6452) K, (SRHQSC(K,1,N),N=1,4), & + (SRBQSC(K,N),N=5,6) + ENDDO + WRITE (KW,6454) + 6454 FORMAT (' K SRBQCB - DRY') + DO K = 1, 6 + WRITE (KW,6452) K, (SRHQCB(K,1,N),N=1,4), & + (SRBQCB(K,N),N=5,6) + ENDDO + WRITE (KW,6455) TRABCD(2), TRAXSG(1) + !obs TRAXSG(KWTRAB+1) + 6455 FORMAT (' K ',2A3,' - DRY') + DO K = 1, 33 + IF ( KWTRAB==0 ) WRITE (KW,6442) K, & + (TRHQAB(K,1,N),N=1,4), (TRBQAB(K,N),N=5,6) +!obs IF(KWTRAB==1) WRITE(KW,6442) K,(TRHQEX(K,1,N),N=1, 4), +!obs * (TRBQEX(K,N),N=5, 6) +!obs IF(KWTRAB==2) WRITE(KW,6442) K,(TRHQSC(K,1,N),N=1, 4), +!obs * (TRBQSC(K,N),N=5, 6) +!obs IF(KWTRAB==3) WRITE(KW,6442) K,(TRHQCB(K,1,N),N=1, 4), +!obs * (TRBQCB(K,N),N=5, 6) +!obs IF(KWTRAB==4) THEN +!obs DO N=1,4 +!obs TRPI0K(N)=TRHQCB(K,1,N)/(1.D-10+TRHQEX(K,1,N)) +!obs END DO +!obs DO N=5,6 ! 10 +!obs TRPI0K(N)=TRBQSC(K,N)/(1.D-10+TRBQEX(K,N)) +!obs END DO +!obs WRITE(KW,6442) K,(TRPI0K(N),N=1, 6) +!obs ENDIF + ENDDO + DO I = 1, 1 + WRITE (KW,6456) + 6456 FORMAT (' ') + ENDDO +! +! (4F 8-size Dust Aerosol Qx, Qs, g, Pi0 +! --------------------------------------- + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6460) KWTRAB, (N,N=1,8), (REDUST(N),N=1,8) +! + 6460 FORMAT ( & + &' (4F) Desert Dust Aerosol Solar and Thermal Mie '& + ,'Scattering Parameters:',T81, & + &'List: SRDQEX(L,K),SRDQST(L,K),SRDQCB(L,K), TRAB Q S G'& + /' KWTRAB=',I1/7X, & + &8I8/' AEROSOL CLAY1 CLAY2 CLAY3 CLAY4 SILT1'& + ,' SILT2 SILT3 SILT4 '/ & + &' SIZE ',8F8.1) + WRITE (KW,6461) + 6461 FORMAT (' K SRDQEX') + DO K = 1, 6 + WRITE (KW,6462) K, (SRAQEX(K,N),N=1,8) + ENDDO + WRITE (KW,6463) + 6463 FORMAT (' K SRDQSC') + DO K = 1, 6 + WRITE (KW,6462) K, (SRAQSC(K,N),N=1,8) + ENDDO + WRITE (KW,6464) + 6464 FORMAT (' K SRDQCB') + DO K = 1, 6 + WRITE (KW,6462) K, (SRAQCB(K,N),N=1,8) + ENDDO + WRITE (KW,6465) TRABCD(4), TRAXSG(KWTRAB+1) + 6465 FORMAT (' K ',2A3) + DO K = 1, 33 + IF ( KWTRAB==0 ) WRITE (KW,6442) K, & + (TRDQAB(K,N),N=1,8) + IF ( KWTRAB==1 ) WRITE (KW,6442) K, & + (TRDQEX(K,N),N=1,8) + IF ( KWTRAB==2 ) WRITE (KW,6442) K, & + (TRDQSC(K,N),N=1,8) + IF ( KWTRAB==3 ) WRITE (KW,6442) K, & + (TRDQCB(K,N),N=1,8) + IF ( KWTRAB==4 ) THEN + DO N = 1, 8 + TRPI0K(N) = TRDQSC(K,N)/(1.D-10+TRDQEX(K,N)) + ENDDO + WRITE (KW,6442) K, (TRPI0K(N),N=1,8) + ENDIF + ENDDO + DO I = 1, 1 + WRITE (KW,6466) + 6466 FORMAT (' ') + ENDDO +! +! (4G 15-Size/phase Cloud Qx, Qs, g, Pi0 +! --------------------------------------- + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE + WRITE (KW,6470) KWTRAB, (N,N=1,15) +! + 6470 FORMAT (' (4G) Cloud Input for Solar, Thermal Radiation:'& + ,' Mie Cloud Radiative Properties',T81, & + &'List: SRCQEX(L,K),SRCQST(L,K),SRCQCB(L,K), TRAB Q S G'& + /' KWTRAB=',I1/7X,15I8/ & + &' WIM CLOUD WAT05 WAT10 WAT15 WAT20 WAT25', & + &' ICE05 ICE15 ICE25 ICE50 ICE75', & + &' MIC05 MIC15 MIC25 MIC50 MIC75') + WRITE (KW,6471) + 6471 FORMAT (' K SRCQEX') + DO K = 1, 6 + WRITE (KW,6472) K, (SRCQEX(K,N),N=1,15) + ENDDO + WRITE (KW,6473) + 6473 FORMAT (' K SRCQSC') + DO K = 1, 6 + WRITE (KW,6472) K, (SRCQSC(K,N),N=1,15) + ENDDO + WRITE (KW,6474) + 6474 FORMAT (' K SRCQCB') + DO K = 1, 6 + WRITE (KW,6472) K, (SRCQCB(K,N),N=1,15) + ENDDO + WRITE (KW,6475) TRABCD(3), TRAXSG(KWTRAB+1) + 6475 FORMAT (' K ',2A3) + DO K = 1, 33 + IF ( KWTRAB==0 ) WRITE (KW,6472) K, & + (TRCQAB(K,N),N=1,15) + IF ( KWTRAB==1 ) WRITE (KW,6472) K, & + (TRCQEX(K,N),N=1,15) + IF ( KWTRAB==2 ) WRITE (KW,6472) K, & + (TRCQSC(K,N),N=1,15) + IF ( KWTRAB==3 ) WRITE (KW,6472) K, & + (TRCQCB(K,N),N=1,15) + IF ( KWTRAB==4 ) THEN + DO N = 1, 15 + TRPI0K(N) = TRCQSC(K,N)/(1.D-10+TRCQEX(K,N)) + ENDDO + WRITE (KW,6442) K, (TRPI0K(N),N=1,15) + ENDIF + ENDDO + DO I = 1, 2 + WRITE (KW,6476) + 6476 FORMAT (' ') + ENDDO + CYCLE + ELSEIF ( INDX==5 ) THEN +! +!------------- +!------------- +! + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE +! SIGMA=5.6697D-08 + TGMEAN = POCEAN*TGO**4 + PEARTH*TGE**4 + PLICE*TGLI**4 + & + POICE*TGOI**4 + TGMEAN = SQRT(TGMEAN) + TGMEAN = SQRT(TGMEAN) + SIGT4 = SIGMA*TGMEAN**4 + ITG = TGMEAN + WTG = TGMEAN - ITG + SUMK = 0.0 + DO K = 1, 33 + BGFLUX(K) = PLANCK(ITG,K) & + - (PLANCK(ITG,K)-PLANCK(ITG+1,K))*WTG + BGFRAC(K) = BGFLUX(K)/SIGT4 + SUMK = SUMK + BGFLUX(K) + ENDDO + LK = 0 + DO K = 1, 33 + TAUSUM(K) = 0. + !!sl TAUSL(K) + DO L = L1, NL + TRTAUK(L,K) = TRGXLK(L,K) + TRCALK(L,K) & + + TRAALK(L,K) + TAUSUM(K) = TAUSUM(K) + TRGXLK(L,K) + TRCALK(L,K) & + + TRAALK(L,K) + ENDDO + ENDDO + WRITE (KW,6501) +! + 6501 FORMAT (' (5) TAU TABLE FOR THERMAL RADIATION: CONTAINS',& + &' TOTAL SPECIFIED GAS, CLOUD AEROSOL ABSORPTION'& + ,T99,'TRGXLK(L,K),TRCALK(L,K),TRCAAK(L,K)'/,/1X, & + &'K-DIST BREAKDOWN:',T23,'WINDOW',3X, & + 'WATER VAPOR:',T71,'PRINCIPAL ABSORBER REGION', & + /T23,6('-'),3X,101('-')) + WRITE (KW,6502) (K,K=1,13) + 6502 FORMAT (' LN PL TLM K=',I1,4X,'K=',I2,9I9, & + 3I8) + DO L = NL, L1, -1 + WRITE (KW,6503) L, PL(L), TLM(L), (TRTAUK(L,K),K=1,13) + 6503 FORMAT (1X,I2,F8.3,F7.2,1X,10F9.4,3F8.3) + ENDDO +!sl WRITE(KW,6504) (TAUSL(K),K=1,13) + WRITE (KW,6505) (TAUSUM(K),K=1,13) +!sl6504 FORMAT(/4X,'SURFACE LAYER= ',10F9.4,3F8.3) + 6505 FORMAT (4X,'COLUMN AMOUNT= ',10F9.4,3F8.3) + WRITE (KW,6506) SUMK, (BGFLUX(K),K=1,13) + 6506 FORMAT (/1X,'PF W/M**2= ',F6.2,1X,10F9.3,3F8.3) + WRITE (KW,6507) TGMEAN, SIGT4, (BGFRAC(K),K=1,13) + 6507 FORMAT (1X,'TG=',F6.2,'= ',F6.2,1X,10F9.4,3F8.3) + NPAGE = 0 + IF ( NL>13 ) NPAGE = 1 + WRITE (KW,6508) NPAGE + 6508 FORMAT (1I1/4X,'CARBON DIOXIDE:',T36, & + &'PRINCIPAL ABSORBER REGION',T83,'OZONE:',T100, & + &'PRINCIPAL ABSORBER REGION'/4X,76('-'),2X,50('-')& + ) + WRITE (KW,6509) (K,K=14,33) + 6509 FORMAT (1X,'LN K=',I2,5I7,6I6,3X,'K=',I2,3I7,6I6) + DO L = NL, L1, -1 + WRITE (KW,6510) L, (TRTAUK(L,K),K=14,33) + 6510 FORMAT (1X,I2,6F7.4,2F6.3,3F6.2,1F6.1,4F7.4,3F6.3, & + F6.2) + ENDDO +!sl WRITE(KW,6511) ( TAUSL(K),K=14,33) + WRITE (KW,6512) (TAUSUM(K),K=14,33) +!sl6511 FORMAT(/1X,'SL',6F7.4,2F6.3,3F6.2,1F6.1,4F7.4,3F6.3,F6.2) + 6512 FORMAT (1X,'CA',5F7.4,1F7.3,3F6.2,2F6.1,1F6.0,4F7.4, & + 2F6.3,2F6.2) + WRITE (KW,6513) (BGFLUX(K),K=14,33) + 6513 FORMAT (/1X,'PF',1F7.4,5F7.3,1F6.2,3F6.3,2F6.3,2F7.3, & + 2F7.4,4F6.3) + WRITE (KW,6514) (BGFRAC(K),K=14,33) + 6514 FORMAT (1X,'FR',6F7.4,2F6.3,3F6.3,1F6.3,4F7.4,3F6.3,F6.3) + DO I = 1, 10 + WRITE (KW,6515) + 6515 FORMAT (' ') + ENDDO + CYCLE + ELSEIF ( INDX==6 ) THEN +! +!------------- +!------------- +! + NPAGE = 1 + IF ( INDEX<11 ) NPAGE = KPAGE +! SIGMA=5.6697D-08 + TGMEAN = POCEAN*TGO**4 + PEARTH*TGE**4 + PLICE*TGLI**4 + & + POICE*TGOI**4 + TGMEAN = SQRT(TGMEAN) + TGMEAN = SQRT(TGMEAN) + SIGT4 = SIGMA*TGMEAN**4 + ITG = TGMEAN + WTG = TGMEAN - ITG + SUMK = 0.0 + DO K = 1, 33 + BGFLUX(K) = PLANCK(ITG,K) & + - (PLANCK(ITG,K)-PLANCK(ITG+1,K))*WTG + BGFRAC(K) = BGFLUX(K)/SIGT4 + SUMK = SUMK + BGFLUX(K) + ENDDO + WRITE (KW,6601) +! + 6601 FORMAT ( & + &' (6) TAU TABLE FOR THERMAL RADIATION: INCLUDES ANY'& + ,' SPECIFIED OVERLAP, CLOUD AEROSOL ABSORPTION', & + T114,'TRGXLK(L,K),TAUSL(L)'/,/1X, & + 'K-DIST BREAKDOWN:',T23,'WINDOW',3X,'WATER VAPOR:', & + T71,'PRINCIPAL ABSORBER REGION',/T23,6('-'),3X, & + &101('-')) + WRITE (KW,6602) (K,K=1,13) + 6602 FORMAT (' LN PL TLM K=',I1,4X,'K=',I2,9I9, & + 3I8) + DO L = NL, L1, -1 + WRITE (KW,6603) L, PL(L), TLM(L), (TRGXLK(L,K),K=1,13) + 6603 FORMAT (1X,I2,F8.3,F7.2,1X,10F9.4,3F8.3) + ENDDO + LK = 0 + DO K = 1, 33 + TAUSUM(K) = 0. + !!sl TAUSL(K) + DO L = L1, NL + TAUSUM(K) = TAUSUM(K) + TRGXLK(L,K) + ENDDO + ENDDO +!sl WRITE(KW,6604) (TAUSL(K),K=1,13) + WRITE (KW,6605) (TAUSUM(K),K=1,13) + 6605 FORMAT (4X,'COLUMN AMOUNT= ',10F9.4,3F8.3) + WRITE (KW,6606) SUMK, (BGFLUX(K),K=1,13) + 6606 FORMAT (/1X,'PF W/M**2= ',F6.2,1X,10F9.3,3F8.3) + WRITE (KW,6607) TGMEAN, SIGT4, (BGFRAC(K),K=1,13) + 6607 FORMAT (1X,'TG=',F6.2,'= ',F6.2,1X,10F9.4,3F8.3) + NPAGE = 0 + IF ( NL>13 ) NPAGE = 1 + WRITE (KW,6608) + 6608 FORMAT (/4X,'CARBON DIOXIDE:',T36, & + &'PRINCIPAL ABSORBER REGION',T83,'OZONE:',T100, & + &'PRINCIPAL ABSORBER REGION'/4X,76('-'),2X,50('-')& + ) + WRITE (KW,6609) (K,K=14,33) + 6609 FORMAT (1X,'LN K=',I2,5I7,6I6,3X,'K=',I2,3I7,6I6) + DO L = NL, L1, -1 + WRITE (KW,6610) L, (TRGXLK(L,K),K=14,33) + 6610 FORMAT (1X,I2,6F7.4,2F6.3,3F6.2,1F6.1,4F7.4,3F6.3, & + F6.2) + ENDDO +!sl WRITE(KW,6611) ( TAUSL(K),K=14,33) + WRITE (KW,6612) (TAUSUM(K),K=14,33) +!sl6611 FORMAT(/1X,'SL',6F7.4,2F6.3,3F6.2,1F6.1,4F7.4,3F6.3,F6.2) + 6612 FORMAT (1X,'CA',5F7.4,1F7.3,3F6.2,2F6.1,1F6.0,4F7.4, & + 2F6.3,2F6.2) + WRITE (KW,6613) (BGFLUX(K),K=14,33) + 6613 FORMAT (/1X,'PF',1F7.4,5F7.3,1F6.2,3F6.3,2F6.3,2F7.3, & + 2F7.4,4F6.3) + WRITE (KW,6614) (BGFRAC(K),K=14,33) + 6614 FORMAT (1X,'FR',6F7.4,2F6.3,3F6.3,1F6.3,4F7.4,3F6.3,F6.3) + DO I = 1, 10 + WRITE (KW,6615) + 6615 FORMAT (' ') + ENDDO + 6604 FORMAT (/4X,'SURFACE LAYER= ',10F9.4,3F8.3) + CYCLE + ELSEIF ( INDX==7 ) THEN +! +!------------- +!------------- +! +! SIGMA=5.6697D-08 + TGMEAN = POCEAN*TGO**4 + PEARTH*TGE**4 + PLICE*TGLI**4 + & + POICE*TGOI**4 + TGMEAN = SQRT(TGMEAN) + TGMEAN = SQRT(TGMEAN) + SIGT4 = SIGMA*TGMEAN**4 + ITG = TGMEAN + WTG = TGMEAN - ITG + SUMK = 0.0 + DO K = 1, 33 + BGFLUX(K) = PLANCK(ITG,K) & + - (PLANCK(ITG,K)-PLANCK(ITG+1,K))*WTG + BGFRAC(K) = BGFLUX(K)/SIGT4 + SUMK = SUMK + BGFLUX(K) + ENDDO + WRITE (KW,6701) +! + 6701 FORMAT ( & + &' (7A) TRCALK TABLE FOR THERMAL RADIATION: CONTAINS'& + ,' 33 KD CLOUD ABSORPTION OPTICAL DEPTHS AT', & + &' THERMAL WAVELENGTHS ',T117,'LIST: TRCALK(L,K)'/, & + /1X,'K-DIST BREAKDOWN:',T23,'WINDOW',3X, & + &'WATER VAPOR:',T71,'PRINCIPAL ABSORBER REGION',/T23,& + 6('-'),3X,101('-')) + WRITE (KW,6702) (K,K=1,13) + 6702 FORMAT (' LN PL TLM K=',I1,6X,I2,9I9,3I8) + DO L = NL, L1, -1 + WRITE (KW,6703) L, PL(L), TLM(L), (TRCALK(L,K),K=1,13) + 6703 FORMAT (1X,I2,F8.3,F7.2,1X,9F9.5,4F8.5) + ENDDO + LK = 0 + DO K = 1, 33 + TAUSUM(K) = 0.0 + DO L = L1, NL + LK = LK + 1 + TAUSUM(K) = TAUSUM(K) + TRCALK(L,K) + ENDDO + ENDDO + WRITE (KW,6704) (TAUSUM(K),K=1,13), (TRCTCA(K),K=1,13) + 6704 FORMAT (/4X,'COLUMN AMOUNT= ',9F9.4,4F8.5/4X, & + &'TOPCLD ALBEDO= ',9F9.4,4F8.5) + WRITE (KW,6705) + 6705 FORMAT (/' K-INTERVAL CONTRIBUTIONS:'/ & + &' COMPARE WITH GROUND FLUX:') + WRITE (KW,6706) SUMK, (BGFLUX(K),K=1,13) + 6706 FORMAT (1X,'PF W/M**2= ',F6.2,1X,10F9.3,3F8.3) + WRITE (KW,6707) TGMEAN, SIGT4, (BGFRAC(K),K=1,13) + 6707 FORMAT (1X,'TG=',F6.2,'= ',F6.2,1X,10F9.4,3F8.3) +! + WRITE (KW,6708) + 6708 FORMAT (/T25, & + &'CARBON DIOXIDE: PRINCIPAL ABSORBER REGION', & + T93,'OZONE: PRINCIPAL ABSORBER REGION'/4X, & + &77('-'),1X,51('-')) + WRITE (KW,6709) (K,K=14,33) + 6709 FORMAT (1X,'LN K=',I2,5I7,6I6,3X,'K=',I2,3I7,6I6) + DO L = NL, L1, -1 + WRITE (KW,6710) L, (TRCALK(L,K),K=14,33) + 6710 FORMAT (1X,I2,6F7.4,5F6.4,F6.4,4F7.4,3F6.4,F6.4) + ENDDO + WRITE (KW,6711) (TAUSUM(K),K=14,33), (TRCTCA(K),K=14,33) + 6711 FORMAT (/1X,'CA',5F7.4,1F7.3,3F6.2,2F6.1,1F6.0,4F7.4, & + 2F6.3,2F6.2/1X,'TA',5F7.4,1F7.4,3F6.3,2F6.3, & + 1F6.3,4F7.4,2F6.3,2F6.3) + WRITE (KW,6712) (BGFLUX(K),K=14,33) + 6712 FORMAT (/1X,'PF',1F7.4,5F7.3,1F6.2,3F6.3,2F6.3,2F7.3, & + 2F7.4,4F6.3) + WRITE (KW,6713) (BGFRAC(K),K=14,33) + 6713 FORMAT (1X,'FR',6F7.4,2F6.3,3F6.3,1F6.3,4F7.4,3F6.3,F6.3) + DO I = 1, 8 + WRITE (KW,6714) + 6714 FORMAT (' ') + ENDDO +! +! SIGMA=5.6697D-08 + TGMEAN = POCEAN*TGO**4 + PEARTH*TGE**4 + PLICE*TGLI**4 + & + POICE*TGOI**4 + TGMEAN = SQRT(TGMEAN) + TGMEAN = SQRT(TGMEAN) + SIGT4 = SIGMA*TGMEAN**4 + ITG = TGMEAN + WTG = TGMEAN - ITG + SUMK = 0.0 + DO K = 1, 33 + BGFLUX(K) = PLANCK(ITG,K) & + - (PLANCK(ITG,K)-PLANCK(ITG+1,K))*WTG + BGFRAC(K) = BGFLUX(K)/SIGT4 + SUMK = SUMK + BGFLUX(K) + ENDDO + WRITE (KW,6721) +! + 6721 FORMAT (' (7B) AEROSOL TAU TABLE FOR THERMAL RADIATION:',& + &' AEROSOL ABSORPTION OPTICAL DEPTH AT THERMAL WAVELENGTHS'& + ,T116,'LIST: TRAALK(L,K)'/,/1X,'K-DIST BREAKDOWN:',T23, & + &'WINDOW',3X,'WATER VAPOR:',T71,'PRINCIPAL ABSORBER REGION',& + /T23,6('-'),3X,101('-')) + WRITE (KW,6722) (K,K=1,13) + 6722 FORMAT (' LN PL TLM K=',I1,6X,I2,9I9,3I8) + DO L = NL, L1, -1 + WRITE (KW,6723) L, PL(L), TLM(L), (TRAALK(L,K),K=1,13) + 6723 FORMAT (1X,I2,F8.3,F7.2,1X,10F9.5,3F8.5) + ENDDO + DO K = 1, 33 + TAUSUM(K) = 0.0 + DO L = L1, NL + TAUSUM(K) = TAUSUM(K) + TRAALK(L,K) + ENDDO + ENDDO + WRITE (KW,6724) (TAUSUM(K),K=1,13) + 6724 FORMAT (/4X,'COLUMN AMOUNT= ',10F9.5,3F8.5) + WRITE (KW,6725) + 6725 FORMAT (' K-INTERVAL CONTRIBUTIONS:'/ & + &' COMPARE WITH GROUND FLUX:') + WRITE (KW,6726) SUMK, (BGFLUX(K),K=1,13) + 6726 FORMAT (1X,'PF W/M**2= ',F6.2,1X,10F9.3,3F8.3) + WRITE (KW,6727) TGMEAN, SIGT4, (BGFRAC(K),K=1,13) + 6727 FORMAT (1X,'TG=',F6.2,'= ',F6.2,1X,10F9.4,3F8.3) + NPAGE = 0 + IF ( NL>13 ) NPAGE = 1 + WRITE (KW,6728) NPAGE + 6728 FORMAT (1I1/4X,'CARBON DIOXIDE:',T36, & + &'PRINCIPAL ABSORBER REGION',T83,'OZONE:',T100, & + &'PRINCIPAL ABSORBER REGION'/4X,76('-'),2X,50('-')& + ) + WRITE (KW,6729) (K,K=14,33) + 6729 FORMAT (1X,'LN K=',I2,5I7,6I6,3X,'K=',I2,3I7,6I6) + DO L = NL, L1, -1 + WRITE (KW,6730) L, (TRAALK(L,K),K=14,33) + 6730 FORMAT (1X,I2,6F7.5,2F6.4,3F6.4,F6.4,4F7.4,3F6.4,F6.4) + ENDDO + WRITE (KW,6731) (TAUSUM(K),K=14,33) + 6731 FORMAT (1X,'CA',5F7.5,1F7.5,3F6.4,2F6.4,1F6.4,4F7.4, & + 2F6.4,2F6.4) + WRITE (KW,6732) (BGFLUX(K),K=14,33) + 6732 FORMAT (/1X,'PF',1F7.4,5F7.3,1F6.2,3F6.3,2F6.3,2F7.3, & + 2F7.4,4F6.3) + WRITE (KW,6733) (BGFRAC(K),K=14,33) + 6733 FORMAT (1X,'FR',6F7.4,2F6.3,3F6.3,1F6.3,4F7.4,3F6.3,F6.3) + DO I = 1, 12 + WRITE (KW,6734) + 6734 FORMAT (' ') + ENDDO + CYCLE + ELSEIF ( INDX==8 ) THEN +! +!------------- +!------------- +! + WRITE (KW,6800) +! + 6800 FORMAT ( & + &' (8A) SPECTRAL/k-DISTRIBUTION COMPONENT BREAKDOWN'& + ,' FOR DOWNWARD AND UPWARD SOLAR RADIATIVE FLUXES', & + T108,'SKDFLB(L,K) SKUFLB(L,K) SRKALB(K)'/) + DO K = 1, 16 + ISR1(K) = NORDER(K) + IF ( KORDER==1 ) ISR1(K) = K + ENDDO + WRITE (KW,6801) (ISR1(K),K=1,16) + 6801 FORMAT (' K=',I5,2I8,2I7,I8,I9,7I8,I7,I8, & + &' Total') + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = DKS0(NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = DKS0(K) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6802) (FSR1(K),K=1,17) + 6802 FORMAT (' DKS0=',F6.3,2F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3, & + F8.3,F11.3) + DO K = 1, 16 + ISR1(K) = NMWAVA(K) + IF ( KORDER==1 ) ISR1(K) = NMWAVA(IORDER(K)) + ENDDO + WRITE (KW,6803) (ISR1(K),K=1,16) + 6803 FORMAT (' NMWAVA=',I6,2I8,2I7,I8,I9,7I8,I7,I8) + DO K = 1, 16 + ISR1(K) = NMWAVB(K) + IF ( KORDER==1 ) ISR1(K) = NMWAVB(IORDER(K)) + ENDDO + WRITE (KW,6804) (ISR1(K),K=1,16) + 6804 FORMAT (' NMWAVB=',I6,2I8,2I7,I8,I9,7I8,I7,I8) + IF ( KORDER==0 ) WRITE (KW,6805) + 6805 FORMAT (' ABSORB'/ & + &' GAS= O3,O2 O3,NO2 O2 O2 O2', & + &' H2O',22X, & + &'H2O H2O H2O H2O CO2', & + &' CO2 CO2 CO2,H2O,O2'/ & + &' SKDFLB (Downward Spectral Flux)'/6X,6('-'), & + &'VIS',6('-'),2X,46('-'),'NIR',59('-')) + IF ( KORDER==1 ) WRITE (KW,6806) + 6806 FORMAT (' ABSORB'/ & + &' GAS= H2O H2O H2O H2O H2O', & + &' O2 O2 O2 CO2 CO2 CO2'& + ,18X,'O3,NO2 O3,O2 CO2,H2O,O2'/ & + &'SKDFLB (Downard Spectral',' Flux)',T110,6('-'), & + &'VIS',5('-')) + DO K = 1, 16 + ISR1(K) = K + IF ( KORDER==1 ) ISR1(K) = IORDER(K) + ENDDO + WRITE (KW,6807) (ISR1(K),K=1,16) + 6807 FORMAT (' N L=',I4,I9,I8,2I7,I8,I9,7I8,I7,I8, & + &' Total') + DO L = NL + 1, L1, -1 + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = SKDFLB(L,NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = SKDFLB(L,K) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6808) L, (FSR1(K),K=1,17) + 6808 FORMAT (I3,2F9.3,F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3,F8.3,& + F11.3) + ENDDO + DO K = 1, 16 + ISR1(K) = K + IF ( KORDER==1 ) ISR1(K) = IORDER(K) + ENDDO + WRITE (KW,6809) (ISR1(K),K=1,16) + 6809 FORMAT (/' SKUFLB (Upward Spectral Flux)'/' N L=',I4, & + I9,I8,2I7,I8,I9,7I8,I7,I8,' Total') + DO L = NL + 1, L1, -1 + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = SKUFLB(L,NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = SKUFLB(L,K) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6810) L, (FSR1(K),K=1,17) + 6810 FORMAT (I3,2F9.3,F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3,F8.3,& + F11.3) + ENDDO + DO K = 1, 16 + ISR1(K) = K + IF ( KORDER==1 ) ISR1(K) = IORDER(K) + ENDDO + WRITE (KW,6811) (ISR1(K),K=1,16) + 6811 FORMAT (/' SRKALB ',I4,I9,I8,2I7,I8,I9,7I8,I7,I8, & + &' Total') + SUMT = 0.D0 + SUMK = 0.D0 + DO K = 1, 16 + FSR1(K) = SRKALB(NORDER(K)) + FSR2(K) = DKS0(NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = SRKALB(K) + IF ( KORDER==1 ) FSR2(K) = DKS0(K) + SUMK = SUMK + FSR1(K)*FSR2(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6812) (FSR1(K),K=1,17) + 6812 FORMAT (' TOA=',F5.4,F9.4,F8.4,2F7.4,F8.4,F9.4,7F8.4, & + F7.4,F8.4,F11.4) + SUMT = SUMT + FSR1(17) + SUMK1 = 0.D0 + SUMK2 = 0.D0 + DO K = 1, 16 + FSR1(K) = SKNFLB(NL+1,NORDER(K)) & + - SKNFLB(L1,NORDER(K)) + FSR2(K) = SKDFLB(NL+1,NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = SKNFLB(NL+1,K) & + - SKNFLB(L1,K) + IF ( KORDER==1 ) FSR2(K) = SKDFLB(NL+1,K) + SUMK1 = SUMK1 + FSR1(K) + SUMK2 = SUMK2 + FSR2(K) + FSR1(K) = FSR1(K)/(FSR2(K)+1.D-20) + ENDDO + FSR1(17) = SUMK1/(SUMK2+1.D-20) + WRITE (KW,6813) (FSR1(K),K=1,17) + 6813 FORMAT (' ABSORB'/' ATMO=',F5.4,F9.4,F8.4,2F7.4,F8.4, & + F9.4,7F8.4,F7.4,F8.4,F11.4) + SUMT = SUMT + FSR1(17) + SUMK1 = 0.D0 + SUMK2 = 0.D0 + DO K = 1, 16 + FSR1(K) = SKNFLB(L1,NORDER(K)) + FSR2(K) = SKDFLB(NL+1,NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = SKNFLB(L1,K) + IF ( KORDER==1 ) FSR2(K) = SKDFLB(NL+1,K) + SUMK1 = SUMK1 + FSR1(K) + SUMK2 = SUMK2 + FSR2(K) + FSR1(K) = FSR1(K)/(FSR2(K)+1.D-20) + ENDDO + FSR1(17) = SUMK1/(SUMK2+1.D-20) + WRITE (KW,6814) (FSR1(K),K=1,17) + 6814 FORMAT (' ABSORB'/' SURF=',F5.4,F9.4,F8.4,2F7.4,F8.4, & + F9.4,7F8.4,F7.4,F8.4,F11.4) + SUMT = SUMT + FSR1(17) + DO K = 1, 16 + ISR1(K) = KSLAMW(NORDER(K)) + IF ( KORDER==1 ) ISR1(K) = KSLAMW(K) + ENDDO + WRITE (KW,6815) SUMT, (ISR1(K),K=1,16) + 6815 FORMAT (' ALSURF',T133,'Sum=',F6.4/' KSLAM= ',I3,I9,I8, & + 2I7,I8,I9,7I8,I7,I8) + SUMK = 0.D0 + DO K = 1, 16 + KK = KSLAMW(NORDER(K)) + IF ( KORDER==1 ) KK = KSLAMW(K) + FSR1(K) = SRBALB(KK) + FSR2(K) = SRXALB(KK) + ENDDO + WRITE (KW,6816) (FSR1(K),K=1,16) + 6816 FORMAT (' SRX=',F5.4,F9.4,F8.4,2F7.4,F8.4,F9.4,7F8.4, & + F7.4,F8.4,F11.4) + WRITE (KW,6817) (FSR2(K),K=1,16) + 6817 FORMAT (' SRB=',F5.4,F9.4,F8.4,2F7.4,F8.4,F9.4,7F8.4, & + F7.4,F8.4,F11.4) + WRITE (KW,6818) COSZ, SRIVIS, SROVIS, PLAVIS, SRINIR, & + SRONIR, PLANIR + 6818 FORMAT (/' At Top of Atm: ',' COSZ =',F6.4,14X,2X, & + &' SRIVIS=',F7.3,' SROVIS=',F7.3,' PLAVIS=', & + F6.4,2X,' SRINIR=',F7.3,' SRONIR=',F7.3, & + &' PLANIR=',F6.4) + WRITE (KW,6819) SRXVIS, SRXNIR, SRDVIS, SRUVIS, ALBVIS, & + SRDNIR, SRUNIR, ALBNIR + 6819 FORMAT (' At Bot of Atm: ',' SRXVIS=',F6.4,1X, & + ' SRXNIR=',F6.4,1X,' SRDVIS=',F7.3,' SRUVIS=', & + F7.3,' ALBVIS=',F6.4,2X,' SRDNIR=',F7.3, & + &' SRUNIR=',F7.3,' ALBNIR=',F6.4) + WRITE (KW,6820) SRTVIS, SRRVIS, SRAVIS, SRTNIR, SRRNIR, & + SRANIR + 6820 FORMAT (' In Atmosphere: ',' (VIS=0.53*S0)',2X, & + &'(NIR=0.47*S0)',1X,' SRTVIS=',F7.5,' SRRVIS=', & + F7.5,' SRAVIS=',F6.4,2X,' SRTNIR=',F7.5, & + &' SRRNIR=',F7.5,' SRANIR=',F6.4) + DO I = 1, 1 + IF ( KORDER==1 ) WRITE (KW,6821) + 6821 FORMAT (' ') + ENDDO +! + WRITE (KW,6840) + + 6840 FORMAT ( & + &' (8B) SPECTRAL/k-DISTRIBUTION COMPONENT BREAKDOWN'& + ,' FOR NET DOWNWARD SOLAR FLUX HEATING RATE',T106,& + &'SKNFLB(L,K) SKFHRL(L,K) SRKGAX(L,I)'/) + DO K = 1, 16 + ISR1(K) = NORDER(K) + IF ( KORDER==1 ) ISR1(K) = K + ENDDO + WRITE (KW,6841) (ISR1(K),K=1,16) + 6841 FORMAT (' K=',I5,2I8,2I7,I8,I9,7I8,I7,I8, & + &' Total') + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = DKS0(NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = DKS0(K) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6842) (FSR1(K),K=1,17) + 6842 FORMAT (' DKS0=',F6.3,2F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3, & + F8.3,F11.3) + IF ( KORDER==0 ) WRITE (KW,6843) + 6843 FORMAT (' GAS= O3,O2 O3,NO2 O2 O2 O2', & + &' H2O',22X, & + &'H2O H2O H2O H2O CO2',5X, & + &'CO2 CO2 CO3,H2O,O2'/ & + &' SKNFLB (Spectral Net Flux)') + IF ( KORDER==1 ) WRITE (KW,6844) + 6844 FORMAT (' GAS= H2O H2O H2O H2O H2O', & + &' O2 O2 O2 CO2 CO2 CO2'& + ,18X,'O3,NO2 O3,O2 CO2,H2O,O2'/ & + &' SKDFLB (Spectral Net Flux)',T110,6('-'),'VIS', & + &5('-')) + DO K = 1, 16 + ISR1(K) = K + IF ( KORDER==1 ) ISR1(K) = IORDER(K) + ENDDO + WRITE (KW,6845) (ISR1(K),K=1,16) + 6845 FORMAT (' N L=',I4,I9,I8,2I7,I8,I9,7I8,I7,I8, & + &' Total') + DO L = NL + 1, L1, -1 + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = SKNFLB(L,NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = SKNFLB(L,K) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6846) L, (FSR1(K),K=1,17) + 6846 FORMAT (I3,2F9.3,F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3,F8.3,& + F11.3) + ENDDO + DO K = 1, 16 + ISR1(K) = K + IF ( KORDER==1 ) ISR1(K) = IORDER(K) + ENDDO + WRITE (KW,6847) (ISR1(K),K=1,16) + 6847 FORMAT (/' SKFHRL (Spectral Heating Rate)'/' N L=',I4, & + I9,I8,2I7,I8,I9,7I8,I7,I8,' Total') + DO L = NL, L1, -1 + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = SKFHRL(L,NORDER(K)) + IF ( KORDER==1 ) FSR1(K) = SKFHRL(L,K) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6848) L, (FSR1(K),K=1,17) + 6848 FORMAT (I3,2F9.3,F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3,F8.3,& + F11.3) + ENDDO + DO K = 1, 16 + ISR1(K) = K + IF ( KORDER==1 ) ISR1(K) = IORDER(K) + ENDDO + WRITE (KW,6849) (ISR1(K),K=1,16) + 6849 FORMAT (/ & + &' SRKGAX (Direct Beam Spectral Absorption at Ground)'& + /' N L=',I4,8I8,I9,4I8,I7,I8,' Total') + DO N = 1, 4 + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = SRKGAX(NORDER(K),N) + IF ( KORDER==1 ) FSR1(K) = SRKGAX(K,N) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6850) 0, (FSR1(K),K=1,17) + 6850 FORMAT (I2,1X,2F9.3,F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3, & + F8.3,F11.3) + ENDDO + DO K = 1, 16 + ISR1(K) = K + IF ( KORDER==1 ) ISR1(K) = IORDER(K) + ENDDO + WRITE (KW,6851) + 6851 FORMAT (' SRKGAD (Diffuse Spectral Absorption at Ground)'& + ) + DO N = 1, 4 + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = SRKGAD(NORDER(K),N) + IF ( KORDER==1 ) FSR1(K) = SRKGAD(K,N) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6852) N, (FSR1(K),K=1,17) + 6852 FORMAT (I2,1X,2F9.3,F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3, & + F8.3,F11.3) + ENDDO + WRITE (KW,6853) + 6853 FORMAT (' SRKGAD (Total Spectral Absorption at Ground)') + DO N = 1, 4 + SUMK = 0.0 + DO K = 1, 16 + FSR1(K) = SRKGAX(NORDER(K),N) + FSR2(K) = SRKGAD(NORDER(K),N) + IF ( KORDER==1 ) FSR1(K) = SRKGAX(K,N) + IF ( KORDER==1 ) FSR2(K) = SRKGAD(K,N) + FSR1(K) = FSR1(K) + FSR2(K) + SUMK = SUMK + FSR1(K) + ENDDO + FSR1(17) = SUMK + WRITE (KW,6854) N, (FSR1(K),K=1,17) + 6854 FORMAT (I2,1X,2F9.3,F8.3,2F7.3,F8.3,F9.3,7F8.3,F7.3, & + F8.3,F11.3) + ENDDO + WRITE (KW,6855) SRNFLB(L1), POCEAN, FSRNFG(1), PEARTH, & + FSRNFG(2), POICE, FSRNFG(3), PLICE, & + FSRNFG(4) + 6855 FORMAT (/' Absorption at Ground by Surface-type',T39, & + &'SRNFLB(1) = POCEAN * FSRNFG(1) + PEARTH * FSRNFG(2) '& + ,'+ POICE * FSRNFG(3) + PLICE * FSRNFG(4) '/T39, & + F7.3,' = ',F6.4,' *',F8.3,' + ',F6.4,' *',F8.3, & + &' + ',F6.4,' *',F8.3,' + ',F6.4,' *',F8.3) + CYCLE + ELSEIF ( INDX==9 ) THEN +!------------- +!------------- +! +! SIGMA=5.6697D-08 + TGMEAN = POCEAN*TGO**4 + PEARTH*TGE**4 + PLICE*TGLI**4 + & + POICE*TGOI**4 + TGMEAN = SQRT(TGMEAN) + TGMEAN = SQRT(TGMEAN) + SIGT4 = SIGMA*TGMEAN**4 + ITG = TGMEAN + WTG = TGMEAN - ITG + DO K = 1, 33 + BGFLUX(K) = PLANCK(ITG,K) & + - (PLANCK(ITG,K)-PLANCK(ITG+1,K))*WTG + BGFRAC(K) = BGFLUX(K)/SIGT4 + ENDDO + DO NW = 1, 5 + DO K = 1, 33 + DO L = L1, NL + 1 + IF ( NW==1 ) WFLB(L,K) = DFLB(L,K) + IF ( NW==2 ) WFLB(L,K) = UFLB(L,K) + IF ( NW==3 ) WFLB(L,K) = UFLB(L,K) - DFLB(L,K) + IF ( NW<=3 .OR. L<=NL ) THEN + IF ( NW==4 ) WFLB(L,K) = WFLB(L+1,K) & + - WFLB(L,K) + IF ( NW==5 .AND. ABS(TRFCRL(L))<1.E-10 ) & + WFLB(L,K) = 1.E-30 + IF ( NW==5 ) WFLB(L,K) = WFLB(L,K) & + /(ABS(TRFCRL(L))+1.E-10) + ENDIF + ENDDO + IF ( NW==1 ) WFSL(K) = DFSL(K) + IF ( NW==2 ) WFSL(K) = UFSL(K) + IF ( NW==3 ) WFSL(K) = UFSL(K) - DFSL(K) + IF ( NW==4 ) WFSL(K) = WFSL(K) - UFLB(L1,K) & + + DFLB(L1,K) +!sl IF(NW==5.and.ABS(TRSLCR) < 1.E-10) WFSL(K)=1.E-30 + IF ( NW==5 ) WFSL(K) = 0. + !nu =WFSL(K)/(ABS(TRSLCR)+1.E-10) + ENDDO + DO L = L1, NL + 1 + IF ( L<=NL .OR. NW<=3 ) THEN + ASUM1 = 0. + BSUM1 = 0. + CSUM1 = 0. + DSUM1 = 0. + ESUM1 = 0. + FSUM1 = 0. + SUMF = 0. + DO K = 2, 13 + ASUM1 = ASUM1 + WFSL(K) + BSUM1 = BSUM1 + BGFEMT(K) + CSUM1 = CSUM1 + BGFLUX(K) + DSUM1 = DSUM1 + BGFRAC(K) + ESUM1 = ESUM1 + TRCTCA(K) + FSUM1 = FSUM1 + TRGALB(K) + SUMF = SUMF + WFLB(L,K) + ENDDO + SUM1(L) = SUMF + ASUM2 = 0. + BSUM2 = 0. + CSUM2 = 0. + DSUM2 = 0. + ESUM2 = 0. + FSUM2 = 0. + SUMF = 0. + DO K = 14, 25 + ASUM2 = ASUM2 + WFSL(K) + BSUM2 = BSUM2 + BGFEMT(K) + CSUM2 = CSUM2 + BGFLUX(K) + DSUM2 = DSUM2 + BGFRAC(K) + ESUM2 = ESUM2 + TRCTCA(K) + FSUM2 = FSUM2 + TRGALB(K) + SUMF = SUMF + WFLB(L,K) + ENDDO + SUM2(L) = SUMF + ASUM3 = 0. + BSUM3 = 0. + CSUM3 = 0. + DSUM3 = 0. + ESUM3 = 0. + FSUM3 = 0. + SUMF = 0. + DO K = 26, 33 + ASUM3 = ASUM3 + WFSL(K) + BSUM3 = BSUM3 + BGFEMT(K) + CSUM3 = CSUM3 + BGFLUX(K) + DSUM3 = DSUM3 + BGFRAC(K) + ESUM3 = ESUM3 + TRCTCA(K) + FSUM3 = FSUM3 + TRGALB(K) + SUMF = SUMF + WFLB(L,K) + ENDDO + SUM3(L) = SUMF + ENDIF + ENDDO +! + NPAGE = 1 + WRITE (KW,6901) NW, FTYPE(NW) +! + 6901 FORMAT (' (9.',I1, & + &') THERMAL RADIATION: K-DISTRIBUTION', & + &' BREAKDOWN FOR ',1A8,' FLUX'//T21, & + &'PRINCIPAL REGION SUM',2X,'WINDOW',T52, & + &'WATER VAPOR:',T76, & + 'PRINCIPAL ABSORBER REGION'/20X,20('-'),2X, & + &6('-'),3X,81('-')) + WRITE (KW,6902) (K,K=1,13) + 6902 FORMAT (1X, & + &'LN PL TOTAL H2O CO2 O3 K='& + ,I2,4X,'K=',I2,12I7) + DO L = NL + 1, L1, -1 + IF ( L<=NL .OR. NW<=3 ) THEN + SUML = SUM1(L) + SUM2(L) + SUM3(L) + WFLB(L,1) + WRITE (KW,6903) L, PL(L), SUML, SUM1(L), SUM2(L)& + , SUM3(L), (WFLB(L,K),K=1,13) + 6903 FORMAT (1X,I2,2F8.2,3F7.2,F8.3,1X,12F7.3) + ENDIF + ENDDO + SUMA = ASUM1 + ASUM2 + ASUM3 + WFSL(1) + SUMB = BSUM1 + BSUM2 + BSUM3 + BGFEMT(1) + SUMC = CSUM1 + CSUM2 + CSUM3 + BGFLUX(1) + SUMD = DSUM1 + DSUM2 + DSUM3 + BGFRAC(1) + SUME = ESUM1 + ESUM2 + ESUM3 + TRCTCA(1) + SUMF = FSUM1 + FSUM2 + FSUM3 + TRGALB(1) + WRITE (KW,6904) SUMA, ASUM1, ASUM2, ASUM3, & + (WFSL(K),K=1,13) + 6904 FORMAT (/' SL',9X,4F7.2,F8.3,1X,12F7.3) + WRITE (KW,6905) SUMB, BSUM1, BSUM2, BSUM3, & + (BGFEMT(K),K=1,13) + 6905 FORMAT (/' BG',9X,4F7.2,F8.3,1X,12F7.3) + WRITE (KW,6906) SUMC, CSUM1, CSUM2, CSUM3, & + (BGFLUX(K),K=1,13) + 6906 FORMAT (' PF',9X,4F7.2,F8.3,1X,12F7.3) + WRITE (KW,6907) SUMD, DSUM1, DSUM2, DSUM3, & + (BGFRAC(K),K=1,13) + 6907 FORMAT (' FR',9X,4F7.2,F8.3,1X,12F7.3) + WRITE (KW,6908) SUME, ESUM1, ESUM2, ESUM3, & + (TRCTCA(K),K=1,13) + 6908 FORMAT (/' AC',9X,4F7.2,F8.3,1X,12F7.3) + WRITE (KW,6909) SUMF, FSUM1, FSUM2, FSUM3, & + (TRGALB(K),K=1,13) + 6909 FORMAT (' AG',9X,4F7.2,F8.3,1X,12F7.3) + NPAGE = 0 + WRITE (KW,6910) NPAGE + 6910 FORMAT (1I1/5X,'CARBON DIOXIDE:',T36, & + &'PRINCIPAL ABSORBER REGION',T85,'OZONE:',T101,& + &'PRINCIPAL ABSORBER REGION'/5X,76('-'),3X, & + &48('-')) + WRITE (KW,6911) (K,K=14,33) + 6911 FORMAT (1X,'LN K=',I2,6I7,5I6,4X,'K=',I2,1I7,6I6) + DO L = NL + 1, L1, -1 + IF ( L<=NL .OR. NW<=3 ) THEN + WRITE (KW,6912) L, (WFLB(L,K),K=14,33) + 6912 FORMAT (1X,I2,7F7.3,5F6.3,1X,2F7.3,6F6.3) + ENDIF + ENDDO + WRITE (KW,6913) (WFSL(K),K=14,33) + 6913 FORMAT (/' SL',7F7.3,5F6.3,1X,2F7.3,6F6.3) + WRITE (KW,6914) (BGFEMT(K),K=14,33) + 6914 FORMAT (/' BG',7F7.3,5F6.3,1X,2F7.3,6F6.3) + WRITE (KW,6915) (BGFLUX(K),K=14,33) + 6915 FORMAT (' PF',7F7.3,5F6.3,1X,2F7.3,6F6.3) + WRITE (KW,6916) (BGFRAC(K),K=14,33) + 6916 FORMAT (' FR',7F7.3,5F6.3,1X,2F7.3,6F6.3) + WRITE (KW,6917) (TRCTCA(K),K=14,33) + 6917 FORMAT (/' AC',7F7.3,5F6.3,1X,2F7.3,6F6.3) + WRITE (KW,6918) (TRGALB(K),K=14,33) + 6918 FORMAT (' AG',7F7.3,5F6.3,1X,2F7.3,6F6.3) + LINFIL = 2 + IF ( NW>3 ) LINFIL = 4 + DO I = 1, LINFIL + WRITE (KW,6919) + 6919 FORMAT (' ') + ENDDO + ENDDO + RETURN + ELSEIF ( INDX==10 ) THEN + CYCLE + ENDIF + ENDIF +! +!------------- +!------------- + IF ( AM_I_ROOT() ) THEN + WRITE (KW,6000) + 6000 FORMAT (' CALL WRITER(KW,0) :',2X,'PAGE 1/2 ', & + &'CONTROL PARAMS DEFINITIONS'// & + &' CONTROL PARAMTER DEFAULT PARAMETER DESCRIPTION'& + ) + + WRITE (KW,6001) KUVFAC, KSNORM, KWTRAB, KGGVDF, KPGRAD, & + KLATZ0, KCLDEM, KANORM, KFPCO2, KPFOZO, & + KSIALB, KORDER, KUFH2O, KUFCO2, KCSELF, & + KCFORN +!nu 2 ! /7X,' MEANAC = ',I1,' 0 Use Ann-Mean Aer Clim' +!nu 3 ! /7X,' MEANDD = ',I1,' 0 Use Ann-Mean Des Dust' +!nu 4 ! /7X,' MEANVA = ',I1,' 0 Use Ann-Mean Volc Aer' +!nu 5 /7X,' NCARO3 = ',I1,' 0 NCAR London 1976 Ozon'/ + 6001 FORMAT (7X,' KUVFAC = ',I1, & + &' 0 ON/OFF UV Mult Factor'/7X, & + &' KSNORM = ',I1, & + &' 0 Norm S0 when KUVFAC=1'/7X, & + &' KWTRAB = ',I1, & + &' 0 WRITER: Qab,Qex,Qsc,g'/7X, & + &' KGGVDF = ',I1, & + &' 0 Use GHG VertProf Grad'/7X, & + &' KPGRAD = ',I1, & + &' 1 Pole-to-Pole GHG Grad'/7X, & + &' KLATZ0 = ',I1, & + &' 1 Use GHG VDist Lat Dep'/7X, & + &' KCLDEM = ',I1, & + &' 1 Use TopCloud Scat Cor'/7X, & + &' KANORM = ',I1, & + &' 0 Use SGP Atmo Col Norm'/7X, & + &' KFPCO2 = ',I1, & + &' 0 1=MOD CO2PROF: FPXCO2'/7X, & + &' KPFOZO = ',I1, & + &' 0 1=MOD O3 PROF: FPXOZO'/7X, & + &' KSIALB = ',I1, & + &' 0 Schramm"s ocn ice alb'/7X, & + &' KORDER = ',I1, & + &' 0 WRITER k-d spec order'/7X, & + &' KUFH2O = ',I1, & + &' 1 Col Absorber Scal H2O'/7X, & + &' KUFCO2 = ',I1, & + &' 1 Col Absorber Scal CO2'/7X, & + &' KCSELF = ',I1, & + &' 1 H2O Cont Self-Broaden'/7X, & + &' KCFORN = ',I1, & + &' 1 H2O Con Foreign-Broad') + ! 7X,' KVRAER = ',I1,' 1 Repartition Aer VDist' +! + WRITE (KW,6004) + 6004 FORMAT (/ & + &' CONTROL PARAMTER DEFAULT SNOW/ICE FACTORS'& + ) + + WRITE (KW,6005) agexpf, albdif + 6005 FORMAT (7X,' AGEXPF = ',F7.3, & + &' SNOWAGE XPFACTOR SH EARTH'/7X,' SH O = ',& + F7.3,' " " " OCICE'/7X, & + &' SH L = ',F7.3, & + &' " " " LDICE'/7X,' NH E = ',& + F7.3,' " " NH EARTH'/7X, & + &' NH O = ',F7.3, & + &' " " " OCICE'/7X,' NH L = ',& + F7.3,' " " " LDICE'/7X, & + &' ALBDIF = ',F7.3, & + &' SNOW/ICE ALBDIF SH EARTH'/7X,' SH O = ',& + F7.3,' " " " OCICE'/7X, & + &' SH L = ',F7.3, & + &' " " " LDICE'/7X,' NH E = ',& + F7.3,' " " NH EARTH'/7X, & + &' NH O = ',F7.3, & + &' " " " OCICE'/7X,' NH L = ',& + F7.3,' " " " LDICE') +! + WRITE (KW,6006) + 6006 FORMAT ('0CONTROL PARAMTER VALUE',16X,' DEFAULT') + WRITE (KW,6007) REFF0, VEFF0, AVSCAT, ANSCAT, AVFOAM, ANFOAM + 6007 FORMAT (7X,' REFF0 = ',F7.3, & + &' 0.300 '/7X,' VEFF0 = ',& + F7.3,' 0.350 '/7X, & + &' AVSCAT = ',F7.5, & + &' 0.01560 '/7X,' ANSCAT = ',& + F7.5,' 0.00020 '/7X, & + &' AVFOAM = ',F7.5, & + &' 0.21970 '/7X,' ANFOAM = ',& + F7.5,' 0.15140 ') + WRITE (KW,6008) + 6008 FORMAT (/10X,'UV Solar Flux Spectral Partitions and Factors'& + ) + WRITE (KW,6009) UVWAVL, UVFACT + 6009 FORMAT (10X,'UVWAVL = ',F7.5,2F8.5/10X,'UVFACT = ',F7.5, & + 2F8.5) +! +!nu WRITE(KW,6013) + 6013 FORMAT (/ & + &' CONTROL PARAMETER PI0VIS PI0TRA DEFAULT'& + ) +!nu WRITE(KW,6014) PI0VIS,PI0TRA + 6014 FORMAT (7X,' ACID1 = ',F8.6,F11.6, & + &' 1.0 '/7X,' SSALT = ',F8.6, & + F11.6,' 1.0 '/7X,' SLFT1 = ', & + F8.6,F11.6,' 1.0 '/7X, & + &' SLFT2 = ',F8.6,F11.6, & + ' 1.0 '/7X,' BSLT1 = ',F8.6, & + F11.6,' .98929 '/7X,' BSLT2 = ', & + F8.6,F11.6,' .95609 '/7X, & + &' DUST1 = ',F8.6,F11.6, & + ' .91995 '/7X,' DUST2 = ',F8.6, & + F11.6,' .78495 '/7X,' DUST3 = ', & + F8.6,F11.6,' .63576 '/7X, & + &' CARB1 = ',F8.6,F11.6, & + ' .31482 '/7X,' CARB2 = ',F8.6, & + F11.6,' .47513 ') + + WRITE (KW,6019) + 6019 FORMAT (/' GHGAS',9X,'PPMVK0 PPMVDF PPGRAD') + WRITE (KW,6020) (GHG(I),PPMVK0(I),PPMVDF(I),PPGRAD(I),I=1, & + 12) + 6020 FORMAT (1X,a6,' ',F15.7,F10.5,F10.5) + ENDIF +!------------- +!------------- +! + ENDDO + 6308 FORMAT (' TKeff= ',F6.2,2F7.2,' SRKALB=',16F6.4/1X, & + &'At Top of Atm: ',' BTEMPW=',F6.2,1X,' TRUFTW=',F6.3,2X, & + &' SRIVIS=',F6.2,' SROVIS=',F6.2,' PLAVIS=',F6.4,2X, & + &' SRINIR=',F6.2,' SRONIR=',F6.2,' PLANIR=',F6.4) + 6423 FORMAT (T81,'FGOLDH(',I1,') =',1P,E9.2,5X,0P,F7.4) + 6425 FORMAT (' ') + 6438 FORMAT (/T81,'SUM COLUMN TAU(0.55) =',F10.4) + 6442 FORMAT (I3,6X,15F8.5) + 6452 FORMAT (I3,6X,15F8.5) + 6462 FORMAT (I3,6X,15F8.5) + 6472 FORMAT (I3,6X,15F8.5) + END SUBROUTINE WRITER + + SUBROUTINE WRITET(KWRU,INDEX,JYRREF,JYRNOW,JMONTH,KLIMIT) + USE AERPARAM_MOD, ONLY:UPDATEAEROSOL, UPDATEAEROSOL2 + USE DUSTPARAM_MOD, ONLY:UPDDST2 + USE O3MOD, ONLY:UPDO3D, UPDO3D_SOLAR, plbo3, nlo3 +#ifdef HIGH_FREQUENCY_O3_INPUT + USE O3MOD, ONLY:UPDO3D_HIGHFREQUENCY +#endif + IMPLICIT NONE +! +! +! ------------------------------------------------------------------ +! WRITET GHG, Solar UV, Ozone, Aerosol Trend Diagnostic Information +! +! INDEX +! 1 GHG DT0 Trends / FULGAS Ratios for CO2,NO2,CH4,F11,F12 +! 2 GHG DF Change / Ann Increase Rate CO2,NO2,CH4,F11,F12 +! 3 Lean Solar Constant, UV Spectral Variation Time Trends +! 4 Ozone Zonal-mean (Latitude and Vertical) Distributions +! 5 Ozone Surface-150mb, 150mb-TOA, Column Longitude Distr +! A O3 (Wang-Jacobs) Relative Longitudinal Distribution +! B O3 (London-NCAR) Relative Longitudinal Distribution +! C O3 (W-J, London) Relative Longitudinal Distribution +! 6 Tropospheric Climatology Aerosol Latitude/Height Distr +! A Zonal-mean Extinction Optical Depth +! B Zonal-mean Single Scattering Albedo +! C Zonal-mean Asymmetry Parameter +! 7 Tropospheric Desert Dust Aerosol Latitude/Height Distr +! A Zonal-mean Extinction Optical Depth +! B Zonal-mean Single Scattering Albedo +! C Zonal-mean Asymmetry Parameter +! 8 Stratospheric (Volcanic) Aerosol Latitude/Height Distr +! A Zonal-mean Extinction Optical Depth +! B Zonal-mean Single Scattering Albedo +! C Zonal-mean Asymmetry Parameter +! 9 Total Column Atmospheric Aerosol Latitude/Height Distr +! A Zonal-mean Extinction Optical Depth +! B Zonal-mean Single Scattering Albedo +! C Zonal-mean Asymmetry Parameter +! NOTE: +! Time Trend (year) Specification is by JYRREF to JYRNOW +! Time Specification (O3,Aerosol) is by JYRREF to JMONTH +! (If JMONTH = 0, JDAY is used) +! +! INDEX < 10 is selective, INDEX > 10 is digit inclusive +! KLIMIT = 0 full output, KLIMIT > 0 abbreviated output +! KWRU directs the output to selected (KWRU) file number +! ------------------------------------------------------------------ +! + INTEGER, INTENT(IN) :: KWRU, INDEX, JYRREF, JYRNOW, JMONTH, & + KLIMIT + + REAL*8 WREF(7), WDAT(7), WPPM(7), XRAT(5) + REAL*8, DIMENSION(49,LX) :: QX, QS, QG, QP, O3 + REAL*8, DIMENSION(49) :: QXCOL, QSCOL, QGCOL, QPCOL, O3COL + REAL*8 SFL0(5), SFLX(5), DFLX(5), RFLX(5), O3L(46,72) + INTEGER :: LO3(36) +! + INTEGER, PARAMETER :: NSW1 = 24, NSW2 = 32, NSW3 = 40, NSW4 = 48 +! + CHARACTER*32, PARAMETER :: CHAER(4) = (/ & + &'Tropospheric Climatology Aerosol', & + &'Tropospheric Desert Dust Aerosol', & + &'Stratospheric (Volcanic) Aerosol', & + &'Total Column Atmospheric Aerosol'/) + + REAL*8 YREF11, ZREF12, SUMO3, QOSH, QONH, QOGL, SUMXL, SUMGL, & + SUMSL, QXSH, QXNH, QXGL, QSSH, QSNH, QSGL, QPSH, QPNH, & + QPGL, QGSH, QGNH, QGGL + INTEGER KW, INDJ, INDI, INDX, KINDEX, I, JJDAYG, JYEARG, KWSKIP, & + J, IYEAR, NSPACE, LMO, K, mavg, iyr1, lmax, icyc, JYEARS, & + M, JJDAYO, L, JJ, N, N1, N2, II, KAEROS, LL1, KA, JJDAY, & + icycf +! + KW = KWRU + INDJ = MOD(INDEX,10) + IF ( INDJ<1 ) INDJ = 10 + INDI = 1 + IF ( INDEX==0 ) INDJ = 1 + IF ( INDEX<11 ) INDI = INDJ + DO INDX = INDI, INDJ +! + IF ( INDX==3 ) THEN +! +!------------- +!------------- +! + IF ( ksolar>=0 ) THEN + LMO = (1950-IY1S0)*12 + 1 + IF ( ksolar>1 ) LMO = NINT(1950-yr1s0+1.5) + DO I = 1, 5 + SFL0(I) = 0.D0 + ENDDO + DO K = 1, 190 + IF ( K<=NSW1 ) SFL0(1) = SFL0(1) + UV_SSI(LMO,K) & + *DS_SSI(K) + IF ( K>NSW1 .AND. K<=NSW2 ) SFL0(2) = SFL0(2) & + + UV_SSI(LMO,K)*DS_SSI(K) + IF ( K>NSW2 .AND. K<=NSW3 ) SFL0(3) = SFL0(3) & + + UV_SSI(LMO,K)*DS_SSI(K) + IF ( K>NSW3 .AND. K<=NSW4 ) SFL0(4) = SFL0(4) & + + UV_SSI(LMO,K)*DS_SSI(K) + SFL0(5) = SFL0(5) + UV_SSI(LMO,K)*DS_SSI(K) + ENDDO +! + IF ( ksolar==2 .OR. ksolar==9 ) WRITE (KW,6299) & + INT(yr1s0), INT(yr2s0), JYRREF, JYRNOW, SFL0(5) + 6299 FORMAT (/ & + &' (3)=INDEX Annual-mean Solar flux (from ann. SSI input'& + ,I6,'-',I4,' data) for JYRREF=',I4,' to JYRNOW=',I4, & + &' mid',' 1950 Ref S00WM2=',F9.4/12X, & + &'Solar UV Spectral Flux W/m2',T57, & + &'Delta Solar UV Spectral Flux W/m2',T97, & + &'Solar UV Spectral Flux Ratios'/ & + &' YEAR 0-280 280-320 320-360 360-400 Total ',6X, & + &'0-280 280-320 320-360 360-400 Total ',4X, & + &'0-280 280-320 320-360 360-400 Total ') + IF ( ksolar<2 ) WRITE (KW,6300) JYRREF, JYRNOW, SFL0(5) + 6300 FORMAT (/ & + &' (3)=INDEX Annual-mean Solar flux (from J.Lean monthly'& + ,' 1882-1998 data) for JYRREF=',I4,' to JYRNOW=',I4, & + &' Jan',' 1950 Ref S00WM2=',F9.4/12X, & + &'Solar UV Spectral Flux W/m2',T57, & + &'Delta Solar UV Spectral Flux W/m2',T97, & + &'Solar UV Spectral Flux Ratios'/ & + &' YEAR 0-280 280-320 320-360 360-400 Total ',6X, & + &'0-280 280-320 320-360 360-400 Total ',4X, & + &'0-280 280-320 320-360 360-400 Total ') +! + IF ( ksolar<2 ) THEN + mavg = 12 + iyr1 = IY1S0 + lmax = MS0X + ELSE + mavg = 1 + iyr1 = yr1s0 + lmax = NINT(yr2s0-yr1s0+1) + ENDIF + icyc = mavg*ICYCS0 + icycf = mavg*ICYCS0F + DO J = JYRREF, JYRNOW + IF ( j>2000 ) icyc = icycf + KWSKIP = 0 + IF ( J>JYRREF ) KWSKIP = KLIMIT + IF ( J==JYRNOW ) KWSKIP = 0 + JYEARS = J + DO I = 1, 5 + SFLX(I) = 0.D0 + ENDDO + LMO = (JYEARS-iyr1)*mavg + DO M = 1, mavg + LMO = LMO + 1 + IF ( LMO>lmax ) LMO = LMO - & + icyc*((LMO-lmax+icyc-1)/icyc) + IF ( LMO<1 ) LMO = LMO + icyc*((icyc-LMO)/icyc) + DO K = 1, 190 + IF ( K<=NSW1 ) SFLX(1) = SFLX(1) + UV_SSI(LMO,K)& + *DS_SSI(K) + IF ( K>NSW1 .AND. K<=NSW2 ) SFLX(2) = SFLX(2) & + + UV_SSI(LMO,K)*DS_SSI(K) + IF ( K>NSW2 .AND. K<=NSW3 ) SFLX(3) = SFLX(3) & + + UV_SSI(LMO,K)*DS_SSI(K) + IF ( K>NSW3 .AND. K<=NSW4 ) SFLX(4) = SFLX(4) & + + UV_SSI(LMO,K)*DS_SSI(K) + SFLX(5) = SFLX(5) + UV_SSI(LMO,K)*DS_SSI(K) + ENDDO + ENDDO + DO I = 1, 5 + SFLX(I) = SFLX(I)/mavg + DFLX(I) = SFLX(I) - SFL0(I) + RFLX(I) = SFLX(I)/SFL0(I) + ENDDO + IF ( KWSKIP==0 ) WRITE (KW,6301) JYEARS, & + (SFLX(I),I=1,5), (DFLX(I),I=1,5), (RFLX(I),I=1,5) + 6301 FORMAT (2X,I4,1X,4F8.4,F10.4,2X,5F8.4,2X,5F8.5) + NSPACE = JYEARS - (JYEARS/10)*10 + IF ( KLIMIT<=0 ) THEN + IF ( NSPACE==0 ) WRITE (KW,6302) + 6302 FORMAT (' ') + ENDIF + ENDDO + ENDIF + ELSEIF ( INDX==4 ) THEN +! +!------------- +!------------- +! + JJDAYO = JMONTH*30 - 15 + IF ( JMONTH<1 ) JJDAYO = JDAY + CALL UPDO3D(JYRREF,JJDAYO,O3JDAY,O3JREF) +#ifdef HIGH_FREQUENCY_O3_INPUT + CALL UPDO3D_HIGHFREQUENCY(JYRREF,JJDAYO, & + O3JDAY_HF_modelLevels) +#endif + CALL UPDO3D_SOLAR(JJDAYO,S00WM2*RATLS0,O3JDAY) + DO J = 1, 46 + DO L = 1, NL + O3(J,L) = 0.D0 + ENDDO + JLAT = J + DO I = 1, 72 + ILON = I +!!! CALL GETO3D(ILON,JLAT) + CALL REPART(O3JDAY(1,IGCM,JGCM),PLBO3,NLO3+1, & + U0GAS(1,3),PLB0,NL+1) + DO L = 1, NL + O3(J,L) = O3(J,L) + U0GAS(L,3)/72.D0 + ENDDO + ENDDO + SUMO3 = 0.D0 + DO L = 1, NL + SUMO3 = SUMO3 + O3(J,L) + ENDDO + O3COL(J) = SUMO3 + ENDDO + CALL BOXAV1(DLAT46,O3COL,46,1,23,QOSH) + CALL BOXAV1(DLAT46,O3COL,46,24,46,QONH) + CALL BOXAV1(DLAT46,O3COL,46,1,46,QOGL) + O3COL(47) = QOSH + O3COL(48) = QONH + O3COL(49) = QOGL + DO L = 1, NL + CALL BOXAV1(DLAT46,O3(1,L),46,1,23,QOSH) + CALL BOXAV1(DLAT46,O3(1,L),46,24,46,QONH) + CALL BOXAV1(DLAT46,O3(1,L),46,1,46,QOGL) + O3(47,L) = QOSH + O3(48,L) = QONH + O3(49,L) = QOGL + ENDDO +! + IF ( KLIMIT>0 ) WRITE (KW,6400) JYRREF, JJDAYO, JMONTH, & + MADO3M, (L,L=2,NL) + 6400 FORMAT (/' (4)=INDEX JYRREF=',I5,' JDAY=',I3,' JMONTH=',& + I2,T50, & + &' Ozone: Zonal-mean Vertical Distribution (cmSTP)', & + T126,'MADO3=',I2/' JLAT DLAT46 COLUMN L = 1', & + 14I7/I31,14I7) + IF ( KLIMIT<1 ) WRITE (KW,7400) JYRREF, JJDAYO, JMONTH, & + MADO3M, (PLB0(I),I=1,15), (L,L=2,15) + 7400 FORMAT (/' (4)=INDEX JYRREF=',I5,' JDAY=',I3,' JMONTH=',& + I2,T50, & + &' Ozone: Zonal-mean Vertical Distribution (cmSTP)', & + T126,'MADO3=',I2//21X,'PLB0 =',F6.1,9F7.1, & + &5F7.2/' JLAT DLAT46 COLUMN L = 1',14I7) + IF ( KLIMIT<1 .AND. nl>15 ) THEN + WRITE (KW,'(F33.2,14F7.2)') (PLB0(I),I=16,NL) + WRITE (KW,'(I31,14I7)') (L,L=16,NL) + ENDIF +! + DO JJ = 1, 46 + J = 47 - JJ + IF ( KLIMIT<=0 ) THEN + WRITE (KW,6401) J, DLAT46(J), O3COL(J), & + (O3(J,L),L=1,NL) + 6401 FORMAT (I5,F8.2,F9.5,4X,15(1x,F6.5)/26X,15(1x,F6.5)) + ENDIF + ENDDO + IF ( KLIMIT<1 ) WRITE (KW,6402) + WRITE (KW,6403) O3COL(48), (O3(48,L),L=1,NL) + 6403 FORMAT (11X,'NH',F9.5,4X,15(1x,F6.5)/26X,15(1x,F6.5)) + IF ( KLIMIT<1 ) WRITE (KW,6402) + WRITE (KW,6404) O3COL(47), (O3(47,L),L=1,NL) + 6404 FORMAT (11X,'SH',F9.5,4X,15(1x,F6.5)/26X,15(1x,F6.5)) + IF ( KLIMIT<1 ) WRITE (KW,6402) + WRITE (KW,6405) O3COL(49), (O3(49,L),L=1,NL) + 6405 FORMAT (7X,'GLOBAL',F9.5,4X,15(1x,F6.5)/26X,15(1x,F6.5)) + ELSEIF ( INDX==5 ) THEN +! +! +!------------- +!------------- +! + JJDAYO = JMONTH*30 - 15 + IF ( JMONTH<1 ) JJDAYO = JDAY + CALL UPDO3D(JYRREF,JJDAYO,O3JDAY,O3JREF) +#ifdef HIGH_FREQUENCY_O3_INPUT + CALL UPDO3D_HIGHFREQUENCY(JYRREF,JJDAYO, & + O3JDAY_HF_modelLevels) +#endif + CALL UPDO3D_SOLAR(JJDAYO,S00WM2*RATLS0,O3JDAY) + DO N = 1, 3 + N1 = 1 + N2 = 8 + IF ( N==2 ) N1 = 9 + IF ( N>1 ) N2 = NL + DO J = 1, 46 + JLAT = J + DO I = 1, 72 + ILON = I +!!! CALL GETO3D(ILON,JLAT) + CALL REPART(O3JDAY(1,IGCM,JGCM),PLBO3,NLO3+1, & + U0GAS(1,3),PLB0,NL+1) + SUMO3 = 0.D0 + DO L = N1, N2 + SUMO3 = SUMO3 + U0GAS(L,3) + ENDDO + O3L(J,I) = SUMO3 + ENDDO + ENDDO + DO J = 1, 46 + SUMO3 = 0.D0 + DO I = 1, 72 + SUMO3 = SUMO3 + O3L(J,I)/72.D0 + ENDDO + DO I = 1, 72 + O3L(J,I) = O3L(J,I)/SUMO3 + ENDDO + ENDDO +! + IF ( N==1 ) WRITE (KW,6510) JYRREF, JJDAYO, JMONTH, & + MADO3M, (I,I=10,310,10) + 6510 FORMAT (/' 5A=INDEX JYEAR=',I5,' JDAY=',I3, & + &' JMONTH=',I2,T50, & + &' Ozone Longitudinal Variation: Troposphere', & + &' (Wang-Jacobs) Surf to 150 mb',T126,'MADO3=', & + &I2/' J LON=0',31I4) + IF ( N==2 ) WRITE (KW,6520) JYRREF, JJDAYO, JMONTH, & + MADO3M, (I,I=10,310,10) + 6520 FORMAT (/' 5B=INDEX JYEAR=',I5,' JDAY=',I3, & + &' JMONTH=',I2,T50, & + &' Ozone Longitudinal Variation: Stratosphere', & + &' (London-NCAR) 150 mb to TOA',T126,'MADO3=', & + &I2/' J LON=0',31I4) + IF ( N==3 .AND. KLIMIT<1 ) WRITE (KW,6530) JYRREF, & + JJDAYO, JMONTH, MADO3M, (I,I=10,310,10) + 6530 FORMAT (/' 5C=INDEX JYEAR=',I5,' JDAY=',I3, & + &' JMONTH=',I2,T50, & + &' Ozone Longitudinal Variation: Total Column', & + &' (W-J/London) Surface to TOA',T126,'MADO3=', & + &I2/' J LON=0',31I4) + IF ( KLIMIT<1 ) WRITE (KW,6540) + 6540 FORMAT (' ') +! + IF ( N/=3 .OR. KLIMIT<=0 ) THEN + DO JJ = 1, 46 + J = 47 - JJ + KWSKIP = KLIMIT + IF ( J==36 ) KWSKIP = 0 + IF ( J==24 ) KWSKIP = 0 + IF ( J==12 ) KWSKIP = 0 + DO I = 1, 36 + II = I*2 - 1 + LO3(I) = O3L(J,II)*100.D0 + 0.5D0 + ENDDO + IF ( KWSKIP==0 ) WRITE (KW,6501) J, (LO3(I),I=1,32) + 6501 FORMAT (I4,1X,36I4) + ENDDO + ENDIF +! + ENDDO + ELSEIF ( INDX==6 .OR. INDX==7 .OR. INDX==8 .OR. INDX==9 ) THEN +! +!------------- +!------------- +! + KAEROS = 4 + IF ( INDX==6 ) KAEROS = 1 + IF ( INDX==7 ) KAEROS = 2 + IF ( INDX==8 ) KAEROS = 3 + LL1 = 1 + IF ( INDX==8 .AND. NL>15 ) LL1 = NL - 14 + JJDAY = JMONTH*30 - 15 + IF ( JMONTH<1 ) JJDAY = JDAY + K = 6 + IF ( MADAER==3 ) THEN + ! newer aerosol fields + IF ( KAEROS==1 .OR. KAEROS>3 ) & + CALL UPDATEAEROSOL2(JYRREF,JJDAY,a6jday,plbaer) + ELSE + IF ( KAEROS==1 .OR. KAEROS>3 ) & + CALL UPDATEAEROSOL(JYRREF,JJDAY,a6jday,plbaer) + ENDIF + IF ( KAEROS==2 .OR. KAEROS>3 ) CALL UPDDST2(JYRREF,JJDAY) + IF ( KAEROS==3 .OR. KAEROS>3 ) CALL UPDVOL(JYRREF,JJDAY) +! + DO J = 1, 46 + DO L = 1, NL + QX(J,L) = 0.D0 + QS(J,L) = 0.D0 + QG(J,L) = 0.D0 + ENDDO + JLAT = J + DO I = 1, 72 + ILON = I + IF ( KAEROS==1 .OR. KAEROS>3 ) CALL GETAER + IF ( KAEROS==2 .OR. KAEROS>3 ) CALL GETDST + IF ( KAEROS==3 .OR. KAEROS>3 ) CALL GETVOL + DO L = 1, NL + IF ( KAEROS==1 .OR. KAEROS>3 ) QX(J,L) = QX(J,L) & + + SRAEXT(L,K)/72.D0 + IF ( KAEROS==2 .OR. KAEROS>3 ) QX(J,L) = QX(J,L) & + + SRDEXT(L,K)/72.D0 + IF ( KAEROS==3 .OR. KAEROS>3 ) QX(J,L) = QX(J,L) & + + SRVEXT(L,K)/72.D0 + IF ( KAEROS==1 .OR. KAEROS>3 ) QS(J,L) = QS(J,L) & + + SRASCT(L,K)/72.D0 + IF ( KAEROS==2 .OR. KAEROS>3 ) QS(J,L) = QS(J,L) & + + SRDSCT(L,K)/72.D0 + IF ( KAEROS==3 .OR. KAEROS>3 ) QS(J,L) = QS(J,L) & + + SRVSCT(L,K)/72.D0 + IF ( KAEROS==1 .OR. KAEROS>3 ) QG(J,L) = QG(J,L) & + + SRAGCB(L,K)*SRASCT(L,K)/72.D0 + IF ( KAEROS==2 .OR. KAEROS>3 ) QG(J,L) = QG(J,L) & + + SRDGCB(L,K)*SRDSCT(L,K)/72.D0 + IF ( KAEROS==3 .OR. KAEROS>3 ) QG(J,L) = QG(J,L) & + + SRVGCB(L,K)*SRVSCT(L,K)/72.D0 + ENDDO + ENDDO + SUMXL = 1.D-10 + SUMSL = 1.D-20 + SUMGL = 1.D-20 + DO L = 1, NL + SUMXL = SUMXL + QX(J,L) + SUMSL = SUMSL + QS(J,L) + SUMGL = SUMGL + QG(J,L) + QG(J,L) = (1.D-20+QG(J,L))/(1.D-10+QS(J,L)) + QP(J,L) = (1.D-20+QS(J,L))/(1.D-10+QX(J,L)) + IF ( QP(J,L)>0.99999D0 ) QP(J,L) = 0.99999D0 + ENDDO + QXCOL(J) = SUMXL + QSCOL(J) = SUMSL + QGCOL(J) = (1.D-15+SUMGL)/(1.D-05+SUMSL) + QPCOL(J) = (1.D-20+SUMSL)/(1.D-10+SUMXL) + ENDDO + CALL BOXAV1(DLAT46,QXCOL,46,1,23,QXSH) + CALL BOXAV1(DLAT46,QXCOL,46,24,46,QXNH) + CALL BOXAV1(DLAT46,QXCOL,46,1,46,QXGL) + QXCOL(47) = QXSH + QXCOL(48) = QXNH + QXCOL(49) = QXGL + CALL BOXAV1(DLAT46,QSCOL,46,1,23,QSSH) + CALL BOXAV1(DLAT46,QSCOL,46,24,46,QSNH) + CALL BOXAV1(DLAT46,QSCOL,46,1,46,QSGL) + QSCOL(47) = QSSH + QSCOL(48) = QSNH + QSCOL(49) = QSGL + CALL BOXAV2(DLAT46,QXCOL,QPCOL,46,1,23,QPSH) + CALL BOXAV2(DLAT46,QXCOL,QPCOL,46,24,46,QPNH) + CALL BOXAV2(DLAT46,QXCOL,QPCOL,46,1,46,QPGL) + QPCOL(47) = QPSH + QPCOL(48) = QPNH + QPCOL(49) = QPGL + CALL BOXAV2(DLAT46,QSCOL,QGCOL,46,1,23,QGSH) + CALL BOXAV2(DLAT46,QSCOL,QGCOL,46,24,46,QGNH) + CALL BOXAV2(DLAT46,QSCOL,QGCOL,46,1,46,QGGL) + QGCOL(47) = QGSH + QGCOL(48) = QGNH + QGCOL(49) = QGGL + DO L = 1, NL + CALL BOXAV1(DLAT46,QX(1,L),46,1,23,QXSH) + CALL BOXAV1(DLAT46,QX(1,L),46,24,46,QXNH) + CALL BOXAV1(DLAT46,QX(1,L),46,1,46,QXGL) + QX(47,L) = QXSH + QX(48,L) = QXNH + QX(49,L) = QXGL + CALL BOXAV1(DLAT46,QS(1,L),46,1,23,QSSH) + CALL BOXAV1(DLAT46,QS(1,L),46,24,46,QSNH) + CALL BOXAV1(DLAT46,QS(1,L),46,1,46,QSGL) + QS(47,L) = QSSH + QS(48,L) = QSNH + QS(49,L) = QSGL + CALL BOXAV2(DLAT46,QX(1,L),QP(1,L),46,1,23,QPSH) + CALL BOXAV2(DLAT46,QX(1,L),QP(1,L),46,24,46,QPNH) + CALL BOXAV2(DLAT46,QX(1,L),QP(1,L),46,1,46,QPGL) + QP(47,L) = QPSH + QP(48,L) = QPNH + QP(49,L) = QPGL + CALL BOXAV2(DLAT46,QS(1,L),QG(1,L),46,1,23,QGSH) + CALL BOXAV2(DLAT46,QS(1,L),QG(1,L),46,24,46,QGNH) + CALL BOXAV2(DLAT46,QS(1,L),QG(1,L),46,1,46,QGGL) + QG(47,L) = QGSH + QG(48,L) = QGNH + QG(49,L) = QGGL + ENDDO +! + KA = KAEROS + IF ( KLIMIT>0 ) WRITE (KW,6600) INDX, JYRREF, JJDAY, JMONTH,& + CHAER(KA), (L,L=LL1,LL1+14) + 6600 FORMAT (/I3,'A=INDEX JYEAR=',I5,' JDAY=',I3,' JMONTH=', & + I2,T50,' ZONAL MEAN AEROSOL OPTICAL DEPTH',T100, & + &A32/' JLAT DLAT46 COLUMN L =',I4,14I7) + IF ( KLIMIT<1 ) WRITE (KW,7600) INDX, JYRREF, JJDAY, JMONTH,& + CHAER(KA), (PLB0(I),I=LL1,LL1+14), & + (L,L=LL1,LL1+14) + 7600 FORMAT (/I3,'A=INDEX JYEAR=',I5,' JDAY=',I3,' JMONTH=', & + I2,T50,' ZONAL MEAN AEROSOL OPTICAL DEPTH',T100, & + A32//21X,'PLB0 =',F6.1,9F7.1, & + &5F7.2/' JLAT DLAT46 COLUMN L =',I4,14I7) +! + IF ( KLIMIT<1 ) THEN + DO JJ = 1, 46 + J = 47 - JJ + WRITE (KW,6601) J, DLAT46(J), QXCOL(J), & + (QX(J,L),L=LL1,LL1+14) + 6601 FORMAT (I5,F8.2,F9.5,4X,15F7.5) + ENDDO + WRITE (KW,6602) QXCOL(48), (QX(48,L),L=LL1,LL1+14) + 6602 FORMAT (/11X,'NH',F9.5,4X,15F7.5) + WRITE (KW,6603) QXCOL(47), (QX(47,L),L=LL1,LL1+14) + 6603 FORMAT (/11X,'SH',F9.5,4X,15F7.5) + WRITE (KW,6604) QXCOL(49), (QX(49,L),L=LL1,LL1+14) + 6604 FORMAT (/7X,'GLOBAL',F9.5,4X,15F7.5) + ENDIF + IF ( KLIMIT>0 ) THEN + WRITE (KW,6605) QXCOL(48), (QX(48,L),L=LL1,LL1+14) + 6605 FORMAT (11X,'NH',F9.5,4X,15F7.5) + WRITE (KW,6606) QXCOL(47), (QX(47,L),L=LL1,LL1+14) + 6606 FORMAT (11X,'SH',F9.5,4X,15F7.5) + WRITE (KW,6607) QXCOL(49), (QX(49,L),L=LL1,LL1+14) + 6607 FORMAT (7X,'GLOBAL',F9.5,4X,15F7.5) + ENDIF +! + IF ( KLIMIT<=0 ) THEN + WRITE (KW,6610) INDX, JYRREF, JJDAY, JMONTH, CHAER(KA), & + (PLB0(I),I=LL1,LL1+14), (L,L=LL1,LL1+14) + 6610 FORMAT (/I3,'B=INDEX JYEAR=',I5,' JDAY=',I3, & + ' JMONTH=',I2,T50, & + &' ZONAL MEAN AEROSOL SINGLE SCATTERING ALBEDO', & + T100,A32//21X,'PLB0 =',F6.1,9F7.1, & + &5F7.2/' JLAT DLAT46 COLUMN L =',I4,14I7) +! + DO JJ = 1, 46 + J = 47 - JJ + WRITE (KW,6611) J, DLAT46(J), QPCOL(J), & + (QP(J,L),L=LL1,LL1+14) + 6611 FORMAT (I5,F8.2,F9.5,4X,15F7.5) + ENDDO + WRITE (KW,6612) QPCOL(48), (QP(48,L),L=LL1,LL1+14) + 6612 FORMAT (/11X,'NH',F9.5,4X,15F7.5) + WRITE (KW,6613) QPCOL(47), (QP(47,L),L=LL1,LL1+14) + 6613 FORMAT (/11X,'SH',F9.5,4X,15F7.5) + WRITE (KW,6614) QPCOL(49), (QP(49,L),L=LL1,LL1+14) + 6614 FORMAT (/7X,'GLOBAL',F9.5,4X,15F7.5) +! + WRITE (KW,6620) INDX, JYRREF, JJDAY, JMONTH, CHAER(KA), & + (PLB0(I),I=LL1,LL1+14), (L,L=LL1,LL1+14) + 6620 FORMAT (/I3,'C=INDEX JYEAR=',I5,' JDAY=',I3, & + ' JMONTH=',I2,T50, & + &' ZONAL MEAN AEROSOL ASYMMETRY PARAMETER',T100, & + A32//21X,'PLB0 =',F6.1,9F7.1, & + &5F7.2/' JLAT DLAT46 COLUMN L =',I4,14I7) +! + DO JJ = 1, 46 + J = 47 - JJ + WRITE (KW,6621) J, DLAT46(J), QGCOL(J), & + (QG(J,L),L=LL1,LL1+14) + 6621 FORMAT (I5,F8.2,F9.5,4X,15F7.5) + ENDDO + WRITE (KW,6622) QGCOL(48), (QG(48,L),L=LL1,LL1+14) + 6622 FORMAT (/11X,'NH',F9.5,4X,15F7.5) + WRITE (KW,6623) QGCOL(47), (QG(47,L),L=LL1,LL1+14) + 6623 FORMAT (/11X,'SH',F9.5,4X,15F7.5) + WRITE (KW,6624) QGCOL(49), (QG(49,L),L=LL1,LL1+14) + 6624 FORMAT (/7X,'GLOBAL',F9.5,4X,15F7.5) + ENDIF + ELSEIF ( INDX/=10 ) THEN +! +!------------- +!------------- +! + KINDEX = INDX + DO I = 1, 5 + WREF(I) = XREF(I) + WPPM(I) = PPMV80(I+4) + ENDDO + WREF(6) = PPMV80(11)*1000.D0 + WREF(7) = PPMV80(12)*1000.D0 + WPPM(1) = PPMV80(2) + WPPM(6) = PPMV80(11) + WPPM(7) = PPMV80(12) +! + YREF11 = PPMV80(11) + ZREF12 = PPMV80(12) +! + JJDAYG = 184 +! + IF ( KINDEX==1 ) THEN + WRITE (KW,6101) JJDAYG + 6101 FORMAT (/1X,'(1)=INDEX',T12,'JDAY=',I3, & + &' RCM RAD EQUIL NO-FEEDBACK DT0',T55, & + &'PRESENT TREND UPDGHG INPUT DATA TO GCM',T96, & + &'FULGAS FACTOR RELATIVE TO 1980 AMOUNTS') + WRITE (KW,6102) KTREND + 6102 FORMAT (1X,'KTREND=',I2,1X,40('-'),3X,38('-'),3X,38('-') & + /1X, & + &'YEAR DTSUM *DTCO2 DTN2O DTCH4 DTF11 DTF12'& + ,' PPMCO2 PPMN20 PPMCH4 PPBF11 PPBF12', & + &' FULCO2 FULN2O FULCH4 FULF11 FULF12') + ENDIF +! + IF ( KINDEX==2 ) THEN + WRITE (KW,6201) JJDAYG + 6201 FORMAT (/1X,'(2)=INDEX',T12,'JDAY=',I3, & + &' RCM EQ NO-FEEDBACK DFLUX W/M2',T55, & + &'PRESENT TREND UPDGHG INPUT DATA TO GCM',T96, & + &'ANNUAL CHANGE RATE OF TRACE GAS AMOUNT') + WRITE (KW,6202) KTREND + 6202 FORMAT (1X,'KTREND=',I2,1X,40('-'),3X,38('-'),3X,38('-') & + /1X, & + &'YEAR DTSUM *DTCO2 DTN2O DTCH4 DTF11 DTF12'& + ,' PPMCO2 PPMN20 PPMCH4 PPBF11 PPBF12', & + &' RATCO2 RATN2O RATCH4 RATF11 RATF12') + ENDIF +! + JYEARG = JYRREF - 1 + CALL UPDGHG(JYEARG,JJDAYG) +! + DO I = 1, 5 + WDAT(I) = XNOW(I) + ENDDO +! + DO J = JYRREF, JYRNOW + KWSKIP = 0 + IF ( J>JYRREF ) KWSKIP = KLIMIT + IF ( J==1980 ) KWSKIP = 0 + IF ( J==JYRNOW ) KWSKIP = 0 + JYEARG = J + CALL UPDGHG(JYEARG,JJDAYG) + DO I = 1, 5 + XRAT(I) = (XNOW(I)-WDAT(I))/(1.D-10+WDAT(I)) + IF ( XRAT(I)>9.9999 ) XRAT(I) = 9.9999 + WDAT(I) = XNOW(I) + ENDDO + IYEAR = JYEARG + IF ( KINDEX==1 ) THEN + IF ( KWSKIP==0 ) WRITE (KW,6103) IYEAR, & + (XNOW(I),I=1,5), FULGAS(2), (FULGAS(I),I=6,9) + 6103 FORMAT (1X,I4,1X,F8.2,4F8.4,1X,5F8.4) + ENDIF + IF ( KINDEX==2 ) THEN + IF ( KWSKIP==0 ) WRITE (KW,6203) IYEAR, & + (XNOW(I),I=1,5), (XRAT(I),I=1,5) + 6203 FORMAT (1X,I4,1X,F8.2,4F8.4,1X,5F8.4) + ENDIF + NSPACE = IYEAR - (IYEAR/10)*10 + IF ( KLIMIT<=0 ) THEN + IF ( NSPACE==0 ) WRITE (KW,6104) + 6104 FORMAT (' ') + ENDIF + ENDDO + ENDIF +! +! + ENDDO + 6402 FORMAT (' ') +! + END SUBROUTINE WRITET + + END MODULE RADPAR + + SUBROUTINE GTREND(XNOW,TNOW) +! + USE RADPAR, ONLY:NGHG, ghgyr1, ghgyr2, ghgam + IMPLICIT NONE + REAL*8 xnow(NGHG), tnow, year, dy, frac + INTEGER iy, n +! +!------------------------------------------------------------- +! Makiko GHG Trend Compilation GHG.1850-2050.Dec1999 +! +! Annual-Mean Greenhouse Gas Mixing Ratios +!------------------------------------------------------------- +! CO2 N2O CH4 CFC-11 CFC-12 others +! Year ppm ppm ppm ppb ppb ppb +!------------------------------------------------------------- +! Read from external file - outside table: use value from +! years ghgyr1 or ghgyr2 + YEAR = TNOW + IF ( TNOW<=ghgyr1+.5D0 ) YEAR = ghgyr1 + .5D0 + IF ( TNOW>=ghgyr2+.49999D0 ) YEAR = ghgyr2 + .49999D0 + DY = YEAR - (ghgyr1+.5D0) + IY = DY + frac = DY - IY + IY = IY + 1 +! +! CO2 N2O CH4 CFC-11 CFC-12 other_GHG SCENARIO +!-------------------------------------------------- +! + DO n = 1, NGHG + XNOW(N) = GHGAM(N,IY) + frac*(GHGAM(N,IY+1)-GHGAM(N,IY)) + ENDDO +! + END SUBROUTINE GTREND diff --git a/model/RAD_COM.f b/model/RAD_COM.f index e018d768..609917d8 100644 --- a/model/RAD_COM.f +++ b/model/RAD_COM.f @@ -93,7 +93,7 @@ MODULE RAD_COM !@var srnflb_save Net solar radiation (W/m^2) !@var trnflb_save Net thermal radiation (W/m^2) REAL*8,ALLOCATABLE,DIMENSION(:,:,:) :: srnflb_save,trnflb_save -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS !@var save_alb Surface albedo (unitless) REAL*8,ALLOCATABLE,DIMENSION(:,:) :: save_alb !@var TAUW3D,TAUI3D water,ice cloud opt. depths (for diags) @@ -258,6 +258,7 @@ MODULE RAD_COM !@var COSZ1 Mean Solar Zenith angle for curr. physics(not rad) time step REAL*8, ALLOCATABLE, DIMENSION(:,:) :: COSZ1 + REAL*8, ALLOCATABLE, DIMENSION(:,:) :: save_COSZ2 !@var COSZ_day Mean Solar Zenith angle for current day REAL*8, ALLOCATABLE, DIMENSION(:,:) :: COSZ_day !@var SUNSET Time of sunset for current day (radians from local noon) @@ -398,8 +399,11 @@ SUBROUTINE ALLOC_RAD_COM(grid) #ifdef GCC_COUPLE_RAD * ,GCCco2_tracer_save,GCCco2rad_to_chem,GCCco2rad_to_file #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS * ,save_alb,tauw3d,taui3d +#ifdef TRACERS_GC + * ,save_COSZ2 +#endif #endif #ifdef mjo_subdd * ,SWHR_cnt,LWHR_cnt,SWHR,LWHR,OLR_acc,OLR_cnt @@ -435,7 +439,7 @@ SUBROUTINE ALLOC_RAD_COM(grid) * DIFNIR(I_0H:I_1H, J_0H:J_1H), * TAUSUMW(I_0H:I_1H, J_0H:J_1H), * TAUSUMI(I_0H:I_1H, J_0H:J_1H), -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS * TAUW3D(I_0H:I_1H, J_0H:J_1H, LM), * TAUI3D(I_0H:I_1H, J_0H:J_1H, LM), #endif @@ -456,6 +460,9 @@ SUBROUTINE ALLOC_RAD_COM(grid) #endif * KLIQ(LM,4, I_0H:I_1H, J_0H:J_1H), * COSZ1 (I_0H:I_1H, J_0H:J_1H), +#if (defined CALC_MERRA2_LIKE_DIAGS) && (defined TRACERS_GC) + * save_COSZ2(I_0H:I_1H, J_0H:J_1H), +#endif * COSZ_day(I_0H:I_1H, J_0H:J_1H), * SUNSET (I_0H:I_1H, J_0H:J_1H), #ifdef CUBED_SPHERE @@ -476,7 +483,7 @@ SUBROUTINE ALLOC_RAD_COM(grid) #endif * STAT=IER) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS ! Allocate and initialize array for holding surface albedo, which is only ! updated during daytime. ALLOCATE( save_alb(I_0H:I_1H,J_0H:J_1H) ) @@ -902,7 +909,10 @@ MODULE DIAG_COM_RAD & ,ij_sw_as_noa=1 & ,ij_lw_as_noa=1 -#ifdef ACCMIP_LIKE_DIAGS +#if ( defined TRACERS_GC ) +!@var IJ_fcghg GHG forcing diagnostics (2=LW,SW, 4=CH4,N2O,CFC11,CFC12, 5=O3) + integer, dimension(2,5) :: ij_fcghg +#elif ( defined ACCMIP_LIKE_DIAGS ) !@var IJ_fcghg GHG forcing diagnostics (2=LW,SW, 4=CH4,N2O,CFC11,CFC12) integer, dimension(2,4) :: ij_fcghg #endif diff --git a/model/RAD_DRV.f b/model/RAD_DRV.f index e843396b..8d243499 100644 --- a/model/RAD_DRV.f +++ b/model/RAD_DRV.f @@ -190,6 +190,9 @@ SUBROUTINE init_RAD(istart) use lakes_com, only : flake use seaice_com, only : si_atm use clouds_com, only : svlhx,svlat,rhsav +#ifdef CALC_MERRA2_LIKE_DIAGS + use rad_com, only : save_cosz2 +#endif !use clouds_com, only : lmid,lhi ! end section for radiation-only SCM IMPLICIT NONE @@ -1641,7 +1644,7 @@ SUBROUTINE RADIA #ifdef GCC_COUPLE_RAD * ,GCCco2_tracer_save,GCCco2rad_to_chem #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS * ,TAUW3D,TAUI3D #endif #ifdef mjo_subdd @@ -1670,7 +1673,7 @@ SUBROUTINE RADIA * cldmc,cldss,csizmc,csizss,llow,lmid,lhi,fss,taussip,csizssip * ,QLss,QIss,QLmc,QImc * ,get_cld_overlap ! subroutine -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS use clouds_com, only : cldss3d use constant, only : teeny #endif @@ -1768,8 +1771,8 @@ SUBROUTINE RADIA #endif use DIAG_COM, only: ij_nintaerext,ij_nintaersca,ij_nintaerasy use RADPAR, only: nintaerext,nintaersca,nintaerasy -#ifdef GCAP - use RAD_COM, only : save_alb +#ifdef CALC_MERRA2_LIKE_DIAGS + use RAD_COM, only : save_alb, save_cosz2 use O3mod, only : save_to3 #endif IMPLICIT NONE @@ -2074,6 +2077,9 @@ SUBROUTINE RADIA C**** Calculate mean cosine of zenith angle for the full radiation step ROT2=ROT1+TWOPI*NRAD*DTsrc/SECONDS_PER_DAY CALL COSZS (ROT1,ROT2,COSZ2,COSZA) +#ifdef CALC_MERRA2_LIKE_DIAGS + save_COSZ2 = COSZ2 +#endif JDAYR=dayOfYear JYEARR=YEAR @@ -2250,7 +2256,7 @@ SUBROUTINE RADIA cfmip_qci = 0. cfmip_qcl = 0. #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS tauw3d = 0. taui3d = 0. #endif @@ -2415,7 +2421,7 @@ SUBROUTINE RADIA IF(SVLAT(L,I,J).EQ.LHE) THEN TAUWC(L)=cldx*TAUMCL OPTDW=OPTDW+TAUWC(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS TAUW3D(I,J,L) = TAUW3D(I,J,L) + TAUMCL ! in-cloud vs. in-cell TAUWC(L) #endif call inc_ajl(i,j,l,jl_wcld,1d0) @@ -2434,7 +2440,7 @@ SUBROUTINE RADIA ELSE TAUIC(L)=cldx*TAUMCL OPTDI=OPTDI+TAUIC(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS TAUI3D(I,J,L) = TAUI3D(I,J,L) + TAUMCL ! in-cloud vs. in-cell TAUIC(L) #endif call inc_ajl(i,j,l,jl_icld,1d0) @@ -2458,7 +2464,7 @@ SUBROUTINE RADIA IF(SVLHX(L,I,J).EQ.LHE) THEN TAUWC(L)=cldx*TAUSSL OPTDW=OPTDW+TAUWC(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS TAUW3D(I,J,L) = TAUW3D(I,J,L) + TAUSSL ! in-cloud vs. in-cell TAUWC(L) #endif call inc_ajl(i,j,l,jl_wcld,1d0) @@ -2478,7 +2484,7 @@ SUBROUTINE RADIA SIZEIC(L)=CSIZSSIP(L,I,J) TAUIC(L)=cldx*TAUSSLIP OPTDI=OPTDI+TAUIC(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS TAUI3D(I,J,L) = TAUI3D(I,J,L) + TAUSSLIP ! in-cloud vs. in-cell TAUIC(L) #endif call inc_ajl(i,j,l,jl_icld,1d0) @@ -2497,7 +2503,7 @@ SUBROUTINE RADIA ELSE TAUIC(L)=cldx*TAUSSL OPTDI=OPTDI+TAUIC(L) -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS TAUI3D(I,J,L) = TAUI3D(I,J,L) + TAUSSL ! in-cloud vs. in-cell TAUIC(L) #endif call inc_ajl(i,j,l,jl_icld,1d0) @@ -4289,7 +4295,7 @@ SUBROUTINE RADIA enddo enddo -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS call find_groups('aijlh',grpids,ngroups) do igrp=1,ngroups subdd => subdd_groups(grpids(igrp)) @@ -5642,7 +5648,11 @@ subroutine sundial * ,HOURI,DATEI,MONTHI,YEARI use MODEL_COM, only: modelEclock, calendar use ModelClock_mod, only: ModelClock +#ifdef TRACERS_GC + use Tempus_mod +#else use Time_mod +#endif use BaseTime_mod use Rational_mod use TimeInterval_mod diff --git a/model/RAD_UTILS.f b/model/RAD_UTILS.f index 3a6f204e..5279fc63 100644 --- a/model/RAD_UTILS.f +++ b/model/RAD_UTILS.f @@ -3167,7 +3167,7 @@ module O3mod #ifdef HIGH_FREQUENCY_O3_INPUT type(timestream) :: OxHFstream,PSFforO3stream #endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS REAL*8, ALLOCATABLE :: save_to3(:,:) #endif !@dbparam use_sol_Ox_cycle if =1, a cycle of ozone is appled to @@ -3265,7 +3265,7 @@ subroutine UPDO3D(JYEARO,JJDAYO,O3JDAY,O3JREF) plbo3(:)=plbo3_traditional(:) endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS allocate(save_to3(grid%i_strt:grid%i_stop, & grid%j_strt:grid%j_stop)) save_to3 = 0. diff --git a/model/SUBDD.f b/model/SUBDD.f index 84620bda..1293c7c2 100644 --- a/model/SUBDD.f +++ b/model/SUBDD.f @@ -214,12 +214,6 @@ module subdd_mod !@dbparam LmaxSUBDD: the max L when writing "ALL" levels INTEGER :: LmaxSUBDD = LM - integer, parameter :: - & num_subdd_str = 18, subdd_strlen = 64, - & subddt_len = num_subdd_str*subdd_strlen - - character(len=subddt_len) :: subddt - !@type subdd_type a derived type holding control parameters, !@+ output metadata, and the timeseries for a given group type subdd_type @@ -300,11 +294,7 @@ module subdd_mod !@param subdd_ngroups_max maximum number of output groups per run !@+ (increase as necessary) -#ifdef COSP_SIM - integer, parameter :: subdd_ngroups_max=40 -#else integer, parameter :: subdd_ngroups_max=30 -#endif c SUSA only for MEEEEE c integer, parameter :: subdd_ngroups_max=50 c SUSA @@ -487,7 +477,7 @@ subroutine inc_subdd_3d(subdd,k,arr,jdim) endif call inc_subdd_alijh(subdd,k,arr) endif - case ('aijleh' ) + case ('aijleh','rijleh' ) call inc_subdd_aijleh(subdd,k,arr) case ('aijph') if(jdim_ .eq. 2) then @@ -1131,6 +1121,7 @@ subroutine create_group( & catshape,category,grpname, & namedd,kdd,is_inst, & diaglist,listlen,ndiags,dsize3_input) + use atm_com, only : lm_req use model_com, only : nday,dtsrc use model_com, only : itimei,itimee use resolution, only : lm ! temporary? @@ -1250,7 +1241,7 @@ subroutine create_group( & 'dist_im,dist_jm,lm_'//trim(grpname)// & ',nperiod_'//trim(grpname) endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS #ifdef CUBED_SPHERE subdd%tile_dim_out = 4 dimstr='(time,tile,lev,y,x) ;' @@ -1269,7 +1260,7 @@ subroutine create_group( do l=1,dsize3 lvlarr(l) = l enddo -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS call add_coord(subdd%cdl0,'lev',size(lvlarr), & long_name="levels", & units = "1", @@ -1291,7 +1282,7 @@ subroutine create_group( & 'dist_im,dist_jm,lm_'//trim(grpname)// & ',nperiod_'//trim(grpname) endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS #ifdef CUBED_SPHERE subdd%tile_dim_out = 4 dimstr='(time,tile,lev,y,x) ;' @@ -1310,7 +1301,7 @@ subroutine create_group( do l=1,dsize3 lvlarr(l) = l enddo -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS call add_coord(subdd%cdl0,'lev',size(lvlarr), & long_name="levels", & units = "1", @@ -1321,6 +1312,47 @@ subroutine create_group( #endif deallocate(lvlarr) + case('rijleh' ) + if(catshape.eq.'rijleh') then + dsize3 = lmaxsubdd+lm_req+1 + subdd%accshape = + & 'dist_im,dist_jm,lmaxsubdd+lm_req+1,nperiod_'//trim(grpname) + else + dsize3 = dsize3_input + subdd%accshape = + & 'dist_im,dist_jm,lm_'//trim(grpname)// + & ',nperiod_'//trim(grpname) + endif +#ifdef GCAP +#ifdef CUBED_SPHERE + subdd%tile_dim_out = 4 + dimstr='(time,tile,lev,y,x) ;' +#else + dimstr='(time,lev,lat,lon) ;' +#endif +#else +#ifdef CUBED_SPHERE + subdd%tile_dim_out = 4 + dimstr='(time,tile,level,y,x) ;' +#else + dimstr='(time,level,lat,lon) ;' +#endif +#endif + allocate(lvlarr(dsize3)) + do l=1,dsize3 + lvlarr(l) = l + enddo +#ifdef GCAP + call add_coord(subdd%cdl0,'lev',size(lvlarr), + & long_name="level edges", + & units = "1", + & coordvalues=lvlarr) +#else + call add_coord(subdd%cdl0,'level',size(lvlarr), + & coordvalues=lvlarr) +#endif + deallocate(lvlarr) + case('aijph') if( (.not.is_inst) .and. vinterp_using_timeavgs) then ! deferred vertical regridding of model-level accumulations @@ -1474,6 +1506,7 @@ subroutine parse_subdd !@+ and declare subdaily diag metadata and allocate space !@+ for requested outputs !@auth M. Kelley + use atm_com, only : lm_req use model_com, only : dtsrc,nday,itime use resolution, only : lm use constant, only : kapa @@ -1485,8 +1518,7 @@ subroutine parse_subdd & vinterp_using_timeavgs,write_monthly_files,write_one_file, & create_group,subdd_ngroups,subdd_ngroups_max,subdd_groups, & cdl_ijt,info_type,namedd_strlen,sname_strlen,itimei_subdd, - & lmaxsubdd,subdd_npres,subdd_pres,subdd_pk,aijph_l1,aijph_l2, - & subddt + & lmaxsubdd,subdd_npres,subdd_pres,subdd_pk,aijph_l1,aijph_l2 use ghy_com, only: ngm implicit none integer :: i,j,k,l,kk,listlen,idcat @@ -1500,6 +1532,34 @@ subroutine parse_subdd INTEGER :: Nsubdd = 0 !@var kddmax maximum number of sub-daily diags outputs INTEGER, PARAMETER :: kddmax = 110 +!@dbparam subdd string contains variables to save for sub-daily diags +!@dbparam subdd1 additional string of variables for sub-daily diags +!@dbparam subdd2 additional string of variables for sub-daily diags +!@dbparam subdd3 additional string of variables for sub-daily diags +!@dbparam subdd4 additional string of variables for sub-daily diags +!@dbparam subdd5 additional string of variables for sub-daily diags +!@dbparam subdd6 additional string of variables for sub-daily diags +!@dbparam subdd7 additional string of variables for sub-daily diags +!@dbparam subdd8 additional string of variables for sub-daily diags +!@dbparam subdd9 additional string of variables for sub-daily diags +!@dbparam subd10 additional string of variables for sub-daily diags +!@dbparam subd11 additional string of variables for sub-daily diags +!@dbparam subd12 additional string of variables for sub-daily diags +!@dbparam subd13 additional string of variables for sub-daily diags +!@dbparam subd14 additional string of variables for sub-daily diags +!@dbparam subd15 additional string of variables for sub-daily diags +!@dbparam subd16 additional string of variables for sub-daily diags +!@dbparam subd17 additional string of variables for sub-daily diags +C**** Note: for longer string increase MAX_CHAR_LENGTH in PARAM + CHARACTER*64 :: subdd="SLP", + & subdd1=" ", subdd2=" ", subdd3=" ", subdd4=" ", + & subdd5=" ", subdd6=" ", subdd7=" ", subdd8=" ", + & subdd9=" ", subd10=" ", subd11=" ", subd12=" ", + & subd13=" ", subd14=" ", subd15=" ", subd16=" ", + & subd17=" " +!@var subddt = subdd + subdd1,2,3 = all variables for sub-daily diags + CHARACTER*1169 :: subddt = " " + ! e.g. here, 1169=18*64+17 (18 subdds of length 64, +17 space separators) !@var namedd array of names of sub-daily diags character(len=namedd_strlen), DIMENSION(kddmax) :: namedd !@var kdd total number of sub-daily diags @@ -1563,10 +1623,39 @@ subroutine parse_subdd allowed_freqs_timeavg(10) = days_per_file allowed_freqs_timeavg(11) = days_per_file*nday + call sync_param( "subdd" ,subdd) + call sync_param( "subdd1" ,subdd1) + call sync_param( "subdd2" ,subdd2) + call sync_param( "subdd3" ,subdd3) + call sync_param( "subdd4" ,subdd4) + call sync_param( "subdd5" ,subdd5) + call sync_param( "subdd6" ,subdd6) + call sync_param( "subdd7" ,subdd7) + call sync_param( "subdd8" ,subdd8) + call sync_param( "subdd9" ,subdd9) + call sync_param( "subd10" ,subd10) + call sync_param( "subd11" ,subd11) + call sync_param( "subd12" ,subd12) + call sync_param( "subd13" ,subd13) + call sync_param( "subd14" ,subd14) + call sync_param( "subd15" ,subd15) + call sync_param( "subd16" ,subd16) + call sync_param( "subd17" ,subd17) call sync_param( "LmaxSUBDD",LmaxSUBDD) - call get_subdd_strings('database',-9999,subddt) - +c +c combine strings subdd, subdd1...4: +c + subddt=trim(subdd)//' '// + & trim(subdd1)//' '//trim(subdd2) + & //' '//trim(subdd3)//' '//trim(subdd4) + & //' '//trim(subdd5)//' '//trim(subdd6) + & //' '//trim(subdd7)//' '//trim(subdd8) + & //' '//trim(subdd9)//' '//trim(subd10) + & //' '//trim(subd11)//' '//trim(subd12) + & //' '//trim(subd13)//' '//trim(subd14) + & //' '//trim(subd15)//' '//trim(subd16) + & //' '//trim(subd17) c c count/parse names c @@ -1672,6 +1761,11 @@ subroutine parse_subdd input_sizes3(k) = lm+1 call ijleh_defs(diaglists(1,k),nmax_possible,diaglens(k)) + k = k + 1 + catshapes(k) = 'rijleh'; categories(k) = 'rijleh' + input_sizes3(k) = lm+lm_req+1 + call rijleh_defs(diaglists(1,k),nmax_possible,diaglens(k)) + k = k + 1 catshapes(k) = 'aijh'; categories(k) = 'rijh' input_sizes3(k) = 0 @@ -1725,6 +1819,18 @@ subroutine parse_subdd input_sizes3(k) = lm call tijph_defs(diaglists(1,k),nmax_possible,diaglens(k)) #endif +#ifdef TRACERS_GC + k = k + 1 + catshapes(k) = 'aijlh'; categories(k) = 'taijlh' + input_sizes3(k) = lm + call tijlh_defs(diaglists(1,k),nmax_possible,diaglens(k)) + + k = k + 1 + catshapes(k) = 'aijh'; categories(k) = 'taijh' + input_sizes3(k) = 0 + call tijh_defs(diaglists(1,k),nmax_possible,diaglens(k)) +#endif + c c check whether each requested diagnostic is in the list @@ -1800,45 +1906,6 @@ subroutine parse_subdd return end subroutine parse_subdd - subroutine get_subdd_strings(from,fid,subddt) - use subdd_mod, only : subddt_len,num_subdd_str,subdd_strlen - use dictionary_mod, only : sync_param - use domain_decomp_atm, only : grid - use pario, only : read_attr - implicit none - character(len=*) :: from - integer :: fid -!@var subddt = subdd + subdd1,2,3 = all variables for sub-daily diags - character(len=subddt_len) :: subddt -! -!@dbparam subdd string contains variables to save for sub-daily diags -!@+ -!@dbparam subdd1-subdd9, subd10-subd17 additional strings of requested output - - character(len=6) :: strnames(num_subdd_str) - character(len=subdd_strlen) :: str - integer :: n,idum - - strnames = (/ - & 'subdd ','subdd1','subdd2','subdd3','subdd4','subdd5', - & 'subdd6','subdd7','subdd8','subdd9','subd10','subd11', - & 'subd12','subd13','subd14','subd15','subd16','subd17' - & /) - - subddt = '' - do n=1,num_subdd_str - str = '' - if(from.eq.'database') then - call sync_param( trim(strnames(n)), str) - elseif(from.eq.'rsf') then - call read_attr(grid,fid,'cparam',trim(strnames(n)),idum,str) - endif - subddt = trim(subddt)//' '//trim(str) - enddo - subddt = adjustl(subddt) - - end subroutine get_subdd_strings - subroutine ijh_defs(arr,nmax,decl_count) c c 2D outputs @@ -1877,42 +1944,6 @@ subroutine ijh_defs(arr,nmax,decl_count) & units = 'C', & reduc = reduc_max & ) -c - arr(next()) = info_type_( - & sname = 'fireCount', - & lname = 'FIRE COUNT FOR DYN BIOBURN', - & units = 'm-2 s-1' - & ) -c - arr(next()) = info_type_( - & sname = 'FLAMM', - & lname = 'VEGETATION FLAMMABILITY', - & units = 'none' - & ) -c - arr(next()) = info_type_( - & sname = 'FLAMM_prec', - & lname = 'prec for FLAMMABILITY', - & units = 'mm/day' - & ) -c - arr(next()) = info_type_( - & sname = 'FLAMM_rh', - & lname = 'rh for FLAMMABILITY', - & units = 'none' - & ) -c - arr(next()) = info_type_( - & sname = 'FVDEN', - & lname = 'FIRE MODEL VEGETATION DENSITY', - & units = 'none' - & ) -c - arr(next()) = info_type_( - & sname = 'f_ignCG', - & lname = 'FRAC OF BB DUE TO CG LIGT IGN. ONLY', - & units = 'm-2 s-1' - & ) c arr(next()) = info_type_( & sname = 'wsavg', @@ -2283,22 +2314,6 @@ subroutine ijh_defs(arr,nmax,decl_count) & lname = 'Convective Cloud top pressure', & units = 'Pa' & ) -c -#ifdef CFMIP3_SUBDD - arr(next()) = info_type_( - & sname = 'tauus', - & lname = 'U COMPON OF MOMENTUM SRF DRAG', - & units = 'g/m*s^2', - & scale = 1d3 - & ) -c - arr(next()) = info_type_( - & sname = 'tauvs', - & lname = 'V COMPON OF MOMENTUM SRF DRAG', - & units = 'g/m*s^2', - & scale = 1d3 - & ) -#endif c arr(next()) = info_type_( & sname = 'r_w_mc', @@ -2360,7 +2375,7 @@ subroutine ijh_defs(arr,nmax,decl_count) & units = 'm' & ) c -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS arr(next()) = info_type_( & sname = 'PS', & lname = 'surface_pressure', @@ -2595,7 +2610,131 @@ subroutine ijh_defs(arr,nmax,decl_count) & sched = sched_rad & ) #endif - + +#ifdef TRACERS_GC + arr(next()) = info_type_( + & sname = 'SW_CH4', + & lname = 'toa_shortwave_methane_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_CH4', + & lname = 'toa_longwave_methane_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_N2O', + & lname = 'toa_shortwave_nitrous_oxide_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_N2O', + & lname = 'toa_longwave_nitrous_oxide_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_CFC11', + & lname = 'toa_shortwave_cfc11_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_CFC11', + & lname = 'toa_longwave_cfc11_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_CFC12', + & lname = 'toa_shortwave_cfc12_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_CFC12', + & lname = 'toa_longwave_cfc12_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_O3', + & lname = 'toa_shortwave_ozone_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_O3', + & lname = 'toa_longwave_ozone_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + + arr(next()) = info_type_( + & sname = 'SW_CH4_TP', + & lname = 'tropopause_shortwave_methane_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_CH4_TP', + & lname = 'tropopause_oa_longwave_methane_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_N2O_TP', + & lname = 'tropopause_shortwave_nitrous_oxide_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_N2O_TP', + & lname = 'tropopause_longwave_nitrous_oxide_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_CFC11_TP', + & lname = 'tropopause_shortwave_cfc11_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_CFC11_TP', + & lname = 'tropopause_longwave_cfc11_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_CFC12_TP', + & lname = 'tropopause_shortwave_cfc12_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_CFC12_TP', + & lname = 'tropopause_longwave_cfc12_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'SW_O3_TP', + & lname = 'tropopause_shortwave_ozone_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) + arr(next()) = info_type_( + & sname = 'LW_O3_TP', + & lname = 'tropopause_longwave_ozone_radiative_forcing', + & units = 'W m-2', + & sched = sched_rad + & ) +#endif + return contains integer function next() @@ -2760,9 +2899,6 @@ subroutine ijlh_defs(arr,nmax,decl_count) use subdd_mod, only : info_type,sched_rad ! info_type_ is a homemade structure constructor for older compilers use subdd_mod, only : info_type_ -#ifdef CFMIP3_SUBDD - use model_com, only : dtsrc -#endif use constant, only : bygrav,kapa implicit none integer :: nmax,decl_count @@ -2985,15 +3121,7 @@ subroutine ijlh_defs(arr,nmax,decl_count) & lname = 'APN on model levels', & units = 'cm-3' & ) -#ifdef CFMIP3_SUBDD - arr(next()) = info_type_( - & sname = 'mcamfx', - & lname = 'MC Air Mass Flux', - & units = 'kg/s', - & scale = 100.*bygrav/dtsrc - & ) -#endif -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS arr(next()) = info_type_( & sname = 'T', & lname = 'air_temperature', @@ -3084,6 +3212,7 @@ subroutine ijlh_defs(arr,nmax,decl_count) & units = 'kg kg-1 s-1' ! per grid-cell dry air & ) #endif + return contains integer function next() @@ -3109,7 +3238,7 @@ subroutine ijleh_defs(arr,nmax,decl_count) decl_count = 0 -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS arr(next()) = info_type_( & sname = 'CMFMC', & lname = 'cumulative_mass_flux', @@ -3145,6 +3274,94 @@ integer function next() end function next end subroutine ijleh_defs + subroutine rijleh_defs(arr,nmax,decl_count) +c +c 3D model-level edge outputs +c + use subdd_mod, only : info_type,sched_rad +! info_type_ is a homemade structure constructor for older compilers + use subdd_mod, only : info_type_ + use constant, only : bygrav,kapa + implicit none + integer :: nmax,decl_count + type(info_type) :: arr(nmax) +c +c note: next() is a locally declared function to increment decl_count +c + + decl_count = 0 + +#ifdef TRACERS_GC + arr(next()) = info_type_( + & sname = 'LW_FLUX', + & lname = 'net_upward_longwave_flux', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'SW_FLUX', + & lname = 'net_upward_shortwave_flux', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'LW_CH4_3D', + & lname = 'change_in_net_upward_longwave_flux_from_methane', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'SW_CH4_3D', + & lname = 'change_in_net_upward_shortwave_flux_from_methane', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'LW_N2O_3D', + & lname = 'change_in_net_upward_longwave_flux_from_n2o', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'SW_N2O_3D', + & lname = 'change_in_net_upward_shortwave_flux_from_n2o', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'LW_CFC11_3D', + & lname = 'change_in_net_upward_longwave_flux_from_cfc11', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'SW_CFC11_3D', + & lname = 'change_in_net_upward_shortwave_flux_from_cfc11', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'LW_CFC12_3D', + & lname = 'change_in_net_upward_longwave_flux_from_cfc12', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'SW_CFC12_3D', + & lname = 'change_in_net_upward_shortwave_flux_from_cfc12', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'LW_O3_3D', + & lname = 'change_in_net_upward_longwave_flux_from_ozone', + & units = 'W m-2' + & ) + arr(next()) = info_type_( + & sname = 'SW_O3_3D', + & lname = 'change_in_net_upward_shortwave_flux_from_ozone', + & units = 'W m-2' + & ) +#endif + + return + contains + integer function next() + decl_count = decl_count + 1 + next = decl_count + end function next + end subroutine rijleh_defs + subroutine get_subdd_vinterp_coeffs use geom, only : imaxj use resolution, only : lm @@ -3735,30 +3952,17 @@ end subroutine write_subdd_accfile subroutine read_subdd_rsf(fname) use subdd_mod, only : subdd_groups,subdd_ngroups,rsf_save - use subdd_mod, only : subddt,subddt_len - use domain_decomp_atm, only : grid,am_i_root + use domain_decomp_atm, only : grid use pario, only : par_open,par_close - use pario, only : read_dist_data,read_data,read_attr - use dictionary_mod, only : get_param,is_set_param + use pario, only : read_dist_data,read_data use mdiag_com, only : sname_strlen implicit none character(len=*) :: fname integer fid !@var fid unit number of read/write integer :: n character(len=sname_strlen) :: grpname - character(len=subddt_len) :: subddt_rsf - logical :: do_read(4) if(subdd_ngroups.le.0) return fid = par_open(grid,trim(fname),'read') - ! todo: add additional difference checks - call get_subdd_strings('rsf',fid,subddt_rsf) - do_read = (/ - & trim(subddt) == trim(subddt_rsf), - & rsf_equals_db_int('nsubdd'), - & rsf_equals_db_int('subdd_npres'), - & rsf_equals_db_int('lmaxsubdd') - & /) - if(all(do_read)) then do n=1,subdd_ngroups grpname = subdd_groups(n)%grpname call read_data(grid,fid,'nacc_'//trim(grpname), @@ -3771,29 +3975,9 @@ subroutine read_subdd_rsf(fname) & subdd_groups(n)%v5d) endif enddo - else - if(am_i_root()) then - write(6,*) 'WARNING: skipping rsf read of subdd info '// - & 'because request list has changed' - write(6,*) do_read - endif - endif call par_close(grid,fid) rsf_save = fname return - contains - logical function rsf_equals_db_int(parname) - character(len=*) :: parname - ! - integer :: val_rsf,val_db - - val_rsf = 0; val_db = 0 - call read_attr(grid,fid,'iparam',trim(parname),n,val_rsf) - if(is_set_param(trim(parname))) then - call get_param(trim(parname) ,val_db) - endif - rsf_equals_db_int = val_rsf == val_db - end function rsf_equals_db_int end subroutine read_subdd_rsf subroutine read_subdd_rsf1(subdd) diff --git a/model/SURFACE.f b/model/SURFACE.f index 5449c33f..a25ac2d4 100644 --- a/model/SURFACE.f +++ b/model/SURFACE.f @@ -1326,7 +1326,7 @@ SUBROUTINE SURFACE enddo; enddo call inc_subdd(subdd,k,sddarr2d) C -#ifdef GCAP +#ifdef CALC_MERRA2_LIKE_DIAGS case ('FRSEAICE') ! Based on FOICE sddarr2d(:,:)=RSI(:,:)*FOCEAN(:,:) diff --git a/model/dd2d/do_generic.inc b/model/dd2d/do_generic.inc index 057cafa6..b3c7dd29 100644 --- a/model/dd2d/do_generic.inc +++ b/model/dd2d/do_generic.inc @@ -44,7 +44,7 @@ call write_dist_data(handle%grid, handle%fileId, variableName, & & arr, jdim=jdim, no_xdim=no_xdim) case ('default') - call stop_model('NetCdFHandle::do() unsupported option for iAction.') + call stop_model('NetCdFHandle::do() unsupported option for iAction.', 1) end select end subroutine _PROC_NAME_ diff --git a/model/dd2d/pario_nc.f b/model/dd2d/pario_nc.f index 95cdacfd..199dc888 100644 --- a/model/dd2d/pario_nc.f +++ b/model/dd2d/pario_nc.f @@ -776,10 +776,14 @@ end subroutine par_write_nc_2D_logical subroutine stoprc(rc,rc_ok) integer :: rc,rc_ok - integer :: mpi_err #ifndef SERIAL_MODE - call mpi_bcast(rc,1,MPI_INTEGER,0,MPI_COMM_WORLD,mpi_err) + integer :: mpi_err + integer :: rank + ! No need to broadcast error codes, just abort from the root MPI rank + call mpi_comm_rank(MPI_COMM_WORLD,rank,mpi_err) + if (rank == 0) then if(rc.ne.rc_ok) call mpi_abort(MPI_COMM_WORLD,1,mpi_err) + end if #else if(rc.ne.rc_ok) stop #endif diff --git a/model/geos-chem/CMakeLists.txt b/model/geos-chem/CMakeLists.txt new file mode 100644 index 00000000..4b1f1d72 --- /dev/null +++ b/model/geos-chem/CMakeLists.txt @@ -0,0 +1,358 @@ +# GISS-GC high-level CMakeLists.txt + +cmake_minimum_required(VERSION 3.13) +project(GISS-GC + VERSION 14.4.3 + LANGUAGES Fortran +) + +#----------------------------------------------------------------------------- +# Set CMake policies. For more information, see: +# +# https://cmake.org/cmake/help/latest/policy/CMP0054.html +# https://cmake.org/cmake/help/latest/policy/CMP0057.html +# https://cmake.org/cmake/help/latest/policy/CMP0074.html +# https://cmake.org/cmake/help/latest/policy/CMP0079.html +#----------------------------------------------------------------------------- +cmake_policy(SET CMP0054 NEW) +cmake_policy(SET CMP0057 NEW) +if(POLICY CMP0074) + cmake_policy(SET CMP0074 NEW) +endif() +if(POLICY CMP0079) + cmake_policy(SET CMP0079 NEW) +endif() + +#----------------------------------------------------------------------------- +# Add CMakeScripts/ to the module path and import helper functions +#----------------------------------------------------------------------------- +list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_SOURCE_DIR}/CMakeScripts) +include(GC-Helpers) + +#----------------------------------------------------------------------------- +# Print header with the CMake project version and the GC repo version +#----------------------------------------------------------------------------- +get_repo_version(GC_REPO_VERSION ${CMAKE_CURRENT_SOURCE_DIR}) +message("=================================================================") +message("GISS-GC ${PROJECT_VERSION} (superproject wrapper)") +message("Current status: ${GC_REPO_VERSION}") +message("=================================================================") + +#----------------------------------------------------------------------------- +# Declare the GEOSChemBuildProperties +# +# All GEOS-Chem targets depend on this. This is used to control +# the compiler options and definitions for GEOS-Chem targets +# (via inheritance). +#----------------------------------------------------------------------------- +add_library(GEOSChemBuildProperties INTERFACE) + +set(GEOSChem_DETECTED_FORTRAN_COMPILER_ID ${CMAKE_Fortran_COMPILER_ID} + CACHE INTERNAL "Logging the COMPILER_ID to CMakeCache.txt" +) +set(GEOSChem_DETECTED_FORTRAN_COMPILER_VERSION ${CMAKE_Fortran_COMPILER_VERSION} + CACHE INTERNAL "Logging the compiler version to CMakeCache.txt" +) + +set(GEOSChem_Fortran_FLAGS_Intel + -cpp -w -auto -noalign "SHELL:-convert big_endian" "SHELL:-fp-model source" + -mcmodel=medium -shared-intel -traceback -DLINUX_IFORT + CACHE STRING "GEOSChem compiler flags for all build types with Intel compilers" +) +set(GEOSChem_Fortran_FLAGS_RELEASE_Intel + -O2 + CACHE STRING "GEOSChem compiler flags for build type Release with Intel compilers" +) +set(GEOSChem_Fortran_FLAGS_RELWITHDEBINFO_Intel + -O2 + CACHE STRING "GEOSChem compiler flags for build type RelWithdDebInfo with Intel compilers" +) +set(GEOSChem_Fortran_FLAGS_DEBUG_Intel + -g -O0 "SHELL:-check arg_temp_created" "SHELL:-debug all" -fpe0 -ftrapuv -check,bounds + CACHE STRING "GEOSChem compiler flags for build type Debug with Intel compilers" +) + +set(GEOSChem_Fortran_FLAGS_GNU + -cpp -w -std=legacy -fautomatic -fno-align-commons + -fconvert=big-endian -fno-range-check -mcmodel=medium + -fbacktrace -g -DLINUX_GFORTRAN -ffree-line-length-none + CACHE STRING "GEOSChem compiler flags for all build types with GNU compilers" +) +set(GEOSChem_Fortran_FLAGS_RELEASE_GNU + -O3 -funroll-loops + CACHE STRING "GEOSChem compiler flags for build type Release with GNU compilers" +) +set(GEOSChem_Fortran_FLAGS_RELWITHDEBINFO_GNU + -O3 -funroll-loops + CACHE STRING "GEOSChem compiler flags for build type RelWithDebInfo with GNU compilers" +) +set(GEOSChem_Fortran_FLAGS_DEBUG_GNU + -g -O0 -Wall -Wextra -Wconversion -Warray-temporaries + -fcheck=array-temps -ffpe-trap=invalid,zero,overflow -finit-real=snan + -fcheck=bounds -fcheck=pointer + CACHE STRING "GEOSChem compiler flags for build type Debug with GNU compilers" +) + +set(GEOSChem_SUPPORTED_COMPILER_IDS "Intel" "GNU") +if(NOT CMAKE_Fortran_COMPILER_ID IN_LIST GEOSChem_SUPPORTED_COMPILER_IDS) + message(FATAL_ERROR "GEOSChem does not support ${CMAKE_Fortran_COMPILER_ID} compilers") +endif() + +#--------------------------------------------------------------------- +# Assign comiler options to build properties +#--------------------------------------------------------------------- +target_compile_options(GEOSChemBuildProperties + INTERFACE + $<$: + ${GEOSChem_Fortran_FLAGS_Intel} + $<$:${GEOSChem_Fortran_FLAGS_DEBUG_Intel}> + $<$:${GEOSChem_Fortran_FLAGS_RELWITHDEBINFO_Intel}> + $<$:${GEOSChem_Fortran_FLAGS_RELEASE_Intel}> + > + $<$: + ${GEOSChem_Fortran_FLAGS_GNU} + $<$:${GEOSChem_Fortran_FLAGS_DEBUG_GNU}> + $<$:${GEOSChem_Fortran_FLAGS_RELWITHDEBINFO_GNU}> + $<$:${GEOSChem_Fortran_FLAGS_RELEASE_GNU}> + > +) + +#----------------------------------------------------------------------------- +# Put all of GEOS-Chem's mod files in build subdir called mod +#----------------------------------------------------------------------------- +set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod) +target_include_directories(GEOSChemBuildProperties + INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/mod +) + +#----------------------------------------------------------------------------- +# Find nc-config and nf-config and add to CMAKE_PREFIX_PATH +#----------------------------------------------------------------------------- +find_program(NC_CONFIG NAMES "nc-config" DOC "Location of nc-config utility") +find_program(NF_CONFIG NAMES "nf-config" DOC "Location of nf-config utility") + +# A function to call nx-config with an argument, and append the resulting +# path to a list +function(inspect_netcdf_config VAR NX_CONFIG ARG) + execute_process( + COMMAND ${NX_CONFIG} ${ARG} + OUTPUT_VARIABLE NX_CONFIG_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(EXISTS "${NX_CONFIG_OUTPUT}") + list(APPEND ${VAR} ${NX_CONFIG_OUTPUT}) + set(${VAR} ${${VAR}} PARENT_SCOPE) + endif() +endfunction() + +inspect_netcdf_config(CMAKE_PREFIX_PATH "${NC_CONFIG}" "--prefix") +inspect_netcdf_config(CMAKE_PREFIX_PATH "${NF_CONFIG}" "--prefix") + +#----------------------------------------------------------------------------- +# Append GEOS-Chem's environment variables to CMAKE_PREFIX_PATH +#----------------------------------------------------------------------------- +list(APPEND CMAKE_PREFIX_PATH + # Possible NetCDF environment variables + $ENV{NetCDF_F_ROOT} $ENV{NetCDF_C_ROOT} $ENV{NetCDF_ROOT} + $ENV{NETCDF_F_ROOT} $ENV{NETCDF_C_ROOT} $ENV{NETCDF_ROOT} + $ENV{NetCDF_Fortran_ROOT} + $ENV{NETCDF_FORTRAN_ROOT} + + # Possible GEOS-Chem's environmnet variables + $ENV{GC_F_BIN} $ENV{GC_BIN} + $ENV{GC_F_INCLUDE} $ENV{GC_INCLUDE} + $ENV{GC_F_LIB} $ENV{GC_LIB} +) + +#----------------------------------------------------------------------------- +# Link NetCDF-F to GEOSChemBuildProperties +#----------------------------------------------------------------------------- +find_package(NetCDF REQUIRED) +target_include_directories(GEOSChemBuildProperties INTERFACE + ${NETCDF_INCLUDE_DIRS} +) +# Not sure if HCOI should be here... +target_link_libraries(GEOSChemBuildProperties INTERFACE + ${NETCDF_LIBRARIES} +) + +#----------------------------------------------------------------------------- +# Use the NC_HAS_COMPRESSION def if nf_def_var_deflate is in netcdf.inc +#----------------------------------------------------------------------------- +if(EXISTS ${NETCDF_F77_INCLUDE_DIR}/netcdf.inc) + file(READ ${NETCDF_F77_INCLUDE_DIR}/netcdf.inc NCINC) + if("${NCINC}" MATCHES ".*nf_def_var_deflate.*") + target_compile_definitions(GEOSChemBuildProperties + INTERFACE "NC_HAS_COMPRESSION" + ) + endif() +endif() + +#----------------------------------------------------------------------------- +# For GEOS-Chem Classic only +#----------------------------------------------------------------------------- +if(NOT GC_EXTERNAL_CONFIG) + + # This conditional block configures the GEOS-Chem build + # for GEOS-Chem Classic. As mentioned above, it sets + # GCCLASSIC_EXE_TARGETS, RRTMG, GTMM, TOMAS, MECH, and + # GCHP, and it configures the GEOSChemBuildProperties. + + # Set CMAKE_BUILD_TYPE to Release by default + if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" + CACHE STRING + "Set the build type" + FORCE + ) + endif() + + # Display CMAKE_PREFIX_PATH and CMAKE_BUILD_TYPE + gc_pretty_print(SECTION "Useful CMake variables") + gc_pretty_print(VARIABLE CMAKE_PREFIX_PATH) + gc_pretty_print(VARIABLE CMAKE_BUILD_TYPE) + + # Get the run directory + gc_pretty_print(SECTION "Run directory setup") + + # Run directory + set(RUNDIR "" CACHE PATH "Path(s) to run directory (semicolon separated list). Specifies install locations for gchp") + set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Fake CMAKE_INSTALL_PREFIX (use RUNDIR instead)" FORCE) + set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT FALSE) + gc_pretty_print(VARIABLE RUNDIR) + + # Configure for GISS-GC + include(GC-ConfigureGISS-GC) + configureGISS_GC() + +endif() + +#----------------------------------------------------------------------------- +# Set high-level logicals for using this repository +#----------------------------------------------------------------------------- +set(GCCLASSIC_WRAPPER TRUE) +set(GC_EXTERNAL_CONFIG FALSE) +set(HEMCO_EXTERNAL_CONFIG TRUE) +set(CLOUDJ_EXTERNAL_CONFIG TRUE) +set(HETP_EXTERNAL_CONFIG TRUE) + +#----------------------------------------------------------------------------- +# Add the directory with source code +#----------------------------------------------------------------------------- +add_subdirectory(src) + +#----------------------------------------------------------------------------- +# Write GEOSChemBuildProperties's configuration to a file +#----------------------------------------------------------------------------- +get_target_property(BT_DEFINITIONS GEOSChemBuildProperties + INTERFACE_COMPILE_DEFINITIONS +) +get_target_property(BT_OPTIONS GEOSChemBuildProperties + INTERFACE_COMPILE_OPTIONS +) +get_target_property(BT_LIBRARIES GEOSChemBuildProperties + INTERFACE_LINK_LIBRARIES +) +get_target_property(BT_INCLUDES GEOSChemBuildProperties + INTERFACE_INCLUDE_DIRECTORIES +) +file(WRITE ${CMAKE_BINARY_DIR}/GEOSChemBuildProperties.txt + "# This file shows the GEOSChemBuildProperties's configuration.\n" + "\n" + "GEOSChemBuildProperties::INTERFACE_COMPILE_DEFINITIONS:${BT_DEFINITIONS}\n" + "GEOSChemBuildProperties::INTERFACE_COMPILE_OPTIONS:${BT_OPTIONS}\n" + "GEOSChemBuildProperties::INTERFACE_LINK_LIBRARIES:${BT_LIBRARIES}\n" + "GEOSChemBuildProperties::INTERFACE_INCLUDE_DIRECTORIES:${BT_INCLUDES}\n" +) + +#----------------------------------------------------------------------------- +# Try to compile a simple program that uses NetCDF-Fortran and OpenMP +#----------------------------------------------------------------------------- +if(NOT GC_EXTERNAL_CONFIG AND NOT GC_TRY_RUN_PASSED) + + # Try to compile and run try_compile.F90 + try_run(RUN_FAILED COMPILED_OK + ${CMAKE_CURRENT_BINARY_DIR}/try_compile # binary dir + ${CMAKE_CURRENT_SOURCE_DIR}/CMakeScripts/try_compile.F90 # test src file + LINK_LIBRARIES ${BT_LIBRARIES} + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${BT_INCLUDES}" # include dirs + COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT + RUN_OUTPUT_VARIABLE RUN_OUTPUT + ) + + # Display a warning if its compilation failed + if(NOT COMPILED_OK) + if(OMP) + set(CONDITIONAL_AND_OMP " and OpenMP") + endif() + message(WARNING + "Failed to compile a simple program that uses " + "NetCDF-Fortran ${CONDITIONAL_AND_OMP}! Could " + "your NetCDF installation be broken?\nSee " + "\"FailedCompile.txt\" for more info." + ) + file(WRITE ${CMAKE_BINARY_DIR}/FailedCompile.txt + "${COMPILE_OUTPUT}" + ) + else() + file(REMOVE ${CMAKE_BINARY_DIR}/FailedCompile.txt) + endif() + + # Display a warning if its execution failed + if(RUN_FAILED) + if(OMP) + set(CONDITIONAL_AND_OMP "and OpenMP ") + endif() + message(WARNING + "A simple program that uses NetCDF-Fortran " + "${CONDITIONAL_AND_OMP}compiled successfully, " + "but its execution failed!\n\nSee " + "\"FailedExecution.txt\" for more info." + ) + file(WRITE ${CMAKE_BINARY_DIR}/FailedEasyRun.txt + "${COMPILE_OUTPUTS}\n${RUN_OUTPUT}" + ) + else() + file(REMOVE ${CMAKE_BINARY_DIR}/FailedEasyRun.txt + ${CMAKE_BINARY_DIR}/simple_xy.nc + ) + set(GC_TRY_RUN_PASSED TRUE CACHE INTERNAL + "try_run passed" FORCE + ) + endif() +endif() + +#----------------------------------------------------------------------------- +# Copy build information files to each RUNDIR and INSTALLCOPY directory +#---------------------------------------------------------------------------- +set(COMBINED_INSTALL_DIRS "") +list(APPEND COMBINED_INSTALL_DIRS ${RUNDIR}) +list(APPEND COMBINED_INSTALL_DIRS ${INSTALLCOPY}) + +# Install to run directories +foreach(INSTALL_PATH ${COMBINED_INSTALL_DIRS}) + if(INSTALL_PATH IN_LIST RUNDIR) + set(CHECK_IS_RUNDIR TRUE) + else() + set(CHECK_IS_RUNDIR FALSE) + endif() + + # Convert INSTALL_PATH to absolute + if(NOT IS_ABSOLUTE "${INSTALL_PATH}") + get_filename_component(INSTALL_PATH "${INSTALL_PATH}" ABSOLUTE BASE_DIR "${CMAKE_BINARY_DIR}") + endif() + # Issue warning and skip if geoschem_config.yml doesn't exist + # (i.e. if it doens't look like a run directory) + if(CHECK_IS_RUNDIR AND (NOT EXISTS ${INSTALL_PATH}/geoschem_config.yml)) + message(WARNING + "RUNDIR path \"${INSTALL_PATH}\" " + "doesn't have geoschem_config.yml. Is it a run directory? If it " + "isn't, and you still want to install to it, you should " + "use INSTALLCOPY rather than RUNDIR.\nSkipping installing to " + "${INSTALL_PATH}" + ) + else() + install(FILES ${CMAKE_BINARY_DIR}/CMakeCache.txt DESTINATION ${INSTALL_PATH}/build_info) + install(PROGRAMS ${CMAKE_SOURCE_DIR}/CMakeScripts/summarize_build DESTINATION ${INSTALL_PATH}/build_info) + endif() +endforeach() diff --git a/model/geos-chem/CMakeScripts/FindNetCDF.cmake b/model/geos-chem/CMakeScripts/FindNetCDF.cmake new file mode 100755 index 00000000..7db8b54a --- /dev/null +++ b/model/geos-chem/CMakeScripts/FindNetCDF.cmake @@ -0,0 +1,182 @@ +#[[ FindNetCDF.cmake + +This module finds NetCDF-C and NetCDF-F. It uses nc-config and nf-config to +get HINTS for the find_xxxx's that are used to find the files/directories +listed below. + +If a file or directory cannot be found, the user should add the appropriate +directories to CMAKE_PREFIX_PATH. + +Resulting variables: + NETCDF_F_LIBRARY: Path to libnetcdff.so + NETCDF_C_LIBRARY: Path to libnetcdf.so + NETCDF_C_INCLUDE_DIR: Path to the directory containing netcdf.h + NETCDF_F90_INCLUDE_DIR: Path to the directory containing netcdf.mod + NETCDF_F77_INCLUDE_DIR: Path to the directory containing netcdf.inc + + NETCDF_LIBRARIES: Paths to all of NetCDF's libraries + NETCDF_INCLUDE_DIRS: Paths to all of NetCDF's include directories. + +]] + + +# Find the nc-config and nf-config programs +find_program(NC_CONFIG NAMES "nc-config" DOC "Location of nc-config utility") +find_program(NF_CONFIG NAMES "nf-config" DOC "Location of nf-config utility") + + +# A function to call nx-config with an argument, and append the resulting path to a list +function(inspect_netcdf_config VAR NX_CONFIG ARG) + execute_process( + COMMAND ${NX_CONFIG} ${ARG} + RESULT_VARIABLE NX_CONFIG_RET + OUTPUT_VARIABLE NX_CONFIG_OUTPUT + ERROR_VARIABLE NX_CONFIG_STDERR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(EXISTS "${NX_CONFIG_OUTPUT}") + list(APPEND ${VAR} ${NX_CONFIG_OUTPUT}) + set(${VAR} ${${VAR}} PARENT_SCOPE) + endif() +endfunction() + +# Determine HINTS for netcdf.h +set(NC_INC_HINTS "") +inspect_netcdf_config(NC_INC_HINTS "${NC_CONFIG}" --includedir) +inspect_netcdf_config(NC_INC_HINTS "${NC_CONFIG}" --prefix) +# Find netcdf.h +find_path(NETCDF_C_INCLUDE_DIR + netcdf.h + DOC "Directory containing \"netcdf.h\"" + HINTS + ${NC_INC_HINTS} + PATH_SUFFIXES + "include" +) + +# Determine HINTS for netcdf.mod +set(NF_INC_HINTS "") +inspect_netcdf_config(NF_INC_HINTS "${NF_CONFIG}" --includedir) +inspect_netcdf_config(NF_INC_HINTS "${NF_CONFIG}" --prefix) +# Find netcdf.mod +find_path(NETCDF_F90_INCLUDE_DIR + netcdf.mod + DOC "Directory containing \"netcdf.mod\"" + HINTS + ${NF_INC_HINTS} + PATH_SUFFIXES + "include" + "mod" + "module" +) +# Find netcdf.inc +find_path(NETCDF_F77_INCLUDE_DIR + netcdf.inc + DOC "Directory containing \"netcdf.inc\"" + HINTS + ${NF_INC_HINTS} + PATH_SUFFIXES + "include" + "mod" + "module" +) + +# Determine HINTS for NetCDF-C's library +set(NC_LIBDIR_HINTS "") +inspect_netcdf_config(NC_LIBDIR_HINTS "${NC_CONFIG}" --libdir) +inspect_netcdf_config(NC_LIBDIR_HINTS "${NC_CONFIG}" --prefix) +# Find libnetcdf.so +find_library(NETCDF_C_LIBRARY + netcdf + DOC "Path to \"libnetcdf\"" + HINTS + ${NC_LIBDIR_HINTS} + PATH_SUFFIXES + "lib" +) + +# Determine HINTS for NetCDF-F's library +set(NF_LIBDIR_HINTS "") +inspect_netcdf_config(NF_LIBDIR_HINTS "${NF_CONFIG}" --libdir) +inspect_netcdf_config(NF_LIBDIR_HINTS "${NF_CONFIG}" --prefix) +# Find libnetcdff.so +find_library(NETCDF_F_LIBRARY + netcdff + DOC "Path to \"libnetcdff\"" + HINTS + ${NF_LIBDIR_HINTS} + PATH_SUFFIXES + "lib" +) + +# Make a readable error message +set(NetCDF_ERRMSG "\nCounldn't find one or more of NetCDF's files! The following files/directories weren't found:") +if(NOT NETCDF_F_LIBRARY) + set(NetCDF_ERRMSG "${NetCDF_ERRMSG} + NETCDF_F_LIBRARY: Path to \"libnetcdff.so\"") +endif() +if(NOT NETCDF_C_LIBRARY) + set(NetCDF_ERRMSG "${NetCDF_ERRMSG} + NETCDF_C_LIBRARY: Path to \"libnetcdf.so\"") +endif() +if(NOT NETCDF_C_INCLUDE_DIR) + set(NetCDF_ERRMSG "${NetCDF_ERRMSG} + NETCDF_C_INCLUDE_DIR: Directory containing \"netcdf.h\"") +endif() +if(NOT NETCDF_F90_INCLUDE_DIR) + set(NetCDF_ERRMSG "${NetCDF_ERRMSG} + NETCDF_F90_INCLUDE_DIR: Directory containing \"netcdf.mod\"") +endif() +if(NOT NETCDF_F77_INCLUDE_DIR) + set(NetCDF_ERRMSG "${NetCDF_ERRMSG} + NETCDF_F77_INCLUDE_DIR: Directory containing \"netcdf.inc\"") +endif() +set(NetCDF_ERRMSG "${NetCDF_ERRMSG}\nFind the directories/files that are listed above. Specify the directories you want CMake to search with the CMAKE_PREFIX_PATH variable (or the NetCDF_ROOT environment variable).\n") + +# Conform to the find_package standards +include (FindPackageHandleStandardArgs) +find_package_handle_standard_args(NetCDF + REQUIRED_VARS + NETCDF_F_LIBRARY + NETCDF_C_LIBRARY + NETCDF_C_INCLUDE_DIR + NETCDF_F90_INCLUDE_DIR + NETCDF_F77_INCLUDE_DIR + FAIL_MESSAGE "${NetCDF_ERRMSG}" +) +mark_as_advanced( + NC_CONFIG + NF_CONFIG + NETCDF_F_LIBRARY + NETCDF_C_LIBRARY + NETCDF_C_INCLUDE_DIR + NETCDF_F90_INCLUDE_DIR + NETCDF_F77_INCLUDE_DIR +) + +# Set NETCDF_LIBRARIES NETCDF_INCLUDE_DIRS +set(NETCDF_LIBRARIES ${NETCDF_F_LIBRARY} ${NETCDF_C_LIBRARY}) +set(NETCDF_INCLUDE_DIRS ${NETCDF_F90_INCLUDE_DIR} ${NETCDF_F77_INCLUDE_DIR} ${NETCDF_C_INCLUDE_DIR}) + +if(NOT TARGET NetCDF-C) + add_library(NetCDF-C SHARED IMPORTED) + set_property(TARGET NetCDF-C + PROPERTY IMPORTED_LOCATION ${NETCDF_C_LIBRARY} + ) + set_property(TARGET NetCDF-C + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${NETCDF_C_INCLUDE_DIR} + ) +endif() + +if(NOT TARGET NetCDF-F) + add_library(NetCDF-F SHARED IMPORTED) + set_property(TARGET NetCDF-F + PROPERTY IMPORTED_LOCATION ${NETCDF_F_LIBRARY} + ) + set_property(TARGET NetCDF-F + PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${NETCDF_F90_INCLUDE_DIR} ${NETCDF_F77_INCLUDE_DIR} + ) + set_property(TARGET NetCDF-F + PROPERTY INTERFACE_LINK_LIBRARIES NetCDF-C + ) +endif() diff --git a/model/geos-chem/CMakeScripts/GC-ConfigureClassic.cmake b/model/geos-chem/CMakeScripts/GC-ConfigureClassic.cmake new file mode 100755 index 00000000..dc116d36 --- /dev/null +++ b/model/geos-chem/CMakeScripts/GC-ConfigureClassic.cmake @@ -0,0 +1,278 @@ +function(configureGCClassic) + + #------------------------------------------------------------------------- + # Find OpenMP if we're building a multithreaded executable + #------------------------------------------------------------------------- + gc_pretty_print(SECTION "Threading") + set(OMP ON CACHE STRING + "Switch to enable/disable OpenMP threading in GEOS-Chem" + ) + gc_pretty_print(VARIABLE OMP IS_BOOLEAN) + if("${OMP}") + set(NO_OMP "OFF" CACHE STRING "Boolean opposite of the OMP switch, needed for backwards compatibility") + find_package(OpenMP REQUIRED) + ####################################################################### + # NOTE: Newer versions of CMake (maybe > 3.8) prefer OpenMP::OpenMP + # rather than ${OpenMP_Fortran_FLAGS} to specify compilation options + # for OpenMP. However, this is not supported in older versions. + # For backwards compatibility, especially with Azure DevOps, we will + # leave the new syntax commented out. It can be restored later. + # + # -- Bob Yantosca (28 Jul 2020) + # target_compile_options(HEMCOBuildProperties + # INTERFACE OpenMP::OpenMP_Fortran + # ) + # target_link_libraries(HEMCOBuildProperties + # INTERFACE OpenMP::OpenMP_Fortran + # ) + ####################################################################### + target_compile_options(GEOSChemBuildProperties + INTERFACE ${OpenMP_Fortran_FLAGS} + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE ${OpenMP_Fortran_FLAGS} + ) + else() + set(NO_OMP "ON" CACHE STRING + "Boolean opposite of the OMP switch, for backwards compatibility") + target_compile_definitions(GEOSChemBuildProperties + INTERFACE "NO_OMP" + ) + endif() + + # Header for next section + gc_pretty_print(SECTION "General settings") + + #------------------------------------------------------------------------- + # Make MECH an option. This controls which KPP directory is used. + #------------------------------------------------------------------------- + set(MECH "fullchem" CACHE STRING "Name of the chemistry mechanism to use") + gc_pretty_print(VARIABLE MECH OPTIONS "fullchem" "carbon" "Hg" "custom") + + #------------------------------------------------------------------------- + # Turn on bpch diagnostics? + #------------------------------------------------------------------------- + set(BPCH_DIAG "OFF" CACHE BOOL + "Switch to enable GEOS-Chem's bpch diagnostics" + ) + gc_pretty_print(VARIABLE BPCH_DIAG IS_BOOLEAN) + if(${BPCH_DIAG}) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE BPCH_DIAG + ) + endif() + + #------------------------------------------------------------------------- + # Set USE_REAL8 as cache variable so as to not override existing definition + # See https://github.com/geoschem/geos-chem/issues/43. + #------------------------------------------------------------------------- + set(USE_REAL8 ON CACHE BOOL + "Switch to set flexible precision 8-byte floating point real" + ) + gc_pretty_print(VARIABLE USE_REAL8 IS_BOOLEAN) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE $<$:USE_REAL8> + ) + + #------------------------------------------------------------------------- + # Add code sanitization options (GNU Fortran only) + # We need to add these options to both compiler & linker. + #------------------------------------------------------------------------- + set(SANITIZE OFF CACHE BOOL + "Switch to turn on code sanitation (i.e. identify memory leaks and similar conditions)" + ) + gc_pretty_print(VARIABLE SANITIZE IS_BOOLEAN) + if(${SANITIZE}) + if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") + target_compile_options(GEOSChemBuildProperties + INTERFACE "-fsanitize=address" + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE "-fsanitize=address" + ) + target_compile_options(GEOSChemBuildProperties + INTERFACE "-fsanitize=leak" + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE "-fsanitize=leak" + ) + target_compile_options(GEOSChemBuildProperties + INTERFACE "-fsanitize=undefined" + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE "-fsanitize=undefined" + ) + else() + message( FATAL_ERROR "The SANITIZE option is only defined for GNU Fortran.") + endif() + endif() + + #------------------------------------------------------------------------- + # Always set MODEL_CLASSIC when building GEOS-Chem Classic + #------------------------------------------------------------------------- + target_compile_definitions(GEOSChemBuildProperties + INTERFACE MODEL_ MODEL_GISS MODEL_CLASSIC EXTERNAL_GRID EXTERNAL_FORCINGS + ) + + # Header for next section + gc_pretty_print(SECTION "Components") + + #------------------------------------------------------------------------- + # Build TOMAS + #------------------------------------------------------------------------- + set(TOMAS "OFF" CACHE BOOL "Switch to enable TOMAS") + set(TOMAS_BINS "NA" CACHE STRING "Number of TOMAS bins (only used if TOMAS is true)") + gc_pretty_print(VARIABLE TOMAS IS_BOOLEAN) + gc_pretty_print(VARIABLE TOMAS_BINS OPTIONS "NA" "15" "40") + if(${TOMAS}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE TOMAS) + if("${TOMAS_BINS}" MATCHES "NA") + message(FATAL_ERROR "TOMAS_BINS must be 15 or 40 if TOMAS is ON") + endif() + else() + if(NOT "${TOMAS_BINS}" MATCHES "NA") + message(FATAL_ERROR "TOMAS_BINS must be NA if TOMAS is OFF") + endif() + endif() + + + if("${TOMAS_BINS}" MATCHES 15) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE TOMAS15 + ) + elseif("${TOMAS_BINS}" MATCHES 40) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE TOMAS40 + ) + endif() + + #------------------------------------------------------------------------- + # Build APM? + #------------------------------------------------------------------------- + set(APM "OFF" CACHE BOOL + "Switch to build APM as a component of GEOS-Chem" + ) + gc_pretty_print(VARIABLE APM IS_BOOLEAN) + if(${APM}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE APM) + endif() + + #------------------------------------------------------------------------- + # Build RRTMG? + #------------------------------------------------------------------------- + set(RRTMG "OFF" CACHE BOOL + "Switch to build RRTMG as a component of GEOS-Chem" + ) + gc_pretty_print(VARIABLE RRTMG IS_BOOLEAN) + if(${RRTMG}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE RRTMG) + endif() + + #------------------------------------------------------------------------- + # Build GTMM? + # (This is a deprecated option...needs updating. Turn OFF by default.) + #------------------------------------------------------------------------- + set(GTMM OFF CACHE BOOL + "Switch to build GTMM as a component of GEOS-Chem" + ) + gc_pretty_print(VARIABLE GTMM IS_BOOLEAN) + if(${GTMM}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE GTMM_Hg) + endif() + + #------------------------------------------------------------------------- + # Build HEMCO standalone? + #------------------------------------------------------------------------- + set(HCOSA "OFF" CACHE BOOL + "Switch to build the hemco-standalone (HCOSA) executable" + ) + gc_pretty_print(VARIABLE HCOSA IS_BOOLEAN) + + #------------------------------------------------------------------------- + # Build Luo et al wetdep scheme? + # (Currently a research option... turn OFF by default) + #------------------------------------------------------------------------- + set(LUO_WETDEP OFF CACHE BOOL + "Switch to build the Luo et al (2020) wetdep scheme into GEOS-Chem" + ) + gc_pretty_print(VARIABLE LUO_WETDEP IS_BOOLEAN) + if(${LUO_WETDEP}) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE LUO_WETDEP + ) + endif() + + #------------------------------------------------------------------------- + # Use Fast-JX rather than Cloud-J? + #------------------------------------------------------------------------- + + set(FASTJX OFF CACHE BOOL + "Switch to use legacy FAST-JX in GEOS-Chem" + ) + gc_pretty_print(VARIABLE FASTJX IS_BOOLEAN) + if(${FASTJX}) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE FASTJX + ) + endif() + + #------------------------------------------------------------------------- + # Export the following variables to GEOS-Chem directory's scope + #------------------------------------------------------------------------- + set(GCHP FALSE PARENT_SCOPE) + set(MODEL_CLASSIC TRUE PARENT_SCOPE) + set(MECH ${MECH} PARENT_SCOPE) + set(TOMAS ${TOMAS} PARENT_SCOPE) + set(APM ${APM} PARENT_SCOPE) + set(RRTMG ${RRTMG} PARENT_SCOPE) + set(GTMM ${GTMM} PARENT_SCOPE) + set(LUO_WETDEP ${LUO_WETDEP} PARENT_SCOPE) + set(SANITIZE ${SANITIZE} PARENT_SCOPE) + set(FASTJX ${FASTJX} PARENT_SCOPE) + + #------------------------------------------------------------------------- + # Export information about Git status + #------------------------------------------------------------------------- + + # Get branch nane in code repository + macro(get_git_branch VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE ${VAR} + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endmacro() + get_git_branch(CODE_BRANCH) + set(GIT_BRANCH ${CODE_BRANCH} CACHE STRING "Current branch in code repo") + + # Get last commit name from code repository + macro(get_git_commit VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} log -n 1 --pretty=format:"%s" + OUTPUT_VARIABLE ${VAR} + ) + endmacro() + get_git_commit(LAST_COMMIT) + set(GIT_COMMIT ${LAST_COMMIT} CACHE STRING "Last commit in Git repo") + + # Get last commit hash from code repository + macro(get_git_commit_hash VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} log -n 1 --pretty=format:"%h" + OUTPUT_VARIABLE ${VAR} + ) + endmacro() + get_git_commit_hash(COMMIT_HASH) + set(GIT_COMMIT_HASH ${COMMIT_HASH} CACHE STRING "Last commit hash in Git repo") + + # Get last commit date from code repository + macro(get_git_commit_date VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} log -n 1 --pretty=format:"%cd" + OUTPUT_VARIABLE ${VAR} + ) + endmacro() + get_git_commit_date(COMMIT_DATE) + set(GIT_COMMIT_DATE ${COMMIT_DATE} CACHE STRING "Date of last Git commit") + +endfunction() diff --git a/model/geos-chem/CMakeScripts/GC-ConfigureGISS-GC.cmake b/model/geos-chem/CMakeScripts/GC-ConfigureGISS-GC.cmake new file mode 100644 index 00000000..07336101 --- /dev/null +++ b/model/geos-chem/CMakeScripts/GC-ConfigureGISS-GC.cmake @@ -0,0 +1,273 @@ +function(configureGISS_GC) + + #------------------------------------------------------------------------- + # Find OpenMP if we're building a multithreaded executable + #------------------------------------------------------------------------- + gc_pretty_print(SECTION "Threading") + set(OMP ON CACHE STRING + "Switch to enable/disable OpenMP threading in GEOS-Chem" + ) + gc_pretty_print(VARIABLE OMP IS_BOOLEAN) + if("${OMP}") + set(NO_OMP "OFF" CACHE STRING "Boolean opposite of the OMP switch, needed for backwards compatibility") + find_package(OpenMP REQUIRED) + ####################################################################### + # NOTE: Newer versions of CMake (maybe > 3.8) prefer OpenMP::OpenMP + # rather than ${OpenMP_Fortran_FLAGS} to specify compilation options + # for OpenMP. However, this is not supported in older versions. + # For backwards compatibility, especially with Azure DevOps, we will + # leave the new syntax commented out. It can be restored later. + # + # -- Bob Yantosca (28 Jul 2020) + # target_compile_options(HEMCOBuildProperties + # INTERFACE OpenMP::OpenMP_Fortran + # ) + # target_link_libraries(HEMCOBuildProperties + # INTERFACE OpenMP::OpenMP_Fortran + # ) + ####################################################################### + target_compile_options(GEOSChemBuildProperties + INTERFACE ${OpenMP_Fortran_FLAGS} + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE ${OpenMP_Fortran_FLAGS} + ) + else() + set(NO_OMP "ON" CACHE STRING + "Boolean opposite of the OMP switch, for backwards compatibility") + target_compile_definitions(GEOSChemBuildProperties + INTERFACE "NO_OMP" + ) + endif() + + # Header for next section + gc_pretty_print(SECTION "General settings") + + #------------------------------------------------------------------------- + # Make MECH an option. This controls which KPP directory is used. + #------------------------------------------------------------------------- + set(MECH "fullchem" CACHE STRING "Name of the chemistry mechanism to use") + gc_pretty_print(VARIABLE MECH OPTIONS "fullchem" "carbon" "Hg" "custom") + + #------------------------------------------------------------------------- + # Set USE_REAL8 as cache variable so as to not override existing definition + # See https://github.com/geoschem/geos-chem/issues/43. + #------------------------------------------------------------------------- + set(USE_REAL8 ON CACHE BOOL + "Switch to set flexible precision 8-byte floating point real" + ) + gc_pretty_print(VARIABLE USE_REAL8 IS_BOOLEAN) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE $<$:USE_REAL8> + ) + + #------------------------------------------------------------------------- + # Add code sanitization options (GNU Fortran only) + # We need to add these options to both compiler & linker. + #------------------------------------------------------------------------- + set(SANITIZE OFF CACHE BOOL + "Switch to turn on code sanitation (i.e. identify memory leaks and similar conditions)" + ) + gc_pretty_print(VARIABLE SANITIZE IS_BOOLEAN) + if(${SANITIZE}) + if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") + target_compile_options(GEOSChemBuildProperties + INTERFACE "-fsanitize=address" + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE "-fsanitize=address" + ) + target_compile_options(GEOSChemBuildProperties + INTERFACE "-fsanitize=leak" + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE "-fsanitize=leak" + ) + target_compile_options(GEOSChemBuildProperties + INTERFACE "-fsanitize=undefined" + ) + target_link_libraries(GEOSChemBuildProperties + INTERFACE "-fsanitize=undefined" + ) + else() + message( FATAL_ERROR "The SANITIZE option is only defined for GNU Fortran.") + endif() + endif() + + #------------------------------------------------------------------------- + # GISS-GC + #------------------------------------------------------------------------- + target_compile_definitions(GEOSChemBuildProperties + INTERFACE MODEL_GISS MODEL_ EXTERNAL_GRID EXTERNAL_FORCINGS + ) + + # Header for next section + gc_pretty_print(SECTION "Components") + + #------------------------------------------------------------------------- + # Build TOMAS + #------------------------------------------------------------------------- + set(TOMAS "OFF" CACHE BOOL "Switch to enable TOMAS") + set(TOMAS_BINS "NA" CACHE STRING "Number of TOMAS bins (only used if TOMAS is true)") + gc_pretty_print(VARIABLE TOMAS IS_BOOLEAN) + gc_pretty_print(VARIABLE TOMAS_BINS OPTIONS "NA" "15" "40") + if(${TOMAS}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE TOMAS) + if("${TOMAS_BINS}" MATCHES "NA") + message(FATAL_ERROR "TOMAS_BINS must be 15 or 40 if TOMAS is ON") + endif() + else() + if(NOT "${TOMAS_BINS}" MATCHES "NA") + message(FATAL_ERROR "TOMAS_BINS must be NA if TOMAS is OFF") + endif() + endif() + + + if("${TOMAS_BINS}" MATCHES 15) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE TOMAS15 + ) + elseif("${TOMAS_BINS}" MATCHES 40) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE TOMAS40 + ) + endif() + + #------------------------------------------------------------------------- + # Build APM? + #------------------------------------------------------------------------- + set(APM "OFF" CACHE BOOL + "Switch to build APM as a component of GEOS-Chem" + ) + gc_pretty_print(VARIABLE APM IS_BOOLEAN) + if(${APM}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE APM) + endif() + + #------------------------------------------------------------------------- + # Build RRTMG? + #------------------------------------------------------------------------- + set(RRTMG "OFF" CACHE BOOL + "Switch to build RRTMG as a component of GEOS-Chem" + ) + gc_pretty_print(VARIABLE RRTMG IS_BOOLEAN) + if(${RRTMG}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE RRTMG) + endif() + + #------------------------------------------------------------------------- + # Build GTMM? + # (This is a deprecated option...needs updating. Turn OFF by default.) + #------------------------------------------------------------------------- + set(GTMM OFF CACHE BOOL + "Switch to build GTMM as a component of GEOS-Chem" + ) + gc_pretty_print(VARIABLE GTMM IS_BOOLEAN) + if(${GTMM}) + target_compile_definitions(GEOSChemBuildProperties INTERFACE GTMM_Hg) + endif() + + #------------------------------------------------------------------------- + # Build HEMCO standalone? + #------------------------------------------------------------------------- + set(HCOSA "OFF" CACHE BOOL + "Switch to build the hemco-standalone (HCOSA) executable" + ) + gc_pretty_print(VARIABLE HCOSA IS_BOOLEAN) + + #------------------------------------------------------------------------- + # Build Luo et al wetdep scheme? + # (Currently a research option... turn OFF by default) + #------------------------------------------------------------------------- + set(LUO_WETDEP OFF CACHE BOOL + "Switch to build the Luo et al (2020) wetdep scheme into GEOS-Chem" + ) + gc_pretty_print(VARIABLE LUO_WETDEP IS_BOOLEAN) + if(${LUO_WETDEP}) + target_compile_definitions(GEOSChemBuildProperties + INTERFACE LUO_WETDEP + ) + endif() + + #------------------------------------------------------------------------- + # Use Fast-JX rather than Cloud-J? + #------------------------------------------------------------------------- + set(FASTJX OFF CACHE BOOL + "Switch to use legacy FAST-JX in GEOS-Chem" + ) + gc_pretty_print(VARIABLE FASTJX IS_BOOLEAN) + if(${FASTJX}) + #--------------------------------------------------------------------- + # Throw an error unless we are using the Hg mechanism, + # The fullchem & custom mechanisms now use Cloud-J! + if(NOT ${MECH} MATCHES "Hg") + message(FATAL_ERROR "FASTJX can only be used with the Hg mechanism!") + endif() + #--------------------------------------------------------------------- + target_compile_definitions(GEOSChemBuildProperties + INTERFACE FASTJX + ) + endif() + + #------------------------------------------------------------------------- + # Export the following variables to GEOS-Chem directory's scope + #------------------------------------------------------------------------- + set(GCHP FALSE PARENT_SCOPE) + set(MODEL_GISS TRUE PARENT_SCOPE) + # NOTE: Need to set the following to FALSE to get GISS-GC to compile + set(MODEL_CLASSIC FALSE PARENT_SCOPE) + set(MECH ${MECH} PARENT_SCOPE) + set(TOMAS ${TOMAS} PARENT_SCOPE) + set(APM ${APM} PARENT_SCOPE) + set(RRTMG ${RRTMG} PARENT_SCOPE) + set(GTMM ${GTMM} PARENT_SCOPE) + set(LUO_WETDEP ${LUO_WETDEP} PARENT_SCOPE) + set(SANITIZE ${SANITIZE} PARENT_SCOPE) + set(FASTJX ${FASTJX} PARENT_SCOPE) + + #------------------------------------------------------------------------- + # Export information about Git status + #------------------------------------------------------------------------- + + # Get branch nane in code repository + macro(get_git_branch VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE ${VAR} + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endmacro() + get_git_branch(CODE_BRANCH) + set(GIT_BRANCH ${CODE_BRANCH} CACHE STRING "Current branch in code repo") + + # Get last commit name from code repository + macro(get_git_commit VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} log -n 1 --pretty=format:"%s" + OUTPUT_VARIABLE ${VAR} + ) + endmacro() + get_git_commit(LAST_COMMIT) + set(GIT_COMMIT ${LAST_COMMIT} CACHE STRING "Last commit in Git repo") + + # Get last commit hash from code repository + macro(get_git_commit_hash VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} log -n 1 --pretty=format:"%h" + OUTPUT_VARIABLE ${VAR} + ) + endmacro() + get_git_commit_hash(COMMIT_HASH) + set(GIT_COMMIT_HASH ${COMMIT_HASH} CACHE STRING "Last commit hash in Git repo") + + # Get last commit date from code repository + macro(get_git_commit_date VAR) + execute_process( + COMMAND git -C ${CMAKE_CURRENT_SOURCE_DIR} log -n 1 --pretty=format:"%cd" + OUTPUT_VARIABLE ${VAR} + ) + endmacro() + get_git_commit_date(COMMIT_DATE) + set(GIT_COMMIT_DATE ${COMMIT_DATE} CACHE STRING "Date of last Git commit") + +endfunction() diff --git a/model/geos-chem/CMakeScripts/GC-Helpers.cmake b/model/geos-chem/CMakeScripts/GC-Helpers.cmake new file mode 100755 index 00000000..142417a9 --- /dev/null +++ b/model/geos-chem/CMakeScripts/GC-Helpers.cmake @@ -0,0 +1,185 @@ + +#[[ stringify_list + +Stringify a list of strings. + +Usage: + stringify_list( + [PRINT] + [LINE_LENGTH ] + [HIGHLIGHT ...] + [JOIN ...] + [AFTER] + ) + +Options: + PRINT Print the stringified list to console. Highlighted text + will also be colorized. + + LINE_LENGTH When JOINing a list of string, the resulting lines will + be limited to characters. The resulting + will be a list of lines that can then be JOINed with + newlines. + + HIGHLIGHT A list of keywords to highlight. + + JOIN A list of tokens that will be used sequentially to join + list items. The last token will be used to join all + remaining items. + + AFTER Place the JOIN tokens after the item, rather than before. + +]] +function(stringify_list LIST) + cmake_parse_arguments(BETTER + "PRINT;AFTER" + "LINE_LENGTH" + "HIGHLIGHT;JOIN" + ${ARGN} + ) + + if(NOT DEFINED BETTER_LINE_LENGTH) + set(BETTER_LINE_LENGTH 1000) # Arbitrary big number + endif() + + set(STR ${${LIST}}) + + # Limit joined line length + if(DEFINED BETTER_JOIN) + set(TEMP "") + set(CUR_LEN "0") + + set(JOIN_IDX "0 - 1") + list(LENGTH BETTER_JOIN JOIN_LEN) + + foreach(ITEM ${STR}) + # Get the join token + math(EXPR JOIN_IDX "${JOIN_IDX} + 1") + if(${JOIN_IDX} LESS ${JOIN_LEN}) + list(GET BETTER_JOIN "${JOIN_IDX}" JOIN_TOKEN) + endif() + string(LENGTH "${JOIN_TOKEN}" SEP_LEN) + + # If a line length was + string(LENGTH "${ITEM}" WORD_LEN) + math(EXPR POST_LEN "${WORD_LEN} + ${CUR_LEN} + ${SEP_LEN}") + if("${POST_LEN}" LESS "${BETTER_LINE_LENGTH}") + if(${BETTER_AFTER}) + set(TEMP "${TEMP}${ITEM}${JOIN_TOKEN}") + else() + set(TEMP "${TEMP}${JOIN_TOKEN}${ITEM}") + endif() + set(CUR_LEN "${POST_LEN}") + else() + if(${BETTER_AFTER}) + set(TEMP "${TEMP};${ITEM}${JOIN_TOKEN}") + else() + set(TEMP "${TEMP};${JOIN_TOKEN}${ITEM}") + endif() + set(CUR_LEN "0") + math(EXPR CUR_LEN "${SEP_LEN} + ${WORD_LEN}") + endif() + endforeach() + + set(STR "${TEMP}") + endif() + + # Highlight selected words + if(DEFINED BETTER_HIGHLIGHT) + foreach(KEYWORD ${BETTER_HIGHLIGHT}) + string(REPLACE "${KEYWORD}" "[${KEYWORD}]" STR "${STR}") + endforeach() + endif() + + if(${BETTER_PRINT}) + string(ASCII 27 Esc) + if(${CMAKE_COLOR_MAKEFILE}) + string(REGEX REPLACE "\\[([a-zA-Z0-9_\\.]+)\\]" "${Esc}[32m\\1${Esc}[m" COLORIZED "${STR}") + else() + set(COLORIZED "${STR}") + endif() + string(REGEX REPLACE "\n$" "" COLORIZED "${COLORIZED}") + message("${COLORIZED}") + endif() + + + # Export the new string + set(${LIST} "${STR}" PARENT_SCOPE) +endfunction() + +#[[ get_repo_version + +Variable with name ${VARNAME} gets set to first 7 characters of the hash +of the last commit to the repo at ${DIR}. + +Usage: + get_repo_version(VARNAME DIR) + +]] +macro(get_repo_version VARNAME DIR) + execute_process( + COMMAND git describe --tags --dirty=.dirty + WORKING_DIRECTORY ${DIR} + OUTPUT_VARIABLE ${VARNAME} + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endmacro() + +function(gc_pretty_print) + cmake_parse_arguments(ARGS + "IS_BOOLEAN" + "VARIABLE;SECTION" + "OPTIONS" + ${ARGN} + ) + + if(DEFINED ARGS_VARIABLE) + if(ARGS_IS_BOOLEAN) + set(LOGLINE "ON" "OFF") + # Split list with " " + stringify_list(LOGLINE + JOIN " " + LINE_LENGTH 60 + ) + # Wrap lines + stringify_list(LOGLINE + JOIN " * ${ARGS_VARIABLE}:\t" "\n ... \t" + ) + if("${${ARGS_VARIABLE}}") + stringify_list(LOGLINE PRINT HIGHLIGHT "ON") + else() + stringify_list(LOGLINE PRINT HIGHLIGHT "OFF") + endif() + elseif(DEFINED ARGS_OPTIONS) + set(LOGLINE ${ARGS_OPTIONS}) + # Split list with " " + stringify_list(LOGLINE + JOIN " " + LINE_LENGTH 60 + ) + # Wrap lines + stringify_list(LOGLINE + JOIN " * ${ARGS_VARIABLE}:\t" "\n ... \t" + ) + stringify_list(LOGLINE PRINT HIGHLIGHT ${${ARGS_VARIABLE}}) + else() + if(NOT DEFINED ${ARGS_VARIABLE}) + set(LOGLINE " ") # special case for empty variable + else() + set(LOGLINE ${${ARGS_VARIABLE}}) + endif() + # Split list with " " + stringify_list(LOGLINE + JOIN " " + LINE_LENGTH 60 + ) + # Wrap lines + stringify_list(LOGLINE + JOIN " + ${ARGS_VARIABLE}:\t" "\n ... \t" + ) + stringify_list(LOGLINE PRINT) + endif() + elseif(DEFINED ARGS_SECTION) + message(STATUS "${ARGS_SECTION}:") + endif() +endfunction() \ No newline at end of file diff --git a/model/geos-chem/CMakeScripts/summarize_build b/model/geos-chem/CMakeScripts/summarize_build new file mode 100644 index 00000000..46d7f334 --- /dev/null +++ b/model/geos-chem/CMakeScripts/summarize_build @@ -0,0 +1,77 @@ +#!/bin/bash +DESCRIPTION="""Summarizes a GEOS-Chem build by scraping CMakeCache.txt. + +usage: + summarize_build [CACHEFILE] [--no-color] + CACHEFILE: Path to a CMakeCache.txt. The default value is a + CMakeCache.txt beside this script. + --no-color: Don't highlight variable names. +""" +if [[ ( $* == --help ) || ( $* == -h ) ]]; then + echo "$DESCRIPTION" + exit 0 +fi + +if [[ $* == --no-color ]]; then + LEFT_COLOR="" + RIGHT_COLOR="" +else + LEFT_COLOR="\e[1;34m" + RIGHT_COLOR="\e[m" +fi + +set -e + +THIS_SCRIPTS_DIRECTORY=$(realpath $(dirname "$0")) +CACHEFILE=${1:-$THIS_SCRIPTS_DIRECTORY/CMakeCache.txt} + +function scrape_cache() { + sed -n "s/$1:[A-Z][A-Z]*=//p" $CACHEFILE +} + +function print_item() { + printf "%-12s %s\n" "$1:" "$2" +} +function print_item_highlight() { + printf "${LEFT_COLOR}%s${RIGHT_COLOR}\"%s\"\n" "-D$1=" "$2" +} + +BUILD_TYPE=$(scrape_cache CMAKE_BUILD_TYPE) +BUILD_TYPE_UPPER=${BUILD_TYPE^^} +COMPILER_ID=$(scrape_cache GEOSChem_DETECTED_FORTRAN_COMPILER_ID) +COMPILER_VERSION=$(scrape_cache GEOSChem_DETECTED_FORTRAN_COMPILER_VERSION) +COMILER_WHICH=$(scrape_cache CMAKE_Fortran_COMPILER) + +echo "## Compiler Info" +print_item "# Family" "${COMPILER_ID}" +print_item "# Version" "${COMPILER_VERSION}" +print_item "# Which" "${COMILER_WHICH}" +echo "" + +echo "## Compiler Options (global)" +print_item_highlight "CMAKE_Fortran_FLAGS" $(scrape_cache CMAKE_Fortran_FLAGS) +print_item_highlight "CMAKE_Fortran_FLAGS_${BUILD_TYPE_UPPER}" $(scrape_cache CMAKE_Fortran_FLAGS_${BUILD_TYPE_UPPER}) +echo "" + +echo "## Compiler Options (GEOS-Chem)" +print_item_highlight "GEOSChem_Fortran_FLAGS_${COMPILER_ID}" $(scrape_cache GEOSChem_Fortran_FLAGS_${COMPILER_ID}) +print_item_highlight "GEOSChem_Fortran_FLAGS_${BUILD_TYPE_UPPER}_${COMPILER_ID}" $(scrape_cache GEOSChem_Fortran_FLAGS_${BUILD_TYPE_UPPER}_${COMPILER_ID}) +echo "" + +echo "## Compiler Options (HEMCO)" +print_item_highlight "HEMCO_Fortran_FLAGS_${COMPILER_ID}" $(scrape_cache HEMCO_Fortran_FLAGS_${COMPILER_ID}) +print_item_highlight "HEMCO_Fortran_FLAGS_${BUILD_TYPE_UPPER}_${COMPILER_ID}" $(scrape_cache HEMCO_Fortran_FLAGS_${BUILD_TYPE_UPPER}_${COMPILER_ID}) +echo "" + +echo "## GEOS-Chem Components Settings" +print_item_highlight TOMAS $(scrape_cache TOMAS) +print_item_highlight TOMAS_BINS $(scrape_cache TOMAS_BINS) +print_item_highlight APM $(scrape_cache APM) +print_item_highlight RRTMG $(scrape_cache RRTMG) +print_item_highlight GTMM $(scrape_cache GTMM) +print_item_highlight HCOSA $(scrape_cache HCOSA) +print_item_highlight LUO_WETDEP $(scrape_cache LUO_WETDEP) +print_item_highlight FASTJX $(scrape_cache FASTJX) +echo "" + +# grep --color "GEOSChem_Fortran_FLAGS_[A-Z_]*${COMPILER_ID}" $CACHEFILE \ No newline at end of file diff --git a/model/geos-chem/CMakeScripts/try_compile.F90 b/model/geos-chem/CMakeScripts/try_compile.F90 new file mode 100644 index 00000000..40eaef34 --- /dev/null +++ b/model/geos-chem/CMakeScripts/try_compile.F90 @@ -0,0 +1,57 @@ +program try_compile + use netcdf + + implicit none + + character (len = *), parameter :: FILE_NAME = "simple_xy.nc" + integer, parameter :: NDIMS = 2 + integer, parameter :: NX = 6, NY = 12 + integer :: ncid, varid, dimids(NDIMS) + integer :: x_dimid, y_dimid + integer :: data_out(NY, NX) + integer :: x, y +#ifndef NO_OMP + integer nthreads, tid, OMP_GET_THREAD_NUM + + write(*,*) 'About to start multiple threads' + ! Try OpenMP + !$OMP PARALLEL PRIVATE(nthreads, tid) + TID = OMP_GET_THREAD_NUM() + write(*,*) 'Hello from thread ', tid + !$OMP END PARALLEL +#endif + + ! Try NetCDF-F + do x = 1, NX + do y = 1, NY + data_out(y, x) = (x - 1) * NY + (y - 1) + end do + end do + write(*,*) 'Creating NetCDF file' + call check( nf90_create(FILE_NAME, NF90_CLOBBER, ncid) ) + call check( nf90_def_dim(ncid, "x", NX, x_dimid) ) + call check( nf90_def_dim(ncid, "y", NY, y_dimid) ) + + ! The dimids array is used to pass the IDs of the dimensions of + ! the variables. Note that in fortran arrays are stored in + ! column-major format. + dimids = (/ y_dimid, x_dimid /) + + call check( nf90_def_var(ncid, "data", NF90_INT, dimids, varid) ) + + call check( nf90_enddef(ncid) ) + call check( nf90_put_var(ncid, varid, data_out) ) + call check( nf90_close(ncid) ) + write(*,*) 'Finished creating the NetCDF file' + + contains + subroutine check(status) + integer, intent ( in) :: status + + if(status /= nf90_noerr) then + print *, trim(nf90_strerror(status)) + stop "Stopped" + end if + end subroutine check + +end program diff --git a/model/geos-chem/src/CMakeLists.txt b/model/geos-chem/src/CMakeLists.txt new file mode 100644 index 00000000..1dd29e86 --- /dev/null +++ b/model/geos-chem/src/CMakeLists.txt @@ -0,0 +1,76 @@ +# src/CMakeLists.txt + +#----------------------------------------------------------------------------- +# Tell CMake to look for code in HEMCO, Cloud-J and GEOS-Chem directory trees +#----------------------------------------------------------------------------- +add_subdirectory(HEMCO EXCLUDE_FROM_ALL) +target_compile_definitions(HEMCOBuildProperties + INTERFACE + $<$:TOMAS> + $<$:TOMAS15> + $<$:TOMAS40> + "" +) +add_subdirectory(HETP EXCLUDE_FROM_ALL) +add_subdirectory(Cloud-J EXCLUDE_FROM_ALL) +add_subdirectory(GEOS-Chem EXCLUDE_FROM_ALL) + +#----------------------------------------------------------------------------- +# Define the GEOS-Chem executable: +# 1. Specify a cache variable with the default target name +# 2. Specify the location of the main program +# 3. Specify libraries that the main program depends on +# 4. Store the binary exectuable file in the bin folder (pre-install) +#----------------------------------------------------------------------------- +set(EXE_FILE_NAME gcclassic CACHE STRING + "Default name for the GEOS-Chem Classic executable file") +mark_as_advanced(EXE_FILE_NAME) + +add_executable(${EXE_FILE_NAME} + GEOS-Chem/Interfaces/GCClassic/main.F90 +) +target_link_libraries(${EXE_FILE_NAME} + PUBLIC + GeosCore +) +set_target_properties(${EXE_FILE_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) + +#----------------------------------------------------------------------------- +# When "make install" is run, copy the target to the destination folder +# (which is typically one directory higher than the CMake build folder) +#----------------------------------------------------------------------------- + +# Define set of installation paths to consider +set(COMBINED_INSTALL_DIRS "") +list(APPEND COMBINED_INSTALL_DIRS ${RUNDIR}) +list(APPEND COMBINED_INSTALL_DIRS ${INSTALLCOPY}) + +# Consider installation to all of the specified paths +foreach(INSTALL_PATH ${COMBINED_INSTALL_DIRS}) + if(INSTALL_PATH IN_LIST RUNDIR) + set(CHECK_IS_RUNDIR TRUE) + else() + set(CHECK_IS_RUNDIR FALSE) + endif() + + # Convert INSTALL_PATH to absolute + if(NOT IS_ABSOLUTE "${INSTALL_PATH}") + get_filename_component(INSTALL_PATH "${INSTALL_PATH}" ABSOLUTE BASE_DIR "${CMAKE_BINARY_DIR}") + endif() + + # Issue warning and skip if geoschem_config.yml doesn't exist + # (i.e. if it doens't look like a run directory) + if(CHECK_IS_RUNDIR AND (NOT EXISTS ${INSTALL_PATH}/geoschem_config.yml)) + # Installation path is not a GEOS-Chem run directory + # Skip ahead -- a warning will be raised elsewhere. + continue() + else() + # Installation path is a GEOS-Chem run directory, + # Therefore we will install the executable there. + install(TARGETS ${EXE_FILE_NAME} RUNTIME DESTINATION ${INSTALL_PATH}) + endif() + +endforeach() diff --git a/model/geos-chem/src/Cloud-J b/model/geos-chem/src/Cloud-J new file mode 160000 index 00000000..d20050f1 --- /dev/null +++ b/model/geos-chem/src/Cloud-J @@ -0,0 +1 @@ +Subproject commit d20050f1ef9e3895d58f3041efd2da59ce1ed421 diff --git a/model/geos-chem/src/GEOS-Chem b/model/geos-chem/src/GEOS-Chem new file mode 160000 index 00000000..87547375 --- /dev/null +++ b/model/geos-chem/src/GEOS-Chem @@ -0,0 +1 @@ +Subproject commit 87547375311b8fe7d942147864179d8e00db325e diff --git a/model/geos-chem/src/HEMCO b/model/geos-chem/src/HEMCO new file mode 160000 index 00000000..87dc6c37 --- /dev/null +++ b/model/geos-chem/src/HEMCO @@ -0,0 +1 @@ +Subproject commit 87dc6c370e29a5a6d0e7df2208b329b6f6245aad diff --git a/model/geos-chem/src/HETP b/model/geos-chem/src/HETP new file mode 160000 index 00000000..2a99b246 --- /dev/null +++ b/model/geos-chem/src/HETP @@ -0,0 +1 @@ +Subproject commit 2a99b24625ed26cf87ae88697ddd6cf8bbdec812 diff --git a/model/lightning.f b/model/lightning.f index cbb70fe2..5d447da1 100644 --- a/model/lightning.f +++ b/model/lightning.f @@ -462,6 +462,8 @@ subroutine calc_lightning(i,j,lmax,lfrz,mflux,precon) flash = flash * FLASH_PERTURB cg = cg * FLASH_PERTURB + else + htcon = 0.0 end if !=============================================== diff --git a/model/mk_diags/compscr b/model/mk_diags/compscr index 2d909c45..e5ee6d98 100644 --- a/model/mk_diags/compscr +++ b/model/mk_diags/compscr @@ -7,8 +7,8 @@ fc="your_fortran_compiler_name" # e.g. ifort fccmd=$(nf-config --fc) fccmd+=" -cpp -fallow-argument-mismatch" -nclib=$(nf-config --flibs) -ncinc=$(nf-config --fflags) +nclib="$(nf-config --flibs) $(nc-config --libs)" +ncinc="$(nf-config --fflags) $(nc-config --cflags)" echo "executing compscr with arguments:" echo diff --git a/model/shared/AbstractCalendar.F90 b/model/shared/AbstractCalendar.F90 index ca77d879..4f65035d 100644 --- a/model/shared/AbstractCalendar.F90 +++ b/model/shared/AbstractCalendar.F90 @@ -363,14 +363,15 @@ subroutine printTransitionDates(this, unit) class (AbstractTimeStamp), pointer :: p character(len=24) :: fmt - iter = this%transitionDates%begin() - do while(iter /= this%transitionDates%last()) - p => iter%value() - write(fmt, '("(a,",i0,"("".""))")') 30-len_trim(iter%key()) - write(unit,fmt,advance='no') trim(iter%key()) - call p%print(unit) - call iter%next() - end do +! FIXME: The following code causes a segfault with recent gfortran +! iter = this%transitionDates%begin() +! do while(iter /= this%transitionDates%last()) +! p => iter%value() +! write(fmt, '("(a,",i0,"("".""))")') 30-len_trim(iter%key()) +! write(unit,fmt,advance='no') trim(iter%key()) +! call p%print(unit) +! call iter%next() +! end do end subroutine printTransitionDates diff --git a/model/shared/ModelClock.F90 b/model/shared/ModelClock.F90 index b1c623dc..833b92f8 100644 --- a/model/shared/ModelClock.F90 +++ b/model/shared/ModelClock.F90 @@ -1,7 +1,12 @@ +#include "rundeck_opts.h" module ModelClock_mod use BaseTime_mod use TimeInterval_mod +#ifdef TRACERS_GC + use Tempus_mod +#else use Time_mod +#endif implicit none private diff --git a/model/shared/PlanetaryCalendar.F90 b/model/shared/PlanetaryCalendar.F90 index 75071957..0556041f 100644 --- a/model/shared/PlanetaryCalendar.F90 +++ b/model/shared/PlanetaryCalendar.F90 @@ -133,7 +133,7 @@ function newPlanetaryCalendar_longitudes(orbit, monthLongitudes) result(calendar call calendar%setDaysPerYear(daysPerYear) if (size(monthLongitudes) /= MONTHS_PER_YEAR) then - call stop_model('PlanetaryCalendar assumes 12 month years.') + call stop_model('PlanetaryCalendar assumes 12 month years.', 1) return end if diff --git a/model/shared/Precision_mod.F90 b/model/shared/Precision_mod.F90 index 3bdb1817..5ba1eb85 100644 --- a/model/shared/Precision_mod.F90 +++ b/model/shared/Precision_mod.F90 @@ -1,4 +1,9 @@ +#include "rundeck_opts.h" +#ifdef TRACERS_GC +module Praecisionem_mod +#else module Precision_mod +#endif !@sum The reduce_precision routines truncate the number of !@+ significant digits in a real*8 number x to an approximate !@+ precision of relacc (1d-16 < relacc << 1). Fortran functions @@ -42,4 +47,8 @@ subroutine reduce_precision_4d(x,relacc) x = nint(fraction(x)/relacc,kind=8)*relacc*2d0**exponent(x) end subroutine reduce_precision_4d +#ifdef TRACERS_GC +end module Praecisionem_mod +#else end module Precision_mod +#endif diff --git a/model/shared/Time.F90 b/model/shared/Time.F90 index cee8aab3..781780a8 100644 --- a/model/shared/Time.F90 +++ b/model/shared/Time.F90 @@ -3,7 +3,12 @@ ! crucial that clients do not destroy the calendar subsequent to ! creating the Time object. +#include "rundeck_opts.h" +#ifdef TRACERS_GC +module Tempus_mod +#else module Time_mod +#endif use AbstractCalendar_mod, only: AbstractCalendar use Rational_mod use BaseTime_mod @@ -122,4 +127,8 @@ subroutine add(this, dt) end subroutine add +#ifdef TRACERS_GC +end module Tempus_mod +#else end module Time_mod +#endif diff --git a/modele-control.pyar b/modele-control.pyar index cf102395..1d78b276 100644 --- a/modele-control.pyar +++ b/modele-control.pyar @@ -3447,7 +3447,7 @@ macro(modele_set_flags) add_definitions(-DCOMPILER_G95) # This breaks if you try to wrap the long line in the obvious way. set (CMAKE_Fortran_FLAGS_RELEASE "${CPPFLAGS} -O2 -g -fconvert=big-endian -fno-range-check -ffree-line-length-none") - set (CMAKE_Fortran_FLAGS_DEBUG "${CPPFLAGS} -O -g -fbacktrace -fconvert=big-endian -fno-range-check -ffree-line-length-none -fcheck=bounds -fcheck=do -fcheck=mem -fcheck=recursion") + set (CMAKE_Fortran_FLAGS_DEBUG "${CPPFLAGS} -O0 -g -fbacktrace -fconvert=big-endian -fno-range-check -ffree-line-length-none -fcheck=bounds -fcheck=do -fcheck=mem -fcheck=recursion") if (CMAKE_BUILD_TYPE MATCHES Release)