Full Code of geoschem/geos-chem for AI

main b9f570e2c7a9 cached
677 files
33.4 MB
8.8M tokens
35 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (35,104K chars total). Download the full file to get everything.
Repository: geoschem/geos-chem
Branch: main
Commit: b9f570e2c7a9
Files: 677
Total size: 33.4 MB

Directory structure:
gitextract_afeqwh9l/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   ├── new-feature.yml
│   │   └── question-discussion.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       └── stale.yml
├── .gitignore
├── .gitmodules
├── .zenodo.json
├── APM/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── apm_ATHN_mod.F
│   ├── apm_TIMN_mod.F
│   ├── apm_albd_mod.F
│   ├── apm_coag_mod.F90
│   ├── apm_grow_mod.F
│   ├── apm_icen_mod.F90
│   ├── apm_init_mod.F
│   ├── apm_mixactivate.F90
│   ├── apm_nucl_mod.F
│   ├── apm_opti_mod.F
│   ├── apm_phys_mod.F
│   ├── apm_radf_mod.F
│   ├── apm_rrtmg_mods.F90
│   ├── apm_rrtmg_src.F90
│   ├── apm_rrtmg_sw.F90
│   ├── module_data_mosaic_asect.F90
│   ├── module_data_mosaic_other.F90
│   ├── module_data_mosaic_therm.F90
│   └── module_mosaic_therm.F90
├── AUTHORS.txt
├── CHANGELOG.md
├── CMakeLists.txt
├── CMakeScripts/
│   └── GC-Helpers.cmake
├── GTMM/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── CasaRegridModule.F90
│   ├── CleanupCASAarrays.F90
│   ├── GTMM.F90
│   ├── GTMM_coupled.F90
│   ├── HgOutForGEOS.F90
│   ├── assignAgeClassToRunningPool.F90
│   ├── assignRanPoolToAgeClass.F90
│   ├── defineArrays.F90
│   ├── defineConstants.F90
│   ├── doFPARandLAI.F90
│   ├── doHerbCarbon.F90
│   ├── doHerbCarbonHg.F90
│   ├── doHerbivory.F90
│   ├── doHgDeposition.F90
│   ├── doLatitude.F90
│   ├── doLeafRootShedding.F90
│   ├── doMaxHg.F90
│   ├── doNPP.F90
│   ├── doOptimumTemperature.F90
│   ├── doPET.F90
│   ├── doSoilMoisture.F90
│   ├── doTreeCarbon.F90
│   ├── doTreeCarbonHg.F90
│   ├── dorestart_mod.F90
│   ├── getAgeClassBF.F90
│   ├── getFireParams.F90
│   ├── getFuelWood.F90
│   ├── getSoilMoistParams.F90
│   ├── getSoilParams.F90
│   ├── input_gtmm_mod.F90
│   ├── loadCASAinput.F90
│   ├── loadHgDeposition.F90
│   ├── load_GC_data.F90
│   ├── organizeAgeClasses.F90
│   ├── processData.F90
│   └── sort_pick_veg.F90
├── GeosCore/
│   ├── .cvsignore
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── RnPbBe_mod.F90
│   ├── YuIMN_Code.F90
│   ├── aero_drydep.F90
│   ├── aerosol_mod.F90
│   ├── aerosol_thermodynamics_mod.F90
│   ├── airs_ch4_mod.F90
│   ├── apm_driv_mod.F90
│   ├── calc_met_mod.F90
│   ├── carbon_gases_mod.F90
│   ├── carbon_mod.F90
│   ├── chemistry_mod.F90
│   ├── cldice_HBrHOBr_rxn.F90
│   ├── cldj_interface_mod.F90
│   ├── cleanup.F90
│   ├── convection_mod.F90
│   ├── depo_mercury_mod.F90
│   ├── diagnostics_mod.F90
│   ├── drydep_mod.F90
│   ├── dust_mod.F90
│   ├── emissions_mod.F90
│   ├── exchange_mod.F90
│   ├── fast_jx_mod.F90
│   ├── fjx_interface_mod.F90
│   ├── flexgrid_read_mod.F90
│   ├── fullchem_mod.F90
│   ├── gc_environment_mod.F90
│   ├── get_met_mod.F90
│   ├── get_ndep_mod.F90
│   ├── global_br_mod.F90
│   ├── gosat_ch4_mod.F90
│   ├── hco_interface_gc_mod.F90
│   ├── hco_state_gc_mod.F90
│   ├── hco_utilities_gc_mod.F90
│   ├── hcoi_gc_diagn_include.H
│   ├── hcoi_gc_diagn_mod.F90
│   ├── input_mod.F90
│   ├── kppsa_interface_mod.F90
│   ├── land_mercury_mod.F90
│   ├── linear_chem_mod.F90
│   ├── linoz_mod.F90
│   ├── mapping_mod.F90
│   ├── mercury_mod.F90
│   ├── mixing_mod.F90
│   ├── modis_lai_mod.F90
│   ├── ocean_mercury_mod.F90
│   ├── olson_landmap_mod.F90
│   ├── pbl_mix_mod.F90
│   ├── photolysis_mod.F90
│   ├── pjc_pfix_mod.F90
│   ├── pjc_pfix_window_mod.F90
│   ├── planeflight_mod.F90
│   ├── pops_mod.F90
│   ├── rpmares_mod.F90
│   ├── rrtmg_rad_transfer_mod.F90
│   ├── seasalt_mod.F90
│   ├── set_boundary_conditions_mod.F90
│   ├── set_global_ch4_mod.F90
│   ├── sfcvmr_mod.F90
│   ├── sulfate_mod.F90
│   ├── tagged_o3_mod.F90
│   ├── tccon_ch4_mod.F90
│   ├── tomas_mod.F90
│   ├── toms_mod.F90
│   ├── tpcore_fvdas_mod.F90
│   ├── tpcore_window_mod.F90
│   ├── tracer_mod.F90
│   ├── transport_mod.F90
│   ├── ucx_mod.F90
│   ├── uvalbedo_mod.F90
│   ├── vdiff_mod.F90
│   └── wetscav_mod.F90
├── GeosRad/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── Makefile.nomcica
│   ├── mcica_random_numbers.F90
│   ├── mcica_subcol_gen_lw.F90
│   ├── mcica_subcol_gen_sw.F90
│   ├── parkind.F90
│   ├── parrrsw.F90
│   ├── parrrtm.F90
│   ├── rad_driver.F90.safe
│   ├── rrlw_cld.F90
│   ├── rrlw_con.F90
│   ├── rrlw_kg01.F90
│   ├── rrlw_kg02.F90
│   ├── rrlw_kg03.F90
│   ├── rrlw_kg04.F90
│   ├── rrlw_kg05.F90
│   ├── rrlw_kg06.F90
│   ├── rrlw_kg07.F90
│   ├── rrlw_kg08.F90
│   ├── rrlw_kg09.F90
│   ├── rrlw_kg10.F90
│   ├── rrlw_kg11.F90
│   ├── rrlw_kg12.F90
│   ├── rrlw_kg13.F90
│   ├── rrlw_kg14.F90
│   ├── rrlw_kg15.F90
│   ├── rrlw_kg16.F90
│   ├── rrlw_ncpar.F90
│   ├── rrlw_ref.F90
│   ├── rrlw_tbl.F90
│   ├── rrlw_vsn.F90
│   ├── rrlw_wvn.F90
│   ├── rrsw_aer.F90
│   ├── rrsw_cld.F90
│   ├── rrsw_con.F90
│   ├── rrsw_kg16.F90
│   ├── rrsw_kg17.F90
│   ├── rrsw_kg18.F90
│   ├── rrsw_kg19.F90
│   ├── rrsw_kg20.F90
│   ├── rrsw_kg21.F90
│   ├── rrsw_kg22.F90
│   ├── rrsw_kg23.F90
│   ├── rrsw_kg24.F90
│   ├── rrsw_kg25.F90
│   ├── rrsw_kg26.F90
│   ├── rrsw_kg27.F90
│   ├── rrsw_kg28.F90
│   ├── rrsw_kg29.F90
│   ├── rrsw_ref.F90
│   ├── rrsw_tbl.F90
│   ├── rrsw_vsn.F90
│   ├── rrsw_wvn.F90
│   ├── rrtmg_lw_cldprmc.F90
│   ├── rrtmg_lw_cldprop.F90.safe
│   ├── rrtmg_lw_init.F90
│   ├── rrtmg_lw_k_g.F90
│   ├── rrtmg_lw_rad.F90
│   ├── rrtmg_lw_rad.F90.safe
│   ├── rrtmg_lw_rad.nomcica.F90.safe
│   ├── rrtmg_lw_rtrnmc.F90
│   ├── rrtmg_lw_rtrnmr.F90.safe
│   ├── rrtmg_lw_setcoef.F90
│   ├── rrtmg_lw_taumol.F90
│   ├── rrtmg_sw_cldprmc.F90
│   ├── rrtmg_sw_cldprop.F90.safe
│   ├── rrtmg_sw_init.F90
│   ├── rrtmg_sw_k_g.F90
│   ├── rrtmg_sw_rad.F90
│   ├── rrtmg_sw_reftra.F90
│   ├── rrtmg_sw_setcoef.F90
│   ├── rrtmg_sw_spcvmc.F90
│   ├── rrtmg_sw_taumol.F90
│   ├── rrtmg_sw_vrtqdr.F90
│   ├── test_aero_init
│   ├── test_aero_init.F
│   ├── test_arr_mult
│   └── test_arr_mult.F90
├── GeosUtil/
│   ├── CMakeLists.txt
│   ├── error_mod.F90
│   ├── file_mod.F90
│   ├── gc_grid_mod.F90
│   ├── henry_mod.F90
│   ├── ifort_errmsg.F90
│   ├── julday_mod.F90
│   ├── pressure_mod.F90
│   ├── print_mod.F90
│   ├── regrid_a2a_mod.F90
│   ├── time_mod.F90
│   ├── timers_mod.F90
│   ├── transfer_mod.F90
│   └── unitconv_mod.F90
├── Headers/
│   ├── .cvsignore
│   ├── .gitignore
│   ├── CMN_FJX_MOD.F90
│   ├── CMN_SIZE_mod.F90
│   ├── CMakeLists.txt
│   ├── aermass_container_mod.F90
│   ├── charpak_mod.F90
│   ├── diaglist_mod.F90
│   ├── dictionary_m.F90
│   ├── errcode_mod.F90
│   ├── input_opt_mod.F90
│   ├── inquireMod.F90
│   ├── phot_container_mod.F90
│   ├── physconstants.F90
│   ├── precision_mod.F90
│   ├── qfyaml_mod.F90
│   ├── registry_mod.F90
│   ├── registry_params_mod.F90
│   ├── roundoff_mod.F90
│   ├── species_database_mod.F90
│   ├── species_mod.F90
│   ├── state_chm_mod.F90
│   ├── state_diag_mod.F90
│   ├── state_grid_mod.F90
│   ├── state_met_mod.F90
│   └── taggeddiaglist_mod.F90
├── History/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── histcontainer_mod.F90
│   ├── histitem_mod.F90
│   ├── history_mod.F90
│   ├── history_netcdf_mod.F90
│   ├── history_util_mod.F90
│   ├── metahistcontainer_mod.F90
│   └── metahistitem_mod.F90
├── Interfaces/
│   ├── GCClassic/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── gc_classic_version.H.in
│   │   └── main.F90
│   ├── GCHP/
│   │   ├── CMakeLists.txt
│   │   ├── Chem_GridCompMod.F90
│   │   ├── Includes_Before_Run.H
│   │   ├── Registry/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Chem_Registry.rc
│   │   │   └── HEMCO_Registry.rc
│   │   ├── gchp_chunk_mod.F90
│   │   └── gchp_historyexports_mod.F90
│   └── GEOS/
│       ├── GEOSCHEMchem_Registry.rc
│       ├── Includes_After_Run.H
│       ├── Includes_Before_Run.H
│       ├── geos_CarbonInterface.F90
│       ├── geos_TaggedSpecies.F90
│       ├── geos_aerocoupler.F90
│       ├── geos_analysis.F90
│       └── geos_interface.F90
├── KPP/
│   ├── .cvsignore
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── Hg/
│   │   ├── CMakeLists.txt
│   │   ├── Hg.eqn
│   │   ├── Hg.kpp
│   │   ├── Hg_HetStateFuncs.F90
│   │   ├── Hg_RateLawFuncs.F90
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── gckpp_Function.F90
│   │   ├── gckpp_Global.F90
│   │   ├── gckpp_Initialize.F90
│   │   ├── gckpp_Integrator.F90
│   │   ├── gckpp_Jacobian.F90
│   │   ├── gckpp_JacobianSP.F90
│   │   ├── gckpp_LinearAlgebra.F90
│   │   ├── gckpp_Model.F90
│   │   ├── gckpp_Monitor.F90
│   │   ├── gckpp_Parameters.F90
│   │   ├── gckpp_Precision.F90
│   │   ├── gckpp_Rates.F90
│   │   └── gckpp_Util.F90
│   ├── OHreact_parser.py
│   ├── aciduptake/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── aciduptake.eqn
│   │   ├── aciduptake.kpp
│   │   └── aciduptake_DustChemFuncs.F90
│   ├── build_mechanism.sh
│   ├── carbon/
│   │   ├── CMakeLists.txt
│   │   ├── carbon.eqn
│   │   ├── carbon.eqn.default
│   │   ├── carbon.eqn.jacobian.5
│   │   ├── carbon.kpp
│   │   ├── carbon_Funcs.F90
│   │   ├── gckpp_Function.F90
│   │   ├── gckpp_Global.F90
│   │   ├── gckpp_Initialize.F90
│   │   ├── gckpp_Integrator.F90
│   │   ├── gckpp_Jacobian.F90
│   │   ├── gckpp_LinearAlgebra.F90
│   │   ├── gckpp_Model.F90
│   │   ├── gckpp_Monitor.F90
│   │   ├── gckpp_Parameters.F90
│   │   ├── gckpp_Precision.F90
│   │   ├── gckpp_Rates.F90
│   │   ├── gckpp_Util.F90
│   │   └── util/
│   │       └── expand_carbon_eqn.py
│   ├── custom/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── custom.eqn
│   │   └── custom.kpp
│   ├── fullchem/
│   │   ├── CHANGELOG_fullchem.md
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── commonIncludeVars.H
│   │   ├── fullchem.eqn
│   │   ├── fullchem.kpp
│   │   ├── fullchem_AutoReduceFuncs.F90
│   │   ├── fullchem_HetStateFuncs.F90
│   │   ├── fullchem_RateLawFuncs.F90
│   │   ├── fullchem_SulfurChemFuncs.F90
│   │   ├── gckpp_Function.F90
│   │   ├── gckpp_Global.F90
│   │   ├── gckpp_Initialize.F90
│   │   ├── gckpp_Integrator.F90
│   │   ├── gckpp_Jacobian.F90
│   │   ├── gckpp_JacobianSP.F90
│   │   ├── gckpp_LinearAlgebra.F90
│   │   ├── gckpp_Model.F90
│   │   ├── gckpp_Monitor.F90
│   │   ├── gckpp_Parameters.F90
│   │   ├── gckpp_Precision.F90
│   │   ├── gckpp_Rates.F90
│   │   ├── gckpp_Util.F90
│   │   └── rateLawUtilFuncs.F90
│   └── stubs/
│       ├── stub_Hg_HetStateFuncs.F90
│       ├── stub_aciduptake_DustChemFuncs.F90
│       ├── stub_carbon_Funcs.F90
│       ├── stub_fullchem_AutoReduceFuncs.F90
│       ├── stub_fullchem_HetStateFuncs.F90
│       └── stub_fullchem_SulfurChemFuncs.F90
├── LICENSE.txt
├── NcdfUtil/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── TestNcdfUtil.F90
│   ├── charpak_mod.F90
│   ├── julday_mod.F90
│   ├── m_do_err_out.F90
│   ├── m_netcdf_io_checks.F90
│   ├── m_netcdf_io_close.F90
│   ├── m_netcdf_io_create.F90
│   ├── m_netcdf_io_define.F90
│   ├── m_netcdf_io_get_dimlen.F90
│   ├── m_netcdf_io_handle_err.F90
│   ├── m_netcdf_io_open.F90
│   ├── m_netcdf_io_read.F90
│   ├── m_netcdf_io_readattr.F90
│   ├── m_netcdf_io_write.F90
│   └── ncdf_mod.F90
├── ObsPack/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   └── obspack_mod.F90
├── PKUCPL/
│   ├── .gitignore
│   ├── PKUCPL.F90
│   ├── PKUCPL.sh
│   ├── README
│   ├── Twoway.compile.sh
│   └── run_twoway
├── README.md
├── run/
│   ├── .gitignore
│   ├── CESM/
│   │   ├── HEMCO_Config.rc
│   │   ├── HISTORY.rc
│   │   ├── geoschem_config.yml
│   │   └── util/
│   │       ├── README
│   │       └── dep_data_file.cdl
│   ├── GCClassic/
│   │   ├── .gitignore
│   │   ├── HEMCO_Config.rc.templates/
│   │   │   ├── HEMCO_Config.rc.Hg
│   │   │   ├── HEMCO_Config.rc.POPs
│   │   │   ├── HEMCO_Config.rc.TransportTracers
│   │   │   ├── HEMCO_Config.rc.aerosol
│   │   │   ├── HEMCO_Config.rc.carbon
│   │   │   ├── HEMCO_Config.rc.fullchem
│   │   │   ├── HEMCO_Config.rc.gcap2_metfields
│   │   │   ├── HEMCO_Config.rc.gmao_metfields
│   │   │   ├── HEMCO_Config.rc.gmao_metfields_0125
│   │   │   ├── HEMCO_Config.rc.metals
│   │   │   └── HEMCO_Config.rc.tagO3
│   │   ├── HEMCO_Diagn.rc.templates/
│   │   │   ├── HEMCO_Diagn.rc.Hg
│   │   │   ├── HEMCO_Diagn.rc.POPs
│   │   │   ├── HEMCO_Diagn.rc.TransportTracers
│   │   │   ├── HEMCO_Diagn.rc.aerosol
│   │   │   ├── HEMCO_Diagn.rc.aerosol.onlineE
│   │   │   ├── HEMCO_Diagn.rc.carbon
│   │   │   ├── HEMCO_Diagn.rc.fullchem
│   │   │   ├── HEMCO_Diagn.rc.fullchem.onlineE
│   │   │   ├── HEMCO_Diagn.rc.metals
│   │   │   └── HEMCO_Diagn.rc.tagO3
│   │   ├── HISTORY.rc.templates/
│   │   │   ├── HISTORY.rc.Hg
│   │   │   ├── HISTORY.rc.POPs
│   │   │   ├── HISTORY.rc.TransportTracers
│   │   │   ├── HISTORY.rc.aerosol
│   │   │   ├── HISTORY.rc.carbon
│   │   │   ├── HISTORY.rc.fullchem
│   │   │   ├── HISTORY.rc.metals
│   │   │   └── HISTORY.rc.tagO3
│   │   ├── README.md
│   │   ├── archiveRun.sh
│   │   ├── createRunDir.sh
│   │   ├── geoschem_config.yml.templates/
│   │   │   ├── geoschem_config.yml.Hg
│   │   │   ├── geoschem_config.yml.POPs
│   │   │   ├── geoschem_config.yml.TransportTracers
│   │   │   ├── geoschem_config.yml.aerosol
│   │   │   ├── geoschem_config.yml.carbon
│   │   │   ├── geoschem_config.yml.fullchem
│   │   │   ├── geoschem_config.yml.metals
│   │   │   └── geoschem_config.yml.tagO3
│   │   ├── getRunInfo
│   │   ├── gitignore
│   │   ├── init_rd.sh
│   │   ├── runScriptSamples/
│   │   │   └── operational_examples/
│   │   │       ├── harvard_cannon/
│   │   │       │   ├── README
│   │   │       │   ├── gcclassic.gcc10_cannon_rocky.env
│   │   │       │   ├── gcclassic.gcc12_cannon_rocky.env
│   │   │       │   ├── gcclassic.gcc14_cannon_rocky.env
│   │   │       │   ├── geoschem.benchmark.run
│   │   │       │   ├── geoschem.run
│   │   │       │   ├── geoschem.vtune-hotspots.run
│   │   │       │   ├── geoschem.vtune-perf-snapshot.run
│   │   │       │   ├── geoschem.vtune-threading.run
│   │   │       │   ├── geoschem.vtune-uarch-explore.run
│   │   │       │   └── parallelTest.sh
│   │   │       ├── msu_orion/
│   │   │       │   ├── README
│   │   │       │   ├── gcclassic.carbon.build
│   │   │       │   ├── gcclassic.intel-2022.2.1.env
│   │   │       │   └── gcclassic.run
│   │   │       ├── nasa_discover/
│   │   │       │   ├── README
│   │   │       │   ├── gcclassic.build
│   │   │       │   ├── gcclassic.run
│   │   │       │   ├── geoschem.SLES15.stack-gcc-12.3.0.env
│   │   │       │   └── geoschem.SLES15.stack-intel-2021.10.0.env
│   │   │       ├── ncar_derecho/
│   │   │       │   ├── gcclassic.intel2024.env
│   │   │       │   └── geoschem.run
│   │   │       └── york_viking/
│   │   │           ├── README
│   │   │           ├── gcclassic.intel.2021b.viking.env
│   │   │           └── gcclassic.intel.sbatch
│   │   └── setupForRestarts.sh
│   ├── GCHP/
│   │   ├── .gitignore
│   │   ├── CAP.rc.template
│   │   ├── ESMF.rc
│   │   ├── ExtData.rc.templates/
│   │   │   ├── ExtData.rc.TransportTracers
│   │   │   ├── ExtData.rc.carbon
│   │   │   ├── ExtData.rc.fullchem
│   │   │   └── ExtData.rc.tagO3
│   │   ├── ExtData2G.yaml.templates/
│   │   │   └── extdata.yaml.TransportTracers
│   │   ├── GCHP.rc.template
│   │   ├── HEMCO_Config.rc.templates/
│   │   │   ├── HEMCO_Config.rc.TransportTracers
│   │   │   ├── HEMCO_Config.rc.carbon
│   │   │   ├── HEMCO_Config.rc.fullchem
│   │   │   └── HEMCO_Config.rc.tagO3
│   │   ├── HEMCO_Diagn.rc.templates/
│   │   │   ├── HEMCO_Diagn.rc.TransportTracers
│   │   │   ├── HEMCO_Diagn.rc.carbon
│   │   │   ├── HEMCO_Diagn.rc.fullchem
│   │   │   └── HEMCO_Diagn.rc.tagO3
│   │   ├── HISTORY.rc.templates/
│   │   │   ├── HISTORY.rc.TransportTracers
│   │   │   ├── HISTORY.rc.carbon
│   │   │   ├── HISTORY.rc.fullchem
│   │   │   └── HISTORY.rc.tagO3
│   │   ├── README.md
│   │   ├── archiveRun.sh
│   │   ├── checkRunSettings.sh
│   │   ├── createRunDir.sh
│   │   ├── geoschem_config.yml.templates/
│   │   │   ├── geoschem_config.yml.TransportTracers
│   │   │   ├── geoschem_config.yml.carbon
│   │   │   ├── geoschem_config.yml.fullchem
│   │   │   └── geoschem_config.yml.tagO3
│   │   ├── gitignore
│   │   ├── init_rd.sh
│   │   ├── input.nml
│   │   ├── logging.yml
│   │   ├── runScriptSamples/
│   │   │   ├── README
│   │   │   ├── gchp.batch_job.sh
│   │   │   ├── gchp.local.run
│   │   │   └── operational_examples/
│   │   │       ├── README
│   │   │       ├── aws_pcluster/
│   │   │       │   ├── README
│   │   │       │   ├── execute.sh
│   │   │       │   └── gchp.run
│   │   │       ├── harvard_cannon/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.gcc10_openmpi4_cannon_rocky.env
│   │   │       │   ├── gchp.gcc12_openmpi4_cannon_rocky.env
│   │   │       │   ├── gchp.run
│   │   │       │   └── gchp.submit_consecutive_jobs.sh
│   │   │       ├── icl_rcshpc/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.env
│   │   │       │   └── gchp.run
│   │   │       ├── mit_hex/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.env_HEX
│   │   │       │   └── gchp.run_HEX
│   │   │       ├── mit_svante/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.env_SVANTE
│   │   │       │   └── gchp.run_SVANTE.sh
│   │   │       ├── msu_orion/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.carbon.build
│   │   │       │   ├── gchp.intel-2024.1.0.env
│   │   │       │   └── gchp.run
│   │   │       ├── nasa_discover/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.build
│   │   │       │   ├── gchp.run
│   │   │       │   ├── geoschem.SLES15.stack-gcc-12.3.0.env
│   │   │       │   └── geoschem.SLES15.stack-intel-2021.10.0.env
│   │   │       ├── nasa_pleiades/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.pleiades.env
│   │   │       │   └── gchp.pleiades.run
│   │   │       ├── nci_gadi/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.pbs.run
│   │   │       │   └── gchp_env_nci
│   │   │       ├── wustl_compute1/
│   │   │       │   ├── README
│   │   │       │   ├── c360_requeuing.sh
│   │   │       │   ├── execute.sh
│   │   │       │   └── gchp.batch_job.sh
│   │   │       ├── wustl_compute2/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.run
│   │   │       │   └── gchp_202505_hpcx_openmpi4_serial_IO.env
│   │   │       └── york_viking/
│   │   │           ├── README
│   │   │           ├── gchp.intel.2021b.viking.env
│   │   │           └── gchp.intel.sbatch
│   │   ├── setCommonRunSettings.sh.template
│   │   ├── setEnvironmentLink.sh
│   │   ├── setRestartLink.sh
│   │   └── utils/
│   │       ├── extra_static_files.txt
│   │       ├── extra_templates.txt
│   │       ├── listInputDataFiles
│   │       └── simulation-status
│   ├── GEOS/
│   │   ├── .gitignore
│   │   ├── GEOSCHEMchem_ExtData.rc
│   │   ├── GEOSCHEMchem_ExtData.yaml
│   │   ├── GEOSCHEMchem_GridComp.rc
│   │   ├── GEOSChem_TaggedNOx.rc
│   │   ├── HEMCO_Config.rc
│   │   ├── HEMCO_DiagnFile.rc
│   │   ├── HISTORY_CFv2.rc
│   │   ├── TransportTracers/
│   │   │   ├── GEOSCHEMchem_ExtData.rc
│   │   │   ├── GEOSCHEMchem_ExtData.yaml
│   │   │   ├── GEOSCHEMchem_GridComp.rc
│   │   │   ├── HEMCO_Config.rc
│   │   │   ├── HEMCO_DiagnFile.rc
│   │   │   ├── HISTORY.rc
│   │   │   └── geoschem_config.yml
│   │   ├── geoschem_analysis_cdas.yml
│   │   ├── geoschem_analysis_geosit.yml
│   │   ├── geoschem_config.yml
│   │   └── scripts/
│   │       └── create_ch4_offset_file.py
│   ├── WRF/
│   │   └── fullchem/
│   │       ├── HEMCO_Config.rc
│   │       ├── HEMCO_Diagn.rc
│   │       ├── HISTORY.rc
│   │       └── geoschem_config.yml
│   └── shared/
│       ├── .gitignore
│       ├── cleanRunDir.sh
│       ├── download_data.gcap2.40L.yml
│       ├── download_data.py
│       ├── download_data.yml
│       ├── input.apm
│       ├── kpp_standalone_interface.yml
│       ├── metrics.py
│       ├── newUserRegistration.sh
│       ├── rtd_species_by_simulation.py
│       ├── settings/
│       │   ├── 0125x015625.txt
│       │   ├── 025x03125.txt
│       │   ├── 05x0625.txt
│       │   ├── 2x25.txt
│       │   ├── 4x5.txt
│       │   ├── POPs_BaP.txt
│       │   ├── POPs_PHE.txt
│       │   ├── POPs_PYR.txt
│       │   ├── gcap2_hemco.txt
│       │   ├── geosfp/
│       │   │   ├── README
│       │   │   ├── advection_met/
│       │   │   │   ├── geosfp.derived_1hr_c720_wind_PS_SPHU.txt
│       │   │   │   ├── geosfp.preprocessed_3hr_0.25x0.625_PS_SPHU.txt
│       │   │   │   ├── geosfp.preprocessed_3hr_0.25x0.625_wind.txt
│       │   │   │   ├── geosfp.raw_1hr_c720_mass_flux_PS_SPHU_C.txt
│       │   │   │   ├── geosfp.raw_3hr_0.25x0.625_PS_SPHU.txt
│       │   │   │   └── geosfp.raw_3hr_0.25x0.625_wind.txt
│       │   │   ├── geosfp.nonadv_preprocessed_ll.txt
│       │   │   └── geosfp.nonadv_raw_ll.txt
│       │   ├── geosit/
│       │   │   ├── README
│       │   │   ├── advection_met/
│       │   │   │   ├── geosit.preprocessed_1hr_c180_mass_flux.txt
│       │   │   │   ├── geosit.preprocessed_3hr_c180_wind.txt
│       │   │   │   ├── geosit.raw_1hr_c180_mass_flux.txt
│       │   │   │   └── geosit.raw_3hr_c180_wind.txt
│       │   │   ├── discover/
│       │   │   │   ├── geosit.nonadv_raw_c180.txt
│       │   │   │   ├── geosit.raw_0.5x0.625.txt
│       │   │   │   ├── geosit.raw_1hr_c180_mass_flux.txt
│       │   │   │   └── geosit.raw_3hr_c180_wind.txt
│       │   │   ├── geosit.nonadv_preprocessed_c180.txt
│       │   │   ├── geosit.nonadv_raw_c180.txt
│       │   │   ├── geosit.preprocessed_0.5x0.625.txt
│       │   │   └── geosit.raw_0.5x0.625.txt
│       │   ├── global_grid.txt
│       │   ├── gmao_hemco.txt
│       │   ├── merra2.txt
│       │   ├── modele2.1.txt
│       │   └── nested_grid.txt
│       ├── setupConfigFiles.sh
│       ├── singleCarbonSpecies.sh
│       ├── species_database.yml
│       ├── species_database_apm.yml
│       └── species_database_tomas.yml
└── test/
    ├── .gitignore
    ├── README.md
    ├── difference/
    │   ├── README.md
    │   └── diffTest.sh
    ├── integration/
    │   ├── GCClassic/
    │   │   ├── README.md
    │   │   ├── README.testroot.md
    │   │   ├── integrationTest.sh
    │   │   ├── integrationTestCompile.sh
    │   │   ├── integrationTestCreate.sh
    │   │   └── integrationTestExecute.sh
    │   ├── GCHP/
    │   │   ├── README.md
    │   │   ├── README.testroot.md
    │   │   ├── integrationTest.sh
    │   │   ├── integrationTestCompile.sh
    │   │   ├── integrationTestCreate.sh
    │   │   └── integrationTestExecute.sh
    │   └── README.md
    ├── parallel/
    │   ├── GCClassic/
    │   │   ├── README.md
    │   │   ├── README.testroot.md
    │   │   ├── parallelTest.sh
    │   │   ├── parallelTestCompile.sh
    │   │   ├── parallelTestCreate.sh
    │   │   └── parallelTestExecute.sh
    │   └── README.md
    └── shared/
        ├── .gitignore
        ├── README.md
        ├── alldiags/
        │   └── Planeflight.dat.20190701
        ├── commonFunctionsForTests.sh
        └── utils/
            └── cannon/
                ├── integrationTest/
                │   ├── README.md
                │   ├── redoIntegrationTestCompile.sh
                │   └── redoIntegrationTestExecute.sh
                └── parallelTest/
                    ├── README.md
                    ├── redoParallelTestCompile.sh
                    └── redoParallelTestExecute.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: Bug or Issue Report
description: Report a bug or issue with GEOS-Chem
title: "Put a one-line description here"
labels: ["category: Bug"]
body:
  - type: input
    id: name
    attributes:
      label: Your name
    validations:
      required: true
  - type: input
    id: affiliation
    attributes:
      label: Your affiliation
    validations:
      required: true
  - type: textarea
    id: what-happened
    attributes:
      label: What happened? What did you expect to happen?
      placeholder: Describe your issue
    validations:
      required: true
  - type: textarea
    id: steps-to-reproduce
    attributes:
      label: What are the steps to reproduce the bug?
      placeholder: Explain what you did
    validations:
      required: true
  - type: textarea
    id: log-files
    attributes:
      label: Please attach any relevant configuration and log files.
      description: Drag and drop files like the GEOS-Chem log file, geoschem_config.yml, HEMCO_Config.rc, HISTORY.rc, and build_info/summarize_build here. You may need to rename files to end in .txt first.
    validations:
      required: false
  - type: input
    id: version
    attributes:
      label: What GEOS-Chem version were you using?
      placeholder: e.g. 14.4.0
    validations:
      required: true
  - type: dropdown
    id: machine
    attributes:
      label: What environment were you running GEOS-Chem on?
      multiple: true
      options:
        - Local cluster
        - AWS
        - Personal computer
        - Other (please explain below)
    validations:
      required: true
  - type: input
    id: compiler-version
    attributes:
      label: What compiler and version were you using?
      placeholder: e.g. gcc 10.2.0, ifort 19.0.5.281
    validations:
      required: true
  - type: dropdown
    id: implemenation
    attributes:
      label: Will you be addressing this bug yourself?
      description: If Yes, please also assign this issue to yourself (if possible)
      multiple: false
      options:
        - "Yes"
        - "Yes, but I will need some help"
        - "No"
    validations:
      required: true
  - type: dropdown
    id: configuration
    attributes:
      label: In what configuration were you running GEOS-Chem?
      description: If you are experiencing issues with GEOS-Chem in an external model, please contact that model's support. This repository is for tracking issues related to the GEOS-Chem science code base.
      multiple: false
      options:
        - GCClassic
        - GCHP
        - Other (please explain in additional information section below)
    validations:
      required: true
  - type: dropdown
    id: simulation
    attributes:
      label: What simulation were you running?
      description: If using full chemistry, specify extra options like benchmark, complexSOA, etc. in the additional information section below
      multiple: false
      options:
        - Full chemistry
        - Aerosol
        - Carbon 
        - Hg
        - POPs
        - TagO3
        - TransportTracers
        - Trace metals
        - CH4
        - CO2
        - TagCO
    validations:
      required: true
  - type: input
    id: resolution
    attributes:
      label: As what resolution were you running GEOS-Chem?
      description: If running a nested grid simulation, please also specify the region.
      placeholder: "e.g. 4x5, 2x2.5, 0.25x0.3125 NA, c48, c180"
    validations:
      required: true
  - type: dropdown
    id: meteorology
    attributes:
      label: What meterology fields did you use?
      multiple: false
      options:
        - GEOS-FP
        - GEOS-IT
        - MERRA-2
        - GCAP 2.0
        - Other (please explain in additional information section below)
    validations:
      required: true
  - type: textarea
    id: additional-info
    attributes:
      label: Additional information
      description: Please provide any additional information here that you think might be relevant.
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: GEOS-Chem user manual
    url: https://geos-chem.readthedocs.io/en/stable
    about: Click this link to read the GEOS-Chem user manual.


================================================
FILE: .github/ISSUE_TEMPLATE/new-feature.yml
================================================
name: Feature Request
description: Request a new GEOS-Chem feature
title: "Put a one-line description here"
labels: ["category: Feature Request"]
body:
  - type: input
    id: name
    attributes:
      label: Your name
    validations:
      required: true
  - type: input
    id: affiliation
    attributes:
      label: Your affiliation
    validations:
      required: true
  - type: textarea
    id: feature-description
    attributes:
      label: Provide a clear and concise overview of the new feature requested.
    validations:
      required: true
  - type: textarea
    id: reference
    attributes:
      label: Reference(s)
      description: If this is a science update, please provide a literature citation.
      placeholder: "e.g. Bey et al., Global modeling of tropospheric chemistry with assimilated meteorology: Model description and evaluation, J. Geophys. Res., 106, 23,073-23,096, 2001."
    validations:
      required: false
  - type: dropdown
    id: implemenation
    attributes:
      label: Will you be implementing this feature yourself?
      description: If Yes, please also assign this issue to yourself (if possible)
      multiple: false
      options:
        - "Yes"
        - "Yes, but I will need some help"
        - "No"
    validations:
      required: true
  - type: textarea
    id: additional-info
    attributes:
      label: Additional information
      description: Please provide any additional information here that you think might be relevant.
    validations:
      required: false

================================================
FILE: .github/ISSUE_TEMPLATE/question-discussion.yml
================================================
name: Question or Discussion
description: Ask a question about GEOS-Chem or start a discussion
title: "Put a one-line description here"
labels: ["category: Question"]
body:
  - type: input
    id: name
    attributes:
      label: Your name
    validations:
      required: true
  - type: input
    id: affiliation
    attributes:
      label: Your affiliation
    validations:
      required: true
  - type: textarea
    id: description
    attributes:
      label: Please provide a clear and concise description of your question or discussion topic.
    validations:
      required: true

================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
### Name and Institution (Required)

Name:
Institution:

### Describe the update

Please provide a clear and concise overview of the update.

### Expected changes

Please provide details on how this update will impact model output and include plots or tables as needed.

### Reference(s)

If this is a science update, please provide a literature citation.

### Related Github Issue

Please link to the corresponding Github issue(s) here. If fixing a bug, there should be an issue describing it with steps to reproduce.


================================================
FILE: .github/workflows/stale.yml
================================================
# This workflow warns and then closes issues that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Mark stale issues

on:
  schedule:
  - cron: '0 0 * * *' # Run every night at midnight

jobs:
  stale:

    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write

    steps:
    - uses: actions/stale@v10
      with:
        repo-token: ${{ secrets.GITHUB_TOKEN }}
        stale-issue-label: 'stale'
        exempt-issue-labels: 'category: Discussion,category: Feature Request,deferred,help needed: Open Research Problem,help needed: Request Input from Community,never stale,TODO: Documentation'
        days-before-issue-stale: 30
        days-before-issue-close: 7
        stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. If there are no updates within 7 days it will be closed. You can add the "never stale" tag to prevent the issue from closing this issue.'
        close-issue-message: 'Closing due to inactivity'
        days-before-pr-stale: -1
        days-before-pr-close: -1


================================================
FILE: .gitignore
================================================
HEMCO/.git/
HEMCO/.github/
HEMCO/.gitignore
*.[oax]
*.mod
*.MOD
*~*
*.swp
*.bak
*.patch
*.diff
gcclassic
diffs
bak
misc
*.pp.*
*.pdb
*.inst.*
*.continue.*
*.ppk
*.log
bin/*
build/
build_*/
*___.h
*___.rc
core.*
*.exe

================================================
FILE: .gitmodules
================================================
[submodule "KPP/standalone"]
	path = KPP/standalone
	url = https://github.com/geoschem/KPP-Standalone


================================================
FILE: .zenodo.json
================================================
{
    "access_right": "open",
    "creators": [
	{
	    "name": "The International GEOS-Chem User Community"
	}
    ],
    "description": "GEOS-Chem (science codebase)",
    "keywords": [
	"atmospheric-chemistry",
	"atmospheric-composition",
	"atmospheric-modeling",
	"aws",
	"climate-modeling",
	"cloud-computing",
	"geos-chem",
	"atmospheric-computing",
	"scientific-computing"
    ],
    "license": "mit-license",
    "upload_type": "software"
}


================================================
FILE: APM/.gitignore
================================================
*.[oax]
*.mod
*.MOD
*~*
geos
geostomas
geosapm
*.pp.*
*.pdb
*.inst.*
*.continue.*
*.ppk
core.*


================================================
FILE: APM/CMakeLists.txt
================================================
add_library(APM STATIC EXCLUDE_FROM_ALL
	apm_albd_mod.F
	apm_ATHN_mod.F
	apm_coag_mod.F90
	apm_grow_mod.F	
	apm_icen_mod.F90
	apm_init_mod.F
	apm_mixactivate.F90
	apm_nucl_mod.F
	apm_opti_mod.F
	apm_phys_mod.F
	apm_radf_mod.F
	apm_rrtmg_mods.F90
	apm_rrtmg_src.F90
	apm_rrtmg_sw.F90
	apm_TIMN_mod.F
	module_data_mosaic_asect.F90
	module_data_mosaic_other.F90
	module_data_mosaic_therm.F90
	module_mosaic_therm.F90
)
target_link_libraries(APM
	PUBLIC GeosUtil
)



================================================
FILE: APM/apm_ATHN_mod.F
================================================
#ifdef APM
      MODULE APM_ATHN_MOD
      IMPLICIT NONE

      !=================================================================
      ! MODULE PRIVATE DECLARATIONS -- keep certain internal variables
      ! and routines from being seen outside "apm_nucl_mod.f"
      !=================================================================

!  Module Variables:
!  ============================================================================
!  Parameters
!  (1 ) MC   : NUMBER OF POINTS IN H2SO4 CONCENTRATION DIMENSION
!  (2 ) MRH  : NUMBER OF POINTS IN RELATIVE HUMIDITY DIMENSION
!  (3 ) MT   : NUMBER OF POINTS IN TEMPERATURE DIMENSION
!  (4 ) MD   : NUMBER OF POINTS IN [DMA] DIMENSION
!  (5 ) MS   : NUMBER OF POINTS IN SURFACE AREA DIMENSION

!  Arrays
!  (6 ) C   : VALUES AT POINTS IN H2SO4 CONCENTRATION DIMENSION
!  (7 ) RH  : VALUES AT POINTS IN RELATIVE HUMIDITY DIMENSION
!  (8 ) T   : VALUES AT POINTS IN TEMPERATURE DIMENSION
!  (9 ) D   : VALUES AT POINTS IN [DMA] DIMENSION
!  (10) S   : VALUES AT POINTS IN SURFACE AREA DIMENSION

!  (11) XJATHN : AMINE TERNARY NUCLEATION RATES (cm-3s-1) AT ALL POINTS IN 5-D SPACE

!  Module Routines:
!  ============================================================================
!  (1 ) YUJATHN     : INTERPOLAION SCHEME TO FIND JATHN FROM LOOKUP TABLE
!  (2 ) READJATHN   : READ IN THE ATHN LOOKUP TABLE
!
!  NOTES:
!  (1 ) ....
!******************************************************************************


      ! Make everything PRIVATE ...
      PRIVATE

      ! ... except these variables ...
!      PUBLIC ::

      ! ... and these routines
      PUBLIC :: YUJATHN
      PUBLIC :: READJATHN

      !=================================================================
      ! MODULE VARIABLES
      !=================================================================
      ! Parameters
      INTEGER, PARAMETER   :: MC  = 31
      INTEGER, PARAMETER   :: MRH = 11
      INTEGER, PARAMETER   :: MT  = 31
      INTEGER, PARAMETER   :: MD  = 31
      INTEGER, PARAMETER   :: MS  = 12

      ! Arrays
      REAL*8               :: C(MC),RH(MRH),T(MT),D(MD),S(MS)
      REAL*8               :: XJATHN(MC,MRH,MT,MD,MS)

      CHARACTER(LEN=255)   :: DATA_DIR_1x1
      !=================================================================
      ! MODULE ROUTINES -- follow below the "CONTAINS" statement
      !=================================================================
      CONTAINS


! *********************************************************************
! ATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHN
! *********************************************************************
!
	SUBROUTINE YUJATHN(X0,Y0,Z0,U0,V0,XJ0)
!
!      This subroutine is to calculate rates of amine ternary homogeneous 
!      nucleation (ATHN) from lookup tables
!      using multiple-variable interpolation scheme
!
!       WRITTEN by Fangqun Yu, SUNY-Albany, 2014
!       Email: fyu@albany.edu
!       Updated 2015
! References: 
!
! Input:
! X0 = [H2SO4] in #/cm3  (5E5-5E8)
! Y0 = RH in % (0.5-99.5)
! Z0 = T (in K) (250-310)
! U0 = [DMA] (ppt) (0.1-100)
! V0 = S (um2/cm3) (1-1000)
!
! OUTPUT:
! XJ0: Nucleation rate (#/cm3s)
!
!
        REAL*8 :: X0,Y0,Z0,U0,V0,XJ0
        REAL*8  :: X,Y,Z,U,V
        REAL*8  :: VOL,FRACT
        REAL*8  :: dx1,dx2,dy1,dy2,dz1,dz2,du1,du2,dv1,dv2
        REAL*8  :: dx,dy,dz,du,dv

        INTEGER :: IC1, IC2, JRH1, JRH2, KT1, KT2, ID1, ID2, IS1,IS2
        INTEGER :: IC, JRH, KT, ID,IS
!
! to avoid the input values to be changed due to out of the range reset
!
        X = X0
        Y = Y0
        Z = Z0
        U = U0
        V = V0
!
! The lookup table should cover almost all possible conditions in
! ambient troposphere. For the extreme conditions that are out of 
! the ranges of the lookup table, we either reset the inputed 
! parameters in a way that may underestmate the JATHN values or
! set the nucleation rate to 1.E-20 cm-3s-1.
!
        IF(X.LT.C(1)) THEN
!           WRITE(6,10) X, C(1)
           XJ0 = 1.E-20
           RETURN
        ELSEIF(X.GT.C(MC)) THEN
!           WRITE(6,11) X, C(MC), C(MC)
           X =C(MC)
        ENDIF

        IF(Y.LT.RH(1)) THEN
!           WRITE(6,12) Y, RH(1)
           XJ0 = 1.E-20
           RETURN
        ELSEIF(Y.GT.RH(MRH)) THEN
!           WRITE(6,13) Y, RH(MRH), RH(MRH)
           Y =RH(MRH)
        ENDIF

        IF(Z.LT.T(1)) THEN
!           WRITE(6,14) Z, T(1), T(1)
           Z =T(1)
        ELSEIF(Z.GT.T(MT)) THEN
!           WRITE(6,15) Z, T(MT)
           XJ0 = 1.E-20
           RETURN
        ENDIF

        IF(U.LT.D(1)) THEN
           WRITE(6,16) U, D(1)
           XJ0 = 1.E-20
           RETURN
        ELSEIF(U.GT.D(MD)) THEN
!           WRITE(6,17) U, D(MD)
           U =D(MD)
        ENDIF

        IF(V.LT.S(1)) THEN 
!           WRITE(86,18) V, S(1), S(1)
           V =S(1)
        ELSEIF(V.GT.S(MS)) THEN
!           WRITE(86,19) V, S(MS), S(MS)
           V =S(MS)
        ENDIF



 10     FORMAT("ATHN WARNING: INPUTED [H2SO4]=",ES9.2,"<",ES9.2,
     &     ", set JATHN to 1.E-20 cm-3s-1")
 11     FORMAT("ATHN WARNING: INPUTED [H2SO4]=",ES9.2,">",ES9.2,
     &     " set it to ",ES9.2)
 12     FORMAT("ATHN WARNING: INPUTED RH =",F5.1,"% <",F5.1,
     &     "%, set JATHN to 1.E-20 cm-3s-1")
 13     FORMAT("ATHN WARNING: INPUTED RH =",F5.1,"% >",F5.1,
     &     "% set it to ",F5.1,"%")
 14     FORMAT("ATHN WARNING: INPUTED T =",F6.1,"K <",F6.1,
     &     "K set it to ",F6.1,"K")
 15     FORMAT("ATHN WARNING: INPUTED T =",F6.1,"K >",F6.1,
     &     "K, set JATHN to 1.E-20 cm-3s-1")
 16     FORMAT("ATHN WARNING: INPUTED D =",F6.1," <",F6.1,
     &     " ppt , set JATHN to 1.E-20 cm-3s-1")
 17     FORMAT("ATHN WARNING: INPUTED D =",F6.1," >",F6.1,
     &     " ppt set it to ",F6.1)
 18     FORMAT("ATHN WARNING: INPUTED S =",F6.1," <",F6.1,
     &     " um2/cm3 set it to ",F6.1)
 19     FORMAT("ATHN WARNING: INPUTED S =",F6.1," >",F6.1,
     &     " um2/cm3 set it to ",F6.1)


        IC1 =MAX0(INT(1.+10.*LOG10(X/C(1))),1)
        IC2 = MIN0(IC1 + 1,MC)
        IF(IC2.EQ.MC) IC1=MC-1
        
        IF(Y.LT.RH(2)) THEN
           JRH1 = 1.
        ELSE
         JRH1 = MAX0(INT((Y-RH(2))/10.+2.),2)
        ENDIF
        JRH2 = MIN0(JRH1 + 1,MRH)
        IF(JRH2.EQ.MRH) JRH1=MRH-1

        KT1 = MAX0(INT(Z/2.-124.0),1)
        KT2 = MIN0(KT1 + 1,MT)
        IF(KT2.EQ.MT) KT1=MT-1
!
        ID1 = MAX0(INT(1.+10.*LOG10(U/D(1))),1)
        ID2 = MIN0(ID1 + 1,MD)
        IF(ID2.EQ.MD) ID1=MD-1

!
        IF(V.LT.10.0) THEN
          IS1 =1.
        ELSE
          IS1 = MAX0(INT(2.+5.*LOG10(V/10.)),2)
        ENDIF
        IS2 = MIN0(IS1 + 1,MS)
        IF(IS2.EQ.MS) IS1=MS-1

!
	dx1 = LOG10(X/C(IC1))   ! logJ log[H2SO4] interpolation
	dx2 = LOG10(C(IC2)/X)
	dy1 = LOG10(Y/RH(JRH1))
	dy2 = LOG10(RH(JRH2)/Y)
	dz1 = Z-T(KT1)
	dz2 = T(KT2)-Z

        du1 = LOG10(U/D(ID1))
        du2 = LOG10(D(ID2)/U)
        dv1 = LOG10(V/S(IS1))
        dv2 = LOG10(S(IS2)/V)
!
        XJ0 = 0.
!
        VOL = (dx1+dx2)*(dy1+dy2)*(dz1+dz2)*(du1+du2)*(dv1+dv2)
        DO KT = KT1,KT2
          IF(KT.EQ.KT1) THEN
            dz = dz2
	  ELSE
            dz = dz1
          ENDIF
      	  DO JRH = JRH1,JRH2
            IF(JRH.EQ.JRH1) THEN
              dy = dy2
	    ELSE
              dy = dy1
            ENDIF
            DO IC = IC1,IC2
              IF(IC.EQ.IC1) THEN
                dx = dx2
	      ELSE
                dx = dx1
              ENDIF

	      DO ID =ID1, ID2
                IF(ID.EQ.ID1) THEN
                  du = du2
	        ELSE
                  du = du1
                ENDIF
                DO IS =IS1, IS2
                  IF(IS.EQ.IS1) THEN
                    dv = dv2
                  ELSE
                    dv = dv1
                  ENDIF

                  FRACT = dx*dy*dz*du*dv/VOL 
                  XJ0 = XJ0 + FRACT*XJATHN(IC,JRH,KT,ID,IS)
!                WRITE(6,30)IC,JRH,KT,ID,IS,10.**XJATHN(IC,JRH,KT,ID,IS),
!     &                    FRACT

	        ENDDO
	      ENDDO
            ENDDO
	  ENDDO
	ENDDO
!
! Log10J -->J
         XJ0 = 10.**XJ0
!
 30    FORMAT(I3, I3, I3, I3, I3, 10(1PE10.3))
 20    FORMAT(10(1PE10.3))
        RETURN 
        END

! *********************************************************************
        SUBROUTINE READJATHN(DATA_DIR_1x1a)
!     
!       WRITTEN by Fangqun Yu, SUNY-Albany, 2014, 2015
!
!  ============================================================================

        CHARACTER(LEN=255)   :: DATA_DIR_1x1a
        CHARACTER*999 YPATH
        INTEGER :: IC, IRH, IT, ID, IS
        REAL*8  :: C11,D11,S11,ratio
        
        DATA_DIR_1x1= DATA_DIR_1x1a
        YPATH = TRIM(DATA_DIR_1x1)//'/APM_data_201906/ATHN20150328/'

        WRITE(6,*)"Read ATHN look-up tables"

        open(31,file=TRIM(YPATH)//'YuATHN_J5D.txt',form='formatted')
        open(41,file=TRIM(YPATH)//'YuATHN_1H2SO4.txt',form='formatted')
        open(42,file=TRIM(YPATH)//'YuATHN_2RH.txt',form='formatted')
        open(43,file=TRIM(YPATH)//'YuATHN_3T.txt',form='formatted')
        open(44,file=TRIM(YPATH)//'YuATHN_4DMA.txt',form='formatted')
        open(45,file=TRIM(YPATH)//'YuATHN_5S.txt',form='formatted')

!
        READ(41,100)(C(IC),IC=1,MC)
        WRITE(6,*)"[H2SO4](IC), IC=1, ", MC, ":"
        WRITE(6,100)(C(IC),IC=1,MC)
!
        READ(42,100)(RH(IRH),IRH=1,MRH)
        WRITE(6,*)"RH(I), I=1, ", MRH, ":"
        WRITE(6,100)(RH(IRH),IRH=1,MRH)
!
        READ(43,100)(T(IT),IT=1,MT)
        WRITE(6,*)"T(I), I=1, ", MT, ":"
        WRITE(6,100)(T(IT),IT=1,MT)
!
        READ(44,100)(D(ID),ID=1,MD)
        WRITE(6,*)"D(I), I=1, ", MD, ":"
        WRITE(6,100)(D(ID),ID=1,MD)
!
        READ(45,100)(S(IS),IS=1,MS)
        WRITE(6,*)"S(I), I=1, ", MS, ":"
        WRITE(6,100)(S(IS),IS=1,MS)

!
! Use the formula to calculate C and D to get values with more digits, otherwise
! may cause problem when input C and D are very clsoe to C(IC),D(ID) as
! IC and ID are decided with formula
!
        C(1) = 5.0E5
        DO IC = 2, MC
           C11 = C(IC)                                                          
           RATIO = 10.**(0.1)
           C(IC) = C(IC-1)*RATIO

           IF(abs(1.-C11/C(IC)).GT.0.02) THEN                                  
              write(6,*)"need check JATHN look-up table inputs"                  
              stop                                                              
           ENDIF                                                                
        ENDDO

        DO ID = 1, MD
           D11 = D(ID)                                                          
           D(ID) = 0.1*10.**(0.1*float(ID-1))
           IF(abs(1.-D11/D(ID)).GT.0.02) THEN
              write(6,*)"need check JATHN look-up table inputs"
              stop
           ENDIF
        ENDDO

        DO IS = 1, MS
           S11 = S(IS)                                                          
           IF(IS.EQ.1) THEN
              S(1) =1.0 
           ELSE
              S(IS) = 10.*100.**(0.1*float(IS-2))
           ENDIF
           IF(abs(1.-S11/S(IS)).GT.0.02) THEN
              write(6,*)"need check JATHN look-up table inputs"
              stop
           ENDIF
        ENDDO 

!
! Formatted 5-D Table
!
        DO IT = 1,MT
          DO IRH = 1,MRH
            DO IC =1, MC
              DO IS =1, MS
 	        READ(31,201)(XJATHN(IC,IRH,IT,ID,IS),ID =1,MD)
                DO ID=1, MD
! Due to high sensitivity of J to key parameters, use logJ to interpolate

                  XJATHN(IC,IRH,IT,ID,IS)=LOG10(XJATHN(IC,IRH,IT,ID,IS))
                ENDDO
	      ENDDO
	    ENDDO
          ENDDO
	ENDDO

        CLOSE(31)
        CLOSE(41)
        CLOSE(42)
        CLOSE(43)
        CLOSE(44)
        CLOSE(45)
!
 100    FORMAT(100(1PE10.2))
 201    FORMAT(100(1PE9.2))
 202    FORMAT(100F5.1)
 203    FORMAT(100F5.2)
 204    FORMAT(100F6.3)
 
        RETURN
        END      
! *********************************************************************
! ATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHNATHN
! *********************************************************************
!
      ! End of module
      END MODULE APM_ATHN_MOD
#endif


================================================
FILE: APM/apm_TIMN_mod.F
================================================
#ifdef APM
! $Id: apm_nucl_mod.f,v 0.0 2008/09/28 11:30:00 fyu $
      MODULE APM_TIMN_MOD
!
!******************************************************************************
!  Module APM_TIMN_MOD contains variables and routines for computing 
!  ternary IMN rates. (fyu,2018)
!
!  Module Variables:
!  ============================================================================
!  Parameters
!  (1 ) MC   : NUMBER OF POINTS IN H2SO4 CONCENTRATION DIMENSION
!  (2 ) MT   : NUMBER OF POINTS IN TEMPERATURE DIMENSION
!  (3 ) MRH  : NUMBER OF POINTS IN RELATIVE HUMIDITY DIMENSION
!  (4 ) MQ   : NUMBER OF POINTS IN IONIZATION RATE DIMENSION
!  (5 ) MS   : NUMBER OF POINTS IN SURFACE AREA DIMENSION
!  (6 ) MB   : NUMBER OF POINTS IN [NH3] DIMENSION
!  Arrays 
!  (1 ) C   : VALUES AT POINTS IN H2SO4 CONCENTRATION DIMENSION
!  (2 ) T   : VALUES AT POINTS IN TEMPERATURE DIMENSION
!  (3 ) RH  : VALUES AT POINTS IN RELATIVE HUMIDITY DIMENSION
!  (4 ) Q   : VALUES AT POINTS IN IONIZATION RATE DIMENSION
!  (5 ) S   : VALUES AT POINTS IN SURFACE AREA DIMENSION
!  (6 ) S   : VALUES AT POINTS IN [NH3] DIMENSION
!
!  (11) XJTIMN : ION-MEDIATED NUCLEATION RATES (cm-3s-1) AT ALL POINTS IN 6-D SPACE
!  (12) XRSTAR : CRITICAL RADIUS (nm) AT ALL POINTS IN 6-DIMENSION SPACE
!
!  Module Routines:
!  ============================================================================
!  (1 ) YUJTIMN1     : INTERPOLAION SCHEME TO FIND JTIMN FROM LOOKUP TABLE
!  (2 ) READJTIMN   : READ IN THE TIMN LOOKUP TABLE 
!
!  NOTES:
!  (1 ) .... 
!******************************************************************************
!
      IMPLICIT NONE

      !=================================================================
      ! MODULE PRIVATE DECLARATIONS -- keep certain internal variables 
      ! and routines from being seen outside "apm_nucl_mod.f"
      !=================================================================

      ! Make everything PRIVATE ...
      PRIVATE

      ! ... except these variables ...
!      PUBLIC :: 

      ! ... and these routines
      PUBLIC :: YUJTIMN1
      PUBLIC :: READJTIMN
      !=================================================================
      ! MODULE VARIABLES
      !=================================================================
      ! Parameters
      INTEGER, PARAMETER   :: MC  = 32
      INTEGER, PARAMETER   :: MT  = 39
      INTEGER, PARAMETER   :: MRH = 26
      INTEGER, PARAMETER   :: MQ  = 9
!      INTEGER, PARAMETER   :: MS  = 12
      INTEGER, PARAMETER   :: MS  = 2
      INTEGER, PARAMETER   :: MB  = 33

      ! Arrays 
      REAL*8        :: C(MC),RH(MRH),T(MT),Q(MQ),S(MS),B(MB)
      REAL*8        :: XJTIMN(MC,MRH,MT,MQ,MS,MB), XRSTAR(MC,MRH,MT,MB)
  
      CHARACTER(LEN=255)   :: DATA_DIR_1x1
      !=================================================================
      ! MODULE ROUTINES -- follow below the "CONTAINS" statement
      !=================================================================
      CONTAINS

!------------------------------------------------------------------------------

      SUBROUTINE YUJTIMN1(X0,Y0,Z0,U0,V0,W0,XJBH,XJBIM,XJTH,XJTIM,
     &                    RBH,RBIM,RTH,RTIM)
!
! This subroutine is to calculate rates and critical cluster properties of
! ion-mediated nucleation (IMN) and kinetic binary homogeneous nucleation (KBHN) 
! from lookup tables using multiple-variable interpolation scheme. 
!
! Here the IMN lookup table reported in Yu (JGR,2010) and BHN lookup table 
! reported in Yu (JGR, 2008) have been integrated. YUJTIMN gives KBHN rates
! when the ionization rate is set to 0. The integrated lookup table has a size
! of ~ 170 MB and is designed for 3-D application. For quick application and 
! comparison, one can obtain nucleation rates under specified conditions using 
! an online nucleation rate calculator @ 
! http://www.albany.edu/~yfq/YuOnLineNucleation.html.
!
! The present lookup table should cover almost all the possible conditions in 
! the troposphere relevant to atmospheric nucleation. The range and resolution 
! in each parameter space can be extended in the future if needed.
!
! Written by 
! Fangqun Yu
! Atmospheric Sciences Research Center
! State University of New York at Albany
! E-mail: yfq@asrc.cestm.albany.edu; fangqun.yu@asrc.albany.edu
!
! Original code writted in 2006. Significnat update in 2008 and 2010. Contact
! Yu for future update or if you have questions.
!
! IMN lookup table reference: 
! 1. Yu, F., Ion-mediated nucleation in the atmosphere: Key controlling 
!      parameters, implications, and look-up table, J. Geophy. Res., 115, 
!      D03206, doi:10.1029/2009JD012630, 2010.
!
! IMN model references: 
! 2. Yu, F., From molecular clusters to nanoparticles: Second-generation 
!      ion-mediated nucleation model, Atmos. Chem. Phys., 6, 5193-5211, 2006.
! 3. Yu, F., and R. P. Turco, Ultrafine aerosol formation via ion-mediated 
!      nucleation, Geophys. Res. Lett., 27, 883-886, 2000.
!
! KBHN lookup table reference:
! 4. Yu, F., Updated H2SO4-H2O binary homogeneous nucleation rate look-up 
!      tables, J. Geophy. Res.,113, D24201, doi:10.1029/2008JD010527, 2008.
!
! KBHN model references:
! 5. Yu, F., Improved quasi-unary nucleation model for binary H2SO4-H2O 
!      homogeneous nucleation, J. Chem. Phys., 127, 054301, 2007.
! 6. Yu, F., Quasi-unary homogeneous nucleation of H2SO4-H2O, J. Chem. 
!      Phys., 122, 074501, 2005.
!
! INPUT (valid value range):
! X0 = [H2SO4] in #/cm3  (5E5-5E8,5E9)
! Y0 = RH in % (0.5-99.5)
! Z0 = T (in K) (190-301)
! U0 = Q = ionization rate (ion-pairs/cm3s) (0, 2-22.8,100)
! V0 = S = surface area (um2/cm3) (1, 10-1000)
! W0 = B = NH3 in #/cm3  (1E5,1E8-1E11,1E12)
!
! OUTPUT:
! XJBH: Bionary Homo  Nucleation rate (#/cm3s)
! XJBIM: Bionary Ion-Mediated Nucleation rate (#/cm3s)
! XJTH: Ternary Homo  Nucleation rate (#/cm3s)
! XJ0: Ternary Ion-Mediated Nucleation rate (#/cm3s)
! XR0: Radius of critical cluster (nm)
!
        REAL*8  :: X0,Y0,Z0,U0,V0,W0
        REAL*8  :: XJBH,XJBIM,XJTH,XJTIM
        REAL*8  :: RBH,RBIM,RTH,RTIM
        REAL*8  :: X,Y,Z,U,V,W
        REAL*8  :: VOL,VOL4,FRACT,FRACT4,XR0
        REAL*8  :: dx1,dx2,dy1,dy2,dz1,dz2,du1,du2,dv1,dv2,dw1,dw2
        REAL*8  :: dx,dy,dz,du,dv,dw
        REAL*8  :: XDH,XDT,X1,X2,Y1,Y2,XJ1,XJ2,YJ

        INTEGER :: IC1,IC2,JRH1,JRH2,KT1,KT2,IQ1,IQ2,IS1,IS2,IB1,IB2
        INTEGER :: IC, JRH, KT, IQ, IS,IB
!
! to avoid the input values to be changed due to out of the range reset
!
        X = X0
        Y = Y0
        Z = Z0
        U = U0
        V = V0
        W = W0
!
! The present lookup table should cover almost all the possible conditions in 
! the troposphere relevant to atmospheric nucleation. The range and resolution 
! in each parameter space can be extended in the future if needed.
! If the inputed values are out of the lookup table valid ranges, set them to 
! boundary values for now. Care should be taken if your inputted values are 
! frequently out of the specified ranges.
! 
        IF(U.LE.1.E-20) U=1.E-20    ! i.e., binary homogeneous nucleation 
!
        IF(X.LT.C(1)) THEN
!           WRITE(86,10) X, C(1), C(1)
           X = C(1)
        ELSEIF(X.GT.C(MC)) THEN
!           WRITE(86,11) X, C(MC), C(MC)
           X =C(MC)
        ENDIF

        IF(Y.LT.RH(1)) THEN
!           WRITE(86,12) Y, RH(1), RH(1)
           Y =RH(1) 
        ELSEIF(Y.GT.RH(MRH)) THEN
!           WRITE(86,13) Y, RH(MRH), RH(MRH)
           Y =RH(MRH)
        ENDIF

        IF(Z.LT.T(1)) THEN
!           WRITE(86,14) Z, T(1), T(1)
           Z =T(1)
        ELSEIF(Z.GT.T(MT)) THEN
!           WRITE(86,15) Z, T(MT), T(MT)
           Z =T(MT)
        ENDIF

        IF(U.LT.Q(1)) THEN
!           WRITE(86,16) U, Q(1), Q(1)
           U =Q(1)
        ELSEIF(U.GT.Q(MQ)) THEN
!           WRITE(86,17) U, Q(MQ), Q(MQ)
           U =Q(MQ)
        ENDIF

!        IF(V.LT.S(1)) THEN
!!           WRITE(86,18) V, S(1), S(1)
!           V =S(1)
!        ELSEIF(V.GT.S(MS)) THEN
!!           WRITE(86,19) V, S(MS), S(MS)
!           V =S(MS)
!        ENDIF

        IF(W.LT.B(1)) THEN
!           WRITE(86,20) W, B(1), B(1)
           W =B(1)
        ELSEIF(W.GT.B(MB)) THEN
!           WRITE(86,21) W, B(MB), B(MB)
           W =B(MB)
        ENDIF


 10     FORMAT("IMN WARNING: INPUTED [H2SO4]=",ES9.2,"<",ES9.2,
     &     " set it to ",ES9.2)
 11     FORMAT("IMN WARNING: INPUTED [H2SO4]=",ES9.2,">",ES9.2,
     &     " set it to ",ES9.2)
 12     FORMAT("IMN WARNING: INPUTED RH =",F5.1,"% <",F5.1,
     &     "% set it to ",F5.1,"%")
 13     FORMAT("IMN WARNING: INPUTED RH =",F5.1,"% >",F5.1,
     &     "% set it to ",F5.1,"%")
 14     FORMAT("IMN WARNING: INPUTED T =",F6.1,"K <",F6.1,
     &     "K set it to ",F6.1,"K")
 15     FORMAT("IMN WARNING: INPUTED T =",F6.1,"K >",F6.1,
     &     "K set it to ",F6.1,"K")
 16     FORMAT("IMN WARNING: INPUTED Q =",F6.1," <",F6.1,
     &     " ion-pair/cm3s set it to ",F6.1)
 17     FORMAT("IMN WARNING: INPUTED Q =",F6.1," >",F6.1,
     &     " ion-pair/cm3s set it to ",F6.1)
 18     FORMAT("IMN WARNING: INPUTED S =",F6.1," <",F6.1,
     &     " um2/cm3 set it to ",F6.1)
 19     FORMAT("IMN WARNING: INPUTED S =",F6.1," >",F6.1,
     &     " um2/cm3 set it to ",F6.1)
 20     FORMAT("IMN WARNING: INPUTED [NH3]=",ES9.2,"<",ES9.2,
     &     " set it to ",ES9.2)
 21     FORMAT("IMN WARNING: INPUTED [NH3]=",ES9.2,">",ES9.2,
     &     " set it to ",ES9.2)

        IC1 =MAX0(INT(1.+10.*LOG10(X/5.E5)),1)
        IC2 = MIN0(IC1 + 1,MC)
        IF(IC2.EQ.MC) IC1=MC-1
        
        XDH = 4.
        IF(Y.LT.RH(2)) THEN
           JRH1 = 1.
        ELSE
         JRH1 = MAX0(INT((Y-RH(2))/XDH+2.),2)
        ENDIF
        JRH2 = MIN0(JRH1 + 1,MRH)
        IF(JRH2.EQ.MRH) JRH1=MRH-1

        XDT = 3.0
        KT1 = MAX0(INT((Z-190.0)/XDT)+1,1)
        KT2 = MIN0(KT1 + 1,MT)
        IF(KT2.EQ.MT) KT1=MT-1
!
        
        IF(U.LT.Q(2)) THEN
          IQ1 =1.
        ELSE
          IQ1 = MAX0(INT(2.+LOG10(U/Q(2))/LOG10(1.5)),2)
        ENDIF
        IQ2 = MIN0(IQ1 + 1,MQ)
        IF(IQ2.EQ.MQ) IQ1=MQ-1
!
!        IF(V.LT.10.0) THEN
!          IS1 =1.
!        ELSE
!          IS1 = MAX0(INT(2.+5.*LOG10(V/10.)),2)
!        ENDIF
!        IS2 = MIN0(IS1 + 1,MS)
!        IF(IS2.EQ.MS) IS1=MS-1

        IF(W.LT.B(2)) THEN
          IB1 =1.
        ELSE
          IB1 = MAX0(INT(2.+10.*LOG10(W/B(2))),2)
        ENDIF
        IB2 = MIN0(IB1 + 1,MB)
        IF(IB2.EQ.MB) IB1=MB-1
!
	dx1 = LOG10(X/C(IC1))   ! logJ log[H2SO4] interpolation
	dx2 = LOG10(C(IC2)/X)
	dy1 = LOG10(Y/RH(JRH1))
	dy2 = LOG10(RH(JRH2)/Y)
	dz1 = Z-T(KT1)
	dz2 = T(KT2)-Z

        du1 = U - Q(IQ1)
        du2 = Q(IQ2) - U
!        dv1 = V- S(IS1)
!        dv2 = S(IS2) - V
        dw1 = LOG10(W/B(IB1))   ! logJ log[H2SO4] interpolation
        dw2 = LOG10(B(IB2)/W)
!
!JTIMN
        XJ1 = 0.  
        XJ2 = 0.
        XR0 = 0.
!
        VOL = (dx1+dx2)*(dy1+dy2)*(dz1+dz2)*(du1+du2)*(dw1+dw2)
        VOL4 = (dx1+dx2)*(dy1+dy2)*(dz1+dz2)*(dw1+dw2)

        DO KT = KT1,KT2
          IF(KT.EQ.KT1) THEN
            dz = dz2
	  ELSE
            dz = dz1
          ENDIF
      	  DO JRH = JRH1,JRH2
            IF(JRH.EQ.JRH1) THEN
              dy = dy2
	    ELSE
              dy = dy1
            ENDIF
            DO IC = IC1,IC2
              IF(IC.EQ.IC1) THEN
                dx = dx2
	      ELSE
                dx = dx1
              ENDIF
 	      DO IB =IB1, IB2
                IF(IB.EQ.IB1) THEN
                  dw = dw2
	        ELSE
                  dw = dw1
                ENDIF

                FRACT4 = dx*dy*dz*dw/VOL4
                XR0 = XR0 + FRACT4*XRSTAR(IC,JRH,KT,IB)

	        DO IQ =IQ1, IQ2
                  IF(IQ.EQ.IQ1) THEN
                    du = du2
	          ELSE
                    du = du1
                  ENDIF
                  FRACT = dx*dy*dz*du*dw/VOL 
                  XJ1 = XJ1 + FRACT*XJTIMN(IC,JRH,KT,IQ,1,IB)
                  XJ2 = XJ2 + FRACT*XJTIMN(IC,JRH,KT,IQ,2,IB)
!                WRITE(6,30)IC,JRH,KT,IQ,IB,
!     &           10.**XJTIMN(IC,JRH,KT,IQ,1,IB), 
!     &           10.**XJTIMN(IC,JRH,KT,IQ,2,IB), FRACT
	        ENDDO
	      ENDDO
            ENDDO
	  ENDDO
	ENDDO

!
! Log10J -->J
        XJ1 = 10.**XJ1
        XJ2 = 10.**XJ2
! Inetrpolate to get J at inputed S
        X1 = S(1)
        Y1 = XJ1
        X2 = S(2)
        Y2 = XJ2
        IF(Y1.GT.Y2) THEN
          YJ = Y1*(Y2/Y1)**((X1-V)/(X1-X2))
        ELSE
          YJ=Y2
        ENDIF
        XJTIM = YJ
        RTIM = XR0
!      WRITE(6,40)X1,X2,V,Y1,Y2,YJ


!JBIM -- NH3=0
        XJ1 = 0.  
        XJ2 = 0.
        XR0 = 0.
!
        VOL = (dx1+dx2)*(dy1+dy2)*(dz1+dz2)*(du1+du2)
        VOL4 = (dx1+dx2)*(dy1+dy2)*(dz1+dz2)

        DO KT = KT1,KT2
          IF(KT.EQ.KT1) THEN
            dz = dz2
	  ELSE
            dz = dz1
          ENDIF
      	  DO JRH = JRH1,JRH2
            IF(JRH.EQ.JRH1) THEN
              dy = dy2
	    ELSE
              dy = dy1
            ENDIF
            DO IC = IC1,IC2
              IF(IC.EQ.IC1) THEN
                dx = dx2
	      ELSE
                dx = dx1
              ENDIF

                FRACT4 = dx*dy*dz/VOL4
                XR0 = XR0 + FRACT4*XRSTAR(IC,JRH,KT,1)

	        DO IQ =IQ1, IQ2
                  IF(IQ.EQ.IQ1) THEN
                    du = du2
	          ELSE
                    du = du1
                  ENDIF
                  FRACT = dx*dy*dz*du/VOL 
                  XJ1 = XJ1 + FRACT*XJTIMN(IC,JRH,KT,IQ,1,1)
                  XJ2 = XJ2 + FRACT*XJTIMN(IC,JRH,KT,IQ,2,1)
	        ENDDO
            ENDDO
	  ENDDO
	ENDDO

!
! Log10J -->J
        XJ1 = 10.**XJ1
        XJ2 = 10.**XJ2
! Inetrpolate to get J at inputed S
        X1 = S(1)
        Y1 = XJ1
        X2 = S(2)
        Y2 = XJ2
        IF(Y1.GT.Y2) THEN
          YJ = Y1*(Y2/Y1)**((X1-V)/(X1-X2))
        ELSE   ! When Y1 and Y2 both very small, Y1 can be LT Y2 becasue of cut-off or semi-equli approx, no extrapol
          YJ=Y2
        ENDIF
        XJBIM = YJ
        RBIM = XR0
!      WRITE(6,40)X1,X2,V,Y1,Y2,YJ
!         IF(XJBIM.GT.(1.1*XJTIM)) THEN
!           WRITE(6,40)X,Y,Z,U,V,W,XJBIM,XJTIM,Y1,Y2,(X1-V)/(X1-X2)
!         ENDIF

!JTHN  -- Q=0
        XJ1 = 0.  
        XJ2 = 0.
        XR0 = 0.
!
        VOL = (dx1+dx2)*(dy1+dy2)*(dz1+dz2)*(dw1+dw2)

        DO KT = KT1,KT2
          IF(KT.EQ.KT1) THEN
            dz = dz2
	  ELSE
            dz = dz1
          ENDIF
      	  DO JRH = JRH1,JRH2
            IF(JRH.EQ.JRH1) THEN
              dy = dy2
	    ELSE
              dy = dy1
            ENDIF
            DO IC = IC1,IC2
              IF(IC.EQ.IC1) THEN
                dx = dx2
	      ELSE
                dx = dx1
              ENDIF
 	      DO IB =IB1, IB2
                IF(IB.EQ.IB1) THEN
                  dw = dw2
	        ELSE
                  dw = dw1
                ENDIF
                FRACT = dx*dy*dz*dw/VOL 
                XR0 = XR0 + FRACT*XRSTAR(IC,JRH,KT,IB)
                XJ1 = XJ1 + FRACT*XJTIMN(IC,JRH,KT,1,1,IB)
                XJ2 = XJ2 + FRACT*XJTIMN(IC,JRH,KT,1,2,IB)
	      ENDDO
            ENDDO
	  ENDDO
	ENDDO
!
! Log10J -->J
        XJ1 = 10.**XJ1
        XJ2 = 10.**XJ2
! Inetrpolate to get J at inputed S
        X1 = S(1)
        Y1 = XJ1
        X2 = S(2)
        Y2 = XJ2
        IF(Y1.GT.Y2) THEN
          YJ = Y1*(Y2/Y1)**((X1-V)/(X1-X2))
        ELSE
          YJ=Y2
        ENDIF
        XJTH = YJ
        RTH = XR0

!JBH, Q=0, NH3=0
        XJ1 = 0.  
        XJ2 = 0.
        XR0 = 0.
        VOL = (dx1+dx2)*(dy1+dy2)*(dz1+dz2)
        DO KT = KT1,KT2
          IF(KT.EQ.KT1) THEN
            dz = dz2
	  ELSE
            dz = dz1
          ENDIF
      	  DO JRH = JRH1,JRH2
            IF(JRH.EQ.JRH1) THEN
              dy = dy2
	    ELSE
              dy = dy1
            ENDIF
            DO IC = IC1,IC2
              IF(IC.EQ.IC1) THEN
                dx = dx2
	      ELSE
                dx = dx1
              ENDIF
                FRACT = dx*dy*dz/VOL 
                XR0 = XR0 + FRACT*XRSTAR(IC,JRH,KT,1)
                XJ1 = XJ1 + FRACT*XJTIMN(IC,JRH,KT,1,1,1)
                XJ2 = XJ2 + FRACT*XJTIMN(IC,JRH,KT,1,2,1)
            ENDDO
	  ENDDO
	ENDDO
!
! Log10J -->J
        XJ1 = 10.**XJ1
        XJ2 = 10.**XJ2
! Inetrpolate to get J at inputed S
        X1 = S(1)
        Y1 = XJ1
        X2 = S(2)
        Y2 = XJ2
        IF(Y1.GT.Y2) THEN
          YJ = Y1*(Y2/Y1)**((X1-V)/(X1-X2))
        ELSE
          YJ=Y2
        ENDIF
        XJBH = YJ
        RBH = XR0
!
 30    FORMAT(I3, I3, I3, I3, I3, 10(1PE10.3))
 40    FORMAT(20(1PE10.3))

       END SUBROUTINE YUJTIMN1
!------------------------------------------------------------------------------

! *****************************************************************************
! IMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIM
! *****************************************************************************

        SUBROUTINE READJTIMN(DATA_DIR_1x1a)
!     
!       WRITTEN by Fangqun Yu, SUNY-Albany, 2006 (Revised, 8/2008)
!
! Read in the integrated IMN and KBHN lookup tables.
! IMN lookup table references: 
! 1. Yu, F., Ion-mediated nucleation in the atmosphere: Key controlling 
!      parameters, implications, and look-up table, J. Geophy. Res., 115, 
!      D03206, doi:10.1029/2009JD012630, 2010.
!
! KBHN lookup table reference:
! 2. Yu, F.,Updated H2SO4-H2O binary homogeneous nucleation rate look-up tables, 
!      J. Geophy. Res.,113, D24201, doi:10.1029/2008JD010527, 2008.
!
        CHARACTER(LEN=255)   :: DATA_DIR_1x1a
        INTEGER :: IC, IRH, IT, IQ, IS ,IB
        REAL*8  :: C11,Q11,S11

!       CHARACTER*2 YPATH
        CHARACTER*999 YPATH

        DATA_DIR_1x1= DATA_DIR_1x1a
        YPATH = TRIM(DATA_DIR_1x1)//'APM_data_201906/TIMN_TROP201706/'
!        YPATH = './'
        WRITE(6,*)"Read 6-D IMN look-up tables @ ", TRIM(YPATH)

        open(31,file=TRIM(YPATH)//'TIMN_J6D.txt',form='formatted')
        open(33,file=TRIM(YPATH)//'TIMN_Rstar4D.txt',form='formatted')

        open(41,file=TRIM(YPATH)//'TIMN_1H2SO4.txt',form='formatted')
        open(42,file=TRIM(YPATH)//'TIMN_2RH.txt',form='formatted')
        open(43,file=TRIM(YPATH)//'TIMN_3T.txt',form='formatted')
        open(44,file=TRIM(YPATH)//'TIMN_4Q.txt',form='formatted')
        open(45,file=TRIM(YPATH)//'TIMN_5S.txt',form='formatted')
        open(46,file=TRIM(YPATH)//'TIMN_6B.txt',form='formatted')
!
        READ(41,100)(C(IC),IC=1,MC)
!        WRITE(6,*)"[H2SO4](IC), IC=1, ", MC, ":"
!        WRITE(6,100)(C(IC),IC=1,MC)
!
        READ(42,100)(RH(IRH),IRH=1,MRH)
!        WRITE(6,*)"RH(IRH), IRH=1, ", MRH, ":"
!        WRITE(6,100)(RH(IRH),IRH=1,MRH)
!
        READ(43,100)(T(IT),IT=1,MT)
!        WRITE(6,*)"T(IT), IT=1, ", MT, ":"
!        WRITE(6,100)(T(IT),IT=1,MT)
!
        READ(44,100)(Q(IQ),IQ=1,MQ)
!        WRITE(6,*)"Q(I), I=1, ", MQ, ":"
!        WRITE(6,100)(Q(IQ),IQ=1,MQ)
!
        READ(45,100)(S(IS),IS=1,MS)
!        WRITE(6,*)"S(IS), IS=1, ", MS, ":"
!        WRITE(6,100)(S(IS),IS=1,MS)
!
        READ(46,100)(B(IB),IB=1,MB)

! Use the formula to calculate C and Q to get values with more digits, otherwise
! may cause problem when input C and Q are very clsoe to C(IC),Q(IQ) as
! IC and IQ are decided with formula 
!
        C(1) = 5.0E5
        C(MC) = 5.0E9
        DO IC = 2, MC-2
           C11 = C(IC)                                                          
           C(IC) = C(IC-1)*10.**(0.1)

           IF(abs(1.-C11/C(IC)).GT.0.02) THEN                                  
              write(6,*)"need check JTIMN look-up table inputs"                  
              stop                                                              
           ENDIF                                                                
        ENDDO

        DO IQ = 1, MQ
           Q11 = Q(IQ)                                                          
           IF(IQ.EQ.1) THEN
              Q(1) =1.E-30
           ELSEIF(IQ.EQ.MQ) THEN
              Q(MQ) =100.
           ELSE
              Q(IQ) = 2.0*1.5**float(IQ-2)
           ENDIF
           IF(abs(1.-Q11/Q(IQ)).GT.0.02) THEN
              write(6,*)"need check JTIMN look-up table inputs"
              stop
           ENDIF
        ENDDO

!        DO IS = 1, MS
!           S11 = S(IS)                                                          
!           IF(IS.EQ.1) THEN
!              S(1) =1.0
!           ELSE
!              S(IS) = 10.*100.**(0.1*float(IS-2))
!           ENDIF
!           IF(abs(1.-S11/S(IS)).GT.0.02) THEN
!              write(6,*)"need check JTIMN look-up table inputs"
!              stop
!           ENDIF
!        ENDDO

!
! READ in formatted 6-D Table
! Due to high sensitivity of J to key parameters, use logJ to interpolate
!
        DO IS =1, MS
         DO IT = 1,MT
         DO IRH = 1,MRH
         DO IQ =1, MQ
         DO IB =1, MB 
          READ(31,201)(XJTIMN(IC,IRH,IT,IQ,IS,IB),IC = 1,MC)
          DO IC=1, MC
           XJTIMN(IC,IRH,IT,IQ,IS,IB)=LOG10(XJTIMN(IC,IRH,IT,IQ,IS,IB))
          ENDDO
         ENDDO
         ENDDO
         ENDDO
         ENDDO
        ENDDO
! Critical cluster properties depend on T, RH, [H2SO4], NH3 only
        DO IT = 1,MT
         DO IRH = 1, MRH
         DO IB =1, MB 
           READ(33,203)(XRSTAR(IC,IRH,IT,IB),IC=1,MC)
         ENDDO  ! B
         ENDDO  ! RH
        ENDDO   !T

        CLOSE(31)
        CLOSE(33)
        CLOSE(41)
        CLOSE(42)
        CLOSE(43)
        CLOSE(44)
        CLOSE(45)
        CLOSE(46)
!
 100    FORMAT(100(1PE10.3))
 200    FORMAT(100(1PE9.2))
 201    FORMAT(100(1PE9.2))
 202    FORMAT(100F5.1)
 203    FORMAT(100F5.2)
 204    FORMAT(100F6.3)

      END SUBROUTINE READJTIMN
! *****************************************************************************
! IMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIMNIM
! *****************************************************************************
!
!------------------------------------------------------------------------------

      ! End of module
      END MODULE APM_TIMN_MOD
#endif


================================================
FILE: APM/apm_albd_mod.F
================================================
#ifdef APM
!************************************************************************
! This is the module to read surface albedo from MODIS satellite data
! There are 7 spectral bands, i.e. 
! band 1: 620-670 nm
!      2: 841-876 nm
!      3: 459-479 nm
!      4: 545-565 nm
!      5: 1230-1250 nm
!      6: 1628-1652 nm
!      7: 2105-2155 nm
! Written by
! Xiaoyan Ma 
! SUNY-Albany
! 05/2011
!************************************************************************
      MODULE APM_ALB_MOD

      implicit none

      ! Make everything PRIVATE ...
      PRIVATE

      ! ... except these variables ...
      PUBLIC :: APM_ALB


      !=================================================================
      ! MODULE VARIABLES
      !=================================================================

       contains

!************************************************************************

       SUBROUTINE APM_ALB(DAY_OF_YR,KYEAR,II,JJ,NBND,ALBD)
!
! !USES:
!
      USE APM_INIT_MOD,  ONLY : DATA_DIR_1x1
      IMPLICIT NONE

      ! Parameters

      INTEGER, INTENT(IN)    :: DAY_OF_YR   ! day of year
      INTEGER, INTENT(IN)    :: KYEAR       ! year
      INTEGER, INTENT(IN)    :: II,JJ
      INTEGER, INTENT(IN)    :: NBND 

!      INTEGER, PARAMETER   :: NBND=7  ! spectral bands from MODIS
!      INTEGER, PARAMETER   :: IM=72 
!      INTEGER, PARAMETER   :: JM=46 

      REAL               :: ALBD(II,JJ,NBND)

      CHARACTER(LEN=4)   :: NYEAR 
      CHARACTER(LEN=3)   :: NDAY
      CHARACTER(LEN=255) :: FILENAME, YPATH
      INTEGER   :: I, J, IB

      !=================================================================
      ! Read MODIS data from disk
      !=================================================================

      WRITE(NDAY,110) DAY_OF_YR
110   format(i3) 
      WRITE(NYEAR,120) KYEAR 
120   format(i4)
!
!Yu+ put MODIS_ALB under APM_data for now
!Ma+ add flexiblity for different year
      YPATH = TRIM(DATA_DIR_1x1)//'/APM_data_201906/MODIS_ALB/'//
     &        NYEAR//'/'
      print*,'YPATH',TRIM(YPATH)
      ! Now prefix the data directory
      IF(II.EQ.72.and.JJ.EQ.46)THEN
         FILENAME = 'modis_surface_albedo_4x5_'//NYEAR//NDAY
         if(filename(30:30).eq.' ') filename(30:30) = '0'
         if(filename(31:31).eq.' ') filename(31:31) = '0'
      ELSEIF(II.EQ.144.and.JJ.EQ.91)THEN
         FILENAME = 'modis_surface_albedo_2x2.5_'//NYEAR//NDAY
         if(filename(32:32).eq.' ') filename(32:32) = '0'
         if(filename(33:33).eq.' ') filename(33:33) = '0'
      ELSE
         WRITE(6,*) "APM_ALBD_mod.f: Need to check"
         STOP
      ENDIF

!      if(filename(29:29).eq.' ') filename(29:29) = '0'
!      if(filename(30:30).eq.' ') filename(30:30) = '0'
      print*,'FILENAME',NYEAR,NDAY,FILENAME

      !-----------------------------
      ! MODIS surface albedo 
      !-----------------------------

      ! Read data
       open(10,file=TRIM(YPATH)//FILENAME, status='old')
       do IB = 1, NBND
       do I = 1, II   
       read(10,100) (ALBD(I,J,IB),J=1,JJ)
c       print*,'ALBD_MOD',IB,I
c       write(*,100) (ALBD(I,J,IB),J=1,JJ)
100     format(10f10.3)
       enddo
       enddo

       close(10)

      END SUBROUTINE APM_ALB

! *****************************************************************************
      END MODULE APM_ALB_MOD
!----------------------------------------------------------------------------------
#endif


================================================
FILE: APM/apm_coag_mod.F90
================================================
#ifdef APM
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !MODULE: apm_coag_mod
!
! !DESCRIPTION: Module APM\_COAG\_MOD contains variables and routines for
!  coagulation calculation.
!\\
!\\
! !INTERFACE:
!
      MODULE APM_COAG_MOD
!
! !USES:
!
      IMPLICIT NONE
      PRIVATE
!
! !PUBLIC MEMBER FUNCTIONS:
!
      PUBLIC :: APM_COAG
      PUBLIC :: APM_COAGSCAV
      PUBLIC :: READCK6DTABLE
      PUBLIC :: YCOAGKERN_TABLE
!
! !PRIVATE MEMBER FUNCTIONS:
!

! !REVISION HISTORY:
!  28 Nov 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !DEFINED PARAMETERS:
!
      ! MR1  : Number of points in 1st particle radius dimension
      ! MD1  : Number of points in 1st particle density dimension
      ! MR2  : Number of points in 2nd particle radius dimension
      ! MD2  : Number of points in 2nd particle density dimension
      ! MT   : Number of points in temperature dimension
      ! MP   : Number of points in pressure dimension
      INTEGER, PRIVATE, PARAMETER :: MR1=128
!      INTEGER, PRIVATE, PARAMETER :: MD1=5
      INTEGER, PRIVATE, PARAMETER :: MD1=3
      INTEGER, PRIVATE, PARAMETER :: MR2=128
!      INTEGER, PRIVATE, PARAMETER :: MD2=5
      INTEGER, PRIVATE, PARAMETER :: MD2=3
      INTEGER, PRIVATE, PARAMETER :: MT =8
      INTEGER, PRIVATE, PARAMETER :: MP =21
!
! !LOCAL VARIABLES:
!
      ! R1   : Values at points in 1st particle radius dimension
      ! D1   : Values at points in 1st particle density dimension
      ! R2   : Values at points in 2nd particle radius dimension
      ! D2   : Values at points in 2nd particle density dimension
      ! T    : Values at points in temperature dimension
      ! P    : Values at points in pressure dimension
      ! XCK  : Coagulation kernel (cm3/s) AT ALL POINTS IN 6-D SPACE
      REAL*8,  PRIVATE            :: R1(MR1)
      REAL*8,  PRIVATE            :: DEN1(MD1)
      REAL*8,  PRIVATE            :: R2(MR2)
      REAL*8,  PRIVATE            :: DEN2(MD2)
      REAL*8,  PRIVATE            :: T(MT)
      REAL*8,  PRIVATE            :: P(MP)
      REAL*8,  PRIVATE            :: XCK8(MP)
      REAL,    PRIVATE            :: XCK(MR1,MD1,MR2,MD2,MT,MP)

      CONTAINS
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: apm_coag
!
! !DESCRIPTION: Coagulation solver (by Fangqun Yu, UAlbany, 2006, updated 2008)
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE APM_COAG( ITYPE, NMAX, YT, PMB, DT, R, DEN, XN, XVA )
!
! !USES:
!
      USE APM_INIT_MOD, ONLY : VDRY
      USE APM_INIT_MOD, ONLY : VSALT
      USE APM_INIT_MOD, ONLY : VBCOC
      USE APM_INIT_MOD, ONLY : COAGPAR
      USE APM_INIT_MOD, ONLY : COAGPARSS
      USE APM_INIT_MOD, ONLY : COAGPBCOC
!
! !INPUT PARAMETERS:
!
      ! ITYPE = 1: Coagulation among sulfate particles
      !       = 2: Coagulation among sea salt particles
      INTEGER :: ITYPE

      ! Number of bins resolved for the specified type of particles
      INTEGER :: NMAX

      ! Temperature (K)
      REAL*8  :: YT

      ! Pressure (mb)
      REAL*8  :: PMB

      ! Time step (s)
      REAL*8  :: DT
!
! !INPUT/OUTPUT PARAMETERS:
!
      ! Particle wet/total radius (cm)
      REAL*8  :: R(NMAX)

      ! Density of particles (g/cm3)
      REAL*8  :: DEN

      ! Number size distribution (#/cm3)
      REAL*8  :: XN(NMAX)

      ! Volume distribution of all components (cm3/cm3)
      REAL*8  :: XVA(NMAX)
!
! !REMARKS:
!  COAGPAR = (Partition Fractions)
!  BEITA   = Coagulation Kernels
!
! !REVISION HISTORY:
!  28 Nov 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !DEFINED PARAMETERS:
!
      INTEGER, PARAMETER :: NC = 1
!
! !LOCAL VARIABLES:
!
      INTEGER :: N, IC, I, J, K
      REAL*8  :: XV(NMAX,NC)
      REAL*8  :: XN0(NMAX),XV0(NMAX,NC)
      REAL*8  :: BEITA(NMAX,NMAX),YCOAGPAR(NMAX,NMAX,NMAX),VDRY1(NMAX)
      REAL*8  :: YLOSS, YPRODVA(NC),TOTC
      REAL*8  :: R1,R2,YCK1
!
      IF(ITYPE.EQ.1) THEN                  ! sulfate
         YCOAGPAR(:,:,:) = COAGPAR(:,:,:)
         VDRY1(:) = VDRY
      ELSEIF(ITYPE.EQ.2) THEN   ! seasalt
         YCOAGPAR(:,:,:) = COAGPARSS(:,:,:)
         VDRY1(:) = VSALT
      ELSEIF(ITYPE.EQ.4) THEN   ! BC
         YCOAGPAR(:,:,:) = COAGPBCOC(:,:,:)
         VDRY1(:) = VBCOC
      ELSEIF(ITYPE.EQ.5) THEN   ! OC
         YCOAGPAR(:,:,:) = COAGPBCOC(:,:,:)
         VDRY1(:) = VBCOC
      ELSE
         WRITE(6,*)"STOP AT COAG, check ITYPE"
         STOP
      ENDIF

! Find coagulation Kernels
      DO I = 1, NMAX
         R1 = R(I)
         DO J = I, NMAX
            R2 = R(J)
            CALL YCOAGKERN_TABLE(R1,DEN,R2,DEN,YT,PMB,YCK1) !Use lookup table to find YCK

            BEITA(I,J) = YCK1
            BEITA(J,I) = BEITA(I,J)
         ENDDO
      ENDDO

      DO N=1,NMAX
         XV(N,1) = XVA(N)       ! to be modified if NC>1
      ENDDO
!
      DO N = 1, NMAX
         XN0(N) = XN(N)
         DO IC=1,NC
            XV0(N,IC) = XV(N,IC)
         ENDDO
      ENDDO
!
      DO i = 1, NMAX
         YLOSS = 0.
         DO j = 1, NMAX
            YLOSS=YLOSS + XN0(j)*BEITA(j,i)*(1.-YCOAGPAR(i,j,i))
         ENDDO

         DO IC=1,NC
            YPRODVA(IC) = 0.
            DO j = 1, i
               DO k = 1, i-1
                  IF(YCOAGPAR(j,k,i).GT.0.) THEN
                     YPRODVA(IC)=YPRODVA(IC) + BEITA(j,k)*XN0(j) &
                                             *XV(k,IC)*YCOAGPAR(j,k,i)
                  ENDIF
               ENDDO
            ENDDO

            XV(i,IC)=(XV0(i,IC)+YPRODVA(IC)*DT)/(1.+YLOSS*DT)
         ENDDO
      ENDDO

!
      DO N=1,NMAX
!         XVA(N) = XV(N,1) ! to be modified if NC>1
         XVA(N) = MAX(XV(N,1),1.d-40) ! to be modified if NC>1
      ENDDO
!
! Recalculate XN from XV
!
      DO I=1,NMAX
         TOTC = 0.
         DO IC = 1, NC
            TOTC = TOTC + XV(I,IC)
         ENDDO
         XN(I) = TOTC/(1.E6*VDRY1(I)) ! TOTC in cm3/cm3, VDRY in m3,XN in #/cm3
      ENDDO
!
!Mass cons. check
!
!      DO IC=1,NC
!         ZPRODVA(IC)=0.
!         ZTOTVA(IC)=0.
!      ENDDO
!      DO i = 1, NMAX
!         DO IC=1,NC
!            ZTOTVA(IC)=ZTOTVA(IC)+XV(i,IC)
!            ZPRODVA(IC)=ZPRODVA(IC)+(XV(i,IC)-XV0(i,IC))
!         ENDDO
!      ENDDO
!
!      DO IC=1,NC
!         write(95+IC,100)IC,ZTOTVA(IC),ZPRODVA(IC)
!      ENDDO
! 100  FORMAT(I3,5(1PE12.4))
 110  FORMAT(100(1E9.2))
!
      END SUBROUTINE APM_COAG
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: apm_coagscav
!
! !DESCRIPTION: Subroutine to calculate the scavenging of secondary
!  particles by primary aerosols
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE APM_COAGSCAV( TK,         PMB,    DT,       DENWET, &
                               RWETCM,     YCS,    RLOSULF,  DENSALTWET, &
                               RSALTWETCM, XNSALT, & 
                               DENBCWET,RBCWET,XNBC, &
                               DENOCWET,ROCWET,XNOC, &
                               DENAER,     XNDST,  XVA,      MBCS, &
                               MOCS,       MDUSTS, MSALTS,   MBCLV, &
                               MOCLV,      MDSTLV, MSALTLV ) !inout
!
! !USES:
!
      USE APM_INIT_MOD, ONLY : DENSULF
      USE APM_INIT_MOD, ONLY : RDST
      USE APM_INIT_MOD, ONLY : NSO4
      USE APM_INIT_MOD, ONLY : NSEA
      USE APM_INIT_MOD, ONLY : NDSTB
      USE APM_INIT_MOD, ONLY : NTYP
      USE APM_INIT_MOD, ONLY : NBCOC
!
! !INPUT PARAMETERS:
!
      REAL*8  :: TK
      REAL*8  :: PMB
      REAL*8  :: DT
!
! !INPUT/OUTPUT PARAMETERS:
!
      REAL*8  :: DENWET
      REAL*8  :: RWETCM(NSO4)
      REAL*8  :: YCS(NTYP)
      REAL*8  :: RLOSULF
      REAL*8  :: DENSALTWET
      REAL*8  :: RSALTWETCM(NSEA)
      REAL*8  :: XNSALT(NSEA)

      REAL*8  :: DENBCWET
      REAL*8  :: RBCWET(NBCOC)
      REAL*8  :: XNBC(NBCOC)
      REAL*8  :: DENOCWET
      REAL*8  :: ROCWET(NBCOC)
      REAL*8  :: XNOC(NBCOC)

      REAL*8  :: DENAER(NTYP)
      REAL*8  :: XNDST(NDSTB)
      REAL*8  :: XVA(NSO4)
      REAL*8  :: MBCS         ! mass of sulfate coated on BC
      REAL*8  :: MOCS         ! mass of sulfate coated on OC
      REAL*8  :: MDUSTS       ! mass of sulfate coated on dust
      REAL*8  :: MSALTS       ! mass of sulfate coated on sea salt
      REAL*8  :: MSULFLV      ! mass of LV-SOA coated on primary particles
      REAL*8  :: MBCLV        ! mass of LV-SOA coated on primary particles
      REAL*8  :: MOCLV        ! mass of LV-SOA coated on primary particles
      REAL*8  :: MDSTLV       ! mass of LV-SOA coated on primary particles
      REAL*8  :: MSALTLV      ! mass of LV-SOA coated on primary particles
!
! !REVISION HISTORY:
!  28 Nov 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: NI,NA,NJ
      REAL*8  :: YR1,YR2,YDEN2,YCK1
      REAL*8  :: AERLOSS(NSO4)
      REAL*8  :: AERLOSSBC(NSO4), AERLOSSOC(NSO4)
      REAL*8  :: AERLOSSDST(NSO4), AERLOSSSALT(NSO4)
      REAL*8  :: TOTV,TOTVLOSS,XDV,LOSSRATIO
      REAL*8  :: TOTVLOSSBC, TOTVLOSSOC, TOTVLOSSDST, TOTVLOSSSALT

      DO NI=1,NSO4
         AERLOSS(NI) =1.E-20
         AERLOSSBC(NI) =1.E-30
         AERLOSSOC(NI) =1.E-30
         AERLOSSDST(NI) =1.E-30
         AERLOSSSALT(NI) =1.E-30
      ENDDO
      DO NA = 2,NTYP            ! first type is secondary particles
       IF(YCS(NA).GT.1.E-5) THEN ! only when primary particles is substantial
        IF(NA.EQ.2) THEN    ! sea salt
         YDEN2 = DENSALTWET
          DO NJ=1,NSEA
            YR2 = RSALTWETCM(NJ)
             DO NI=1,NSO4
               YR1 = RWETCM(NI)
                IF(YR1.LT.YR2) THEN ! only allow scavenging of sulfate particles by bigger particles
                 CALL YCOAGKERN_TABLE(YR1,DENWET,YR2,YDEN2,TK,PMB,YCK1) !Use lookup table to find YCK
                 AERLOSSSALT(NI) = AERLOSSSALT(NI) + YCK1*XNSALT(NJ) !s-1
               ENDIF
             ENDDO
            ENDDO
            DO NI=1,NSO4
               AERLOSS(NI) = AERLOSS(NI) + AERLOSSSALT(NI)
            ENDDO
           ELSEIF(NA.EQ.3) THEN !dust
            YDEN2 = DENAER(NA)  !for now, didn't consider effect of coating (typically small)
            DO NJ=1,NDSTB
             YR2 = RDST(NJ)*100.  ! RDST in m, YR2 in cm
             DO NI=1,NSO4
               YR1 = RWETCM(NI)
               IF(YR1.LT.YR2) THEN ! only allow scavenging of sulfate particles by bigger particles
                CALL YCOAGKERN_TABLE(YR1,DENWET,YR2,YDEN2,TK,PMB,YCK1) !Use lookup table to find YCK
                AERLOSSDST(NI) = AERLOSSDST(NI) + YCK1*XNDST(NJ)    !s-1
               ENDIF
             ENDDO
            ENDDO
            DO NI=1,NSO4
               AERLOSS(NI) = AERLOSS(NI) + AERLOSSDST(NI)
            ENDDO
          ELSEIF(NA.EQ.4) THEN !BC
            YDEN2 = DENBCWET
            DO NJ=1,NBCOC
             YR2 = RBCWET(NJ)
             DO NI=1,NSO4
              YR1 = RWETCM(NI)
              IF(YR1.LT.YR2) THEN ! only allow scavenging of sulfate particles by bigger BC particles
               CALL YCOAGKERN_TABLE(YR1,DENWET,YR2,YDEN2,TK,PMB,YCK1)
               AERLOSSBC(NI) = AERLOSSBC(NI) + YCK1*XNBC(NJ) !s-1
              ENDIF
             ENDDO
            ENDDO
            DO NI=1,NSO4
               AERLOSS(NI) = AERLOSS(NI) + AERLOSSBC(NI)
            ENDDO
          ELSEIF(NA.EQ.5) THEN !OC
            YDEN2 = DENOCWET
            DO NJ=1,NBCOC
             YR2 = ROCWET(NJ)
             DO NI=1,NSO4
              YR1 = RWETCM(NI)
              IF(YR1.LT.YR2) THEN ! only allow scavenging of sulfate particles by bigger OC particles
               CALL YCOAGKERN_TABLE(YR1,DENWET,YR2,YDEN2,TK,PMB,YCK1)
               AERLOSSOC(NI) = AERLOSSOC(NI) + YCK1*XNOC(NJ) !s-1
              ENDIF
             ENDDO
            ENDDO
            DO NI=1,NSO4
               AERLOSS(NI) = AERLOSS(NI) + AERLOSSOC(NI)
            ENDDO
          ENDIF
         ENDIF
      ENDDO
      TOTV = 1.E-50
      TOTVLOSS = 1.d-50
      TOTVLOSSBC = 1.d-50
      TOTVLOSSOC = 1.d-50
      TOTVLOSSDST = 1.d-50
      TOTVLOSSSALT =  1.d-50

      DO NI=1,NSO4
         TOTV = TOTV + XVA(NI)
         XDV = XVA(NI)*(1.-exp(-AERLOSS(NI)*DT))
         XVA(NI) = XVA(NI) - XDV
         IF(XVA(NI).LT.1.d-40)XVA(NI)=1.d-40
         TOTVLOSS = TOTVLOSS + XDV

         TOTVLOSSBC = TOTVLOSSBC + XDV*AERLOSSBC(NI)/AERLOSS(NI)
         TOTVLOSSOC = TOTVLOSSOC + XDV*AERLOSSOC(NI)/AERLOSS(NI)
         TOTVLOSSDST = TOTVLOSSDST + XDV*AERLOSSDST(NI)/AERLOSS(NI)
         TOTVLOSSSALT = TOTVLOSSSALT + XDV*AERLOSSSALT(NI)/AERLOSS(NI)

      ENDDO

      LOSSRATIO = (TOTVLOSSBC + TOTVLOSSOC)/TOTVLOSS

      ! SULFATE and LVSOA MASS scavenged by BC and OC,
      ! RLOSULF is ratio of LVSOA to (LVSOA+SULF)

      ! TOTVLOSSBC in cm3/cm3  MBCS in kg/m3
      MBCS = MBCS + (1.-RLOSULF)*TOTVLOSSBC * DENSULF*1.d3

      ! MBCLV in kg/m3
      MBCLV = MBCLV + RLOSULF*TOTVLOSSBC * DENSULF*1.d3

      ! TOTVLOSSOC in cm3/cm3  MOCS in kg/m3
      MOCS = MOCS + (1.-RLOSULF)*TOTVLOSSOC * DENSULF*1.d3

      ! TOTVLOSSOC in cm3/cm3  MOCLV in kg/m3
      MOCLV = MOCLV + RLOSULF*TOTVLOSSOC * DENSULF*1.d3

      ! TOTVLOSSDUST in cm3/cm3  MDUSTS in kg/m3
      MDUSTS = MDUSTS + (1.-RLOSULF)*TOTVLOSSDST * DENSULF*1.d3

      ! TOTVLOSSDUST in cm3/cm3  MDSTLV in kg/m3
      MDSTLV = MDSTLV + RLOSULF*TOTVLOSSDST * DENSULF*1.d3

      ! TOTVLOSSSALT in cm3/cm3  MSALTS in kg/m3
      MSALTS = MSALTS + (1.-RLOSULF)*TOTVLOSSSALT * DENSULF*1.d3

      ! TOTVLOSSSALT in cm3/cm3  MSALTLV in kg/m3
      MSALTLV = MSALTLV + RLOSULF*TOTVLOSSSALT * DENSULF*1.d3

!      IF(MDSTLV.GT.1.d-8.or.MSALTLV.GT.1.d-8) THEN
      IF(MDSTLV.GT.1.d-7.or.MSALTLV.GT.1.d-7) THEN
         WRITE(6,*)"11101",RLOSULF,TOTVLOSSDST, &
              TOTVLOSSSALT,MDSTLV,MSALTLV
      ENDIF

      END SUBROUTINE APM_COAGSCAV
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: ycoagkern_table
!
! !DESCRIPTION: This subroutine is to calculate coagulation kernels of two
!  particles from lookup tables (No interpolation is needed because the table
!  has high enough resolution in each dimension)
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE YCOAGKERN_TABLE( X, Y, Z, U, V, W, YCK )
!
! !INPUT PARAMETERS:
!
      REAL*8  :: X      ! Radius of first particle in cm  (6.0E-8 - 1.0E-3)
      REAL*8  :: Y      ! Density of first particle in g/cm3 (1.0-2.8)
      REAL*8  :: Z      ! Radius of second particle in cm  (6.0E-8 - 1.0E-3)
      REAL*8  :: U      ! Density of second particle in g/cm3 (1.0-2.8)
      REAL*8  :: V      ! T (in K) (180-320)
      REAL*8  :: W      ! P (in mb) (10-1020)
!
! !OUTPUT PARAMETERS:
!
      REAL*8  :: YCK    ! Coagulation kernel (cm3/s)
!
! !REMARKS:
!  WRITTEN by Fangqun Yu, SUNY-Albany, 2008
!
! !REVISION HISTORY:
!  28 Aug 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !DEFINED PARAMETERS:
!
      REAL*8, PARAMETER :: DRN = 30.   ! bin per decade in R space
!
! !LOCAL VARIABLES:
!
      INTEGER           :: IX1, IY1, IZ1, IU1, IV1, IW1

!
! The lookup tables should cover most of possible values in the atmosphere.
!
      ! DRN points per decade of R space
      IX1 =MAX0(INT(1.5+DRN*DLOG10(X/R1(1))),1)
      IX1 = MIN0(IX1,MR1)
!     WRITE(6,100)IX1,X,R1(IX1-1),R1(IX1),R1(IX1+1)

!      IY1 = MAX0(INT(0.5+(Y-DEN1(1))/0.4)+1,1)
      IY1 = MAX0(INT(0.5+(Y-DEN1(1))/0.8)+1,1)
      IY1 = MIN0(IY1,MD1)
!     WRITE(6,100)IY1,Y,DEN1(IY1-1),DEN1(IY1),DEN1(IY1+1)

      ! DRN points per decade of R space
      IZ1 =MAX0(INT(1.5+DRN*DLOG10(Z/R2(1))),1)
      IZ1 = MIN0(IZ1,MR2)
!     WRITE(6,100)IZ1,Z,R2(IZ1-1),R2(IZ1),R2(IZ1+1)

!      IU1 = MAX0(INT(0.5+(U-DEN2(1))/0.4)+1,1)
      IU1 = MAX0(INT(0.5+(U-DEN2(1))/0.8)+1,1)
      IU1 = MIN0(IU1,MD2)
!     WRITE(6,100)IU1,U,DEN2(IU1-1),DEN2(IU1),DEN2(IU1+1)

      IV1 = MAX0(INT(0.5+(V-T(1))/20.0)+1,1)
      IV1 = MIN0(IV1,MT)
!     WRITE(6,100)IV1,V,T(IV1-1),T(IV1),T(IV1+1)

      ! 10 per decade of P space
      IW1 = MAX0(INT(1.5+10.*DLOG10(W/P(1))),1)
      IW1 = MIN0(IW1,MP)
!     WRITE(6,100)IW1,W,P(IW1-1),P(IW1),P(IW1+1)

      YCK = DBLE(XCK(IX1,IY1,IZ1,IU1,IV1,IW1))

 100  FORMAT(I4,10(1PE10.3))

      END SUBROUTINE YCOAGKERN_TABLE
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: readck6dtable
!
! !DESCRIPTION:
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE READCK6DTABLE
!
! !USES:
!
      USE APM_INIT_MOD, ONLY : DATA_DIR_1x1
!
! !REMARKS:
!  WRITTEN by Fangqun Yu, SUNY-Albany, 2008
!
!
! !REVISION HISTORY:
!  28 Aug 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: IR1,ID1,IR2,ID2,IT,IP
      REAL*8  :: DRN, YY

      CHARACTER*999 YPATH
      YPATH = TRIM(DATA_DIR_1x1)//'/APM_data_201906/YCK140609/'
      WRITE(6,*)"Read coagulation kernel look-up tables"

      open(41,file=TRIM(YPATH)//'Yu_CK_1R1.txt',form='formatted')
      open(42,file=TRIM(YPATH)//'Yu_CK_2D1.txt',form='formatted')
      open(43,file=TRIM(YPATH)//'Yu_CK_3R2.txt',form='formatted')
      open(44,file=TRIM(YPATH)//'Yu_CK_4D2.txt',form='formatted')
      open(45,file=TRIM(YPATH)//'Yu_CK_5T.txt',form='formatted')
      open(46,file=TRIM(YPATH)//'Yu_CK_6P.txt',form='formatted')
      open(47,file=TRIM(YPATH)//'Yu_CK_7CK.txt',form='formatted')

!
      READ(41,100)(R1(IR1),IR1=1,MR1)
      WRITE(6,*)"R1(I), I=1, ", MR1, ":"
      WRITE(6,100)(R1(IR1),IR1=1,MR1)
!
      READ(42,100)(DEN1(ID1),ID1=1,MD1)
      WRITE(6,*)"DEN1(I), I=1, ", MD1, ":"
      WRITE(6,100)(DEN1(ID1),ID1=1,MD1)
!
      READ(43,100)(R2(IR2),IR2=1,MR2)
      WRITE(6,*)"R2(I), I=1, ", MR2, ":"
      WRITE(6,100)(R2(IR2),IR2=1,MR2)
!
      READ(44,100)(DEN2(ID2),ID2=1,MD2)
      WRITE(6,*)"DEN2(I), I=1, ", MD2, ":"
      WRITE(6,100)(DEN2(ID2),ID2=1,MD2)
!
      READ(45,100)(T(IT),IT=1,MT)
      WRITE(6,*)"T(I), I=1, ", MT, ":"
      WRITE(6,100)(T(IT),IT=1,MT)
!
      READ(46,100)(P(IP),IP=1,MP)
      WRITE(6,*)"P(I), I=1, ", MP, ":"
      WRITE(6,100)(P(IP),IP=1,MP)
!
! Use the formula to calculate parameters to get values with more digits,
! otherwise may cause problem when input values are very clsoe to the
! parameter values as formula is used to determine the location of inputted
! values. Also serve as a double check to make sure the consisistency in
! parameter spaces.
!
      DRN = 30.
      R1(1) = 6.0E-8            ! cm
      DO IR1 = 2, MR1
         YY = R1(IR1)
         R1(IR1)=R1(1)*10.**(float(IR1-1)/DRN)
         IF(abs(1.-YY/R1(IR1)).GT.0.02) THEN
            write(6,*)"need check CK look-up table R1 inputs"
            stop
         ENDIF
      ENDDO

      DEN1(1) = 1.0             !g/cm3
      DO ID1 = 2, MD1
         YY = DEN1(ID1)
         DEN1(ID1) = DEN1(1)+0.8*float(ID1-1)
         IF(abs(1.-YY/DEN1(ID1)).GT.0.02) THEN
            write(6,*)"need check CK look-up table DEN1 inputs"
            stop
         ENDIF
      ENDDO

      R2(1) = 6.0E-8            ! cm
      DO IR2 = 2, MR2
         YY = R2(IR2)
         R2(IR2)=R2(1)*10.**(float(IR2-1)/DRN)
         IF(abs(1.-YY/R2(IR2)).GT.0.02) THEN
            write(6,*)"need check CK look-up table R2 inputs"
            stop
         ENDIF
      ENDDO

      DEN2(1) = 1.0             !g/cm3
      DO ID2 = 2, MD2
         YY = DEN2(ID2)
         DEN2(ID2) = DEN2(1)+0.8*float(ID2-1)
         IF(abs(1.-YY/DEN2(ID2)).GT.0.02) THEN
            write(6,*)"need check CK look-up table DEN2 inputs"
            stop
         ENDIF
      ENDDO

      T(1) = 180.               !k
      DO IT = 2, MT
         YY = T(IT)
         T(IT) = T(1)+20.*float(IT-1)
         IF(abs(1.-YY/T(IT)).GT.0.02) THEN
            write(6,*)"need check CK look-up table T inputs"
            stop
         ENDIF
      ENDDO

      P(1) = 10.                ! mb
      DO IP = 2, MP
         YY = P(IP)
         P(IP) = P(1) * 10.**(0.1*float(IP-1))
         IF(abs(1.-YY/P(IP)).GT.0.02) THEN
            write(6,*)"need check CK look-up table P inputs"
            stop
         ENDIF
      ENDDO

!
! Read in the 6-D Table
!
      DO IR1 = 1, MR1
      DO ID1 = 1, MD1
      DO IR2 = 1, MR2
      DO ID2 = 1, MD2
      DO IT  = 1, MT
         READ(47,100)(XCK8(IP),IP=1,MP)
         DO IP=1,MP
            XCK(IR1,ID1,IR2,ID2,IT,IP)=REAL(XCK8(IP))
         ENDDO
      ENDDO
      ENDDO
      ENDDO
      ENDDO
      ENDDO
!
 100  FORMAT(1PE8.2,200(1PE9.2))

      CLOSE(41)
      CLOSE(42)
      CLOSE(43)
      CLOSE(44)
      CLOSE(45)
      CLOSE(46)
      CLOSE(47)
!
      END SUBROUTINE READCK6DTABLE
!EOC
      END MODULE APM_COAG_MOD
#endif


================================================
FILE: APM/apm_grow_mod.F
================================================
#ifdef APM
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !MODULE: apm_grow_mod
!
! !DESCRIPTION: Module APM\_GROW\_MOD contains variables and routines for 
!  computing size-resolved particle growth. 
!\\
!\\
! !INTERFACE:
!
      MODULE APM_GROW_MOD

!
! !USES:
!
      IMPLICIT NONE
      PRIVATE
!
! !PUBLIC MEMBER FUNCTIONS:
!  
      PUBLIC :: APM_GROW
      PUBLIC :: APM_MOVEBIN

! !REVISION HISTORY: 
!  23 Aug 2008 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
      CONTAINS
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: apm_grow
!
! !DESCRIPTION: Subroutine APM\_GROW calculates H2SO4 condensational growth 
!  of aerosol particles
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE APM_GROW( ICOND,    NSO4,   TK,
     &                     PRESS,    CCOND,  PCOND,
     &                     TCSOTHER, DTNG,   XN,
     &                     XVA,      RWETCM, TOTCONDOTHER,
     &                     XMCOND )
!
! !USES:
!
      USE APM_INIT_MOD, ONLY: DENSULF, RDRY
      USE APM_INIT_MOD, ONLY: ONEPI,   BK,  AVG, RGAS
!
! !INPUT/OUTPUT PARAMETERS: 
! 
      INTEGER :: NSO4            ! Dimension variable
      REAL*8  :: TK              ! Temperature (K)       
      REAL*8  :: PRESS           ! Pressure (pa)
      REAL*8  :: PCOND           ! Condensable vapor production rate (#/cm3s) 
      REAL*8  :: DTNG            ! Time detp for growth (s)
      REAL*8  :: XN(NSO4)        ! Number conc of each bin (#/cm3)
      REAL*8  :: XVA(NSO4)       ! Total acid volume of each bin (cm3/cm3)
!
! !INPUT/OUTPUT PARAMETERS: 
! 
      INTEGER :: ICOND
      REAL*8  :: CCOND           ! Condensable vapor concentration (#/cm3)
      REAL*8  :: TCSOTHER
      REAL*8  :: RWETCM(NSO4)
      REAL*8  :: TOTCONDOTHER
      REAL*8  :: XMCOND
!
! !REMARKS:
! Output:
!   updated XMA, CCOND 
! 
! !REVISION HISTORY: 
!  17 Mar 2010 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: N, NMAX
      REAL*8  :: XMA(NSO4)
      REAL*8  :: YF(NSO4),YGR(NSO4),AKELV(NSO4)
      REAL*8  :: CSCOND,YFSUM1
      REAL*8  :: V1COND,VCOND,TEMP0,WTGAS
      REAL*8  :: WTAIR,DIAMAIR,RHOA,CDIFUS,CDIFUS2,DIFUSC,FREEPD
      REAL*8  :: YY,YKN,FCORR,TEMP1,YFSUM,YEVAP
      REAL*8  :: YEVAPV,CCOND1,CCONDA,TOTEVAP,YGRSUM,YDV,TOTCOND
      REAL*8  :: XRCM
      REAL*8  :: DENCOND,AKELV0,SURFT,YTEMP1
      REAL*8  :: DVA(NSO4)

      !=================================================================
      ! APM_GROW begins here!
      !=================================================================
!
      DENCOND = DENSULF
      IF(ICOND.EQ.1) THEN       !H2SO4
         CSCOND = 1.E4          ! no acid evap now
         AKELV0 = CCOND/CSCOND
         IF(AKELV0.LT.1.2) RETURN 
         AKELV =1.
        
!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      ELSEIF(ICOND.EQ.2) THEN  ! LV-SOG
       SURFT = 30. !erg/cm2
!Yu20111015       CSCOND = 3.3E6  !
       CSCOND = 1.0E6  !
!  RORG0 : organic activation radius (in cm)
!       RORG0 =ALOG(CCOND/CSCOND)*DENCOND*RGAS*TK/(2.*SURFT*XMORG)
!       AKELV0 = exp(2.*SURFT*XMCOND/(DENCOND*RGAS*TK*RORG0))
        AKELV0 = CCOND/CSCOND
       IF(AKELV0.LE.1.2) RETURN
       DO N = 1, NSO4
        XRCM = RWETCM(N)   ! RWETCM in cm
        AKELV(N) = exp(2.*SURFT*XMCOND/(DENCOND*RGAS*TK*XRCM))
       ENDDO
!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 
      ELSE
         WRITE(6,*)"NEED to check ICOND value"
         STOP
      ENDIF
      
      V1COND = XMCOND/(AVG*DENCOND) ! volume of one molecule (cm3)
      
      VCOND = SQRT(8.*RGAS*TK/(ONEPI*XMCOND)) ! cm/s
      TEMP0 = VCOND * XMCOND/AVG *ONEPI

! Cal. gas diffusion coef. and mean free path
!
      WTGAS = XMCOND
      WTAIR = 28.966
      DIAMAIR   = 4.5E-08
      RHOA = WTAIR*PRESS*10./(RGAS*TK) ! AIR DENSITY (G CM-3)
      CDIFUS =3.*SQRT(0.5*RGAS*WTAIR/ONEPI)/(AVG*8.*DIAMAIR**2)
      CDIFUS2=CDIFUS * SQRT((WTGAS+WTAIR)/WTGAS)
      DIFUSC=CDIFUS2 * SQRT(TK)/RHOA
      FREEPD = 3.*DIFUSC/VCOND
!
      YF = 0.
      YFSUM = 0.
      YY = PCOND
      DO N = 1, NSO4
         XRCM = RWETCM(N)       ! RWETCM in cm
         YKN = FREEPD/XRCM
         FCORR = YKN/(0.75+YKN)
         TEMP1 = TEMP0*FCORR
         IF(AKELV(N).LT.AKELV0) THEN
             TEMP1 = TEMP1 *(1.-AKELV(N)/AKELV0)
         ELSE
            TEMP1 = 0.          ! no evapor for now
         ENDIF
         YF(N) = TEMP1 * XN(N) *XRCM*XRCM/(DENCOND*V1COND) ! s-1
         YFSUM = YFSUM + YF(N)
!         YEVAP = CSCOND*AKELV*YF(N)    ! in #/cm3s
!         YEVAPV = YEVAP*DTNG*V1COND      ! in cm3/cm3
!         IF(YEVAPV.GT. XVA(N)) THEN
!             YEVAP = XVA(N)/(DTNG*V1COND)
!         ENDIF
!         YY = YY + YEVAP
      ENDDO
      IF(YFSUM.EQ.0.) THEN
         WRITE(6,100)AKELV0,(AKELV(N),N=1,NSO4,5)
         WRITE(6,100)FCORR,(YF(N),N=1,NSO4,5)
         STOP
      ENDIF
! Consider scavenging of H2SO4 vapor by aerosols other than sulfate
      YFSUM1 = YFSUM + TCSOTHER
      CCOND1 = YY/YFSUM1 + (CCOND - YY/YFSUM1)*exp(-YFSUM1*DTNG)
       
      CCONDA = 0.5 * (CCOND1 + CCOND)
      
      TOTEVAP = 0.
!       YGRSUM = 0.
!       DO N = 1, NSO4
!          YGR(N) = YF(N)*(CCONDA - CSCOND*AKELV)
!          IF(YGR(N).LT.0.) THEN
!            YDV = -YGR(N)*DTNG*V1COND    !cm3
!            IF(YDV.GT.XVA(N)) THEN
!               TOTEVAP = TOTEVAP + XVA(N)
!               XVA(N) = 1.E-50
!            ELSE
!               XVA(N) = XVA(N) - YDV
!               TOTEVAP = TOTEVAP + YDV
!            ENDIF
!          ELSE
!            YGRSUM = YGRSUM + YGR(N)
!          ENDIF
!       ENDDO
!
      TOTCOND=PCOND*DTNG+(CCOND-CCOND1)+TOTEVAP/V1COND ! #/cm3
!  H2SO4 vapor condensing on particles other than sulfate
      TOTCONDOTHER = TOTCOND * (1.-YFSUM/YFSUM1)
!  H2SO4 vapor condensing on sulfate
      TOTCOND = TOTCOND * YFSUM/YFSUM1

      YGR = YF
      YGRSUM = YFSUM
       
      DO N = 1, NSO4
         DVA(N) = TOTCOND*V1COND*YGR(N)/YGRSUM
         XVA(N)=XVA(N)+DVA(N)
      ENDDO
       
       
 100  FORMAT(20(1PE9.2))
!
! Update gas concentration
      CCOND = CCOND1

      END SUBROUTINE APM_GROW
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: apm_movebin
!
! !DESCRIPTION: Subroutine APM\_MOVEBIN moves particles across bins after 
!  growth.
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE APM_MOVEBIN( NSO4, XN, XVA )
!
! !USES:
!
      USE APM_INIT_MOD, ONLY: VDRY
!
! !INPUT PARAMETERS: 
!
      INTEGER :: NSO4        ! Dimension for arrays
!
! !INPUT/OUTPUT PARAMETERS: 
! 
      REAL*8  :: XN(NSO4)    ! Number conc of each bin (#/cm3)
      REAL*8  :: XVA(NSO4)   ! Total acid mass of each bin (cm3/cm3)   
!
! !REVISION HISTORY: 
!  17 Mar 2010 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !DEFINED PARAMETERS:
!
      ! Number of core component associated with particles, set to 1 now,
      ! may increase later
      INTEGER, PARAMETER :: NC = 1
!
! !LOCAL VARIABLES:
!
      INTEGER :: N, NMAX, IC, J, J0, J1, JS

      REAL*8  :: YN(NSO4),YVA(NSO4,NC),YC(NSO4,NC)
      REAL*8  :: XVT, VDA, YFR, YFV

      NMAX = NSO4
!
!  Move the partilces across bins due to the condensation/evap
!
      DO N=1,NMAX
         XN(N) = MAX(1.D-30,XN(N))
         XVA(N) = MAX(1.D-30,XVA(N))
         YVA(N,1) = XVA(N)      ! to be modified if NC>1
      ENDDO

      DO n=1,NMAX
         YN(n)=1.E-20
         DO IC=1,NC
            YC(n,IC)=1./float(NC)*YN(n)*VDRY(n)*1.E6 ! in cm3/cm3
         ENDDO

!         IF(YN(n).GT.1.E6.or.YN(n).LE.0.) THEN
!           WRITE(6,*)"4 XN=",n,YN(n),XN(n),YC(n,1)
!         ENDIF

      ENDDO

      DO n=1,NMAX
         XVT = 0.
         DO IC=1,NC
            XVT = XVT + YVA(n,IC) ! cm3/cm3
         ENDDO
         VDA = XVT/XN(n)*1.E-6  ! in m3

!         YRATIO(n) = VDA/VDRY(n)

! if particles become smaller than first bin or larger than last bin,
! scale and put in the first or last bin in a fashion that conserve mass
         IF(VDA.LT.VDRY(1)) THEN
            YN(1) = YN(1) + XN(n)*VDA/VDRY(1)  
            DO IC=1,NC          ! move compositions
               YC(1,IC) = YC(1,IC)+YVA(n,IC)
            ENDDO

!            IF(YN(n).GT.1.E6.or.YN(n).LE.0.) THEN
!              WRITE(6,*)"41 XN=",n,YN(n),XN(n),YC(n,1),YVA(n,1),XVT,VDA
!            ENDIF

         ELSEIF(VDA.GE.VDRY(NMAX)) THEN
            YN(NMAX) = YN(NMAX) + XN(n)*VDA/VDRY(NMAX)
            DO IC=1,NC          ! move compositions
               YC(NMAX,IC) = YC(NMAX,IC)+YVA(n,IC)
            ENDDO
!            IF(YN(n).GT.1.E6.or.YN(n).LE.0.) THEN
!              WRITE(6,*)"42 XN=",n,YN(n),XN(n),YC(n,1),
!     &            XVA(n),YVA(n,1),XVT,VDA
!            ENDIF
         ELSE
            IF(VDA.GE.VDRY(n)) THEN
               J0=n
               J1 = NMAX-1
               JS = 1
            ELSE
               J0=n-1
               J1=1
               JS=-1
            ENDIF
            DO J=J0,J1,JS
               IF(VDA.GE.VDRY(J).AND.VDA.LT.VDRY(J+1)) THEN
                  YFR = (VDRY(J+1)-VDA)/(VDRY(J+1)-VDRY(J))
                  YFV = YFR*VDRY(J)/VDA
                  YN(J) = YN(J) + YFR*XN(n) !move #
                  YN(J+1)=YN(J+1)+(1.-YFR)*XN(n)
                  DO IC=1,NC    ! move compositions
                     YC(J,IC) = YC(J,IC)+YFV*YVA(n,IC)
                     YC(J+1,IC)=YC(J+1,IC)
     &                    +(1.-YFV)*YVA(n,IC)
                  ENDDO
                  GOTO 160
               ENDIF
            ENDDO
         ENDIF
 160     CONTINUE
      ENDDO

!  Update the bin values

      DO n=1,NMAX
         
         IF(YN(n).GT.1.E6.or.YN(n).LE.0.) THEN
            WRITE(6,*)"5 XN=",n,YN(n),XN(n),YC(n,1)
         ENDIF
         
         !GanLuo20190501XN(n) = YN(n)
         XN(n) = MAX(1.D-30,YN(n))
         DO IC=1,NC
            !GanLuo20190501YVA(n,IC) =YC(n,IC)
            YVA(n,IC) =MAX(1.D-30,YC(n,IC))
         ENDDO
         XVA(N) = YVA(n,1)      ! to be modified if NC>1

         XN(N) = MAX(0.d0,XN(N))
         XVA(N) = MAX(0.d0,XVA(N))
      ENDDO

      END SUBROUTINE APM_MOVEBIN
!EOC
      END MODULE APM_GROW_MOD
#endif


================================================
FILE: APM/apm_icen_mod.F90
================================================
#ifdef APM
!program test
!
!use APM_ICEN_MOD, only : nucleati
!
!!
!  parameter (naer_all = 3)
!
!  real*8   wbar                ! grid cell mean vertical velocity (m/s)
!  real*8 :: tair                ! temperature (K)
!  real*8 :: relhum              ! relative humidity with respective to liquid
!  real*8 :: cldn                ! new value of cloud fraction    (fraction)
!  real*8 :: qc                  ! liquid water mixing ratio (kg/kg)
!!  real*8 :: nfice               ! ice mass fraction
!  real*8 :: na(naer_all)        ! aerosol number concentration (/m3)
!!
!!
!  real*8 :: nuci               ! ice number nucleated (#/kg)
!  real*8 :: onihf              ! nucleated number from homogeneous freezing of so4
!  real*8 :: oniimm             ! nucleated number from immersion freezing
!  real*8 :: onidep             ! nucleated number from deposition nucleation
!  real*8 :: onimey             ! nucleated number from deposition nucleation  (meyers: mixed phase)
!
!
!  wbar = 0.25 
!  relhum = 0.8
!  cldn = 0.3
!  qc   = 1.d-4
!!  nfice = 0.1   ! not used
!
!! already in #/cm3
!  na(1) = 10.0 !SP
!  na(2) = 1.0d-2  !dust
!  na(3) = 10.0  !soot
!
!  DO I=1,50
!     tair = 220.0 + float(I) 
!     call nucleati(wbar, tair, relhum, cldn, qc,     &
!       na, nuci, onihf, oniimm, onidep, onimey)
!
!     write(6,100)tair,nuci, onihf, oniimm, onidep, onimey
!100  FORMAT(100(1PE10.3))
!  ENDDO
!
!end program
!



MODULE APM_ICEN_MOD

!---------------------------------------------------------------------------------
! Purpose:
!   CAM Interface for aerosol activation


 implicit none
 private

 public :: nucleati 

contains

subroutine nucleati(wbar, tair, relhum, cldn, qc,    &
       na, nuci, onihf, oniimm, onidep, onimey)
 
!---------------------------------------------------------------
! Purpose:
!  The parameterization of ice nucleation.
!
! Method: The current method is based on Liu & Penner (2005)
!  It related the ice nucleation with the aerosol number, temperature and the
!  updraft velocity. It includes homogeneous freezing of sulfate, immersion
!  freezing of soot, and Meyers et al. (1992) deposition nucleation
!
! Authors: Xiaohong Liu, 01/2005, modifications by A. Gettelman 2009-2010
!----------------------------------------------------------------

!-----------------------------------------------------
! Input Arguments
!
  real*8, intent(in) :: wbar                ! grid cell mean vertical velocity (m/s)
  real*8, intent(in) :: tair                ! temperature (K)
  real*8, intent(in) :: relhum              ! relative humidity with respective to liquid
  real*8, intent(in) :: cldn                ! new value of cloud fraction    (fraction)
  real*8, intent(in) :: qc                  ! liquid water mixing ratio (kg/kg)
!  real*8, intent(in) :: nfice               ! ice mass fraction
!  real*8, intent(in) :: na(naer_all)        ! aerosol number concentration (/m3) Yu --> in #/cm3
  real*8, intent(in) :: na(3)        ! aerosol number concentration (/m3) Yu --> in #/cm3


!
! Output Arguments
!
  real*8, intent(out) :: nuci               ! ice number nucleated (#/kg) -->#/cm3 (Yu)
  real*8, intent(out) :: onihf              ! nucleated number from homogeneous freezing of so4
  real*8, intent(out) :: oniimm             ! nucleated number from immersion freezing
  real*8, intent(out) :: onidep             ! nucleated number from deposition nucleation
  real*8, intent(out) :: onimey             ! nucleated number from deposition nucleation  (meyers: mixed phase)

!
! Local workspace
!
  real*8  so4_num                                      ! so4 aerosol number (#/cm^3)
  real*8  soot_num                                     ! soot (hydrophilic) aerosol number (#/cm^3)
!  real*8  dst1_num,dst2_num,dst3_num,dst4_num          ! dust aerosol number (#/cm^3)
  real*8  dst_num                                      ! total dust aerosol number (#/cm^3)
  real*8  nihf                                         ! nucleated number from homogeneous freezing of so4
  real*8  niimm                                        ! nucleated number from immersion freezing
  real*8  nidep                                        ! nucleated number from deposition nucleation
  real*8  nimey                                        ! nucleated number from deposition nucleation (meyers)
  real*8  n1,ni                                        ! nucleated number
  real*8  tc,A,B,C,regm,RHw                            ! work variable
  real*8  esl,esi,deles                                ! work variable
  real*8  dst_scale
  real*8  subgrid
  real*8 dmc,ssmc         ! variables for modal scheme.

    so4_num=0.0
    soot_num=0.0
    dst_num=0.0
!    dst1_num = 0.0
!    dst2_num = 0.0
!    dst3_num = 0.0
!    dst4_num = 0.0     

!For modal aerosols, assume for the upper troposphere:
! soot = accumulation mode
! sulfate = aiken mode
! dust = coarse mode
! since modal has internal mixtures.

!    if(idxsul .gt. 0) then 
!       so4_num=na(idxsul)*1.0e-6 ! #/cm^3
!    end if
!
!continue above philosophy here....

!    if(idxbcphi .gt. 0) then 
!      soot_num=na(idxbcphi)*1.0e-6 !#/cm^3
!    end if
!
!    if(idxdst1 .gt. 0) then 
!       dst1_num=na(idxdst1)  *1.0e-6 !#/cm^3
!    end if
!
!    if(idxdst2 .gt. 0) then 
!       dst2_num=na(idxdst2)*1.0e-6 !#/cm^3
!    end if
!
!    if(idxdst3 .gt. 0) then 
!       dst3_num=na(idxdst3)*1.0e-6 !#/cm^3
!    end if
!
!    if(idxdst4 .gt. 0) then 
!       dst4_num=na(idxdst4)*1.0e-6 !#/cm^3
!    end if
!
!    dst_num =dst1_num+dst2_num+dst3_num+dst4_num

    so4_num = na(1)
    dst_num = na(2)
    soot_num = na(3)

! no soot nucleation 
!    soot_num=0.0


    ni=0.
    tc=tair-273.15

    ! initialize
    niimm=0.
    nidep=0.
    nihf=0.

    if(so4_num.ge.1.0e-10 .and. (soot_num+dst_num).ge.1.0e-10 .and. cldn.gt.0.) then

!-----------------------------
! RHw parameterization for heterogeneous immersion nucleation
    A = 0.0073
    B = 1.477
    C = 131.74
    RHw=(A*tc*tc+B*tc+C)*0.01   ! RHi ~ 120-130%

    subgrid = 1.2

    if((tc.le.-35.0) .and. ((relhum*polysvp(tair,0)/polysvp(tair,1)*subgrid).ge.1.2)) then ! use higher RHi threshold

       A = -1.4938 * log(soot_num+dst_num) + 12.884
       B = -10.41  * log(soot_num+dst_num) - 67.69
       regm = A * log(wbar) + B

!       WRITE(6,*)regm

       if(tc.gt.regm) then    ! heterogeneous nucleation only
         if(tc.lt.-40. .and. wbar.gt.1.) then ! exclude T<-40 & W>1m/s from hetero. nucleation
           call hf(tc,wbar,relhum,subgrid,so4_num,nihf)
           niimm=0.
           nidep=0.
           n1=nihf
         else
           call hetero(tc,wbar,soot_num+dst_num,niimm,nidep)
           nihf=0.
           n1=niimm+nidep
         endif
       elseif (tc.lt.regm-5.) then ! homogeneous nucleation only
         call hf(tc,wbar,relhum,subgrid,so4_num,nihf)
         niimm=0.
         nidep=0.
         n1=nihf
       else        ! transition between homogeneous and heterogeneous: interpolate in-between
         if(tc.lt.-40. .and. wbar.gt.1.) then ! exclude T<-40 & W>1m/s from hetero. nucleation
           call hf(tc,wbar,relhum,subgrid,so4_num,nihf)
           niimm=0.
           nidep=0.
           n1=nihf
         else

           call hf(regm-5.,wbar,relhum,subgrid,so4_num,nihf)
           call hetero(regm,wbar,soot_num+dst_num,niimm,nidep)

           if(nihf.le.(niimm+nidep)) then
             n1=nihf
           else
             n1=(niimm+nidep)*((niimm+nidep)/nihf)**((tc-regm)/5.)
           endif
         endif
       endif

       ni=n1

    endif
    endif
1100  continue

! deposition/condensation nucleation in mixed clouds (-40<T<0C) (Meyers, 1992)
    if(tc.lt.0. .and. tc.gt.-37. .and. qc.gt.1.e-12) then
      esl = polysvp(tair,0)     ! over water in mixed clouds
      esi = polysvp(tair,1)     ! over ice
      deles = (esl - esi)
      nimey=1.e-3*exp(12.96*deles/esi - 0.639) 
    else
      nimey=0.
    endif

    nuci=ni+nimey
    if(nuci.gt.9999..or.nuci.lt.0.) then
       write(6, *) 'Warning: incorrect ice nucleation number (nuci reset =0)'
       write(6, *) ni, tair, relhum, wbar, nihf, niimm, nidep,deles,esi,dst_num
       nuci=0.
    endif

!    nuci=nuci*1.e+6/rhoair    ! change unit from #/cm3 to #/kg
!    onimey=nimey*1.e+6/rhoair
!    onidep=nidep*1.e+6/rhoair
!    oniimm=niimm*1.e+6/rhoair
!    onihf=nihf*1.e+6/rhoair

!Yu +

    nuci=nuci
    onihf=nihf
    onidep=nidep
    oniimm=niimm
    onimey=nimey

  return
  end subroutine nucleati

  subroutine hetero(T,ww,Ns,Nis,Nid)

    real*8, intent(in)  :: T, ww, Ns
    real*8, intent(out) :: Nis, Nid

    real*8 A11,A12,A21,A22,B11,B12,B21,B22
    real*8 A,B,C

!---------------------------------------------------------------------
! parameters

      A11 = 0.0263
      A12 = -0.0185
      A21 = 2.758
      A22 = 1.3221
      B11 = -0.008
      B12 = -0.0468
      B21 = -0.2667
      B22 = -1.4588

!     ice from immersion nucleation (cm^-3)

      B = (A11+B11*log(Ns)) * log(ww) + (A12+B12*log(Ns))
      C =  A21+B21*log(Ns)

      Nis = exp(A22) * Ns**B22 * exp(B*T) * ww**C
      Nis = min(Nis,Ns)

      Nid = 0.0    ! don't include deposition nucleation for cirrus clouds when T<-37C

      return
  end subroutine hetero


  subroutine hf(T,ww,RH,subgrid,Na,Ni)

      real*8, intent(in)  :: T, ww, RH, subgrid, Na
      real*8, intent(out) :: Ni

      real*8    A1_fast,A21_fast,A22_fast,B1_fast,B21_fast,B22_fast
      real*8    A2_fast,B2_fast
      real*8    C1_fast,C2_fast,k1_fast,k2_fast
      real*8    A1_slow,A2_slow,B1_slow,B2_slow,B3_slow
      real*8    C1_slow,C2_slow,k1_slow,k2_slow
      real*8    regm
      real*8    A,B,C
      real*8    RHw

!---------------------------------------------------------------------
! parameters

      A1_fast  =0.0231
      A21_fast =-1.6387  !(T>-64 deg)
      A22_fast =-6.045   !(T<=-64 deg)
      B1_fast  =-0.008
      B21_fast =-0.042   !(T>-64 deg)
      B22_fast =-0.112   !(T<=-64 deg)
      C1_fast  =0.0739
      C2_fast  =1.2372

      A1_slow  =-0.3949
      A2_slow  =1.282
      B1_slow  =-0.0156
      B2_slow  =0.0111
      B3_slow  =0.0217
      C1_slow  =0.120
      C2_slow  =2.312

      Ni = 0.0

!----------------------------
!RHw parameters
      A = 6.0e-4*log(ww)+6.6e-3
      B = 6.0e-2*log(ww)+1.052
      C = 1.68  *log(ww)+129.35
      RHw=(A*T*T+B*T+C)*0.01

!      WRITE(6,*)"RHw=", RHw

      if((T.le.-37.0) .and. ((RH*subgrid).ge.RHw)) then

        regm = 6.07*log(ww)-55.0

        if(T.ge.regm) then    ! fast-growth regime

          if(T.gt.-64.0) then
            A2_fast=A21_fast
            B2_fast=B21_fast
          else
            A2_fast=A22_fast
            B2_fast=B22_fast
          endif

          k1_fast = exp(A2_fast + B2_fast*T + C2_fast*log(ww))
          k2_fast = A1_fast+B1_fast*T+C1_fast*log(ww)

          Ni = k1_fast*Na**(k2_fast)
          Ni = min(Ni,Na)

        else       ! slow-growth regime

          k1_slow = exp(A2_slow + (B2_slow+B3_slow*log(ww))*T + C2_slow*log(ww))
          k2_slow = A1_slow+B1_slow*T+C1_slow*log(ww)

          Ni = k1_slow*Na**(k2_slow)
          Ni = min(Ni,Na)

        endif

      end if

      return
  end subroutine hf

!cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
! error function in single precision
!
!    Copyright(C) 1996 Takuya OOURA (email: ooura@mmm.t.u-tokyo.ac.jp).
!    You may use, copy, modify this code for any purpose and 
!    without fee. You may distribute this ORIGINAL package.

      function derf(x)
      implicit real (a - h, o - z)
      real*8 a,b,x
      dimension a(0 : 64), b(0 : 64)
      integer i,k
      data (a(i), i = 0, 12) / & 
         0.00000000005958930743d0, -0.00000000113739022964d0, & 
         0.00000001466005199839d0, -0.00000016350354461960d0, &
         0.00000164610044809620d0, -0.00001492559551950604d0, &
         0.00012055331122299265d0, -0.00085483269811296660d0, &
         0.00522397762482322257d0, -0.02686617064507733420d0, &
         0.11283791670954881569d0, -0.37612638903183748117d0, &
         1.12837916709551257377d0 / 
      data (a(i), i = 13, 25) / &
         0.00000000002372510631d0, -0.00000000045493253732d0, &
         0.00000000590362766598d0, -0.00000006642090827576d0, &
         0.00000067595634268133d0, -0.00000621188515924000d0, &
         0.00005103883009709690d0, -0.00037015410692956173d0, &
         0.00233307631218880978d0, -0.01254988477182192210d0, &
         0.05657061146827041994d0, -0.21379664776456006580d0, &
         0.84270079294971486929d0 / 
      data (a(i), i = 26, 38) / &
         0.00000000000949905026d0, -0.00000000018310229805d0, &
         0.00000000239463074000d0, -0.00000002721444369609d0, &
         0.00000028045522331686d0, -0.00000261830022482897d0, &
         0.00002195455056768781d0, -0.00016358986921372656d0, &
         0.00107052153564110318d0, -0.00608284718113590151d0, &
         0.02986978465246258244d0, -0.13055593046562267625d0, &
         0.67493323603965504676d0 / 
      data (a(i), i = 39, 51) / &
         0.00000000000382722073d0, -0.00000000007421598602d0, &
         0.00000000097930574080d0, -0.00000001126008898854d0, &
         0.00000011775134830784d0, -0.00000111992758382650d0, &
         0.00000962023443095201d0, -0.00007404402135070773d0, &
         0.00050689993654144881d0, -0.00307553051439272889d0, &
         0.01668977892553165586d0, -0.08548534594781312114d0, &
         0.56909076642393639985d0 / 
      data (a(i), i = 52, 64) / &
         0.00000000000155296588d0, -0.00000000003032205868d0, &
         0.00000000040424830707d0, -0.00000000471135111493d0, &
         0.00000005011915876293d0, -0.00000048722516178974d0, &
         0.00000430683284629395d0, -0.00003445026145385764d0, &
         0.00024879276133931664d0, -0.00162940941748079288d0, &
         0.00988786373932350462d0, -0.05962426839442303805d0, &
         0.49766113250947636708d0 / 
      data (b(i), i = 0, 12) / &
         -0.00000000029734388465d0, 0.00000000269776334046d0, &
         -0.00000000640788827665d0, -0.00000001667820132100d0, &
         -0.00000021854388148686d0, 0.00000266246030457984d0, &
         0.00001612722157047886d0, -0.00025616361025506629d0, &
         0.00015380842432375365d0, 0.00815533022524927908d0, &
         -0.01402283663896319337d0, -0.19746892495383021487d0,& 
         0.71511720328842845913d0 / 
      data (b(i), i = 13, 25) / &
         -0.00000000001951073787d0, -0.00000000032302692214d0, &
         0.00000000522461866919d0, 0.00000000342940918551d0, &
         -0.00000035772874310272d0, 0.00000019999935792654d0, &
         0.00002687044575042908d0, -0.00011843240273775776d0, &
         -0.00080991728956032271d0, 0.00661062970502241174d0, &
         0.00909530922354827295d0, -0.20160072778491013140d0, &
         0.51169696718727644908d0 / 
      data (b(i), i = 26, 38) / &
         0.00000000003147682272d0, -0.00000000048465972408d0, &
         0.00000000063675740242d0, 0.00000003377623323271d0, &
         -0.00000015451139637086d0, -0.00000203340624738438d0,& 
         0.00001947204525295057d0, 0.00002854147231653228d0, &
         -0.00101565063152200272d0, 0.00271187003520095655d0, &
         0.02328095035422810727d0, -0.16725021123116877197d0, &
         0.32490054966649436974d0 / 
      data (b(i), i = 39, 51) / &
         0.00000000002319363370d0, -0.00000000006303206648d0, &
         -0.00000000264888267434d0, 0.00000002050708040581d0, &
         0.00000011371857327578d0, -0.00000211211337219663d0, &
         0.00000368797328322935d0, 0.00009823686253424796d0, &
         -0.00065860243990455368d0, -0.00075285814895230877d0,& 
         0.02585434424202960464d0, -0.11637092784486193258d0, &
         0.18267336775296612024d0 / 
      data (b(i), i = 52, 64) / &
         -0.00000000000367789363d0, 0.00000000020876046746d0, &
         -0.00000000193319027226d0, -0.00000000435953392472d0, &
         0.00000018006992266137d0, -0.00000078441223763969d0, &
         -0.00000675407647949153d0, 0.00008428418334440096d0, &
         -0.00017604388937031815d0, -0.00239729611435071610d0, &
         0.02064129023876022970d0, -0.06905562880005864105d0, &
         0.09084526782065478489d0 / 
      w = abs(x)
      if (w .lt. 2.2d0) then
          t = w * w
          k = int(t)
          t = t - k
          k = k * 13
          y = ((((((((((((a(k) * t + a(k + 1)) * t + &
             a(k + 2)) * t + a(k + 3)) * t + a(k + 4)) * t + &
             a(k + 5)) * t + a(k + 6)) * t + a(k + 7)) * t + &
             a(k + 8)) * t + a(k + 9)) * t + a(k + 10)) * t + &
             a(k + 11)) * t + a(k + 12)) * w
      else if (w .lt. 6.9d0) then
          k = int(w)
          t = w - k
          k = 13 * (k - 2)
          y = (((((((((((b(k) * t + b(k + 1)) * t + &
             b(k + 2)) * t + b(k + 3)) * t + b(k + 4)) * t + &
             b(k + 5)) * t + b(k + 6)) * t + b(k + 7)) * t + &
             b(k + 8)) * t + b(k + 9)) * t + b(k + 10)) * t + &
             b(k + 11)) * t + b(k + 12)
          y = y * y
          y = y * y
          y = y * y
          y = 1 - y * y
      else
          y = 1
      end if
      if (x .lt. 0) y = -y
      derf = y
      end function derf
!



      function polysvp (T,type)
!  Compute saturation vapor pressure by using
! function from Goff and Gatch (1946)

!  Polysvp returned in units of pa.
!  T is input in units of K.
!  type refers to saturation with respect to liquid (0) or ice (1)

      real*8 dum

      real*8 T,polysvp

      integer type

! ice

      if (type.eq.1) then

! Goff Gatch equation (good down to -100 C)

         polysvp = 10.**(-9.09718*(273.16/t-1.)-3.56654* &
          log10(273.16/t)+0.876793*(1.-t/273.16)+ &
          log10(6.1071))*100.

      end if

! Goff Gatch equation, uncertain below -70 C

      if (type.eq.0) then
         polysvp = 10.**(-7.90298*(373.16/t-1.)+ &
             5.02808*log10(373.16/t)- &
             1.3816e-7*(10.**(11.344*(1.-t/373.16))-1.)+ &
             8.1328e-3*(10.**(-3.49149*(373.16/t-1.))-1.)+ &
             log10(1013.246))*100.
         end if


      end function polysvp
!--xl

end module APM_ICEN_MOD
#endif


================================================
FILE: APM/apm_init_mod.F
================================================
#ifdef APM
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !MODULE: apm_init_mod
!
! !DESCRIPTION: Module APM\_INIT\_MOD contains variables and routines for 
!  initializing the APM model.
!\\
!\\
! !INTERFACE:
!
      MODULE APM_INIT_MOD
!
! !USES:
!
      IMPLICIT NONE
      PRIVATE
!
! !PRIVATE MEMBER FUNCTIONS:
!
      PRIVATE :: HYDRGF1
      PRIVATE :: BINSULF
      PRIVATE :: BINSALT 
      PRIVATE :: BINBCOC
      PRIVATE :: BINDST7 
      PRIVATE :: BINDST15 
      PRIVATE :: SALTEMIT 
      PRIVATE :: SULF_EMIT
      PRIVATE :: BCOC_EMIT
!
! !PUBLIC MEMBER FUNCTIONS:
!  
      PUBLIC  :: APM_INIT
      PUBLIC  :: APM_NTRACERS
      PUBLIC  :: CLEANUP_APMARRAYS
!
! !PUBLIC DATA MEMBERS:
!
      PUBLIC  :: LAPM
      PUBLIC  :: IFNUCL,IFEMITBCOCS, FE0
      PUBLIC  :: WBAR     !for maxsat
      PUBLIC  :: IFEV    !0= no eruptive volcano
      PUBLIC  :: IFAG 
      PUBLIC  :: IFNEWCOD,IFNEWSF,IFNEWN2O5,IFONLINEMET
      PUBLIC  :: IFDOISRP
      PUBLIC  :: IFMODISOUT

      PUBLIC  :: NGCOND,NSO4,NSEA,NDSTB,NBCOC,NBCOCT
      PUBLIC  :: NCTSO4,NCTBC,NCTOC,NCTDST,NCTSEA,NAMINE
      PUBLIC  :: NTYP
      PUBLIC  :: DEDGE,RDST,DENDST,VDST

      PUBLIC  :: APMIDS

      PUBLIC  :: YGF                                ! HYDRGF1
      PUBLIC  :: RDRY, VDRY, COAGPAR                ! BINSULF
      PUBLIC  :: RSALT, VSALT, DFMSALT9,COAGPARSS   ! BINSALT
      PUBLIC  :: IACTSS1,IACTSS3                    ! BINSALT
      PUBLIC  :: CEMITSULF, FEMTBCOCS
      PUBLIC  :: CEMITSULF2
      PUBLIC  :: RBCOC, VBCOC, COAGPBCOC   ! BINBCOC

      PUBLIC :: CEMITBCOC1  !OPT+
      PUBLIC :: CEMITBCOC2  !OPT+

      PUBLIC  :: TOTNUMBC,TOTNUMOC, TOTAREABC,TOTAREAOC
      PUBLIC  :: DACT1, DACT2, DACT3, DENSULF
      PUBLIC  :: XMACID,XMLVSOG,V1ACID,V1LVSOG,M1ACID,M1LVSOG
      PUBLIC  :: APMTRACER_MW_G,APMTRACER_MW_KG
      PUBLIC  :: ONEPI,BK,AVG,RGAS
      PUBLIC  :: MAXSITE,MSITE,ISITES,JSITES,LOUT
      PUBLIC  :: IFSITE, IFSITEOUT,IFQANN,IFEMITH,IFPREIND
      PUBLIC  :: IFALBMODIS
      PUBLIC  :: IFCURRENT
      PUBLIC  :: IFAEROCOMOUT
      PUBLIC  :: IFRADF,IFOPT,IFCDNPDF
      PUBLIC  :: IFAMINEUP, AGAMA,ERATIO,OXRATE,IFATHN,NUCLAMINE,IFNH3
      PUBLIC  :: IFNUCLORG
      PUBLIC  :: IFATOM, IFSEABIRD,IFSSTSCALE
      PUBLIC  :: ATOMMONS,ATOMDAYS,ATOMMONE,ATOMDAYE
      PUBLIC  :: SITEOUT2D
!      PUBLIC  :: REFBCOC,DBCOC1, BCOCSIGMA1
      PUBLIC  :: REFBCOC!,DBCOC1, BCOCSIGMA1, FERF
      PUBLIC  :: DBCOC2, BCOCSIGMA2
      PUBLIC  :: MTACT,MKACT,MSAT
      PUBLIC  :: DACTTAB
      PUBLIC  :: FOOACRIT
      PUBLIC  :: DATA_DIR_1x1

      PUBLIC  :: BC_LIFEAPM, OC_LIFEAPM, FHBAPM, FHOAPM,D0CONV
      PUBLIC  :: IFNOBCOCFF
      PUBLIC  :: IFCOAT
      PUBLIC  :: IFCOATBC
      PUBLIC  :: DENBC,DENOC
      PUBLIC  :: IY
      PUBLIC  :: DTTEST
      PUBLIC  :: IFAPMSF, IFAPMAOD
!      PUBLIC  :: YRLIQ,YRICE

!
! !REVISION HISTORY: 
!  16 Mar 2010 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
      !=================================================================
      ! MODULE VARIABLES
      !=================================================================
      LOGICAL             :: LAPM  ! ON/OFF switch for APM 
      INTEGER             :: IFEV
      INTEGER             :: IFAG
      INTEGER             :: IFNEWCOD,IFNEWSF,IFNEWN2O5,IFONLINEMET
      INTEGER             :: IFDOISRP
      INTEGER             :: IFMODISOUT
      INTEGER             :: NGCOND,NSO4,NSEA,NDSTB,NBCOC,NBCOCT 
      INTEGER             :: NCTSO4,NCTBC,NCTOC,NCTDST,NCTSEA,NAMINE

      TYPE APMidtype

      INTEGER :: id_SO4G,id_SO4BIN1,id_CTSEA,id_SEABIN1,id_DSTBIN1
      INTEGER :: id_CTSO4,id_CTBC,id_CTOC,id_CTDST
      INTEGER :: id_BCBIN1,id_OCBIN1
      INTEGER :: id_AMINE

      INTEGER :: id_NH4,  id_NIT, id_SO4, id_NH3
      INTEGER :: id_CO, id_NO,   id_NO2, id_NO3, id_HNO3
      INTEGER :: id_ISOP, id_MTPA
      INTEGER :: id_BCPO,id_BCPI,id_OCPO, id_OCPI
      INTEGER :: id_MSA
      INTEGER :: id_SALA, id_SALC

      ! NOTE: Renamed these to GC_DSTbin{1..7} to avoid clashing
      ! with the id_DSTbin1 species flag
      INTEGER :: id_GC_DSTbin1, id_GC_DSTbin2, id_GC_DSTbin3
      INTEGER :: id_GC_DSTbin4, id_GC_DSTbin5, id_GC_DSTbin6
      INTEGER :: id_GC_DSTbin7

      ! mono+sesq products
      INTEGER :: id_TSOA1, id_TSOG1
      INTEGER :: id_TSOA2, id_TSOG2
      INTEGER :: id_TSOA3, id_TSOG3
      INTEGER :: id_TSOA0, id_TSOG0
      ! semivolpoa: add POA (hotp 2/26/09)
      INTEGER :: id_POA1,id_POA2
      INTEGER :: id_POG1, id_POG2
      ! semivolpoa4opoa: add OPOA, OPOG (hotp 3/18/09)
      INTEGER :: id_OPOA1, id_OPOG1
      INTEGER :: id_OPOA2, id_OPOG2
      ! lumped arom/IVOC (hotp 5/14/10)
      INTEGER :: id_ASOAN
      INTEGER :: id_ASOA1, id_ASOG1
      INTEGER :: id_ASOA2, id_ASOG2
      INTEGER :: id_ASOA3, id_ASOG3
      INTEGER :: id_SO2, id_H2O2, id_OH

      END TYPE APMidtype

      TYPE(APMidtype) :: APMIDS

      REAL*8, ALLOCATABLE :: YGF(:,:)
      REAL*8, ALLOCATABLE :: RDRY(:)              !m
      REAL*8, ALLOCATABLE :: VDRY(:)            !SULFATE dry volume (m3)
      REAL*8, ALLOCATABLE :: RSALT(:), RSALT80(:) !m
      REAL*8, ALLOCATABLE :: DFMSALT9(:) ! kg m-2 s-1
      REAL*8, ALLOCATABLE :: VSALT(:)            !SALT dry volume (m3)
      REAL*8, ALLOCATABLE :: COAGPAR(:,:,:)   ! for SULFATE
      REAL*8, ALLOCATABLE :: COAGPARSS(:,:,:)   ! for SEA SALT

      REAL*8, ALLOCATABLE :: CEMITSULF(:)
      REAL*8, ALLOCATABLE :: CEMITSULF2(:,:)
      REAL*8, ALLOCATABLE :: CEMITBCOC1(:,:)    !OPT+
      REAL*8, ALLOCATABLE :: CEMITBCOC2(:,:)    !OPT+
      REAL*8, ALLOCATABLE :: RBCOC(:)
      REAL*8, ALLOCATABLE :: VBCOC(:)
      REAL*8, ALLOCATABLE :: COAGPBCOC(:,:,:)   ! BINBCOC
!
! Dust for now
      REAL*8, ALLOCATABLE :: DEDGE(:),RDST(:)
      REAL*8, ALLOCATABLE :: DENDST(:),VDST(:)

! Cloud activation dry diameters
      REAL*8, PARAMETER   :: DACT1 = 3.3d-8   !convective precipitation
      REAL*8, PARAMETER   :: DACT2 = 5.7d-8   !average
      REAL*8, PARAMETER   :: DACT3 = 8.2d-8   !large scale precipitation

      REAL*8, PARAMETER   :: DENSULF = 1.7  ! density of sulfate (g/cm3)
      REAL*8, PARAMETER   :: XMACID = 98. ! Molecular mass of H2SO4 (g/mol)
      REAL*8, PARAMETER   :: XMLVSOG = 181. ! Molecular mass of LV_SOG (g/mol)

      REAL*8, PARAMETER   :: ONEPI = 3.1415926d0
      REAL*8, PARAMETER   :: AVG = 6.022d+23
      REAL*8, PARAMETER   :: BK = 1.3807d-16  !erg/K
      REAL*8, PARAMETER   :: RGAS = 8.3144d+7  !erg K / mol

      INTEGER :: IFNUCL, IFEMITBCOCS
      REAL*8  :: FEMTBCOCS, FE0
      REAL*8  :: WBAR
      REAL*8  :: Y_R1, Y_SIGMA1, FRAC1
      REAL*8  :: Y_R2, Y_SIGMA2, FRAC2
      INTEGER :: IACTSS1, IACTSS2, IACTSS3  ! bin index for cloud act 
                                            ! diameters of seasalt

      REAL*8  :: TOTNUMBC(2),TOTNUMOC(2) !total # of BCOC per kg of BCOC for
                                         ! mod1 (fossil fuel) and mod2 (biomass/biofuel)
      REAL*8  :: TOTAREABC(2),TOTAREAOC(2) !total surface area (m2) of BCOC per kg of BCOC for
                                         ! mod1 (fossil fuel) and mod2 (biomass/biofuel)
      REAL*8  :: REFBCOC(2)              ! Effective radius of BCOC (m)
!      REAL*8  :: DBCOC1, BCOCSIGMA1, FERF(501)
      REAL*8  :: DBCOC1, BCOCSIGMA1
      REAL*8  :: DBCOC2, BCOCSIGMA2

      CHARACTER(LEN=255)   :: DATA_DIR_1x1

!      INTEGER, PARAMETER  :: MHC      = 6
      INTEGER, PARAMETER  :: MHC      = 9
      INTEGER, PARAMETER  :: NPROD    = 3
      INTEGER, PARAMETER  :: MT       = 601  

      INTEGER, PARAMETER  :: MTACT    = 51  
      INTEGER, PARAMETER  :: MKACT    = 155  
      INTEGER, PARAMETER  :: MSAT   = 50  
      REAL*8  :: DACTTAB(MTACT,MKACT,MSAT)        

      INTEGER             :: IFSITE,IFQANN,IFEMITH,IFPREIND
      INTEGER             :: IFALBMODIS
      INTEGER             :: IFCURRENT
      INTEGER             :: IFAEROCOMOUT
      INTEGER             :: IFRADF, IFOPT, IFCDNPDF
      INTEGER        :: IFAMINEUP,IFATHN,NUCLAMINE,IFNH3,IFNUCLORG
      INTEGER             :: IFATOM,IFSEABIRD,IFSSTSCALE
      INTEGER             :: ATOMMONS,ATOMDAYS,ATOMMONE,ATOMDAYE
      REAL*8              :: AGAMA,ERATIO,OXRATE

!      INTEGER,PARAMETER   :: MAXSITE=47
      INTEGER,PARAMETER   :: MAXSITE=100
!      INTEGER,PARAMETER   :: LOUT=38      !# of layers for supersite output
      INTEGER,PARAMETER   :: LOUT=28      !# of layers for supersite output
!      INTEGER,PARAMETER   :: LOUT=70      !# of layers for supersite output
!      INTEGER,PARAMETER   :: LOUT=7      !# of layers for supersite output
      INTEGER             :: MSITE
      INTEGER             :: ISITES(MAXSITE),JSITES(MAXSITE)
      INTEGER             :: IFSITEOUT(MAXSITE)
!      REAL*8  :: SITEOUT2D(MAXSITE,22)
      REAL*8  :: SITEOUT2D(MAXSITE,56)

      INTEGER,PARAMETER   :: MAPMTRA=97  ! can make this dynamic later
      REAL*8  :: APMTRACER_MW_G(MAPMTRA),APMTRACER_MW_KG(MAPMTRA)

      REAL*8  :: FOOACRIT(NPROD,MHC, MT)
      REAL*8  :: V1ACID,V1LVSOG
      REAL*8  :: M1ACID,M1LVSOG

      REAL*8  :: BC_LIFEAPM, OC_LIFEAPM, FHBAPM, FHOAPM, D0CONV
      INTEGER :: IFNOBCOCFF
      INTEGER :: IFCOAT
      INTEGER :: IFCOATBC
      INTEGER :: IFAPMSF, IFAPMAOD
      REAL*8  :: Z_R1,Z_SIGMA1,Z_R2,Z_SIGMA2
      REAL*8  :: DENBC,DENOC
      INTEGER :: SEASCHEME
      REAL*8  :: FSALTSCAL
      INTEGER :: IY
      REAL*8  :: DTTEST
!      REAL*8  :: YRLIQ,YRICE

! Types of aerosols
      INTEGER, PARAMETER  :: NTYP = 5

      CONTAINS
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: apm_init 
!
! !DESCRIPTION: Subroutine APM\_INIT initializes the APM model.
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE APM_INIT( DATA_DIR_1x1a )
!
! !USES:
!
      USE APM_ATHN_MOD, ONLY : READJATHN
      USE APM_TIMN_MOD, ONLY : READJTIMN
      USE APM_OPTI_MOD, ONLY : READOPTABLE  !OPT+
      USE APM_OPTI_MOD, ONLY : READOPTABLE_LW  !OPT+

!
! !INPUT PARAMETERS: 
!
      CHARACTER(LEN=255) :: DATA_DIR_1x1a   ! 1x1 data directory
! 
! !REVISION HISTORY: 
!  17 Mar 2010 - F. Yu       - Initial version 
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: IP,IC,IT
      INTEGER :: IACT10, IACT20, IACT30   ! bin index for cloud act 
                                          ! diameters corresponding to RDRY
      REAL*8  :: TK
      INTEGER ::  ITAB     !OPT+

      !=================================================================
      ! APM_INIT begins here!
      !=================================================================

      DATA_DIR_1x1 = DATA_DIR_1x1a

      ! First-time initialization
!      IF ( FIRST ) THEN
!
! Volume and mass of one acid and one LV-SOG molecule
      V1ACID = XMACID/(6.02252d+23*DENSULF)  ! volume (cm3) of one SO4 molecule
      V1LVSOG = XMLVSOG/(6.02d+23*DENSULF)   ! assume SOA has same den as acid
      WRITE(6,*)"V1ACID=",V1ACID,"V1LVSOG=",V1LVSOG

      M1ACID = XMACID*1.E-3/6.02252E+23  ! mass (kg) of one H2SO4 molecule
      M1LVSOG = XMLVSOG*1.E-3/6.02252E+23  ! mass (kg) of one LVSOG molecule
!
!
! READ IN APM CONTROLLING PARAMETERS
!
      CLOSE(14)
      OPEN(14,FILE='input.apm')
      READ(14,*)
      READ(14,*)BC_LIFEAPM,OC_LIFEAPM,FHBAPM,FHOAPM,D0CONV
      WRITE(6,*)'BC_LIFEAPM,OC_LIFEAPM,FHBAPM,FHOAPM,D0CONV in APM'
      WRITE(6,*)BC_LIFEAPM,OC_LIFEAPM,FHBAPM,FHOAPM,D0CONV
      READ(14,*)
      READ(14,*)IFNOBCOCFF
      WRITE(6,*)"IFNOBCOCFF=",IFNOBCOCFF
      READ(14,*)
      READ(14,*)IFCOAT,IFCOATBC
      WRITE(6,*)"*****IFCOAT= ", IFCOAT,"*****IFCOATBC= ",IFCOATBC
      READ(14,*)
      READ(14,*)IFALBMODIS
      WRITE(6,*)"*****IFALBMODIS= ", IFALBMODIS
      READ(14,*)
      READ(14,*)IFAEROCOMOUT
      WRITE(6,*)"*****IFAEROCOMOUT= ", IFAEROCOMOUT
      READ(14,*)
      READ(14,*)IFCURRENT
      WRITE(6,*)"*****IFCURRENT= ", IFCURRENT
      READ(14,*)
      READ(14,*)IFRADF,IFOPT
      IF(IFRADF.EQ.1.and.IFOPT.NE.1) IFOPT = 1   !force IFOPT = 1 if IFRADF=1
      WRITE(6,*)"*****IFRADF= ", IFRADF
      WRITE(6,*)"*****IFOPT= ", IFOPT

      READ(14,*)
      READ(14,*)Z_R1,Z_SIGMA1,Z_R2,Z_SIGMA2
      WRITE(6,*)"BCOC size parameters: Z_R1,Z_SIGMA1,Z_R2,Z_SIGMA2"
      WRITE(6,*)Z_R1,Z_SIGMA1,Z_R2,Z_SIGMA2
      READ(14,*)
      READ(14,*)DENBC
      WRITE(6,*)"DENBC (density of BC in kg/m3)"
      WRITE(6,*)DENBC

      READ(14,*)
      READ(14,*)SEASCHEME
      WRITE(6,*)"SEASCHEME (1=Clarke et al 2006; 2=Gong et al 2003)"
      WRITE(6,*)SEASCHEME

      READ(14,*)
      READ(14,*)FSALTSCAL,IFSSTSCALE
      WRITE(6,*)"FSALTSCALE (when SEASCHEME=2), scale with SST=1"
      WRITE(6,*)FSALTSCAL,IFSSTSCALE

      READ(14,*)
!      READ(14,*) IFAMINEUP, AGAMA, ERATIO,OXRATE
!      WRITE(6,*)"IFAMINEUP, AGAMA, ERATIO, OXRATE"
!      WRITE(6,*)IFAMINEUP, AGAMA, ERATIO,OXRATE
      READ(14,*) IFAMINEUP, AGAMA
      WRITE(6,*)"IFAMINEUP, AGAMA"
      WRITE(6,*)IFAMINEUP, AGAMA

      READ(14,*)
      READ(14,*)IFATHN,NUCLAMINE
      WRITE(6,*)"IFATHN,NUCLAMINE"
      WRITE(6,*)IFATHN,NUCLAMINE

      READ(14,*)
      READ(14,*)IFCDNPDF, IFNEWCOD
      WRITE(6,*)"*****IFCDNPDF= ", IFCDNPDF
      WRITE(6,*)"*****IFNEWCOD= ", IFNEWCOD
      IF(IFOPT<1)IFCDNPDF=0
      IF(IFCDNPDF==0)IFNEWCOD=0

      READ(14,*)
      READ(14,*)IFNEWSF
      WRITE(6,*)"*****IFNEWSF= ", IFNEWSF

      READ(14,*)
      READ(14,*)IFNEWN2O5
      WRITE(6,*)"*****IFNEWN2O5= ", IFNEWN2O5

      READ(14,*)
      READ(14,*)IFDOISRP
      WRITE(6,*)"*****IFDOISRP= ", IFDOISRP

      READ(14,*)
      READ(14,*)IFMODISOUT
      WRITE(6,*)"*****IFMODISOUT= ", IFMODISOUT

      READ(14,*)
      READ(14,*)IFONLINEMET
      WRITE(6,*)"*****IFONLINEMET= ", IFONLINEMET

      READ(14,*)
      READ(14,*)IFNH3
      WRITE(6,*)"*****IFNH3= ", IFNH3

      READ(14,*)
      READ(14,*)IFATOM, ATOMMONS, ATOMDAYS, ATOMMONE, ATOMDAYE
      WRITE(6,*)"*****IFATOM= ", IFATOM, ATOMMONS, ATOMDAYS,
     &          ATOMMONE, ATOMDAYE

      READ(14,*)
      READ(14,*)IFSEABIRD
      WRITE(6,*)"*****IFSEABIRD= ", IFSEABIRD


      READ(14,*)
      READ(14,*)IFNUCL, IFNUCLORG
      WRITE(6,*)"*****IFNUCLORG= ", IFNUCLORG


      CLOSE(14)

! ALLOCATE MODULE VARIABLES
         CALL INIT_APMARRAYS

! READ in IMN LOOKUP TABLES
         WRITE(6,*)"NUCLEATION SCHEME INDEX IFNUCL =", IFNUCL
         IF(IFNUCL.EQ.1.or.IFNUCL.EQ.2) CALL READJTIMN(DATA_DIR_1x1)
         IF(IFATHN.GE.1) CALL READJATHN(DATA_DIR_1x1)

!OPT+
      IF(IFOPT.EQ.1) THEN
        DO ITAB = 1, 3
         CALL  READOPTABLE(ITAB,DATA_DIR_1x1)
        ENDDO

        ITAB = 3   !dust LW
        CALL  READOPTABLE_LW(ITAB,DATA_DIR_1x1)
       ENDIF
!OPT+

! Calculate hygroscopic growth factor for ammonia bisulfate, seasalt, and SOA
         CALL HYDRGF1
         
!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        IF(IFAG.EQ.1) THEN
! READ in FOOACRIT TABLE (to be used in carbon_mod.f)
         CLOSE(49)

         OPEN(49,file=TRIM(DATA_DIR_1x1)//
     &       '/APM_data_201906/FSOGagMHC9DHDC.dat'
     &          ,status='old')
!         WRITE(6,*)"READ in FOOAaging.dat"
         WRITE(6,*)"READ in FSOGagMHC9DHDC.dat"


         DO IT = 1,MT     ! 260 K -320 K
           READ(49,99)TK,((FOOACRIT(IP,IC,IT),IC=1,MHC),IP=1,NPROD)
           IF(IT.EQ.1.and.TK.NE.260.0) THEN  ! make sure read in the right one
            WRITE(6,*)"STOP at apm_init_mod.f, need check FOOAaging.dat"
            STOP
           ENDIF
           IF(MOD(IT,10).EQ.1)
     &       WRITE(6,99)TK,((FOOACRIT(IP,IC,IT),IC=1,MHC),IP=1,NPROD)
         ENDDO
         CLOSE(49)
 99      FORMAT(F5.1,50(1PE10.3))
        ENDIF
!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


! Setup bin structures and emission parameterizations
!
! Primary sulfate emission parameters
!         FE0 = 0.    ! Fraction of sulfur emitted as sulfate (0 - 1)
         
! Parameters for Nucl Mode : 1.d6 5.0d-9 1.6d0 0.05
         Y_R1 = 5.0d-9   ! cm
         Y_SIGMA1 = 1.6d0
         FRAC1 = 0.05
! Parameters for Cond Mode   : 1.d6 3.5d-8 2.0d0 0.95
         Y_R2 = 3.5d-8   ! cm
         Y_SIGMA2 = 2.0d0
         FRAC2 = 1. - FRAC1
         
         IFEMITBCOCS = 1 ! Accumlation mode of primary sulfate added to BCOC
         CALL BINSULF
         CALL SULF_EMIT

         CALL BINSALT
         CALL SALTEMIT

         IF(NDSTB.EQ.7) CALL BINDST7
         IF(NDSTB.EQ.15) CALL BINDST15

         CALL BINBCOC
         CALL BCOC_EMIT

!         FIRST = .FALSE.
!      ENDIF

      END SUBROUTINE APM_INIT 
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: apm_ntracers
!
! !DESCRIPTION: Subroutine APM\_NTRACERS initializes the number of tracers 
!  associated with APM.
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE APM_NTRACERS( State_Chm )

      USE State_Chm_Mod,  ONLY : ChmState
      USE State_Chm_Mod,  ONLY : Ind_
!
! !INPUT PARAMETERS: 
      TYPE(ChmState)           :: State_Chm   ! Chemistry State object
!
! !OUTPUT PARAMETERS:
!
! !REVISION HISTORY: 
!  17 Mar 2010 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER            :: N, T

      IFEV = 0
      WRITE(6,*)"IFEV=",IFEV

      IFQANN = 1
      IFAG = 0
      IFEMITH = 1
      IFPREIND = 0
      IFSITE = 0  !  
        
      WBAR = 0.3  !m/s
!      WBAR = 0.15  !m/s
      WRITE(6,*)"WBAR (m/s) = ", WBAR



!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
!
!         IFQANN = 2    ! =1: anuual mean; =2: monthly mean
!         IFAG = 1      ! =0: no SOG age;  =1: SOG age
!         IFEMITH = 2   ! =1: original;    =2: revised emit H
!         IFSITE = 1    !  supersites =0: none;=1: global sites; =2: nested EU

      CLOSE(199)
      OPEN(199,file='apm_tmp.dat',status='old')
      READ(199,*)
      READ(199,*)IFQANN,IFAG,IFEMITH,IFSITE,IFPREIND
      READ(199,*)
      READ(199,*)IY,DTTEST
      WRITE(6,*)"IY,DTTEST = ", IY,DTTEST
      CLOSE(199)

!      CLOSE(200)
!      OPEN(200,file='apm_rad.dat',status='old')
!      READ(200,*)
!      READ(200,*)YRLIQ,YRICE
!      WRITE(6,*)"YRLIQ= ", YRLIQ, "YRICE= ", YRICE
!      CLOSE(200)
 
!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      WRITE(6,*)"IFQANN etc =",IFQANN,IFAG,IFEMITH,IFSITE,IFPREIND


! # of various APM tracers, can be organized in a better way later
      
      NGCOND=1   ! Number of condensable gases
      NSO4=40    ! Number of bins for sulfate or secondary particles

      NCTSO4=0   ! Number of tracers associated with coating on SO4
      NCTBC=1    ! Number of tracers associated with coating on BC
      NCTOC=1    ! Number of tracers associated with coating on OC
      NCTDST=1   ! Number of tracers associated with coating on DUST
      NCTSEA=1   ! Number of tracers associated with coating on Sea salt
      
!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
!20110728      IF(IFAG.EQ.1) THEN
        NGCOND=2   ! Number of condensable gases
        NCTSO4=1   ! Number of tracers associated with coating on SO4
        NCTBC=2    ! Number of tracers associated with coating on BC
        NCTOC=2    ! Number of tracers associated with coating on OC
        NCTDST=2   ! Number of tracers associated with coating on DUST
        NCTSEA=2   ! Number of tracers associated with coating on Sea salt
!20110728      ENDIF
!APM2++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


      NSEA=20    ! Number of bins for sea salt
      NDSTB=15    ! Number of bins for dust
      NBCOC=15    ! Number of bins for BC and POC

!      NBCPIF=1
!      NBCPIO=1
!      NOCPIF=1
!      NOCPIO=1
!      NBCPOF=1
!      NBCPOO=1
!      NOCPOF=1
!      NOCPOO=1
!      NBCOCT=NBCPIF+NBCPIO+NOCPIF+NOCPIO+NBCPOF+NBCPOO+NOCPOF+NOCPOO

      NBCOCT=NBCOC*2   !one for BC and the other for POC

      NAMINE=3

! set APM id_ #s
      APMIDS%id_SO4G = Ind_('APMH2SO4')
      APMIDS%id_SO4BIN1 = Ind_('APMSPBIN01')
      APMIDS%id_CTSEA = Ind_('APMCTSEA1')
      APMIDS%id_SEABIN1 = Ind_('APMSEABIN01')
      APMIDS%id_DSTBIN1 = Ind_('APMDSTBIN01')
      APMIDS%id_CTSO4 = Ind_('APMLVSOA')
      APMIDS%id_CTBC = Ind_('APMCTBC1')
      APMIDS%id_CTOC = Ind_('APMCTOC1')
      APMIDS%id_CTDST = Ind_('APMCTDST1')
      APMIDS%id_BCBIN1 = Ind_('APMBCBIN01')
      APMIDS%id_OCBIN1 = Ind_('APMOCBIN01')
      APMIDS%id_AMINE = Ind_('APMAMINE1')

      APMIDS%id_OH   = Ind_('OH'       )
      APMIDS%id_H2O2 = Ind_('H2O2')
      APMIDS%id_SO2 = Ind_('SO2')
      APMIDS%id_MSA = Ind_('MSA')
      APMIDS%id_SO4 = Ind_('SO4')
      APMIDS%id_HNO3 = Ind_('HNO3')
      APMIDS%id_NIT = Ind_('NIT')
      APMIDS%id_NH3 = Ind_('NH3')
      APMIDS%id_NH4 = Ind_('NH4')

      APMIDS%id_CO = Ind_('CO')
      APMIDS%id_NO = Ind_('NO')
      APMIDS%id_NO2 = Ind_('NO2')
      APMIDS%id_NO3 = Ind_('NO3')
      APMIDS%id_ISOP = Ind_('ISOP')
      APMIDS%id_MTPA = Ind_('MTPA')

      APMIDS%id_BCPO = Ind_('BCPO')
      APMIDS%id_BCPI = Ind_('BCPI')
      APMIDS%id_OCPO = Ind_('OCPO')
      APMIDS%id_OCPI = Ind_('OCPI')

      APMIDS%id_SALA = Ind_('SALA')
      APMIDS%id_SALC = Ind_('SALC')

      APMIDS%id_GC_DSTbin1 = Ind_('DSTbin1')
      APMIDS%id_GC_DSTbin2 = Ind_('DSTbin2')
      APMIDS%id_GC_DSTbin3 = Ind_('DSTbin3')
      APMIDS%id_GC_DSTbin4 = Ind_('DSTbin4')
      APMIDS%id_GC_DSTbin5 = Ind_('DSTbin5')
      APMIDS%id_GC_DSTbin6 = Ind_('DSTbin6')
      APMIDS%id_GC_DSTbin7 = Ind_('DSTbin7')

      APMIDS%id_TSOA1 = Ind_('TSOA1')
      APMIDS%id_TSOG1 = Ind_('TSOG1')
      APMIDS%id_TSOA2 = Ind_('TSOA2')
      APMIDS%id_TSOG2 = Ind_('TSOG2')
      APMIDS%id_TSOA3 = Ind_('TSOA3')
      APMIDS%id_TSOG3 = Ind_('TSOG3')
      APMIDS%id_TSOA0 = Ind_('TSOA0')
      APMIDS%id_TSOG0 = Ind_('TSOG0')
      APMIDS%id_POA1 = Ind_('POA1')
      APMIDS%id_POA2 = Ind_('POA2')
      APMIDS%id_POG1 = Ind_('POG1')
      APMIDS%id_POG2 = Ind_('POG2')
      APMIDS%id_OPOA1 = Ind_('OPOA1')
      APMIDS%id_OPOG1 = Ind_('OPOG1')
      APMIDS%id_OPOA2 = Ind_('OPOA2')
      APMIDS%id_OPOG2 = Ind_('OPOG2')
      APMIDS%id_ASOAN = Ind_('ASOAN')
      APMIDS%id_ASOA1 = Ind_('ASOA1')
      APMIDS%id_ASOG1 = Ind_('ASOG1')
      APMIDS%id_ASOA2 = Ind_('ASOA2')
      APMIDS%id_ASOG2 = Ind_('ASOG2')
      APMIDS%id_ASOA3 = Ind_('ASOA3')
      APMIDS%id_ASOG3 = Ind_('ASOG3')

      END SUBROUTINE APM_NTRACERS 
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: 
!
! !DESCRIPTION: Subroutine HYDRGF1 calculates the hygroscopic growth factor 
!  table.
!\\
!\\
! !INTERFACE:
!     
      SUBROUTINE HYDRGF1
!
! !REMARKS:
!   YGF(IRH,ITYPE): Growth factor at IRH=1,99 for 
!     (NH4)2SO4 (ITYPE=1), 
!     (NH4)HSO4 (ITYPE=2), 
!     SOA (ITYPE=3), and 
!     Seasalt (ITYPE=4)
! 
! !REVISION HISTORY: 
!  26 Nov 2008 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !DEFINED PARAMETERS:
!
      ! Parameters  for seasalt
      REAL*8,  PARAMETER     :: C1 =  0.7674d0
      REAL*8,  PARAMETER     :: C2 =  3.079d0
      REAL*8,  PARAMETER     :: C3 =  2.573d-11
      REAL*8,  PARAMETER     :: C4 = -1.424d0
!     
! !LOCAL VARIABLES:
!
      REAL*8  :: RH
      REAL*8  :: XL(4),YL(4),ZL(4)
      REAL*8  :: RSALT(10),GFSALT(10)
      REAL*8  :: X,Y,Z,RCM,RWET,FAC1,FAC2,A,B,C,SOAGF

      INTEGER   :: J,K,IRH
      REAL*8  :: YGFSALT

! For (NH4)2SO4,  NH4HSO4, H2SO4: data from Li et al, JAS, 2001 
      data XL/-0.8082E-1, 0.5121, 0.4823E-2, 1.070/ ! (NH4)2SO4
      data YL/-0.1741E-1, 0.3702, 0.1367E-1, 1.116/ ! NH4HSO4
      data ZL/0.1842, 0.4416 , 0.3492E-2, 1.053/ ! H2SO4
      
      DO J=1,99
         RH = float(J)*0.01
         X =  exp(XL(1)+XL(2)*RH+XL(3)/(RH-XL(4))**2.) ! GF for (NH4)2SO4
         Y =  exp(YL(1)+YL(2)*RH+YL(3)/(RH-YL(4))**2.) ! GF for NH4HSO4
         Z =  exp(ZL(1)+ZL(2)*RH+ZL(3)/(RH-ZL(4))**2.) ! GF for H2SO4
!     write(6,100)RH,X,Y,Z
         X = MAX(X,1.01d0)
         Y = MAX(Y,1.01d0)
         YGF(J,1) = X
         YGF(J,2) = Y
      ENDDO
!
! SOA growth factor
! Varutbangkul et al., Atmos. Chem. Phys., 6, 2367-2388, 2006.
! GF values of the pure organic portion of the SOA at 85% RH are between 
! 1.09-1.16 for the C5-C8 cycloalkenes, 1.06-1.10 for the monoterpenes and 
! oxygenated terpenes, and 1.01-1.04 for the sesquiterpenes.
!
! GF = 1 + [(1-RH/100)**(-A) x B(RH/100)**C]
!
! We choose A=0.2817, B=0.0674, C=1.7026 
! which gives GF=1.087 at RH=85% to represent average GF
!
      A= 0.2817
      B= 0.0674
      C= 1.7026

      DO J=1,99
         RH = float(J)*0.01
         SOAGF = 1. + ((1.-RH)**(-A) * B * (RH)**C)
!         write(6,105)RH,SOAGF
         YGF(J,3) = SOAGF
      ENDDO

!  Sea salt growth with relative humidity in radius [m]
! (Gerber, 1985) (bec, 12/8/04)

      DO K=1,10                 ! check to see the effect of R on GF 
         RSALT(K) = 3.E-7*float(K)*float(K)*float(K)
      ENDDO
!     WRITE(6,*)"Sea Salt Growth Factor"
!     WRITE(6,110)(RSALT(K)*1.E4,K=1,10)
!      DO J=1,99
!         RH = float(J)*0.01
!         DO K=1,10      
!! Exponential factors
!            RCM = RSALT(K)      ! cm
!            FAC1 = C1 * ( RCM**C2 )
!            FAC2 = C3 * ( RCM**C4 )
!            RWET = (FAC1/(FAC2-DLOG(RH))+RCM**3.d0)**0.33d0 ! cm
!            GFSALT(K)=RWET/RCM
!         ENDDO
!!     write(6,100)RH,(GFSALT(K),K=1,10)
!!     write(6,100)RH,GFSALT(4)
!!     Particle dry size has some effect on GF when RH is very high
!!     here use GF @ RDRY=~200 nm as average GF
!!20110513         YGF(J,4) = GFSALT(4)
!         YGF(J,4) = 2.*0.54*(1. + 1./(1.-RH))**(1./3.)  !based on De Leeuw etal., ROG,2010 for ow.
!      ENDDO
!
!Yu+ 6/2/11 read from file
      CLOSE(99)
      OPEN(99,file=TRIM(DATA_DIR_1x1)//
     &            '/APM_data_201906/APMTABLES/HGFSEASALT.txt')

      DO J=1,99
         READ(99,102)IRH, YGFSALT
         YGF(J,4) = YGFSALT
      ENDDO
      CLOSE(99)
 102  FORMAT(I5,10(1PE10.3))

      WRITE(6,*)"Calculate hygroscopic growth factor tables"

      WRITE(6,*)"   RH   SULFATE    SOA   SEASALT"
      DO J=1,99,2
         write(6,100)FLOAT(J),YGF(J,1),YGF(J,3),YGF(J,4)
      ENDDO
      
 100  FORMAT(20(1PE9.2))
 105  FORMAT(20(1PE10.3))
 110  FORMAT("RSALT(um)",10(1PE9.2))

      END SUBROUTINE HYDRGF1
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: binsulf
!
! !DESCRIPTION: Subroutine BINSULF setup size-resolved sulfate sectional bin 
!  structure (allowing any variable bin resolution,i.e., variable bin volume 
!  ratio).
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE BINSULF
! 
! !REVISION HISTORY: 
!  16 Nov 2008 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: I,J,K,L, NMAX
      REAL*8  :: RMIN,VRAT,YVRATMAX,THIRD,VJK
      REAL*8  :: RDRY_TR, RDRY_TR1,RATIOVRAT
      REAL*8  :: YVRAT(NSO4)

      THIRD = 1.d0/3.d0
      RMIN = 0.6d-9    ! m
      VRAT = 1.60d0
      YVRATMAX  = 8.0d0
      RDRY_TR = 4.5d-8  ! m
      RDRY_TR1 = 3.d-7  ! m
      RATIOVRAT = 1.15d0

      NMAX      = NSO4
      DO I   = 1, NMAX
         IF(I.EQ.1) THEN
            RDRY(I) =RMIN
!         ELSEIF((DBLE(I)/DBLE(I-1)).GE.VRAT) THEN
!            YVRAT(I-1)=DBLE(I)/DBLE(I-1)
!            RDRY(I) = RDRY(I-1)*YVRAT(I-1)**THIRD
         ELSEIF(RDRY(I-1).LE.RDRY_TR) THEN
            YVRAT(I-1)= VRAT
            RDRY(I) = RDRY(I-1)*YVRAT(I-1)**THIRD
!         ELSEIF(RDRY(I-1).LE.RDRY_TR1) THEN
!            YVRAT(I-1)= 2.0d0
!            RDRY(I) = RDRY(I-1)*YVRAT(I-1)**THIRD
         ELSE
            YVRAT(I-1) = YVRAT(I-2) * RATIOVRAT
            IF(YVRAT(I-1).GT.YVRATMAX) YVRAT(I-1) = YVRATMAX
            RDRY(I) = RDRY(I-1)*YVRAT(I-1)**THIRD
         ENDIF
         VDRY(I)=4.d0/3.d0*3.1416d0*(RDRY(I)**3.d0)   ! m3
         IF(I.EQ.NMAX) YVRAT(I) = YVRAT(I-1)
      ENDDO
      WRITE(6,*)"SULF bin information"
      WRITE(6,*)"Bin# R(um)  Volume(m3)  VRAT"
      DO I   = 1, NMAX
         WRITE(6,55)I,RDRY(I)*1.E6,VDRY(I),YVRAT(I)
      ENDDO
 55   FORMAT(I4, 10(1PE11.3))

!------------------------------------------------------------------------------
      ! Coefficient for coagulation partition
      DO J=1,NMAX
         DO K=1, J
            VJK = VDRY(J) + VDRY(K)
            IF(VJK .GE. VDRY(NMAX)) THEN
              COAGPAR(j,k,NMAX) = 1.d0
              COAGPAR(k,j,NMAX) = 1.d0
            ELSE
              IF(J .LE. (NMAX-1))THEN
              DO I=J, NMAX-1
                IF((VJK .GE. VDRY(i)) .AND. (VJK .LT. VDRY(i+1))) THEN
                  COAGPAR(j,k,i)=((VDRY(i+1)-VJK)/(VDRY(i+1)-VDRY(i)))
     &                          *VDRY(i)/VJK
                  COAGPAR(j,k,i+1) = 1.- COAGPAR(j,k,i)
                  COAGPAR(k,j,i) = COAGPAR(j,k,i)
                  COAGPAR(k,j,i+1) = COAGPAR(j,k,i+1)
                ENDIF
              ENDDO
              ENDIF
            ENDIF
         ENDDO
      ENDDO
 100  FORMAT(I3,I3,I3,F5.2,F5.2)

      END SUBROUTINE BINSULF
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: 
!
! !DESCRIPTION: Subroutine BINSALT setups size-resolved sectional bins for 
!  sea salt (allowing any variable bin resolution,i.e., variable bin volume 
!  ratio)
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE BINSALT
! 
! !REVISION HISTORY: 
!  16 Nov 2008 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!      
      INTEGER            :: I,J,K, NMAX
      REAL*8             :: RMIN,VRAT,YVRATMAX,THIRD,VJK
      REAL*8             :: RDRY_TR, RDRY_TR1,RATIOVRAT
      REAL*8             :: YVRAT(NSEA)
      REAL*8             :: RCM, FAC1, FAC2
!
! !DEFINED PARAMETERS:
!
      REAL*8,  PARAMETER :: C1 =  0.7674d0
      REAL*8,  PARAMETER :: C2 =  3.079d0
      REAL*8,  PARAMETER :: C3 =  2.573d-11
      REAL*8,  PARAMETER :: C4 = -1.424d0

      !=================================================================
      ! BINSALT begins here!
      !=================================================================

      THIRD = 1.d0/3.d0
      RMIN = 0.6d-8    ! m
      VRAT = 2.0d0
      YVRATMAX  = 8.0d0
      RDRY_TR = 0.5d-7  ! m
      RDRY_TR1 = 3.d-0  ! m
      RATIOVRAT = 1.138d0

      NMAX      = NSEA
      DO I   = 1, NMAX
         IF(I.EQ.1) THEN
            RSALT(I) =RMIN
         ELSEIF(I.LE.3) THEN
            YVRAT(I-1)= 2.5
            RSALT(I) = RSALT(I-1)*YVRAT(I-1)**THIRD
         ELSEIF((DBLE(I)/DBLE(I-1)).GE.VRAT) THEN
            YVRAT(I-1)=DBLE(I)/DBLE(I-1)
            RSALT(I) = RSALT(I-1)*YVRAT(I-1)**THIRD
         ELSEIF(RSALT(I-1).LE.RDRY_TR) THEN
            YVRAT(I-1)= VRAT
            RSALT(I) = RSALT(I-1)*YVRAT(I-1)**THIRD
         ELSE
            YVRAT(I-1) = YVRAT(I-2) * RATIOVRAT
            IF(YVRAT(I-1).GT.YVRATMAX) YVRAT(I-1) = YVRATMAX
            RSALT(I) = RSALT(I-1)*YVRAT(I-1)**THIRD
         ENDIF
         VSALT(I)=4.d0/3.d0*3.1416d0*(RSALT(I)**3.d0)   ! m3
         IF(I.EQ.NMAX) YVRAT(I) = YVRAT(I-1)
      ENDDO
      WRITE(6,*)"Sea Salt bin information"
      WRITE(6,*)"Bin# R(um)  Volume(m3)  VRAT"

      DO I   = 1, NMAX
      ! Sea salt radius [cm]
         RCM  = RSALT(I) * 100d0

!      ! Exponential factors
!         FAC1 = C1 * ( RCM**C2 )
!         FAC2 = C3 * ( RCM**C4 )
!
!! NOTE: DLOG is replaced by LOG (bmy, 2/16/11)
!!         RSALT80(I)=0.01d0*(FAC1/(FAC2-DLOG(0.8))+RCM**3.d0)**0.33d0
!         RSALT80(I)=0.01d0*(FAC1/(FAC2-LOG(0.8))+RCM**3.d0)**0.33d0
! de Leeuw, ROG, 2010, yfq,20110513
         RSALT80(I)= 2.*RSALT(I)
         WRITE(6,55)I,RSALT(I)*1.E6,RSALT80(I)*1.E6, VSALT(I),YVRAT(I)
      ENDDO
 55   FORMAT(I4, 10(1PE11.3))

      IACTSS1= 1
      IACTSS2= 1
      IACTSS3= 1
      DO I   = 2, NMAX
       IF(DACT1.GE.(2.*RSALT(I-1)).and.DACT1.LT.(2.*RSALT(I))) IACTSS1=I
       IF(DACT2.GE.(2.*RSALT(I-1)).and.DACT2.LT.(2.*RSALT(I))) IACTSS2=I
       IF(DACT3.GE.(2.*RSALT(I-1)).and.DACT3.LT.(2.*RSALT(I))) IACTSS3=I
      ENDDO

      WRITE(6,*)"IACTSS1=",IACTSS1,"IACTSS2=",IACTSS2,"IACTSS3=",IACTSS3
!------------------------------------------------------------------------------
      ! Coefficient for coagulation partition
      DO J=1,NMAX
         DO K=1, J
            VJK = VSALT(J) + VSALT(K)
            IF(VJK .GE. VSALT(NMAX)) THEN
              COAGPARSS(j,k,NMAX) = 1.d0
              COAGPARSS(k,j,NMAX) = 1.d0
            ELSE
              IF(J .LE. (NMAX-1))THEN
              DO I=J, NMAX-1
                IF((VJK .GE. VSALT(i)) .AND. (VJK .LT. VSALT(i+1))) THEN
                  COAGPARSS(j,k,i)=((VSALT(i+1)-VJK)/(VSALT(i+1)
     &                               -VSALT(i)))*VSALT(i)/VJK
                  COAGPARSS(j,k,i+1) = 1.- COAGPARSS(j,k,i)

                  COAGPARSS(k,j,i) = COAGPARSS(j,k,i)
                  COAGPARSS(k,j,i+1) = COAGPARSS(j,k,i+1)
                ENDIF
              ENDDO
              ENDIF
            ENDIF
         ENDDO
      ENDDO
 100  FORMAT(I3,I3,I3,F5.2,F5.2)

      END SUBROUTINE BINSALT 
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: bindst7
!
! !DESCRIPTION: Subroutine BINDST setups size-resolved sectional bins for 
!  dust particles (allowing any variable bin resolution,i.e., variable bin 
!  volume ratio)
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE BINDST7
! 
! !REVISION HISTORY: 
!  13 Jun 2010 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!      
      INTEGER :: I,J,K, NMAX
!      REAL*8  :: RMIN,VRAT,YVRATMAX,THIRD,VJK
!      REAL*8  :: RDRY_TR, RDRY_TR1,RATIOVRAT
      REAL*8  :: YVRAT(NDSTB)
      REAL*8  :: RCM

      !=================================================================
      ! BINDST begins here!
      !=================================================================

      NMAX      = NDSTB
! based on GEOS-Chem size for now
      RDST(1) = 0.15d-6  !m
      RDST(2) = 0.25d-6  !m
      RDST(3) = 0.4d-6   !m
      RDST(4) = 0.8d-6   !m
      RDST(5) = 1.5d-6   !m
      RDST(6) = 2.5d-6   !m
      RDST(7) = 4.0d-6   !m
      DENDST(1) = 2.5    !g/cm3
      DENDST(2) = 2.5    !g/cm3
      DENDST(3) = 2.5    !g/cm3
      DENDST(4) = 2.5    !g/cm3
      DENDST(5) = 2.65   !g/cm3
      DENDST(6) = 2.65   !g/cm3
      DENDST(7) = 2.65   !g/cm3

      DO I   = 1, NMAX
        VDST(I)=4.d0/3.d0*3.1416d0*(RDST(I)**3.d0)   ! m3
      ENDDO
      DO I   = 1, NMAX-1
        YVRAT(I) = VDST(I+1)/VDST(I)
      ENDDO
      YVRAT(NMAX)=YVRAT(NMAX-1)
     
      WRITE(6,*)"Dust bin information"
      WRITE(6,*)"Bin# R(um)  Volume(m3)  VRAT"

      DO I   = 1, NMAX
      ! dust radius [cm]
         RCM  = RDST(I) * 100d0
         WRITE(6,55)I,RDST(I)*1.E6, VDST(I),YVRAT(I)
      ENDDO
 55   FORMAT(I4, 10(1PE11.3))

!------------------------------------------------------------------------------
!      ! Coefficient for coagulation partition
!                 --- Deal with this later
!      DO J=1,NMAX
!         DO K=1, J
!            VJK = VDST(J) + VDST(K)
!            IF(VJK .GE. VDST(NMAX)) THEN
!              COAGPARSS(j,k,NMAX) = 1.d0
!              COAGPARSS(k,j,NMAX) = 1.d0
!            ELSE
!              IF(J .LE. (NMAX-1))THEN
!              DO I=J, NMAX-1
!                IF((VJK .GE. VDST(i)) .AND. (VJK .LT. VDST(i+1))) THEN
!                  COAGPARSS(j,k,i)=((VDST(i+1)-VJK)/(VDST(i+1)
!     &                               -VDST(i)))*VDST(i)/VJK
!                  COAGPARSS(j,k,i+1) = 1.- COAGPARSS(j,k,i)
!
!                  COAGPARSS(k,j,i) = COAGPARSS(j,k,i)
!                  COAGPARSS(k,j,i+1) = COAGPARSS(j,k,i+1)
!                ENDIF
!              ENDDO
!              ENDIF
!            ENDIF
!         ENDDO
!      ENDDO
 100  FORMAT(I3,I3,I3,F5.2,F5.2)

      END SUBROUTINE BINDST7 
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: bindst15
!
! !DESCRIPTION: Subroutine BINDST setups size-resolved sectional bins for 
!  dust particles (allowing any variable bin resolution,i.e., variable bin 
!  volume ratio)
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE BINDST15
! 
! !REVISION HISTORY: 
!  13 Jun 2010 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: I,J,K, NMAX
!      REAL*8  :: RMIN,VRAT,YVRATMAX,THIRD,VJK
!      REAL*8  :: RDRY_TR, RDRY_TR1,RATIOVRAT
      REAL*8  :: YVRAT(NDSTB),DEDGE1(16)
      REAL*8  :: RCM

!      DATA DEDGE1/0.05,0.09,0.18,0.35,0.6,1.0,1.55,2.5,   ! Edge diameter (um)
!     &            3.75,4.7,5.7,7.5,14.5,26.0,41.0,63.0/

      DATA DEDGE1/0.02,0.045,0.09,0.18,0.35,0.6,1.0,1.55,2.5,   ! Edge diameter (um)
     &            3.75,5.7,7.5,14.5,26.0,41.0,63.0/

      !=================================================================
      ! BINDST begins here!
      !=================================================================

      DEDGE = DEDGE1

      NMAX      = NDSTB

      DO I   = 1, NMAX
        RDST(I)=0.5*SQRT(DEDGE(I)*DEDGE(I+1))*1.d-6  ! m
        VDST(I)=4.d0/3.d0*3.1416d0*(RDST(I)**3.d0)   ! m3
        IF(RDST(I).LT.1.d-6) THEN
           DENDST(I)= 2.5 !g/cm3
        ELSE
           DENDST(I)= 2.65 !g/cm3
        ENDIF
      ENDDO
      DO I   = 1, NMAX-1
        YVRAT(I) = VDST(I+1)/VDST(I)
      ENDDO
      YVRAT(NMAX)=YVRAT(NMAX-1)
     
      WRITE(6,*)"Dust bin information"
      WRITE(6,*)"Bin# R(um)  Volume(m3)  VRAT"

      DO I   = 1, NMAX
      ! dust radius [cm]
         RCM  = RDST(I) * 100d0
         WRITE(6,55)I,RDST(I)*1.E6, VDST(I),YVRAT(I)
      ENDDO
 55   FORMAT(I4, 10(1PE11.3))

!------------------------------------------------------------------------------
!      ! Coefficient for coagulation partition
!                 --- Deal with this later
!      DO J=1,NMAX
!         DO K=1, J
!            VJK = VDST(J) + VDST(K)
!            IF(VJK .GE. VDST(NMAX)) THEN
!              COAGPARSS(j,k,NMAX) = 1.d0
!              COAGPARSS(k,j,NMAX) = 1.d0
!            ELSE
!              IF(J .LE. (NMAX-1))THEN
!              DO I=J, NMAX-1
!                IF((VJK .GE. VDST(i)) .AND. (VJK .LT. VDST(i+1))) THEN
!                  COAGPARSS(j,k,i)=((VDST(i+1)-VJK)/(VDST(i+1)
!     &                               -VDST(i)))*VDST(i)/VJK
!                  COAGPARSS(j,k,i+1) = 1.- COAGPARSS(j,k,i)
!
!                  COAGPARSS(k,j,i) = COAGPARSS(j,k,i)
!                  COAGPARSS(k,j,i+1) = COAGPARSS(j,k,i+1)
!                ENDIF
!              ENDDO
!              ENDIF
!            ENDIF
!         ENDDO
!      ENDDO
 100  FORMAT(I3,I3,I3,F5.2,F5.2)

      END SUBROUTINE BINDST15 
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE:
!
! !DESCRIPTION: Subroutine BINBCOC setups size-resolved sectional bins for
!  BCOC (allowing any variable bin resolution,i.e., variable bin volume
!  ratio)
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE BINBCOC
!
! !REVISION HISTORY:
!  1 Feb 2016 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER            :: I,J,K, NMAX
      REAL*8             :: RMIN,VRAT,YVRATMAX,THIRD,VJK
      REAL*8             :: RDRY_TR, RDRY_TR1,RATIOVRAT
      REAL*8             :: YVRAT(NBCOC)
      REAL*8             :: RCM, FAC1, FAC2
!
! !DEFINED PARAMETERS:
!
      REAL*8,  PARAMETER :: C1 =  0.7674d0
      REAL*8,  PARAMETER :: C2 =  3.079d0
      REAL*8,  PARAMETER :: C3 =  2.573d-11
      REAL*8,  PARAMETER :: C4 = -1.424d0

      !=================================================================
      ! BINBCOC begins here!
      !=================================================================

      THIRD = 1.d0/3.d0
      RMIN = 5.0d-9    ! m

      YVRAT = 2.0d0
      YVRAT(1)=8.0d0
      YVRAT(2)=4.0d0
      YVRAT(13)=4.0d0
      YVRAT(14)=8.0d0

      NMAX      = NBCOC
      DO I   = 1, NMAX
         IF(I.EQ.1) THEN
            RBCOC(I) =RMIN
         ELSE
            RBCOC(I) = RBCOC(I-1)*YVRAT(I-1)**THIRD
         ENDIF
         VBCOC(I)=4.d0/3.d0*3.1416d0*(RBCOC(I)**3.d0)   ! m3
         IF(I.EQ.NMAX) YVRAT(I) = YVRAT(I-1)
      ENDDO
      WRITE(6,*)"BCOC bin information"
      WRITE(6,*)"Bin# R(um)  Volume(m3)  VRAT"

      DO I   = 1, NMAX
      ! BCOC radius [um]
         WRITE(6,55)I,RBCOC(I)*1.E6,VBCOC(I),YVRAT(I)
      ENDDO
 55   FORMAT(I4, 10(1PE11.3))

!------------------------------------------------------------------------------
      ! Coefficient for coagulation partition
      DO J=1,NMAX
         DO K=1, J
            VJK = VBCOC(J) + VBCOC(K)
            IF(VJK .GE. VBCOC(NMAX)) THEN
              COAGPBCOC(j,k,NMAX) = 1.d0
              COAGPBCOC(k,j,NMAX) = 1.d0
            ELSE
              IF(J .LE. (NMAX-1))THEN
              DO I=J, NMAX-1
                IF((VJK .GE. VBCOC(i)) .AND. (VJK .LT. VBCOC(i+1))) THEN
                  COAGPBCOC(j,k,i)=((VBCOC(i+1)-VJK)/(VBCOC(i+1)
     &                                -VBCOC(i)))*VBCOC(i)/VJK
                  COAGPBCOC(j,k,i+1) = 1.- COAGPBCOC(j,k,i)

                  COAGPBCOC(k,j,i) = COAGPBCOC(j,k,i)
                  COAGPBCOC(k,j,i+1) = COAGPBCOC(j,k,i+1)
                ENDIF
              ENDDO
              ENDIF
            ENDIF
         ENDDO
      ENDDO
 100  FORMAT(I3,I3,I3,F5.2,F5.2)

      END SUBROUTINE BINBCOC
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: saltemit
!
! !DESCRIPTION: Sea salt emissions?
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE SALTEMIT
! 
! !REVISION HISTORY: 
!  17 Mar 2010 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!      
      REAL*8  :: YVRAT(NSEA)
      REAL*8  :: DR(NSEA),REDGE(NSEA+1),DLOGDp(NSEA)
      REAL*8  :: DFSALT9(NSEA),BETA3(6,3),BETA(6)
      REAL*8  :: VRHI,VRLOW,RUM,DFDR9,DFDLOGD9
              
      INTEGER :: I,J,NMAX

      DATA BETA3/-5.001D3,0.808D6,-1.98D7,2.188D8,-1.144D9,2.29D9
     &     ,3.854D3,1.168D4,-6.572D4,1.003D5,-6.407D4,1.493D4
     &     ,4.498D2,0.839D3,-5.394D2,1.218D2,-1.213D1,4.514D-1/

!
      NMAX = NSEA
!      SEASCHEME=1
      IF(SEASCHEME.EQ.1) THEN
         WRITE(6,*)"SEASCHEME: Clarke et al., 2006"
      ELSEIF(SEASCHEME.EQ.2) THEN
         WRITE(6,*)"SEASCHEME: Gong et al., 2003"
      ENDIF

      WRITE(6,*)"SEA SALT SIZE at RH=80%"

      DO I   = 1, NMAX-1
         YVRAT(I)=(RSALT80(I+1)/RSALT80(I))**3.0
      ENDDO
      YVRAT(NMAX) = YVRAT(NMAX-1)

      DO I = 1, NMAX
         IF(I.EQ.1) THEN
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./VRHI
            REDGE(I) = RSALT80(I)*VRLOW
            REDGE(I+1) = RSALT80(I)*VRHI
         ELSEIF(I.EQ.NMAX) THEN
            VRLOW= 1./(YVRAT(I-1)**(1./6.))
            VRHI = 1./VRLOW
            REDGE(I+1) = RSALT80(I)*VRHI
         ELSE
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./( YVRAT(I-1)**(1./6.))
            REDGE(I+1) = RSALT80(I)*VRHI
         ENDIF
         DR(I) = RSALT80(I)*(VRHI-VRLOW)
         WRITE(6,100)2.E6*RSALT80(I),2.E6*DR(I),
     &   2.E6*RSALT80(I)*VRLOW,2.E6*RSALT80(I)*VRHI,
     &             VRHI,VRLOW,YVRAT(I)
      ENDDO

      IF(SEASCHEME==2)THEN
!
! Size-resolved sea salt emission based on Gong et al., 2003
!
      DO I = 1, NMAX
         RUM = RSALT80(I)*1.D6   ! Radius @RH=80% in um
         DFDR9=1.373*9.d0**3.41*   ! dFdr (m-2 um-1 s-1)
     &    (RUM**(-4.7D0*((1.D0+30.D0*RUM)
     &   **(-0.017D0*(RUM**(-1.44D0))))))
     &   * (1.d0+0.057d0*(RUM**3.45d0))
     &   * (10.d0**(1.607d0*EXP(-1.0d0
     &   * ((0.433d0-DLOG10(RUM))/0.433d0)**2.d0)))

         DFSALT9(I) =DFDR9 * DR(I)*1.E6   ! Sea-salt flux dF (# m-2 s-1)

! Sea-salt mass flux dFM (kg m-2 s-1) at U10 = 9 m/s
         DFMSALT9(I)=DFSALT9(I)*2.2d3*4.0/3.0*3.1416*RSALT(I)**3.0 

! Yu+20111015 : Somehow Gong's scheme underpredict seasalt AOD by a factor 
! of ~2 in APM simulation when compared to MODIS and MISR data, double DFMSALT9 for now
! 20111016: x2 not enough --> x2.5
!         DFMSALT9(I)= DFMSALT9(I)*2.0
!         DFMSALT9(I)= DFMSALT9(I)*2.5
! use input: 2.5 for 4x5 and 1.7 for 2x2.5
         DFMSALT9(I)= DFMSALT9(I)*FSALTSCAL

      ENDDO
      ENDIF

! Dry size for plotting
      WRITE(6,*)"SEA SALT DRY SIZE"

      DO I   = 1, NMAX-1
         YVRAT(I)=(RSALT(I+1)/RSALT(I))**3.0
      ENDDO
      YVRAT(NMAX) = YVRAT(NMAX-1)

      DO I = 1, NMAX
         IF(I.EQ.1) THEN
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./VRHI
            REDGE(I) = RSALT(I)*VRLOW
            REDGE(I+1) = RSALT(I)*VRHI
         ELSEIF(I.EQ.NMAX) THEN
            VRLOW= 1./(YVRAT(I-1)**(1./6.))
            VRHI = 1./VRLOW
            REDGE(I+1) = RSALT(I)*VRHI
         ELSE
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./( YVRAT(I-1)**(1./6.))
            REDGE(I+1) = RSALT(I)*VRHI
         ENDIF
         DR(I) = RSALT(I)*(VRHI-VRLOW)
         DLOGDp(I) = DLOG10(VRHI/VRLOW)
         WRITE(6,100)2.E6*RSALT(I),2.E6*DR(I),
     &            2.E6*RSALT(I)*VRLOW,2.E6*RSALT(I)*VRHI,
     &             VRHI,VRLOW,YVRAT(I)
      ENDDO

      IF(SEASCHEME==1)THEN
!
! Size-resolved sea salt emission based on Clarke et al., 2006
!
      DO I = 1, NMAX

         RUM = RSALT(I)*2.D6   ! Diameter in um

         IF(RUM<0.132)THEN
           DO J=1,6
             BETA(J)=BETA3(J,1)
           ENDDO
         ELSE
           IF(RUM<1.2)THEN
             DO J=1,6
               BETA(J)=BETA3(J,2)
             ENDDO
           ELSE
             DO J=1,6
               BETA(J)=BETA3(J,3)
             ENDDO
           ENDIF
         ENDIF

         DFDR9=3.84d-2*(9.d0**3.41) ! dF (m-2 s-1)
     &        *(BETA(1)+BETA(2)*RUM+BETA(3)*RUM**2+BETA(4)*RUM**3
     &         +BETA(5)*RUM**4+BETA(6)*RUM**5)*DLOGDp(I)

         DFSALT9(I) =DFDR9 ! Sea-salt flux dF (# m-2 s-1)

! Clarke parameterization invalid for last bin which is 10 um
! Set to half of last bin
         IF(I.EQ.NMAX) DFSALT9(I) = 0.5*DFSALT9(I-1) 

! Sea-salt mass flux dFM (kg m-2 s-1) at U10 = 9 m/s
         DFMSALT9(I)=DFSALT9(I)*2.2d3*4.0/3.0*3.1416*RSALT(I)**3.0
      ENDDO
      ENDIF

      DO I = 1, NMAX
         DFDLOGD9= DFSALT9(I)/DLOGDp(I) ! Sea-salt flux dF/dlogDp (# m-2 s-1)

!         WRITE(28,100)RSALT(I)*2.E6,DFDLOGD9
!         WRITE(29,100)REDGE(I)*2.E6, 1.E-20
!         WRITE(29,100)REDGE(I)*2.E6,DFDLOGD9
!         WRITE(29,100)REDGE(I+1)*2.E6,DFDLOGD9
!         WRITE(29,100)REDGE(I+1)*2.E6,1.E-20
 100     FORMAT(10(1PE10.3))
      ENDDO
      !FLUSH(28)
      !FLUSH(29)

      END SUBROUTINE SALTEMIT 
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: sulf_emit
!
! !DESCRIPTION: Subroutine SULF\_EMIT computes size-resolved aerosol emissions
!  now for primary sulfate aerosols, can include other types later on.  
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE SULF_EMIT
!
! !REMARKS:
!  CEMITSULF2(NSO4,2) is the particle mass conc (kg/m3) in each bin of each 
!  mode per unit mass (kg/m3) of primary sulfate emitted.  Multiply 
!  CEMITSULF2(NSO4,2) with total mass of primary sulfate emission to obtain 
!  sulfate mass emitted into each bin.  CEMITSULF(NSO4) combines two modes 
!  based on the fractions and IFEMITBCOCS
! 
! !REVISION HISTORY: 
!  28 Aug 2008 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!      
      INTEGER :: I, IMOD, NMAX
      REAL*8  :: THIRD, CORPI 
      REAL*8  :: TOTNUM, TOTMASS
      REAL*8  :: VRHI,VRLOW,VMULT1,SIGG,VRAD,VR1,CSIG1,CSIG2
      REAL*8  :: RADRAT, CONEXP, SUMFRAC, XTEMP
      REAL*8  :: YVRAT(NSO4), CFRAC(NSO4)
      REAL*8  :: DR(NSO4), DLOGDp(NSO4), REDGE(NSO4+1)
      REAL*8  :: YVMULT1(2),YGSTANDEV(2),YVOLRAD(2)
      REAL*8  :: XMI, YTEMP,YTEMP2

      !=================================================================
      ! SULF_EMIT begins here!
      !=================================================================

! Initialize the particle number size distribution with two log-normal modes
!
      NMAX=NSO4

      WRITE(6,*) "Parameters for primary sulfate emission:"
      WRITE(6,*)"Mode 1:", Y_R1, Y_SIGMA1, FRAC1
      WRITE(6,*)"Mode 2:", Y_R2, Y_SIGMA2, FRAC2

      YVMULT1(1)  =  1000.0     ! can be any postive number, cancelled during norm
      YGSTANDEV(1) =  LOG(Y_SIGMA1)
      YVOLRAD(1)  =  Y_R1
!
      YVMULT1(2)  =  1000.0
      YGSTANDEV(2) =  LOG(Y_SIGMA2)
      YVOLRAD(2)  =  Y_R2
!
      THIRD = 1.d0/3.d0
      CORPI = 1.d0/SQRT(2.d0*3.1415926d0)


      DO 783 I   = 1, NMAX-1
         YVRAT(I)=(RDRY(I+1)/RDRY(I))**3.0
 783  CONTINUE
      YVRAT(NMAX) = YVRAT(NMAX-1)

      DO 786 I = 1, NMAX
!           VRHI = ( 2.0d0*YVRAT(I)/(1.0d0 + YVRAT(I)) )**THIRD
         IF(I.EQ.1) THEN
!           VRLOW= ( 2.0d0/(1.0d0 + YVRAT(I)) )**THIRD
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./VRHI
            REDGE(I) = RDRY(I)*VRLOW
            REDGE(I+1) = RDRY(I)*VRHI
         ELSEIF(I.EQ.NMAX) THEN
            VRLOW= 1./(YVRAT(I-1)**(1./6.))
            VRHI = 1./VRLOW
            REDGE(I+1) = RDRY(I)*VRHI
         ELSE
!           VRLOW= ( 2.0d0/(1.0d0 + YVRAT(I-1)) )**THIRD
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./( YVRAT(I-1)**(1./6.))
            REDGE(I+1) = RDRY(I)*VRHI
         ENDIF
         DR(I) = RDRY(I)*(VRHI-VRLOW)
         DLOGDp(I) = LOG10(VRHI/VRLOW)
         CEMITSULF2(I,1) = 1.d-50
         CEMITSULF2(I,2) = 1.d-50
!        WRITE(24,152)2.E6*RDRY(I),2.E6*DR(I),
!     &            2.E6*RDRY(I)*VRLOW,2.E6*RDRY(I)*VRHI,
!     &             VRHI,VRLOW,YVRAT(I)
 786  CONTINUE
!
! VMULT1 is total number.
!
      DO IMOD    = 1, 2
         VMULT1       = YVMULT1(IMOD)
         SIGG         = YGSTANDEV(IMOD)
         VRAD         = YVOLRAD(IMOD)
         
         VR1         = 1.d0  / VRAD
         CSIG1       = CORPI / SIGG
         CSIG2       = 0.5d0 / (SIGG * SIGG)
         SUMFRAC     = 0.d0
         DO I    = 1, NMAX
            RADRAT   = LOG( RDRY(I) * VR1 )*1.d0
            CONEXP   = RADRAT * RADRAT * CSIG2
            CFRAC(I) = DR(I) /RDRY(I) * CSIG1 * EXP(-CONEXP)
            SUMFRAC  = SUMFRAC + CFRAC(I)
         ENDDO
!
         TOTMASS      = 0.
         DO I        = 1, NMAX
            XTEMP        = CFRAC(I)*VMULT1/SUMFRAC
            CEMITSULF2(I,IMOD) = CEMITSULF2(I,IMOD) + XTEMP ! # per volume
            TOTMASS  = TOTMASS + XTEMP*VDRY(I)*DENSULF*1.d3 ! kg per volume
         ENDDO
!
! Scale to get number conc per unit mass of total emitted particles
         TOTNUM = 0.
         DO I        = 1, NMAX
            CEMITSULF2(I,IMOD) = CEMITSULF2(I,IMOD)/TOTMASS
            TOTNUM = TOTNUM + CEMITSULF2(I,IMOD) !total number conc per unit mass
            WRITE(6,152)2*RDRY(I)*1.E9,CEMITSULF2(I,IMOD)/DLOGDp(I)
         ENDDO
! Convert # conc to mass conc
         DO I        = 1, NMAX
            CEMITSULF2(I,IMOD)=CEMITSULF2(I,IMOD)*VDRY(I)*DENSULF*1.d3
            WRITE(6,152)2*RDRY(I)*1.E9,CEMITSULF2(I,IMOD)
         ENDDO

         WRITE(6,151)IMOD
         WRITE(6,*)" sigma   r_mode   Ntots(per kg)"
         WRITE(6,152)EXP(SIGG),VRAD,TOTNUM
 151     FORMAT("Parameters of background aerosols Mode ", I3)
 152     FORMAT(10(1PE10.3))
      ENDDO

!         WRITE(21,*)" Primary Sulfate Emission Parameterization Ni/kg"
!         WRITE(21,*)"  R     Mod1   Mod2  F1*Mod1+(1-F1)*Mod2"
!         WRITE(21,*)" (m)  (#/ug) (#/ug)   (#/ug)"
!         WRITE(22,*)" Primary Sulfate Emission Parameterization 
!     &                     dNi/dlogDp /ug"
!         WRITE(22,*)"  D F1*Mod1+(1-F1)*Mod2 Mod1  Mod2 "
!         WRITE(22,*)" (um)  (#/ug) (#/ug)   (#/ug)"
      DO I        = 1, NMAX
         IF(IFEMITBCOCS.EQ.1) THEN ! put accum mode primary sulfate in BCOC
            CEMITSULF(I)=CEMITSULF2(I,1)*FRAC1 
            FEMTBCOCS = FRAC2
         ELSE
            CEMITSULF(I)=CEMITSULF2(I,1)*FRAC1 + CEMITSULF2(I,2)*FRAC2
            FEMTBCOCS =  0.d0
         ENDIF
         
         XMI = VDRY(I)*DENSULF*1.E12 ! ug (VDRY in m3, DENSULF in g/cm3)
         YTEMP = XMI*DLOGDp(I)
!            WRITE(21,152)RDRY(I),CEMITSULF2(I,1)/XMI,
!     &                CEMITSULF2(I,2)/XMI, CEMITSULF(I)/XMI
!Output dN/dlogDp (#/kg-sulfate)
            YTEMP2 = CEMITSULF2(I,2)*FRAC2/YTEMP
!            WRITE(22,152)2*RDRY(I)*1.E6,CEMITSULF(I)/YTEMP,
!     &                YTEMP2
!     &                CEMITSULF2(I,1)/YTEMP,
!     &                CEMITSULF2(I,2)/YTEMP

!            WRITE(23,152)2.E6*REDGE(I),1.E-20,1.E-20
!            WRITE(23,152)2.E6*REDGE(I),CEMITSULF(I)/YTEMP,YTEMP2
!            WRITE(23,152)2.E6*REDGE(I+1),CEMITSULF(I)/YTEMP,YTEMP2
!            WRITE(23,152)2.E6*REDGE(I+1),1.E-20,1.E-20
!            WRITE(24,152)2.E6*RDRY(I),2.E6*DR(I),
!     &            2.E6*(REDGE(I+1)-REDGE(I)),
!     &             2.E6*REDGE(I),2.E6*REDGE(I+1),YVRAT(I)**(1./3.)
      ENDDO
      !FLUSH(21)
      !FLUSH(22)
      !FLUSH(23)
      !FLUSH(24)

      END SUBROUTINE SULF_EMIT
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: bcoc_emit 
!
! !DESCRIPTION: Subroutine BCOC\_EMIT computes size-resolved aerosol 
!  emissions for primary BCOC aerosols.
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE BCOC_EMIT
!
! !REMARKS:
!  CEMITBCOC2(NMAX,2) is the # of BCOC particles distributed to each bin of 
!  per unit mass (kg) of primary BCOC. Multiple CEMITBCOC2(NNMAX,2) with total 
!  BC or OC mass conc in the grid to obtain # conc.  Before the size-resolved 
!  BCOC microphysics is implemented, here only use it for convert mass conc to 
!  number conc based on two assumed log-normal distributions:  Mod1 for fossil 
!  fuel; mod2 for biomass/biofuel.
! 
! !REVISION HISTORY: 
!  22 Jan 2009 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: I, IMOD, NMAX, N
      REAL*8  :: THIRD, CORPI 
      REAL*8  :: TOTMASS
      REAL*8  :: VRHI,VRLOW,VMULT1,SIGG,VRAD,VR1,CSIG1,CSIG2
      REAL*8  :: RADRAT, CONEXP, SUMFRAC, XTEMP
      REAL*8  :: YVRAT(NBCOC), CFRAC(NBCOC)
      REAL*8  :: DR(NBCOC), DLOGDp(NBCOC), REDGE(NBCOC+1)
      REAL*8  :: YVMULT1(2),YGSTANDEV(2),YVOLRAD(2)
      REAL*8  :: XMI, YTEMP
      REAL*8  :: x
      REAL    :: FV,SS,DACT,TK
      INTEGER :: IS,IT,ISOL,INTTK


! Read in pre-calculated table for the dry diameters of particles
! that can be activated at give supersaturation as a function 
! of T,k (hygroscopicity parameter)
!
      CLOSE(211)
      OPEN(211,file=TRIM(DATA_DIR_1x1)//
     &             '/APM_data_201906/APMTABLES/DACTS_50S.txt',
     &         status='old')

      DO I=1, 15
         READ(211,*)            ! skip lines
      ENDDO
      
      DO IS=1,MSAT
         DO IT=1,MTACT
            READ(211,101)SS,TK
            READ(211,101)(DACTTAB(IT,I,IS),I=1,MKACT)
         ENDDO
      ENDDO
!      flush(212)
!      close(212)
 101  FORMAT(500(1PE9.2))
      CLOSE(211)

      !=================================================================
      ! BCOC_EMIT begins here!
      !=================================================================

! Initialize the particle number size distribution with two log-normal modes
!
      NMAX=NBCOC

      WRITE(6,*) "Parameters for primary BCOC"

      DBCOC1 = Z_R1*2.0
      BCOCSIGMA1 = Z_SIGMA1
      DBCOC2 = Z_R2*2.0
      BCOCSIGMA2 = Z_SIGMA2

! Effective mode radius
      REFBCOC(1) = Z_R1*exp(2.*LOG(Z_SIGMA1)*LOG(Z_SIGMA1))
      REFBCOC(2) = Z_R2*exp(2.*LOG(Z_SIGMA2)*LOG(Z_SIGMA2))

      WRITE(6,*)"Mode 1:", Z_R1, Z_SIGMA1, REFBCOC(1)
      WRITE(6,*)"Mode 2:", Z_R2, Z_SIGMA2, REFBCOC(2)

!YuBCden        DENBC = 1000.0   !kg/m3
!20110712      DENBC = 1800.0            !kg/m3
!      DENBC = 1200.0            !kg/m3
      DENOC = 1800.0            !kg/m3

      YVMULT1(1)  =  1000.
      YGSTANDEV(1) =  LOG(Z_SIGMA1)
      YVOLRAD(1)  =  Z_R1
!     
      YVMULT1(2)  =  30.
      YGSTANDEV(2) =  LOG(Z_SIGMA2)
      YVOLRAD(2)  =  Z_R2
!
      THIRD = 1.d0/3.d0
      CORPI = 1.d0/SQRT(2.d0*3.1415926d0)

      DO 783 I   = 1, NMAX-1
         YVRAT(I)=(RBCOC(I+1)/RBCOC(I))**3.0
 783  CONTINUE
      YVRAT(NMAX) = YVRAT(NMAX-1)

      DO 786 I = 1, NMAX
!        VRHI = ( 2.0d0*YVRAT(I)/(1.0d0 + YVRAT(I)) )**THIRD
         IF(I.EQ.1) THEN
!           VRLOW= ( 2.0d0/(1.0d0 + YVRAT(I)) )**THIRD
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./VRHI
            REDGE(I) = RBCOC(I)*VRLOW
            REDGE(I+1) = RBCOC(I)*VRHI
         ELSEIF(I.EQ.NMAX) THEN
            VRLOW= 1./(YVRAT(I-1)**(1./6.))
            VRHI = 1./VRLOW
            REDGE(I+1) = RBCOC(I)*VRHI
         ELSE
!           VRLOW= ( 2.0d0/(1.0d0 + YVRAT(I-1)) )**THIRD
            VRHI = YVRAT(I)**(1./6.)
            VRLOW= 1./( YVRAT(I-1)**(1./6.))
            REDGE(I+1) = RBCOC(I)*VRHI
         ENDIF
         DR(I) = RBCOC(I)*(VRHI-VRLOW)
         DLOGDp(I) = LOG10(VRHI/VRLOW)
         CEMITBCOC1(I,1) = 1.d-50
         CEMITBCOC1(I,2) = 1.d-50
         CEMITBCOC2(I,1) = 1.d-50
         CEMITBCOC2(I,2) = 1.d-50
 786  CONTINUE
!
! VMULT1 is total number.
!
      DO IMOD    = 1, 2
         VMULT1       = YVMULT1(IMOD)
         SIGG         = YGSTANDEV(IMOD)
         VRAD         = YVOLRAD(IMOD)
         
         VR1         = 1.d0  / VRAD
         CSIG1       = CORPI / SIGG
         CSIG2       = 0.5d0 / (SIGG * SIGG)
         SUMFRAC     = 0.d0
         DO I    = 1, NMAX
            RADRAT   = LOG( RBCOC(I) * VR1 )*1.d0
            CONEXP   = RADRAT * RADRAT * CSIG2
            CFRAC(I) = DR(I) /RBCOC(I) * CSIG1 * EXP(-CONEXP)
            SUMFRAC  = SUMFRAC + CFRAC(I)
         ENDDO
!     
         TOTMASS      = 0.
         DO I        = 1, NMAX
            XTEMP        = CFRAC(I)*VMULT1/SUMFRAC
            CEMITBCOC1(I,IMOD) = CEMITBCOC1(I,IMOD)+XTEMP*VBCOC(I)*DENBC
            CEMITBCOC2(I,IMOD) = CEMITBCOC2(I,IMOD) + XTEMP !# per volume
            TOTMASS      = TOTMASS + XTEMP*VBCOC(I)*DENBC ! kg per volume
         ENDDO
!
! Scale to get number of BCOC per unit mass 
         TOTNUMBC(IMOD) = 0.
         TOTAREABC(IMOD) = 0.
         DO I        = 1, NMAX
            CEMITBCOC1(I,IMOD) = CEMITBCOC1(I,IMOD)/TOTMASS
            CEMITBCOC2(I,IMOD) = CEMITBCOC2(I,IMOD)/TOTMASS !# of BCOC particles per kg of BCOC
            TOTNUMBC(IMOD) = TOTNUMBC(IMOD) + CEMITBCOC2(I,IMOD) !total number of BC per kg of BC
            TOTAREABC(IMOD) = TOTAREABC(IMOD) + ! total area of BC per kg of BC
     &         CEMITBCOC2(I,IMOD)*4.*3.1416*RBCOC(I)*RBCOC(I) ! m2/kg BC
!               WRITE(6,152)2*RBCOC(I)*1.E9,CEMITBCOC2(I,IMOD)/DLOGDp(I)

         ENDDO
! Convert # conc to mass conc
!            DO I        = 1, NMAX
!               CEMITBCOC2(I,IMOD) = CEMITBCOC2(I,IMOD)*VBCOC(I)*DENBCOC
!               WRITE(6,152)2*RBCOC(I)*1.E9,CEMITBCOC2(I,IMOD)
!            ENDDO
         TOTNUMOC(IMOD) = TOTNUMBC(IMOD)* DENBC/DENOC !total number of OC per kg of OC
         TOTAREAOC(IMOD) = TOTAREABC(IMOD) * DENBC/DENOC ! total area of OC per kg of OC
            
         WRITE(6,151)IMOD
         WRITE(6,152)EXP(SIGG),VRAD, TOTNUMBC(IMOD), TOTNUMOC(IMOD),
     &         TOTAREABC(IMOD), TOTAREAOC(IMOD)
 151     FORMAT("Parameters of PRIMARY BCOC PARTICLES for mode ", I3)
 152     FORMAT(10(1PE10.3))
      ENDDO
         
      WRITE(6,*)" FosilFuel  Biomass/Biofuel"
      WRITE(6,*)"# & surface area (m2) of BC particles per kg of BC"
      WRITE(6,152)TOTNUMBC(1),TOTNUMBC(2),TOTAREABC(1),TOTAREABC(2)
      WRITE(6,*)"# & surface area (m2) of OC particles per kg of OC"
      WRITE(6,152)TOTNUMOC(1),TOTNUMOC(2),TOTAREAOC(1),TOTAREAOC(2)

      WRITE(6,*)"BC log-normal distributioc (dN/dlogDp per kg)"//
     &          " and Mass rate"
      WRITE(6,*)"Dia(nm)   mode1     mode2"
      DO I        = 1, NMAX
         WRITE(6,152)2*RBCOC(I)*1.E9,CEMITBCOC2(I,1)/DLOGDp(I),
     &         CEMITBCOC2(I,2)/DLOGDp(I),CEMITBCOC1(I,1),CEMITBCOC1(I,2)
      ENDDO

      END SUBROUTINE BCOC_EMIT
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: init_apmarrays
!
! !DESCRIPTION: Subroutine INIT\_APMARRAYS allocates and zeroes module arrays.
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE INIT_APMARRAYS
! 
! !REVISION HISTORY: 
!  28 Aug 2008 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER :: AS

      !=================================================================
      ! INIT_AEROSOL begins here!
      !=================================================================

      ALLOCATE( RDRY( NSO4 ), STAT=AS )
      RDRY = 0d0

      ALLOCATE( VDRY( NSO4 ), STAT=AS )
      VDRY = 0d0

      ALLOCATE( COAGPAR(NSO4,NSO4,NSO4 ), STAT=AS )
      COAGPAR = 0d0

      ALLOCATE( CEMITSULF(NSO4), STAT=AS )
      CEMITSULF = 0d0

      ALLOCATE( CEMITSULF2(NSO4,2), STAT=AS )
      CEMITSULF2 = 0.

!OPT+
      ALLOCATE( RBCOC(NBCOC), STAT=AS )
      RBCOC = 0.

      ALLOCATE( VBCOC(NBCOC), STAT=AS )
      VBCOC = 0.

      ALLOCATE( COAGPBCOC(NBCOC,NBCOC,NBCOC), STAT=AS )
      COAGPBCOC = 0.

      ALLOCATE( CEMITBCOC1(NBCOC,2), STAT=AS )
      CEMITBCOC1 = 0.

      ALLOCATE( CEMITBCOC2(NBCOC,2), STAT=AS )
      CEMITBCOC2 = 0.

      ALLOCATE( RSALT( NSEA ), STAT=AS )
      RSALT = 0d0

      ALLOCATE( VSALT( NSEA ), STAT=AS )
      VSALT = 0d0

      ALLOCATE( RSALT80( NSEA ), STAT=AS )
      RSALT80 = 0d0

      ALLOCATE( DFMSALT9( NSEA ), STAT=AS )
      DFMSALT9 = 0d0

      ALLOCATE( COAGPARSS(NSEA,NSEA,NSEA ), STAT=AS )
      COAGPARSS = 0d0

      ALLOCATE( COAGPBCOC(NBCOC,NBCOC,NBCOC ), STAT=AS )
      COAGPBCOC = 0d0

      ALLOCATE( YGF(99,4), STAT=AS )
      YGF = 0d0

      ALLOCATE( DEDGE( NDSTB+1 ), STAT=AS )
      DEDGE = 0d0

      ALLOCATE( RDST( NDSTB ), STAT=AS )
      RDST = 0d0

      ALLOCATE( DENDST( NDSTB ), STAT=AS )
      DENDST = 0d0

      ALLOCATE( VDST( NDSTB ), STAT=AS )
      VDST = 0d0

      END SUBROUTINE INIT_APMARRAYS
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: cleanup_apmarrays 
!
! !DESCRIPTION: Subroutine CLEANUP_APMARRAYS deallocates all module arrays
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE CLEANUP_APMARRAYS
! 
! !REVISION HISTORY: 
!  28 Aug 2008 - F. Yu       - Initial version  
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
      !=================================================================
      ! CLEANUP_AEROSOL begins here!
      !=================================================================
      IF ( ALLOCATED( RDRY        ) ) DEALLOCATE( RDRY        )
      IF ( ALLOCATED( VDRY        ) ) DEALLOCATE( VDRY        )
      IF ( ALLOCATED( COAGPAR     ) ) DEALLOCATE( COAGPAR     )
      IF ( ALLOCATED( RSALT       ) ) DEALLOCATE( RSALT       )
      IF ( ALLOCATED( VSALT       ) ) DEALLOCATE( VSALT       )
      IF ( ALLOCATED( RSALT80     ) ) DEALLOCATE( RSALT80     )
      IF ( ALLOCATED( DFMSALT9    ) ) DEALLOCATE( DFMSALT9    )
      IF ( ALLOCATED( COAGPARSS   ) ) DEALLOCATE( COAGPARSS   )
      IF ( ALLOCATED( COAGPBCOC   ) ) DEALLOCATE( COAGPBCOC   )
      IF ( ALLOCATED( CEMITSULF   ) ) DEALLOCATE( CEMITSULF   )
      IF ( ALLOCATED( CEMITSULF2  ) ) DEALLOCATE( CEMITSULF2  )
      IF ( ALLOCATED( CEMITBCOC1  ) ) DEALLOCATE( CEMITBCOC1  )   !OPT+
      IF ( ALLOCATED( CEMITBCOC2  ) ) DEALLOCATE( CEMITBCOC2  )   !OPT+
      IF ( ALLOCATED( YGF         ) ) DEALLOCATE( YGF         )

      END SUBROUTINE CLEANUP_APMARRAYS
!EOC
      END MODULE APM_INIT_MOD
#endif


================================================
FILE: APM/apm_mixactivate.F90
================================================
#ifdef APM
!************************************************************************
! This computer software was prepared by Battelle Memorial Institute,
! hereinafter the Contractor, under Contract No. DE-AC05-76RL0 1830 with
! the Department of Energy (DOE). NEITHER THE GOVERNMENT NOR THE
! CONTRACTOR MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY
! LIABILITY FOR THE USE OF THIS SOFTWARE.
!
! MOSAIC module: see chem/module_mosaic_driver.F for references and terms
! of use
!************************************************************************
!
!      Calculate maxsat at given updraft velocity and particle size dist
!      modified from relevant WRF_Chem code for APM
!      by F. Yu, UAlbany, 2012/11/19

!      Reference:
!      Abdul-Razzak and Ghan, A parameterization of aerosol activation.
!      3. Sectional representation. J. Geophys. Res., 107, 2002.

MODULE apm_mixactivate
PRIVATE
PUBLIC activate
CONTAINS

!----------------------------------------------------------------------
!----------------------------------------------------------------------
! 06-nov-2005 rce - grid_id & ktau added to arg list
      subroutine activate(maxsatout, wbar, tair, pres,&
                      maxd_atype, ntype_aer, maxd_asize, nsize_aer,    &
                      na, am, hygro)

      implicit none

      integer,intent(in) :: maxd_atype      ! dimension of types
      integer,intent(in) :: maxd_asize      ! dimension of sizes
      integer,intent(in) :: ntype_aer       ! number of types
      integer,intent(in) :: nsize_aer(maxd_atype) ! number of sizes for type
      real*8,intent(in) :: wbar          ! grid cell mean vertical velocity (m/s)
      real*8,intent(in) :: tair          ! air temperature (K)
      real*8,intent(in) :: pres         ! pressure (Pa)
      real*8,intent(in) :: na(maxd_asize,maxd_atype)     ! aerosol number concentration (/m3)
      real*8,intent(in) :: am(maxd_asize,maxd_atype)   ! aerosol section dry radius (m)
      real*8,intent(in) :: hygro(maxd_asize,maxd_atype)  ! bulk hygroscopicity of aerosol mode

      real*8,intent(inout) :: maxsatout


      real*8,parameter :: g=9.81,rhowater=1000.,XLV=2.5E6,r_d=287.,r_v=461.6,mwdry=28.966
      real*8,parameter :: cp=7.*r_d/2.,rvovrd=r_v/r_d,SVP1=0.6112,SVP2=17.67,SVP3=29.65
      real*8,parameter :: EP_2=R_d/R_v

      real*8, parameter :: surften = 0.076 ! surface tension of water w/respect to air (N/m)
      real*8, parameter :: p0 = 1013.25e2  ! reference pressure (Pa)
      real*8, parameter :: t0 = 273.15     ! reference temperature (K)

      real*8 :: rhoair        ! air density (kg/m3)
      real*8 diff0 ! diffusivity (m2/s)
      real*8 conduct0 ! thermal conductivity (Joule/m/sec/deg)
      real*8 es ! saturation vapor pressure
      real*8 qs ! water vapor saturation mixing ratio
      real*8 dqsdt ! change in qs with temperature
      real*8 gg ! thermodynamic function (m2/s)
      real*8 sqrtg ! sqrt(gg)
      real*8 sm(maxd_asize,maxd_atype) ! critical supersaturation for number mode radius
      real*8 zeta, eta
      real*8 alpha
      real*8 gamma
      real*8 beta
      real*8 totn ! total aerosol number concentration
      real*8 aten ! surface tension parameter
      real*8 gmsm ! critical supersaturation at radius gmrad
      real*8 sumns

      real*8 alw,sqrtalw
      real*8 smax
      integer m,n

!      mathematical constants
      real*8 third, twothird, sixth, zero, one, two, three

      real*8, parameter :: sq2  = 1.4142135624
      real*8, parameter :: sqpi = 1.7724538509
      real*8, parameter :: pi   = 3.1415926536
      real*8, parameter :: nsmall = 1.0e-20    ! aer number conc in #/m3
      real*8, parameter :: amsmall = 5.0e-9    ! aer dry radius in m

      zero = 0.0
      one = 1.0
      two = 2.0
      three = 3.0
      third = 1.0/3.0
      twothird = 2.0/3.0 !wig, 1-Mar-2009: Corrected value from 2/6
      sixth = 1.0/6.0

      rhoair = pres/(r_d*tair)

      diff0=0.211e-4*(p0/pres)*(tair/t0)**1.94
      conduct0=(5.69+0.017*(tair-t0))*4.186e2*1.e-5 ! convert to J/m/s/deg
      es=1000.*svp1*exp( svp2*(tair-t0)/(tair-svp3) )
      qs=ep_2*es/(pres-es)
      dqsdt=xlv/(r_v*tair*tair)*qs
      alpha=g*(xlv/(cp*r_v*tair*tair)-1./(r_d*tair))
      gamma=(1+xlv/cp*dqsdt)/(rhoair*qs)
      gg=1./(rhowater/(diff0*rhoair*qs)+xlv*rhowater/(conduct0*tair)*(xlv/(r_v*tair)-1.))
      sqrtg=sqrt(gg)
      beta=4.*pi*rhowater*gg*gamma
      aten=2.*surften/(r_v*tair*rhowater)

      totn=1.d-30
      sumns=1.d-30
      do n=1,ntype_aer
      do m=1,nsize_aer(n)
!      internal mixture of aerosols

         if (am(m,n).gt.amsmall .and. na(m,n).gt.nsmall) then
!            sectional model.
!            need to use bulk properties because parameterization doesn't
!            work well for narrow bins.
         totn=totn+na(m,n)

         if(hygro(m,n).gt.1.d-10)then
            sm(m,n)=2.d0*aten/(3.*am(m,n))*sqrt(aten/(3.*hygro(m,n)*am(m,n)))
         else
            sm(m,n)=100.d0
         endif
!        write(6,*)'sm,hygro,am=',sm(m,n),hygro(m,n),am(m,n)
         else
            sm(m,n)=1.d0
         endif
         sumns=sumns+na(m,n)/sm(m,n)**twothird
      end do ! size
      end do ! type

      gmsm=totn/sumns
      gmsm=gmsm*gmsm*gmsm
      gmsm=sqrt(gmsm)

!         write(6,*)'uniform updraft =',wbar

      alw=alpha*wbar
      sqrtalw=sqrt(alw)
      zeta=2.*sqrtalw*aten/(3.*sqrtg)

!     sectional model.
!     use bulk properties
      if(totn.gt.1.d-10)then
        eta=2.d0*alw*sqrtalw/(totn*beta*sqrtg)
      else
        eta=1.d10
      endif

      call maxsat(zeta,eta,gmsm,smax)

      maxsatout=smax

      return
      end subroutine activate

!----------------------------------------------------------------------
      subroutine maxsat(zeta,eta,gmsm,smax)

!      Calculates maximum supersaturation for multiple competing aerosol
!      sections/types.

      implicit none

      real*8, intent(in)  :: gmsm ! critical supersaturation for number mode radius
      real*8, intent(in)  :: zeta, eta
      real*8, intent(out) :: smax ! maximum supersaturation

      real*8 :: g1, g2
      real*8 thesum
      integer n ! type index

      if(zeta.gt.1.d5*eta .or. &
        gmsm*gmsm.gt.1.d5*eta)then
!       weak forcing. essentially none activated
        smax=1.d-20
      else
!       significant activation of this mode. calc activation all modes.
        go to 1
      endif

      return

  1   continue

      thesum=0.d0
      if(eta.gt.1.d-20)then
        g1=sqrt(zeta/eta)
        g1=g1*g1*g1
        g2=gmsm/sqrt(eta+3.d0*zeta)
        g2=sqrt(g2)
        g2=g2*g2*g2
        thesum=thesum + (0.5d0*g1 + g2)/(gmsm*gmsm)
      else
        thesum=1.d20
      endif

      smax=1./sqrt(thesum)

      return

      end subroutine maxsat
!----------------------------------------------------------------------

END MODULE apm_mixactivate
#endif


================================================
FILE: APM/apm_nucl_mod.F
================================================
#ifdef APM
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !MODULE: apm_nucl_mod
!
! !DESCRIPTION: Module APM\_NUCL\_MOD contains variables and routines for 
!  computing nucleation rates and ionization rates.
!\\
!\\
! !INTERFACE:
!
      MODULE APM_NUCL_MOD
!
! !USES:
!
      IMPLICIT NONE
      PRIVATE
!
! !PUBLIC MEMBER FUNCTIONS:
!  
      PUBLIC  :: IONRATE0

!APM2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      PUBLIC :: IONRATE
!APM2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

!
! !PRIVATE MEMBER FUNCTIONS:
!
      PRIVATE :: READIONRATE
      PRIVATE :: IONSOIL
      PRIVATE :: GEO2MAGLAT
!
! !REVISION HISTORY: 
!  28 Sep 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! ! DEFINED PARAMETERS:
!
      ! MC     : Number of points in H2SO4 concentration dimension
      ! MT     : Number of points in temperature dimension
      ! MRH    : Number of points in relative humidity dimension
      ! MQ     : Number of points in ionization rate dimension
      ! MS     : Number of points in surface area dimension
      INTEGER, PARAMETER   :: MC  = 31
      INTEGER, PARAMETER   :: MT  = 57
      INTEGER, PARAMETER   :: MRH = 51
      INTEGER, PARAMETER   :: MQ  = 18
      INTEGER, PARAMETER   :: MS  = 12
!
! !LOCAL VARIABLES:
!
      ! C      : Values at points in H2SO4 concentration dimension
      ! T      : Values at points in temperature dimension
      ! RH     : Values at points in relative humidity dimension
      ! Q      : Values at points in ionization rate dimension
      ! S      : Values at points in surface area dimension
      ! XJIMN  : ion-mediated nucleation rates (cm-3s-1) 
      !           at all points in 5-d space
      ! XRSTAR : Critical radius (nm) at all points in 5-dimension space
      REAL*8               :: C(MC)
      REAL*8               :: RH(MRH)
      REAL*8               :: T(MT)
      REAL*8               :: Q(MQ)
      REAL*8               :: S(MS)
      REAL*8               :: XJIMN8(MC)
      REAL               :: XJIMN(MC,MRH,MT,MQ,MS)    
      REAL*8               :: XRSTAR(MC,MRH,MT)
 
      ! Data directory
      CHARACTER(LEN=255)   :: DATA_DIR_1x1

      CONTAINS
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: ionrate0 
!
! !DESCRIPTION: Subroutine IONRATE calculate ionization rate 
!  (ZQ: ion-pairs/cm3s) for given surface type, longitude (in degree), 
!  latitude (in degree), and pressure (mb).
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE IONRATE0(DATA_DIR_1x1a,IY,ISURF,YPSURF,XLON,XLAT,XP,ZQ)
!
! !INPUT PARAMETERS: 
!
      INTEGER   :: IY
      INTEGER   :: ISURF    ! Surface type (1=land, 0=ocean, ice, and snow)
      REAL*8    :: YPSURF   ! Surface pressure [hPa]
      REAL*8    :: XLON     ! Longitude [degrees]
      REAL*8    :: XLAT     ! Latitude [degrees]
      REAL*8    :: XP       ! Grid box pressure [hPa], from 5-1015 hPa
!
! !OUTPUT PARAMETERS:
!
      REAL*8    :: ZQ       ! Ionization rate [ion pairs/cm3/s]
!
! !REMARKS:
!  Written by Fangqun Yu and Gan Luo, SUNY-Albany, 2010 
!  (yfq@asrc.cestm.albany.edu)
!                                                                             .
!  Ionization lookup table
!  YQ(1,1):    Q for maglat = 0,  p = 5 mb
!  YQ(91,203): Q for maglat = 90, p = 1015 mb
!  YQ(L,K):    Q for maglat = L-1,p = K*5 mb
! 
! !REVISION HISTORY: 
!  28 Sep 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!

      CHARACTER(LEN=255)  :: DATA_DIR_1x1a    ! Data directory
      INTEGER       :: L, K
      REAL*8        :: MAGLAT, XMAGLAT, YPR, YQSOIL
      REAL*8,  SAVE :: YQ(91,203)  
      LOGICAL, SAVE :: FIRST = .TRUE.
!
! Read in the ionization rate lookup table
!
      IF(FIRST) THEN
         CALL READIONRATE(DATA_DIR_1x1a,IY,YQ)
         FIRST = .FALSE.
      ENDIF
!
! Find the magnetic latitude based on (LON, LAT)

      CALL GEO2MAGLAT(XLAT,XLON,XMAGLAT)
      MAGLAT= abs(XMAGLAT) !  magnetic latitude in degree

      L = INT(MAGLAT+0.5) + 1
      K = MIN(MAX(INT(XP/5.+0.5),1),203)
      ZQ = YQ(L,K)   ! GCR ionization rate from the lookup table

      IF(ISURF.EQ.1) THEN  ! Contribution from radioactive material from soil
        CALL IONSOIL(XP,YPSURF,YQSOIL)
      ELSE
        YQSOIL = 0.
      ENDIF
!      WRITE(6,101)XLON,XLAT,XMAGLAT,XP, L, K,YQSOIL,ZQ

      ZQ = ZQ + YQSOIL
 101  FORMAT(4F7.1, I4, I4, 2F7.1)
      RETURN
      END SUBROUTINE IONRATE0
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: readionrate
!
! !DESCRIPTION: Read pre-calculated GCR ionization rate lookup table
!  The lookup table is generated based on the scheme given in
!  Usoskin and Kovaltsov (2006).
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE READIONRATE(DATA_DIR_1x1a,IY, YQ )

      CHARACTER(LEN=255)  :: DATA_DIR_1x1a    ! Data directory
      INTEGER   :: IY
!
! !OUTPUT PARAMETERS:
!
      ! YQ: ionization rate in ion-pairs/cm3s
      ! maglat is magnitude latitude in degree
      REAL*8 :: YQ(91,203) 
!
! !REMARKS:
!  YQ(1,1):    Q for maglat = 0,  p = 5 mb
!  YQ(91,203): Q for maglat = 90, p = 1015 mb
!  YQ(L,K):    Q for maglat = L-1,p = K*5 mb
! 
! !REVISION HISTORY: 
!  28 Sep 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      INTEGER   :: L, K, KP
      CHARACTER*999 YPATH

      WRITE(6,*)"Read in the ionization rate lookup table"
      DATA_DIR_1x1= DATA_DIR_1x1a
      YPATH = TRIM(DATA_DIR_1x1)//'/APM_data_201906/APMTABLES/'
      CLOSE(30)
      WRITE(6,*)"YPATH: ",TRIM(YPATH)
      IF(IY.EQ.1) THEN
       OPEN(30,file=TRIM(YPATH)//'YIONRATE1996.txt',status='old')
       WRITE(6,*) "READ YIONRATE1996.txt"
      ELSEIF(IY.EQ.-1)THEN
       OPEN(30,file=TRIM(YPATH)//'YIONRATE1989.txt',status='old')
       WRITE(6,*) "READ YIONRATE1989.txt"
      ELSE
       OPEN(30,file=TRIM(YPATH)//'YIONRATE.txt',status='old')
       WRITE(6,*) "READ YIONRATE.txt"
      ENDIF
      READ(30,*)   ! first line is magnetic latitude in degree
      DO K=1,203      ! KP is pressure in mb, YQ in ion-pairs/cm3s
         READ(30,100)KP,(YQ(L,K),L=1,91)
      ENDDO
 100  FORMAT(I5,91F6.2)
      CLOSE(30)
      RETURN
      END SUBROUTINE READIONRATE
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: ionsoil
!
! !DESCRIPTION: Calculate ionization rate (ion-pairs/cm3s) due to Gama rays, 
!  Radon (over land)
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE IONSOIL( YPR, YPSURF, YQSOIL )
!
! !INPUT PARAMETERS: 
!
      REAL*8    :: YPR
      REAL*8    :: YPSURF
!
! !OUTPUT PARAMETERS:
!
      REAL*8    :: YQSOIL
!
! !REVISION HISTORY: 
!  28 Sep 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !DEFINED PARAMETERS:
!
      INTEGER, PARAMETER   :: MAXH = 21
!
! !LOCAL VARIABLES:
!
      INTEGER   :: IH, K
      REAL*8    :: XH0, XH, YQ, YQGAMA, YQRADON
      REAL*8    :: YH(MAXH), QGAMA(MAXH), QRADON(MAXH)
      REAL*8    :: MAGLAT
      REAL*8    :: XHSURF

      DATA (YH(k),k=1,21)/0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0, ! in km
     &                    2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,15.0/
      DATA (QGAMA(k),k=1,21)/4.5,1.25,0.21,0.0,0.0,0.0,0.0,0.0,0.0,
     &              0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0/
      DATA (QRADON(k),k=1,21)/3.5,3.24,3.0,2.65,2.43,2.19,1.84,1.36,
     &                        0.97, 0.74,0.56,0.13,
     &                        0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0/

! Get altitude (km) from pressure (YPR in mb) based on standard atmosphere
!
      XH0 = 44.3308 - 4.94654*(100.*YPR)**0.190264   ! convert press to alt (km)
! Surface height
      XHSURF = 44.3308 - 4.94654*(100.*YPSURF)**0.190264  

      XH = XH0 - XHSURF


      IF(XH.LT.5) THEN   ! over land, no gama and radon above 5 km
         IF(XH.LT.1) THEN
            IH = INT(XH*10.)+1
         ELSE
            IH = 10.+INT(XH)
         ENDIF

         IH=MIN(IH,20)
         IH=MAX(IH,1)

         YQGAMA=QGAMA(IH)+(XH-YH(IH))*(QGAMA(IH+1)-QGAMA(IH))
         YQRADON=QRADON(IH)+(XH-YH(IH))*(QRADON(IH+1)-QRADON(IH))
         YQSOIL = YQGAMA + YQRADON
!         WRITE(6,*)XH0,XHSURF, IH,YQGAMA,YQRADON
      ELSE 
         YQSOIL = 0.
      ENDIF

      END SUBROUTINE IONSOIL
!EOC
!------------------------------------------------------------------------------
!                  GEOS-Chem Global Chemical Transport Model                  !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: geo2maglat
!
! !DESCRIPTION: Subroutine GEO2MAGLAT finds magnetic latitude from geo 
!  latitude and longitude.
!\\
!\\
! !INTERFACE:
!
      SUBROUTINE GEO2MAGLAT( LAT0, LON0, MAGLAT )
!
! !INPUT PARAMETERS: 
!
      REAL*8 :: lat0     ! Geographic latitude [degrees]
      REAL*8 :: lon0     ! Geographic longitude [degrees]
!
! !OUTPUT PARAMETERS:
!
      REAL*8 :: maglat   ! Magnetic latitude [degrees]
! 
! !REVISION HISTORY: 
!  28 Sep 2008 - F. Yu       - Initial version
!  08 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
      REAL*8 :: yz,yp,yx,yy,PI,YD2R,YGLA,YGLO
      REAL*8 :: az,ap,ax,ay,dot,theta,lon,lat

      PI = 3.1415926
      YD2R = PI/180.
       
      YGLA = 80.*YD2R              ! magnetic dipole north pole latitude
      YGLO = -110.*YD2R            ! magnetic dipole north pole longitude
      
      lat = lat0 * YD2R
      lon = lon0 * YD2R
      
      yz = sin(YGLA)
      yp = cos(YGLA)
      yx = yp * cos(YGLO)
      yy = yp * sin(YGLO)
      
      az = sin(lat)
      ap = cos(lat)
      ax = ap * cos(lon)
      ay = ap * sin(lon)
      dot = ax*yx + ay*yy + az*yz
      theta = acos(dot)            ! theta is the magnetic 
                                   ! colatitude of the point a
      
      maglat = (PI/2.-theta)/YD2R
       
      END SUBROUTINE GEO2MAGLAT


! APM2+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      subroutine IONRATE(DATA_DIR_1x1a,
     &                   ISURF,XLON,XLAT,YPR,IYEAR,IMONTH,YQ)

!******************************************************************************
! Subroutine IONRATE calculate ionization rate (YQ: ion-pairs/cm3s) for given 
! surface type,longitude (in degree), latitude (in degree), pressure (mb), year,
! month  (fyu, 2006; updated 2008)

      CHARACTER(LEN=255)  :: DATA_DIR_1x1a    ! Data directory
      INTEGER, PARAMETER   :: MAXH = 21
      INTEGER   :: ISURF, IYEAR, IMONTH, IH, K
      REAL*8    :: XLAT, XLON, YPR, XH, YQ, YQGAMA, YQRADON, YQGCR
      REAL*8    :: YH(MAXH), QGAMA(MAXH), QRADON(MAXH)

! Ionuzation rate (ion-pairs/cm3s) due to Gama rays, Radon (over land)
!
      DATA (YH(k),k=1,21)/0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0, ! in km
     &                    2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,15.0/
      DATA (QGAMA(k),k=1,21)/4.5,1.25,0.21,0.0,0.0,0.0,0.0,0.0,0.0,
     &              0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0/
      DATA (QRADON(k),k=1,21)/3.5,3.24,3.0,2.65,2.43,2.19,1.84,1.36,
     &                        0.97, 0.74,0.56,0.13,
     &                        0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0/

! Get altitude (km) from pressure (YPR in mb) based on standard atmosphere
!
      XH = 44.3308 - 4.94654*(100.*YPR)**0.190264   ! convert press to alt (km)

      CALL IONGCR(DATA_DIR_1x1a,XLON,XLAT,YPR,IYEAR,IMONTH,YQGCR)

      IF(ISURF.EQ.1.and.XH.LT.5) THEN   ! over land, no gama and radon above 5 km
         IF(XH.LT.1) THEN
            IH = INT(XH*10.)+1
         ELSE
            IH = 10.+INT(XH)
         ENDIF

         !bug gan luo fixed
         IH=MIN(IH,20)
         IH=MAX(IH,1)

         YQGAMA=QGAMA(IH)+(XH-YH(IH))*(QGAMA(IH+1)-QGAMA(IH))
         YQRADON=QRADON(IH)+(XH-YH(IH))*(QRADON(IH+1)-QRADON(IH))
         YQ = YQGCR + YQGAMA + YQRADON
      ELSE  ! over ice or water
         YQ = YQGCR
      ENDIF

      end subroutine IONRATE
!------------------------------------------------------------------------------

       subroutine  IONGCR(DATA_DIR_1x1a,lon,lat,airdin,year,month,qout)

!******************************************************************************
! Subroutine IONGCR is to obtain ionization induced by cosmic ray based on 
! Usoskin and Kovaltsov, JGR,111,D21206, 2006. Coded by Gan Luo, ASRC, Albany, 
! NY, 2006-11-20 (Thanks to professor Fangqun Yu and Dr Usoskin)
!
! Input: longitude (degree), latitude (degree), 
!       atmospheric depth (or pressure, in mb), 
!       month and year
! Output: cosmic ray induced ionization (ion-pairs/cm3s)
!
! Modified by fyu, 11/26/2006, 2008

       CHARACTER(LEN=255)  :: DATA_DIR_1x1a    ! Data directory
       LOGICAL, SAVE    :: FIRST = .TRUE.
       integer :: i,j,k,t,im,jy
       integer :: year, month
       
       real*8 :: lon,lat,maglat,cosmiclat,airdin,airout,ev
       real*8 :: pc,tforp,tfora,pt1,pt2,tnew1,tnew2,yxt_pad(9), 
     &            yxt_aad(9)
       real*8 :: jlisp1,jlisp2,jlisa1,jlisa2,partp1,partp2,parta1,
     &           parta2
       real*8 :: qforp,qfora,qout

       REAL*8, SAVE :: cosmic(14,55)

       real*8 :: aird(21),airro(21),tvalue(9),
     &           yxt_p(21,9),yxt_a(21,9)

!***********************************************************************
       data (aird(k),k=1,21)/25.,75.,125.,175.,225.,275.,325.,375.,425.,
     &    475.,525.,575.,625.,675.,725.,775.,825.,875.,925.,975.,1025./

       data (airro(k),k=1,21)/3.80E-05,1.20E-04,2.00E-04,2.70E-04,
     &  3.50E-04,4.20E-04,4.80E-04,
     &  5.40E-04,5.90E-04,6.50E-04,7.10E-04,7.60E-04,8.20E-04,8.70E-04,
     &  9.20E-04,9.70E-04,1.00E-03,1.10E-03,1.10E-03,1.20E-03,1.20E-03/

       data (tvalue(t),t=1,9)/0.1,0.3,1.,3.,10.,30.,100.,300.,1000./

       data ((yxt_p(k,t),t=1,9),k=1,21)/
     & 3.40E+02,4.10E+05,4.60E+05,6.00E+05,1.30E+06,2.30E+06,4.90E+06,
     & 8.50E+06,1.50E+07,9.80E+01,4.30E+04,3.30E+05,6.30E+05,1.80E+06,
     & 4.20E+06,1.00E+07,2.30E+07,5.70E+07,5.00E+01,4.40E+03,2.10E+05,
     & 5.20E+05,1.60E+06,4.40E+06,1.20E+07,2.90E+07,8.30E+07,2.00E+01,
     & 2.50E+03,1.30E+05,4.00E+05,1.30E+06,3.80E+06,1.10E+07,3.00E+07,
     & 9.30E+07,7.90E+00,1.40E+03,7.40E+04,2.90E+05,9.90E+05,3.10E+06,
     & 9.90E+06,2.80E+07,9.20E+07,4.90E+00,8.50E+02,4.10E+04,2.10E+05,
     & 7.30E+05,2.40E+06,8.10E+06,2.40E+07,8.20E+07,2.00E+00,4.90E+02,
     & 2.10E+04,1.50E+05,5.30E+05,1.80E+06,6.30E+06,2.00E+07,6.90E+07,
     & 8.10E-01,2.90E+02,1.10E+04,1.00E+05,3.70E+05,1.40E+06,5.00E+06,
     & 1.60E+07,5.70E+07,3.10E-01,1.80E+02,6.20E+03,7.20E+04,2.60E+05,
     & 1.00E+06,3.90E+06,1.30E+07,4.50E+07,0.00E+00,1.10E+02,3.90E+03,
     & 5.00E+04,1.90E+05,7.40E+05,3.10E+06,1.10E+07,3.70E+07,0.00E+00,
     & 6.30E+01,2.60E+03,3.50E+04,1.40E+05,5.60E+05,2.40E+06,8.50E+06,
     & 2.90E+07,0.00E+00,3.80E+01,1.50E+03,2.40E+04,9.80E+04,4.40E+05,
     & 1.90E+06,6.90E+06,2.40E+07,0.00E+00,1.80E+01,1.10E+03,1.60E+04,
     & 7.20E+04,3.50E+05,1.60E+06,5.70E+06,2.00E+07,0.00E+00,1.30E+01,
     & 7.30E+02,1.00E+04,5.30E+04,2.70E+05,1.30E+06,4.70E+06,1.70E+07,
     & 0.00E+00,6.30E+00,4.20E+02,6.90E+03,3.80E+04,2.20E+05,1.10E+06,
     & 3.90E+06,1.40E+07,0.00E+00,5.00E+00,3.10E+02,5.10E+03,2.90E+04,
     & 1.80E+05,9.30E+05,3.40E+06,1.20E+07,0.00E+00,4.90E+00,1.80E+02,
     & 3.00E+03,2.10E+04,1.50E+05,8.30E+05,3.00E+06,1.00E+07,0.00E+00,
     & 1.20E+00,1.10E+02,1.70E+03,1.40E+04,1.30E+05,7.30E+05,2.60E+06,
     & 9.10E+06,0.00E+00,2.30E+00,9.90E+01,1.70E+03,1.20E+04,1.10E+05,
     & 6.60E+05,2.40E+06,8.10E+06,0.00E+00,8.90E-01,6.00E+01,8.00E+02,
     & 9.00E+03,9.60E+04,6.00E+05,2.20E+06,7.30E+06,0.00E+00,1.80E-01,
     & 6.80E+01,7.00E+02,7.40E+03,8.50E+04,5.50E+05,2.00E+06,6.70E+06/
       
       data ((yxt_a(k,t),t=1,9),k=1,21)/
     & 1.00E+03,3.70E+05,4.10E+05,5.80E+05,1.30E+06,2.50E+06,5.50E+06,
     & 8.60E+06,2.20E+07,3.40E+02,3.50E+04,3.00E+05,6.20E+05,1.90E+06,
     & 4.60E+06,1.20E+07,2.70E+07,6.80E+07,1.60E+02,9.90E+03,1.90E+05,
     & 5.30E+05,1.80E+06,4.80E+06,1.40E+07,3.50E+07,9.60E+07,6.50E+01,
     & 5.60E+03,1.30E+05,4.10E+05,1.40E+06,4.20E+06,1.30E+07,3.70E+07,
     & 1.10E+08,2.80E+01,3.40E+03,7.80E+04,3.10E+05,1.10E+06,3.40E+06,
     & 1.10E+07,3.50E+07,1.00E+08,2.40E+01,2.00E+03,4.70E+04,2.20E+05,
     & 7.50E+05,2.60E+06,8.90E+06,3.10E+07,9.70E+07,1.40E+01,1.20E+03,
     & 2.80E+04,1.60E+05,5.50E+05,2.00E+06,6.90E+06,2.60E+07,8.30E+07,
     & 2.90E+00,7.50E+02,1.70E+04,1.10E+05,3.90E+05,1.50E+06,5.30E+06,
     & 2.00E+07,6.80E+07,1.90E+00,4.60E+02,1.20E+04,8.00E+04,2.80E+05,
     & 1.10E+06,4.10E+06,1.60E+07,5.40E+07,1.10E+00,2.80E+02,7.80E+03,
     & 5.30E+04,2.00E+05,8.50E+05,3.10E+06,1.20E+07,4.20E+07,5.70E-01,
     & 1.80E+02,5.00E+03,3.70E+04,1.40E+05,6.40E+05,2.50E+06,9.90E+06,
     & 3.30E+07,2.30E-01,1.00E+02,2.80E+03,2.40E+04,1.00E+05,4.80E+05,
     & 2.00E+06,8.00E+06,2.60E+07,9.20E-03,7.70E+01,2.10E+03,1.80E+04,
     & 7.90E+04,3.80E+05,1.60E+06,6.50E+06,2.10E+07,0.00E+00,3.70E+01,
     & 1.50E+03,1.20E+04,5.00E+04,2.80E+05,1.40E+06,5.40E+06,1.70E+07,
     & 0.00E+00,2.00E+01,6.60E+02,7.40E+03,3.60E+04,2.30E+05,1.10E+06,
     & 4.60E+06,1.40E+07,0.00E+00,1.60E+01,6.30E+02,5.50E+03,3.00E+04,
     & 1.80E+05,9.70E+05,4.00E+06,1.20E+07,0.00E+00,8.20E+00,4.40E+02,
     & 4.10E+03,1.90E+04,1.50E+05,8.60E+05,3.40E+06,1.00E+07,0.00E+00,
     & 9.00E+00,2.50E+02,2.40E+03,1.40E+04,1.30E+05,7.50E+05,3.00E+06,
     & 8.80E+06,0.00E+00,6.70E+00,1.80E+02,1.70E+03,1.10E+04,1.10E+05,
     & 6.60E+05,2.70E+06,7.80E+06,0.00E+00,3.60E+00,8.10E+01,1.10E+03,
     & 7.70E+03,9.80E+04,6.10E+05,2.50E+06,7.10E+06,0.00E+00,1.70E+00,
     & 4.70E+01,1.20E+03,6.40E+03,8.80E+04,5.70E+05,2.30E+06,6.50E+06/
       
!***********************************************************************

       IF(FIRST) THEN
         close(100)
         OPEN(100,
     & FILE=TRIM(DATA_DIR_1x1a)//'/APM_data_201906/Phi_mon.txt')
         do j=1,55
            read(100,*)(cosmic(i,j),i=1,14)
         enddo
         close(100)
         FIRST = .FALSE.
       ENDIF
       
!ev=cosmic(14,40)/1000.0 !modulation potential (i,j) i=month+1;j=year-1949

       im = month + 1
       jy = year -1949

       IF(JY.GT.55) JY = 55 ! current scheme only valid for 1950 - 2004
       IF(JY.LT.1) JY = 1 ! current scheme only valid for 1950 - 2004

       ev=cosmic(im,jy)/1000.0 !modulation potential (i,j) i=month+1;j=year-1949

       do k=1,20
        if(airdin>aird(k).and.airdin<=aird(k+1))then
         do t=1,9
          yxt_pad(t)=yxt_p(k,t)+(airdin-aird(k))
     &      *(yxt_p((k+1),t)-yxt_p(k,t))/(aird(k+1)-aird(k))
          yxt_aad(t)=yxt_a(k,t)+(airdin-aird(k))
     &      *(yxt_a((k+1),t)-yxt_a(k,t))/(aird(k+1)-aird(k))
         enddo
         airout=airro(k)+(airdin-aird(k))
     &      *(airro(k+1)-airro(k))/(aird(k+1)-aird(k))
        endif
       enddo
       if(airdin<=aird(1))then
        do t=1,9
         yxt_pad(t)=yxt_p(1,t)
         yxt_aad(t)=yxt_a(1,t)
        enddo
        airout=airro(1)
       endif
       if(airdin>aird(21))then
        do t=1,9
         yxt_pad(t)=yxt_p(21,t)
         yxt_aad(t)=yxt_a(21,t)
        enddo
        airout=airro(21)
       endif
       
       call geo2maglat(lat,lon,maglat)

       cosmiclat=3.14159265*maglat/180.0
       
       pc=1.9*7.8*(cos(cosmiclat)*cos(cosmiclat)
     &      *cos(cosmiclat)*cos(cosmiclat))

       tforp=sqrt(pc*pc+0.938*0.938)-0.938
       tfora=sqrt(0.25*pc*pc+0.938*0.938)-0.938
!***********************************************************************
       qforp=0.0
       qfora=0.0
       qout=0.0
       
       do t=1,8

        if(tvalue(t+1)>=tforp)then

         if(tvalue(t)<tforp)then
          tnew1=tforp+ev
         else
          tnew1=tvalue(t)+ev
         endif
         tnew2=tvalue(t+1)+ev
       
         pt1=sqrt(tnew1*(tnew1+2.0*0.938))
         pt2=sqrt(tnew2*(tnew2+2.0*0.938))
       
         jlisp1=1.9*(pt1**(-2.78))/(1.0+0.4866*(pt1**(-2.51)))
         jlisp2=1.9*(pt2**(-2.78))/(1.0+0.4866*(pt2**(-2.51)))

         if(tvalue(t)<tforp)then
          partp1=tforp*(tforp+2.0*0.938)/(tnew1*(tnew1+2.0*0.938))
         else
          partp1=tvalue(t)*(tvalue(t)+2.0*0.938)
     &                    /(tnew1*(tnew1+2.0*0.938))
         endif
         partp2=tvalue(t+1)*(tvalue(t+1)+2.0*0.938)
     &                   /(tnew2*(tnew2+2.0*0.938))
       
         if(tvalue(t)<tforp)then
          qforp=qforp+0.5*(jlisp2*partp2*yxt_pad(t+1)+jlisp1*partp1
     &        *(yxt_pad(t)+(tforp-tvalue(t))*(yxt_pad(t+1)-yxt_pad(t))
     &        /(tvalue(t+1)-tvalue(t))))*(tvalue(t+1)-tforp)
         else
          qforp=qforp+0.5*(jlisp2*partp2*yxt_pad(t+1)+jlisp1*partp1
     &           *yxt_pad(t))*(tvalue(t+1)-tvalue(t))
         endif
       
        endif

        if(tvalue(t+1)>=tfora)then
       
         if(tvalue(t)<tfora)then
          tnew1=tfora+ev*0.5
         else
          tnew1=tvalue(t)+ev*0.5
         endif
         tnew2=tvalue(t+1)+ev*0.5

         pt1=sqrt(tnew1*(tnew1+2.0*0.938))
         pt2=sqrt(tnew2*(tnew2+2.0*0.938))

         jlisa1=0.1425*(pt1**(-2.78))/(1.0+0.4866*(pt1**(-2.51)))
         jlisa2=0.1425*(pt2**(-2.78))/(1.0+0.4866*(pt2**(-2.51)))

         if(tvalue(t)<tfora)then
          parta1=tfora*(tfora+2.0*0.938)/(tnew1*(tnew1+2.0*0.938))
         else
          parta1=tvalue(t)*(tvalue(t)+2.0*0.938)
     &                   /(tnew1*(tnew1+2.0*0.938))
         endif
         parta2=tvalue(t+1)*(tvalue(t+1)+2.0*0.938)
     &                    /(tnew2*(tnew2+2.0*0.938))

         if(tvalue(t)<tfora)then
          qfora=qfora+0.5*(jlisa2*parta2*yxt_aad(t+1)+jlisa1*parta1*
     &    (yxt_aad(t)+(tfora-tvalue(t))*(yxt_aad(t+1)-yxt_aad(t))
     &      /(tvalue(t+1)-tvalue(t))))*(tvalue(t+1)-tfora)
         else
          qfora=qfora+0.5*(jlisa2*parta2*yxt_aad(t+1)+jlisa1
     &      *parta1*yxt_aad(t))*(tvalue(t+1)-tvalue(t))
         endif
       
        endif

       enddo

!***********************************************************************
       qout=(qforp+qfora)*airout !GCR induced ionization (ion pairs cm-3 sec-1)
!qout=(qforp+qfora) !cosmic ray induced ionization (ion pairs g-1 sec-1)


       end subroutine  IONGCR
!------------------------------------------------------------------------------

!
C
!EOC
      END MODULE APM_NUCL_MOD
#endif


================================================
FILE: APM/apm_opti_mod.F
================================================
#ifdef APM
!************************************************************************
! This is the module to calculate aerosol optical properties based on
! APM simulated particle size distribution, composition, and mixing state.
! Designed and written by
! Fangqun Yu
! SUNY-Albany
! 09/2010-03/2011
!************************************************************************
      MODULE APM_OPTI_MOD
        
      implicit none
       
      ! Make everything PRIVATE ... 
      PRIVATE
      
      ! ... except these variables ...
!      PUBLIC ::
 
      ! ... and these routines
      PUBLIC :: READOPTABLE, READOPTABLE_LW
      PUBLIC :: APM_OPT, APM_OPT_LW
      PUBLIC :: OPTABLE1,OPTABLE2,OPTABLE3   !for comp only

      !=================================================================
      ! MODULE VARIABLES
      !=================================================================
      ! Parameters
!      integer,parameter :: MWL ! Num of  wavelength across solar spectrum
!      integer,parameter :: MDC#  ! Num of Dcore
!      integer,parameter :: MDS  ! Num of Dshell
!      integer,parameter :: MSR  ! Num of real part of shell refindx

      INTEGER, PARAMETER   :: MWL
Download .txt
gitextract_afeqwh9l/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   ├── new-feature.yml
│   │   └── question-discussion.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       └── stale.yml
├── .gitignore
├── .gitmodules
├── .zenodo.json
├── APM/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── apm_ATHN_mod.F
│   ├── apm_TIMN_mod.F
│   ├── apm_albd_mod.F
│   ├── apm_coag_mod.F90
│   ├── apm_grow_mod.F
│   ├── apm_icen_mod.F90
│   ├── apm_init_mod.F
│   ├── apm_mixactivate.F90
│   ├── apm_nucl_mod.F
│   ├── apm_opti_mod.F
│   ├── apm_phys_mod.F
│   ├── apm_radf_mod.F
│   ├── apm_rrtmg_mods.F90
│   ├── apm_rrtmg_src.F90
│   ├── apm_rrtmg_sw.F90
│   ├── module_data_mosaic_asect.F90
│   ├── module_data_mosaic_other.F90
│   ├── module_data_mosaic_therm.F90
│   └── module_mosaic_therm.F90
├── AUTHORS.txt
├── CHANGELOG.md
├── CMakeLists.txt
├── CMakeScripts/
│   └── GC-Helpers.cmake
├── GTMM/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── CasaRegridModule.F90
│   ├── CleanupCASAarrays.F90
│   ├── GTMM.F90
│   ├── GTMM_coupled.F90
│   ├── HgOutForGEOS.F90
│   ├── assignAgeClassToRunningPool.F90
│   ├── assignRanPoolToAgeClass.F90
│   ├── defineArrays.F90
│   ├── defineConstants.F90
│   ├── doFPARandLAI.F90
│   ├── doHerbCarbon.F90
│   ├── doHerbCarbonHg.F90
│   ├── doHerbivory.F90
│   ├── doHgDeposition.F90
│   ├── doLatitude.F90
│   ├── doLeafRootShedding.F90
│   ├── doMaxHg.F90
│   ├── doNPP.F90
│   ├── doOptimumTemperature.F90
│   ├── doPET.F90
│   ├── doSoilMoisture.F90
│   ├── doTreeCarbon.F90
│   ├── doTreeCarbonHg.F90
│   ├── dorestart_mod.F90
│   ├── getAgeClassBF.F90
│   ├── getFireParams.F90
│   ├── getFuelWood.F90
│   ├── getSoilMoistParams.F90
│   ├── getSoilParams.F90
│   ├── input_gtmm_mod.F90
│   ├── loadCASAinput.F90
│   ├── loadHgDeposition.F90
│   ├── load_GC_data.F90
│   ├── organizeAgeClasses.F90
│   ├── processData.F90
│   └── sort_pick_veg.F90
├── GeosCore/
│   ├── .cvsignore
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── RnPbBe_mod.F90
│   ├── YuIMN_Code.F90
│   ├── aero_drydep.F90
│   ├── aerosol_mod.F90
│   ├── aerosol_thermodynamics_mod.F90
│   ├── airs_ch4_mod.F90
│   ├── apm_driv_mod.F90
│   ├── calc_met_mod.F90
│   ├── carbon_gases_mod.F90
│   ├── carbon_mod.F90
│   ├── chemistry_mod.F90
│   ├── cldice_HBrHOBr_rxn.F90
│   ├── cldj_interface_mod.F90
│   ├── cleanup.F90
│   ├── convection_mod.F90
│   ├── depo_mercury_mod.F90
│   ├── diagnostics_mod.F90
│   ├── drydep_mod.F90
│   ├── dust_mod.F90
│   ├── emissions_mod.F90
│   ├── exchange_mod.F90
│   ├── fast_jx_mod.F90
│   ├── fjx_interface_mod.F90
│   ├── flexgrid_read_mod.F90
│   ├── fullchem_mod.F90
│   ├── gc_environment_mod.F90
│   ├── get_met_mod.F90
│   ├── get_ndep_mod.F90
│   ├── global_br_mod.F90
│   ├── gosat_ch4_mod.F90
│   ├── hco_interface_gc_mod.F90
│   ├── hco_state_gc_mod.F90
│   ├── hco_utilities_gc_mod.F90
│   ├── hcoi_gc_diagn_include.H
│   ├── hcoi_gc_diagn_mod.F90
│   ├── input_mod.F90
│   ├── kppsa_interface_mod.F90
│   ├── land_mercury_mod.F90
│   ├── linear_chem_mod.F90
│   ├── linoz_mod.F90
│   ├── mapping_mod.F90
│   ├── mercury_mod.F90
│   ├── mixing_mod.F90
│   ├── modis_lai_mod.F90
│   ├── ocean_mercury_mod.F90
│   ├── olson_landmap_mod.F90
│   ├── pbl_mix_mod.F90
│   ├── photolysis_mod.F90
│   ├── pjc_pfix_mod.F90
│   ├── pjc_pfix_window_mod.F90
│   ├── planeflight_mod.F90
│   ├── pops_mod.F90
│   ├── rpmares_mod.F90
│   ├── rrtmg_rad_transfer_mod.F90
│   ├── seasalt_mod.F90
│   ├── set_boundary_conditions_mod.F90
│   ├── set_global_ch4_mod.F90
│   ├── sfcvmr_mod.F90
│   ├── sulfate_mod.F90
│   ├── tagged_o3_mod.F90
│   ├── tccon_ch4_mod.F90
│   ├── tomas_mod.F90
│   ├── toms_mod.F90
│   ├── tpcore_fvdas_mod.F90
│   ├── tpcore_window_mod.F90
│   ├── tracer_mod.F90
│   ├── transport_mod.F90
│   ├── ucx_mod.F90
│   ├── uvalbedo_mod.F90
│   ├── vdiff_mod.F90
│   └── wetscav_mod.F90
├── GeosRad/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── Makefile.nomcica
│   ├── mcica_random_numbers.F90
│   ├── mcica_subcol_gen_lw.F90
│   ├── mcica_subcol_gen_sw.F90
│   ├── parkind.F90
│   ├── parrrsw.F90
│   ├── parrrtm.F90
│   ├── rad_driver.F90.safe
│   ├── rrlw_cld.F90
│   ├── rrlw_con.F90
│   ├── rrlw_kg01.F90
│   ├── rrlw_kg02.F90
│   ├── rrlw_kg03.F90
│   ├── rrlw_kg04.F90
│   ├── rrlw_kg05.F90
│   ├── rrlw_kg06.F90
│   ├── rrlw_kg07.F90
│   ├── rrlw_kg08.F90
│   ├── rrlw_kg09.F90
│   ├── rrlw_kg10.F90
│   ├── rrlw_kg11.F90
│   ├── rrlw_kg12.F90
│   ├── rrlw_kg13.F90
│   ├── rrlw_kg14.F90
│   ├── rrlw_kg15.F90
│   ├── rrlw_kg16.F90
│   ├── rrlw_ncpar.F90
│   ├── rrlw_ref.F90
│   ├── rrlw_tbl.F90
│   ├── rrlw_vsn.F90
│   ├── rrlw_wvn.F90
│   ├── rrsw_aer.F90
│   ├── rrsw_cld.F90
│   ├── rrsw_con.F90
│   ├── rrsw_kg16.F90
│   ├── rrsw_kg17.F90
│   ├── rrsw_kg18.F90
│   ├── rrsw_kg19.F90
│   ├── rrsw_kg20.F90
│   ├── rrsw_kg21.F90
│   ├── rrsw_kg22.F90
│   ├── rrsw_kg23.F90
│   ├── rrsw_kg24.F90
│   ├── rrsw_kg25.F90
│   ├── rrsw_kg26.F90
│   ├── rrsw_kg27.F90
│   ├── rrsw_kg28.F90
│   ├── rrsw_kg29.F90
│   ├── rrsw_ref.F90
│   ├── rrsw_tbl.F90
│   ├── rrsw_vsn.F90
│   ├── rrsw_wvn.F90
│   ├── rrtmg_lw_cldprmc.F90
│   ├── rrtmg_lw_cldprop.F90.safe
│   ├── rrtmg_lw_init.F90
│   ├── rrtmg_lw_k_g.F90
│   ├── rrtmg_lw_rad.F90
│   ├── rrtmg_lw_rad.F90.safe
│   ├── rrtmg_lw_rad.nomcica.F90.safe
│   ├── rrtmg_lw_rtrnmc.F90
│   ├── rrtmg_lw_rtrnmr.F90.safe
│   ├── rrtmg_lw_setcoef.F90
│   ├── rrtmg_lw_taumol.F90
│   ├── rrtmg_sw_cldprmc.F90
│   ├── rrtmg_sw_cldprop.F90.safe
│   ├── rrtmg_sw_init.F90
│   ├── rrtmg_sw_k_g.F90
│   ├── rrtmg_sw_rad.F90
│   ├── rrtmg_sw_reftra.F90
│   ├── rrtmg_sw_setcoef.F90
│   ├── rrtmg_sw_spcvmc.F90
│   ├── rrtmg_sw_taumol.F90
│   ├── rrtmg_sw_vrtqdr.F90
│   ├── test_aero_init
│   ├── test_aero_init.F
│   ├── test_arr_mult
│   └── test_arr_mult.F90
├── GeosUtil/
│   ├── CMakeLists.txt
│   ├── error_mod.F90
│   ├── file_mod.F90
│   ├── gc_grid_mod.F90
│   ├── henry_mod.F90
│   ├── ifort_errmsg.F90
│   ├── julday_mod.F90
│   ├── pressure_mod.F90
│   ├── print_mod.F90
│   ├── regrid_a2a_mod.F90
│   ├── time_mod.F90
│   ├── timers_mod.F90
│   ├── transfer_mod.F90
│   └── unitconv_mod.F90
├── Headers/
│   ├── .cvsignore
│   ├── .gitignore
│   ├── CMN_FJX_MOD.F90
│   ├── CMN_SIZE_mod.F90
│   ├── CMakeLists.txt
│   ├── aermass_container_mod.F90
│   ├── charpak_mod.F90
│   ├── diaglist_mod.F90
│   ├── dictionary_m.F90
│   ├── errcode_mod.F90
│   ├── input_opt_mod.F90
│   ├── inquireMod.F90
│   ├── phot_container_mod.F90
│   ├── physconstants.F90
│   ├── precision_mod.F90
│   ├── qfyaml_mod.F90
│   ├── registry_mod.F90
│   ├── registry_params_mod.F90
│   ├── roundoff_mod.F90
│   ├── species_database_mod.F90
│   ├── species_mod.F90
│   ├── state_chm_mod.F90
│   ├── state_diag_mod.F90
│   ├── state_grid_mod.F90
│   ├── state_met_mod.F90
│   └── taggeddiaglist_mod.F90
├── History/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── histcontainer_mod.F90
│   ├── histitem_mod.F90
│   ├── history_mod.F90
│   ├── history_netcdf_mod.F90
│   ├── history_util_mod.F90
│   ├── metahistcontainer_mod.F90
│   └── metahistitem_mod.F90
├── Interfaces/
│   ├── GCClassic/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── gc_classic_version.H.in
│   │   └── main.F90
│   ├── GCHP/
│   │   ├── CMakeLists.txt
│   │   ├── Chem_GridCompMod.F90
│   │   ├── Includes_Before_Run.H
│   │   ├── Registry/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── Chem_Registry.rc
│   │   │   └── HEMCO_Registry.rc
│   │   ├── gchp_chunk_mod.F90
│   │   └── gchp_historyexports_mod.F90
│   └── GEOS/
│       ├── GEOSCHEMchem_Registry.rc
│       ├── Includes_After_Run.H
│       ├── Includes_Before_Run.H
│       ├── geos_CarbonInterface.F90
│       ├── geos_TaggedSpecies.F90
│       ├── geos_aerocoupler.F90
│       ├── geos_analysis.F90
│       └── geos_interface.F90
├── KPP/
│   ├── .cvsignore
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── Hg/
│   │   ├── CMakeLists.txt
│   │   ├── Hg.eqn
│   │   ├── Hg.kpp
│   │   ├── Hg_HetStateFuncs.F90
│   │   ├── Hg_RateLawFuncs.F90
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── gckpp_Function.F90
│   │   ├── gckpp_Global.F90
│   │   ├── gckpp_Initialize.F90
│   │   ├── gckpp_Integrator.F90
│   │   ├── gckpp_Jacobian.F90
│   │   ├── gckpp_JacobianSP.F90
│   │   ├── gckpp_LinearAlgebra.F90
│   │   ├── gckpp_Model.F90
│   │   ├── gckpp_Monitor.F90
│   │   ├── gckpp_Parameters.F90
│   │   ├── gckpp_Precision.F90
│   │   ├── gckpp_Rates.F90
│   │   └── gckpp_Util.F90
│   ├── OHreact_parser.py
│   ├── aciduptake/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── aciduptake.eqn
│   │   ├── aciduptake.kpp
│   │   └── aciduptake_DustChemFuncs.F90
│   ├── build_mechanism.sh
│   ├── carbon/
│   │   ├── CMakeLists.txt
│   │   ├── carbon.eqn
│   │   ├── carbon.eqn.default
│   │   ├── carbon.eqn.jacobian.5
│   │   ├── carbon.kpp
│   │   ├── carbon_Funcs.F90
│   │   ├── gckpp_Function.F90
│   │   ├── gckpp_Global.F90
│   │   ├── gckpp_Initialize.F90
│   │   ├── gckpp_Integrator.F90
│   │   ├── gckpp_Jacobian.F90
│   │   ├── gckpp_LinearAlgebra.F90
│   │   ├── gckpp_Model.F90
│   │   ├── gckpp_Monitor.F90
│   │   ├── gckpp_Parameters.F90
│   │   ├── gckpp_Precision.F90
│   │   ├── gckpp_Rates.F90
│   │   ├── gckpp_Util.F90
│   │   └── util/
│   │       └── expand_carbon_eqn.py
│   ├── custom/
│   │   ├── .gitignore
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── custom.eqn
│   │   └── custom.kpp
│   ├── fullchem/
│   │   ├── CHANGELOG_fullchem.md
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── commonIncludeVars.H
│   │   ├── fullchem.eqn
│   │   ├── fullchem.kpp
│   │   ├── fullchem_AutoReduceFuncs.F90
│   │   ├── fullchem_HetStateFuncs.F90
│   │   ├── fullchem_RateLawFuncs.F90
│   │   ├── fullchem_SulfurChemFuncs.F90
│   │   ├── gckpp_Function.F90
│   │   ├── gckpp_Global.F90
│   │   ├── gckpp_Initialize.F90
│   │   ├── gckpp_Integrator.F90
│   │   ├── gckpp_Jacobian.F90
│   │   ├── gckpp_JacobianSP.F90
│   │   ├── gckpp_LinearAlgebra.F90
│   │   ├── gckpp_Model.F90
│   │   ├── gckpp_Monitor.F90
│   │   ├── gckpp_Parameters.F90
│   │   ├── gckpp_Precision.F90
│   │   ├── gckpp_Rates.F90
│   │   ├── gckpp_Util.F90
│   │   └── rateLawUtilFuncs.F90
│   └── stubs/
│       ├── stub_Hg_HetStateFuncs.F90
│       ├── stub_aciduptake_DustChemFuncs.F90
│       ├── stub_carbon_Funcs.F90
│       ├── stub_fullchem_AutoReduceFuncs.F90
│       ├── stub_fullchem_HetStateFuncs.F90
│       └── stub_fullchem_SulfurChemFuncs.F90
├── LICENSE.txt
├── NcdfUtil/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── TestNcdfUtil.F90
│   ├── charpak_mod.F90
│   ├── julday_mod.F90
│   ├── m_do_err_out.F90
│   ├── m_netcdf_io_checks.F90
│   ├── m_netcdf_io_close.F90
│   ├── m_netcdf_io_create.F90
│   ├── m_netcdf_io_define.F90
│   ├── m_netcdf_io_get_dimlen.F90
│   ├── m_netcdf_io_handle_err.F90
│   ├── m_netcdf_io_open.F90
│   ├── m_netcdf_io_read.F90
│   ├── m_netcdf_io_readattr.F90
│   ├── m_netcdf_io_write.F90
│   └── ncdf_mod.F90
├── ObsPack/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   └── obspack_mod.F90
├── PKUCPL/
│   ├── .gitignore
│   ├── PKUCPL.F90
│   ├── PKUCPL.sh
│   ├── README
│   ├── Twoway.compile.sh
│   └── run_twoway
├── README.md
├── run/
│   ├── .gitignore
│   ├── CESM/
│   │   ├── HEMCO_Config.rc
│   │   ├── HISTORY.rc
│   │   ├── geoschem_config.yml
│   │   └── util/
│   │       ├── README
│   │       └── dep_data_file.cdl
│   ├── GCClassic/
│   │   ├── .gitignore
│   │   ├── HEMCO_Config.rc.templates/
│   │   │   ├── HEMCO_Config.rc.Hg
│   │   │   ├── HEMCO_Config.rc.POPs
│   │   │   ├── HEMCO_Config.rc.TransportTracers
│   │   │   ├── HEMCO_Config.rc.aerosol
│   │   │   ├── HEMCO_Config.rc.carbon
│   │   │   ├── HEMCO_Config.rc.fullchem
│   │   │   ├── HEMCO_Config.rc.gcap2_metfields
│   │   │   ├── HEMCO_Config.rc.gmao_metfields
│   │   │   ├── HEMCO_Config.rc.gmao_metfields_0125
│   │   │   ├── HEMCO_Config.rc.metals
│   │   │   └── HEMCO_Config.rc.tagO3
│   │   ├── HEMCO_Diagn.rc.templates/
│   │   │   ├── HEMCO_Diagn.rc.Hg
│   │   │   ├── HEMCO_Diagn.rc.POPs
│   │   │   ├── HEMCO_Diagn.rc.TransportTracers
│   │   │   ├── HEMCO_Diagn.rc.aerosol
│   │   │   ├── HEMCO_Diagn.rc.aerosol.onlineE
│   │   │   ├── HEMCO_Diagn.rc.carbon
│   │   │   ├── HEMCO_Diagn.rc.fullchem
│   │   │   ├── HEMCO_Diagn.rc.fullchem.onlineE
│   │   │   ├── HEMCO_Diagn.rc.metals
│   │   │   └── HEMCO_Diagn.rc.tagO3
│   │   ├── HISTORY.rc.templates/
│   │   │   ├── HISTORY.rc.Hg
│   │   │   ├── HISTORY.rc.POPs
│   │   │   ├── HISTORY.rc.TransportTracers
│   │   │   ├── HISTORY.rc.aerosol
│   │   │   ├── HISTORY.rc.carbon
│   │   │   ├── HISTORY.rc.fullchem
│   │   │   ├── HISTORY.rc.metals
│   │   │   └── HISTORY.rc.tagO3
│   │   ├── README.md
│   │   ├── archiveRun.sh
│   │   ├── createRunDir.sh
│   │   ├── geoschem_config.yml.templates/
│   │   │   ├── geoschem_config.yml.Hg
│   │   │   ├── geoschem_config.yml.POPs
│   │   │   ├── geoschem_config.yml.TransportTracers
│   │   │   ├── geoschem_config.yml.aerosol
│   │   │   ├── geoschem_config.yml.carbon
│   │   │   ├── geoschem_config.yml.fullchem
│   │   │   ├── geoschem_config.yml.metals
│   │   │   └── geoschem_config.yml.tagO3
│   │   ├── getRunInfo
│   │   ├── gitignore
│   │   ├── init_rd.sh
│   │   ├── runScriptSamples/
│   │   │   └── operational_examples/
│   │   │       ├── harvard_cannon/
│   │   │       │   ├── README
│   │   │       │   ├── gcclassic.gcc10_cannon_rocky.env
│   │   │       │   ├── gcclassic.gcc12_cannon_rocky.env
│   │   │       │   ├── gcclassic.gcc14_cannon_rocky.env
│   │   │       │   ├── geoschem.benchmark.run
│   │   │       │   ├── geoschem.run
│   │   │       │   ├── geoschem.vtune-hotspots.run
│   │   │       │   ├── geoschem.vtune-perf-snapshot.run
│   │   │       │   ├── geoschem.vtune-threading.run
│   │   │       │   ├── geoschem.vtune-uarch-explore.run
│   │   │       │   └── parallelTest.sh
│   │   │       ├── msu_orion/
│   │   │       │   ├── README
│   │   │       │   ├── gcclassic.carbon.build
│   │   │       │   ├── gcclassic.intel-2022.2.1.env
│   │   │       │   └── gcclassic.run
│   │   │       ├── nasa_discover/
│   │   │       │   ├── README
│   │   │       │   ├── gcclassic.build
│   │   │       │   ├── gcclassic.run
│   │   │       │   ├── geoschem.SLES15.stack-gcc-12.3.0.env
│   │   │       │   └── geoschem.SLES15.stack-intel-2021.10.0.env
│   │   │       ├── ncar_derecho/
│   │   │       │   ├── gcclassic.intel2024.env
│   │   │       │   └── geoschem.run
│   │   │       └── york_viking/
│   │   │           ├── README
│   │   │           ├── gcclassic.intel.2021b.viking.env
│   │   │           └── gcclassic.intel.sbatch
│   │   └── setupForRestarts.sh
│   ├── GCHP/
│   │   ├── .gitignore
│   │   ├── CAP.rc.template
│   │   ├── ESMF.rc
│   │   ├── ExtData.rc.templates/
│   │   │   ├── ExtData.rc.TransportTracers
│   │   │   ├── ExtData.rc.carbon
│   │   │   ├── ExtData.rc.fullchem
│   │   │   └── ExtData.rc.tagO3
│   │   ├── ExtData2G.yaml.templates/
│   │   │   └── extdata.yaml.TransportTracers
│   │   ├── GCHP.rc.template
│   │   ├── HEMCO_Config.rc.templates/
│   │   │   ├── HEMCO_Config.rc.TransportTracers
│   │   │   ├── HEMCO_Config.rc.carbon
│   │   │   ├── HEMCO_Config.rc.fullchem
│   │   │   └── HEMCO_Config.rc.tagO3
│   │   ├── HEMCO_Diagn.rc.templates/
│   │   │   ├── HEMCO_Diagn.rc.TransportTracers
│   │   │   ├── HEMCO_Diagn.rc.carbon
│   │   │   ├── HEMCO_Diagn.rc.fullchem
│   │   │   └── HEMCO_Diagn.rc.tagO3
│   │   ├── HISTORY.rc.templates/
│   │   │   ├── HISTORY.rc.TransportTracers
│   │   │   ├── HISTORY.rc.carbon
│   │   │   ├── HISTORY.rc.fullchem
│   │   │   └── HISTORY.rc.tagO3
│   │   ├── README.md
│   │   ├── archiveRun.sh
│   │   ├── checkRunSettings.sh
│   │   ├── createRunDir.sh
│   │   ├── geoschem_config.yml.templates/
│   │   │   ├── geoschem_config.yml.TransportTracers
│   │   │   ├── geoschem_config.yml.carbon
│   │   │   ├── geoschem_config.yml.fullchem
│   │   │   └── geoschem_config.yml.tagO3
│   │   ├── gitignore
│   │   ├── init_rd.sh
│   │   ├── input.nml
│   │   ├── logging.yml
│   │   ├── runScriptSamples/
│   │   │   ├── README
│   │   │   ├── gchp.batch_job.sh
│   │   │   ├── gchp.local.run
│   │   │   └── operational_examples/
│   │   │       ├── README
│   │   │       ├── aws_pcluster/
│   │   │       │   ├── README
│   │   │       │   ├── execute.sh
│   │   │       │   └── gchp.run
│   │   │       ├── harvard_cannon/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.gcc10_openmpi4_cannon_rocky.env
│   │   │       │   ├── gchp.gcc12_openmpi4_cannon_rocky.env
│   │   │       │   ├── gchp.run
│   │   │       │   └── gchp.submit_consecutive_jobs.sh
│   │   │       ├── icl_rcshpc/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.env
│   │   │       │   └── gchp.run
│   │   │       ├── mit_hex/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.env_HEX
│   │   │       │   └── gchp.run_HEX
│   │   │       ├── mit_svante/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.env_SVANTE
│   │   │       │   └── gchp.run_SVANTE.sh
│   │   │       ├── msu_orion/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.carbon.build
│   │   │       │   ├── gchp.intel-2024.1.0.env
│   │   │       │   └── gchp.run
│   │   │       ├── nasa_discover/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.build
│   │   │       │   ├── gchp.run
│   │   │       │   ├── geoschem.SLES15.stack-gcc-12.3.0.env
│   │   │       │   └── geoschem.SLES15.stack-intel-2021.10.0.env
│   │   │       ├── nasa_pleiades/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.pleiades.env
│   │   │       │   └── gchp.pleiades.run
│   │   │       ├── nci_gadi/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.pbs.run
│   │   │       │   └── gchp_env_nci
│   │   │       ├── wustl_compute1/
│   │   │       │   ├── README
│   │   │       │   ├── c360_requeuing.sh
│   │   │       │   ├── execute.sh
│   │   │       │   └── gchp.batch_job.sh
│   │   │       ├── wustl_compute2/
│   │   │       │   ├── README
│   │   │       │   ├── gchp.run
│   │   │       │   └── gchp_202505_hpcx_openmpi4_serial_IO.env
│   │   │       └── york_viking/
│   │   │           ├── README
│   │   │           ├── gchp.intel.2021b.viking.env
│   │   │           └── gchp.intel.sbatch
│   │   ├── setCommonRunSettings.sh.template
│   │   ├── setEnvironmentLink.sh
│   │   ├── setRestartLink.sh
│   │   └── utils/
│   │       ├── extra_static_files.txt
│   │       ├── extra_templates.txt
│   │       ├── listInputDataFiles
│   │       └── simulation-status
│   ├── GEOS/
│   │   ├── .gitignore
│   │   ├── GEOSCHEMchem_ExtData.rc
│   │   ├── GEOSCHEMchem_ExtData.yaml
│   │   ├── GEOSCHEMchem_GridComp.rc
│   │   ├── GEOSChem_TaggedNOx.rc
│   │   ├── HEMCO_Config.rc
│   │   ├── HEMCO_DiagnFile.rc
│   │   ├── HISTORY_CFv2.rc
│   │   ├── TransportTracers/
│   │   │   ├── GEOSCHEMchem_ExtData.rc
│   │   │   ├── GEOSCHEMchem_ExtData.yaml
│   │   │   ├── GEOSCHEMchem_GridComp.rc
│   │   │   ├── HEMCO_Config.rc
│   │   │   ├── HEMCO_DiagnFile.rc
│   │   │   ├── HISTORY.rc
│   │   │   └── geoschem_config.yml
│   │   ├── geoschem_analysis_cdas.yml
│   │   ├── geoschem_analysis_geosit.yml
│   │   ├── geoschem_config.yml
│   │   └── scripts/
│   │       └── create_ch4_offset_file.py
│   ├── WRF/
│   │   └── fullchem/
│   │       ├── HEMCO_Config.rc
│   │       ├── HEMCO_Diagn.rc
│   │       ├── HISTORY.rc
│   │       └── geoschem_config.yml
│   └── shared/
│       ├── .gitignore
│       ├── cleanRunDir.sh
│       ├── download_data.gcap2.40L.yml
│       ├── download_data.py
│       ├── download_data.yml
│       ├── input.apm
│       ├── kpp_standalone_interface.yml
│       ├── metrics.py
│       ├── newUserRegistration.sh
│       ├── rtd_species_by_simulation.py
│       ├── settings/
│       │   ├── 0125x015625.txt
│       │   ├── 025x03125.txt
│       │   ├── 05x0625.txt
│       │   ├── 2x25.txt
│       │   ├── 4x5.txt
│       │   ├── POPs_BaP.txt
│       │   ├── POPs_PHE.txt
│       │   ├── POPs_PYR.txt
│       │   ├── gcap2_hemco.txt
│       │   ├── geosfp/
│       │   │   ├── README
│       │   │   ├── advection_met/
│       │   │   │   ├── geosfp.derived_1hr_c720_wind_PS_SPHU.txt
│       │   │   │   ├── geosfp.preprocessed_3hr_0.25x0.625_PS_SPHU.txt
│       │   │   │   ├── geosfp.preprocessed_3hr_0.25x0.625_wind.txt
│       │   │   │   ├── geosfp.raw_1hr_c720_mass_flux_PS_SPHU_C.txt
│       │   │   │   ├── geosfp.raw_3hr_0.25x0.625_PS_SPHU.txt
│       │   │   │   └── geosfp.raw_3hr_0.25x0.625_wind.txt
│       │   │   ├── geosfp.nonadv_preprocessed_ll.txt
│       │   │   └── geosfp.nonadv_raw_ll.txt
│       │   ├── geosit/
│       │   │   ├── README
│       │   │   ├── advection_met/
│       │   │   │   ├── geosit.preprocessed_1hr_c180_mass_flux.txt
│       │   │   │   ├── geosit.preprocessed_3hr_c180_wind.txt
│       │   │   │   ├── geosit.raw_1hr_c180_mass_flux.txt
│       │   │   │   └── geosit.raw_3hr_c180_wind.txt
│       │   │   ├── discover/
│       │   │   │   ├── geosit.nonadv_raw_c180.txt
│       │   │   │   ├── geosit.raw_0.5x0.625.txt
│       │   │   │   ├── geosit.raw_1hr_c180_mass_flux.txt
│       │   │   │   └── geosit.raw_3hr_c180_wind.txt
│       │   │   ├── geosit.nonadv_preprocessed_c180.txt
│       │   │   ├── geosit.nonadv_raw_c180.txt
│       │   │   ├── geosit.preprocessed_0.5x0.625.txt
│       │   │   └── geosit.raw_0.5x0.625.txt
│       │   ├── global_grid.txt
│       │   ├── gmao_hemco.txt
│       │   ├── merra2.txt
│       │   ├── modele2.1.txt
│       │   └── nested_grid.txt
│       ├── setupConfigFiles.sh
│       ├── singleCarbonSpecies.sh
│       ├── species_database.yml
│       ├── species_database_apm.yml
│       └── species_database_tomas.yml
└── test/
    ├── .gitignore
    ├── README.md
    ├── difference/
    │   ├── README.md
    │   └── diffTest.sh
    ├── integration/
    │   ├── GCClassic/
    │   │   ├── README.md
    │   │   ├── README.testroot.md
    │   │   ├── integrationTest.sh
    │   │   ├── integrationTestCompile.sh
    │   │   ├── integrationTestCreate.sh
    │   │   └── integrationTestExecute.sh
    │   ├── GCHP/
    │   │   ├── README.md
    │   │   ├── README.testroot.md
    │   │   ├── integrationTest.sh
    │   │   ├── integrationTestCompile.sh
    │   │   ├── integrationTestCreate.sh
    │   │   └── integrationTestExecute.sh
    │   └── README.md
    ├── parallel/
    │   ├── GCClassic/
    │   │   ├── README.md
    │   │   ├── README.testroot.md
    │   │   ├── parallelTest.sh
    │   │   ├── parallelTestCompile.sh
    │   │   ├── parallelTestCreate.sh
    │   │   └── parallelTestExecute.sh
    │   └── README.md
    └── shared/
        ├── .gitignore
        ├── README.md
        ├── alldiags/
        │   └── Planeflight.dat.20190701
        ├── commonFunctionsForTests.sh
        └── utils/
            └── cannon/
                ├── integrationTest/
                │   ├── README.md
                │   ├── redoIntegrationTestCompile.sh
                │   └── redoIntegrationTestExecute.sh
                └── parallelTest/
                    ├── README.md
                    ├── redoParallelTestCompile.sh
                    └── redoParallelTestExecute.sh
Download .txt
SYMBOL INDEX (35 symbols across 5 files)

FILE: KPP/OHreact_parser.py
  function writeHeader (line 22) | def writeHeader(fo, mechName):
  function writeFooter (line 52) | def writeFooter(fo):
  function writeReactivity (line 65) | def writeReactivity(mechName):
  function main (line 197) | def main():

FILE: run/GEOS/scripts/create_ch4_offset_file.py
  function main (line 41) | def main(args):
  function parse_args (line 100) | def parse_args():

FILE: run/shared/download_data.py
  function read_config_file (line 46) | def read_config_file(config_file, to_str=False):
  function extract_pathnames_from_log (line 73) | def extract_pathnames_from_log(args):
  function get_run_info (line 183) | def get_run_info():
  function get_grid_suffix (line 235) | def get_grid_suffix(resolution):
  function get_nest_suffix (line 259) | def get_nest_suffix(lon_range):
  function get_remote_restart_filename (line 289) | def get_remote_restart_filename(local_prefix, run_info, rst_info):
  function replace_entry_in_list (line 325) | def replace_entry_in_list(the_list, old_entry, new_entry):
  function expand_restart_file_names (line 340) | def expand_restart_file_names(paths, args, run_info):
  function write_unique_paths (line 392) | def write_unique_paths(paths, unique_log):
  function create_download_script (line 417) | def create_download_script(paths, args):
  function download_the_data (line 570) | def download_the_data(args):
  function parse_args (line 618) | def parse_args():
  function main (line 691) | def main():

FILE: run/shared/metrics.py
  function combine_dataset (line 49) | def combine_dataset(file_list=None):
  function ch4_or_fullchem (line 99) | def ch4_or_fullchem(ds):
  function read_metrics_collection (line 152) | def read_metrics_collection(data_dir):
  function total_airmass (line 189) | def total_airmass(ds):
  function global_mean_oh (line 207) | def global_mean_oh(sum_airmass_kg, ds):
  function lifetimes_wrt_oh (line 229) | def lifetimes_wrt_oh(sum_airmass_m, ds):
  function overall_ch4_lifetimes (line 254) | def overall_ch4_lifetimes(ds):
  function get_start_and_end_dates (line 281) | def get_start_and_end_dates(ds):
  function print_metrics (line 314) | def print_metrics(ds, is_ch4_sim=False):
  function main (line 373) | def main():

FILE: run/shared/rtd_species_by_simulation.py
  function read_species_from_eqn_file (line 21) | def read_species_from_eqn_file(simulation_name):
  function read_transported_species (line 50) | def read_transported_species(simulation_name):
  function read_species_database (line 93) | def read_species_database():
  function get_species_metadata (line 114) | def get_species_metadata(species, species_database):
  function create_rtd_list_table (line 147) | def create_rtd_list_table(metadata, table_file, title=None):
  function main (line 190) | def main(simulation_name, table_file):
Copy disabled (too large) Download .json
Condensed preview — 677 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (35,782K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "chars": 4024,
    "preview": "name: Bug or Issue Report\ndescription: Report a bug or issue with GEOS-Chem\ntitle: \"Put a one-line description here\"\nlab"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 189,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: GEOS-Chem user manual\n    url: https://geos-chem.readthedocs.io/en/"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/new-feature.yml",
    "chars": 1534,
    "preview": "name: Feature Request\ndescription: Request a new GEOS-Chem feature\ntitle: \"Put a one-line description here\"\nlabels: [\"ca"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question-discussion.yml",
    "chars": 589,
    "preview": "name: Question or Discussion\ndescription: Ask a question about GEOS-Chem or start a discussion\ntitle: \"Put a one-line de"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 519,
    "preview": "### Name and Institution (Required)\n\nName:\nInstitution:\n\n### Describe the update\n\nPlease provide a clear and concise ove"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 1209,
    "preview": "# This workflow warns and then closes issues that have had no activity for a specified amount of time.\n#\n# You can adjus"
  },
  {
    "path": ".gitignore",
    "chars": 216,
    "preview": "HEMCO/.git/\nHEMCO/.github/\nHEMCO/.gitignore\n*.[oax]\n*.mod\n*.MOD\n*~*\n*.swp\n*.bak\n*.patch\n*.diff\ngcclassic\ndiffs\nbak\nmisc\n"
  },
  {
    "path": ".gitmodules",
    "chars": 102,
    "preview": "[submodule \"KPP/standalone\"]\n\tpath = KPP/standalone\n\turl = https://github.com/geoschem/KPP-Standalone\n"
  },
  {
    "path": ".zenodo.json",
    "chars": 449,
    "preview": "{\n    \"access_right\": \"open\",\n    \"creators\": [\n\t{\n\t    \"name\": \"The International GEOS-Chem User Community\"\n\t}\n    ],\n "
  },
  {
    "path": "APM/.gitignore",
    "chars": 95,
    "preview": "*.[oax]\n*.mod\n*.MOD\n*~*\ngeos\ngeostomas\ngeosapm\n*.pp.*\n*.pdb\n*.inst.*\n*.continue.*\n*.ppk\ncore.*\n"
  },
  {
    "path": "APM/CMakeLists.txt",
    "chars": 462,
    "preview": "add_library(APM STATIC EXCLUDE_FROM_ALL\n\tapm_albd_mod.F\n\tapm_ATHN_mod.F\n\tapm_coag_mod.F90\n\tapm_grow_mod.F\t\n\tapm_icen_mod"
  },
  {
    "path": "APM/apm_ATHN_mod.F",
    "chars": 12202,
    "preview": "#ifdef APM\n      MODULE APM_ATHN_MOD\n      IMPLICIT NONE\n\n      !======================================================="
  },
  {
    "path": "APM/apm_TIMN_mod.F",
    "chars": 22068,
    "preview": "#ifdef APM\n! $Id: apm_nucl_mod.f,v 0.0 2008/09/28 11:30:00 fyu $\n      MODULE APM_TIMN_MOD\n!\n!**************************"
  },
  {
    "path": "APM/apm_albd_mod.F",
    "chars": 3415,
    "preview": "#ifdef APM\n!************************************************************************\n! This is the module to read surfac"
  },
  {
    "path": "APM/apm_coag_mod.F90",
    "chars": 21944,
    "preview": "#ifdef APM\n!------------------------------------------------------------------------------\n!                  GEOS-Chem "
  },
  {
    "path": "APM/apm_grow_mod.F",
    "chars": 11058,
    "preview": "#ifdef APM\n!------------------------------------------------------------------------------\n!                  GEOS-Chem "
  },
  {
    "path": "APM/apm_icen_mod.F90",
    "chars": 18124,
    "preview": "#ifdef APM\n!program test\n!\n!use APM_ICEN_MOD, only : nucleati\n!\n!!\n!  parameter (naer_all = 3)\n!\n!  real*8   wbar       "
  },
  {
    "path": "APM/apm_init_mod.F",
    "chars": 67241,
    "preview": "#ifdef APM\n!------------------------------------------------------------------------------\n!                  GEOS-Chem "
  },
  {
    "path": "APM/apm_mixactivate.F90",
    "chars": 6886,
    "preview": "#ifdef APM\n!************************************************************************\n! This computer software was prepar"
  },
  {
    "path": "APM/apm_nucl_mod.F",
    "chars": 23770,
    "preview": "#ifdef APM\n!------------------------------------------------------------------------------\n!                  GEOS-Chem "
  },
  {
    "path": "APM/apm_opti_mod.F",
    "chars": 43416,
    "preview": "#ifdef APM\n!************************************************************************\n! This is the module to calculate a"
  },
  {
    "path": "APM/apm_phys_mod.F",
    "chars": 80260,
    "preview": "#ifdef APM\n!------------------------------------------------------------------------------\n!                  GEOS-Chem "
  },
  {
    "path": "APM/apm_radf_mod.F",
    "chars": 547700,
    "preview": "#ifdef APM\n! !MODULE: apm_radf_mod\n!\n! !DESCRIPTION: Module APM\\_RADF\\_MOD solves 1-column radiative forcing.\n!\\\\\n!\\\\\n! "
  },
  {
    "path": "APM/apm_rrtmg_mods.F90",
    "chars": 48809,
    "preview": "#ifdef APM\n      module parkind\n\n      implicit none\n      save\n\n!------------------------------------------------------"
  },
  {
    "path": "APM/apm_rrtmg_src.F90",
    "chars": 4243537,
    "preview": "#ifdef APM\n!     path:      $Source: /storm/rc1/cvsroot/rc/rrtmg_sw/src/rrtmg_sw_cldprop.f90,v $\n!     author:    $Autho"
  },
  {
    "path": "APM/apm_rrtmg_sw.F90",
    "chars": 63474,
    "preview": "#ifdef APM\n!------------------------------------------------------------------------------\n!                  GEOS-Chem "
  },
  {
    "path": "APM/module_data_mosaic_asect.F90",
    "chars": 47066,
    "preview": "#ifdef APM\n!**********************************************************************************  \n! This computer softwar"
  },
  {
    "path": "APM/module_data_mosaic_other.F90",
    "chars": 8307,
    "preview": "#ifdef APM\n!**********************************************************************************  \n! This computer softwar"
  },
  {
    "path": "APM/module_data_mosaic_therm.F90",
    "chars": 20711,
    "preview": "#ifdef APM\n!************************************************************************\n! This computer software was prepar"
  },
  {
    "path": "APM/module_mosaic_therm.F90",
    "chars": 452257,
    "preview": "#ifdef APM\n!************************************************************************\n! This computer software was prepar"
  },
  {
    "path": "AUTHORS.txt",
    "chars": 5943,
    "preview": "List of Developers for GEOS-Chem, HEMCO, and Related Software\n(08 Apr 2026)\n============================================"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 74518,
    "preview": "# Changelog\n\nThis file documents all notable changes to the GEOS-Chem repository starting in version 14.0.0, including a"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 2638,
    "preview": "# GEOS-Chem repository CMakeLists.txt\n\ncmake_minimum_required(VERSION 3.5)\n\n#-------------------------------------------"
  },
  {
    "path": "CMakeScripts/GC-Helpers.cmake",
    "chars": 5427,
    "preview": "\n#[[ stringify_list\n\nStringify a list of strings.\n\nUsage:\n    stringify_list(<list>\n        [PRINT]\n        [LINE_LENGTH"
  },
  {
    "path": "GTMM/.gitignore",
    "chars": 99,
    "preview": "*.[oax]\n*.mod\n*.MOD\n*~*\ngtmm\ngeos\ngeostomas\ngeosapm\n*.pp.*\n*.pdb\n*.inst.*\n*.continue.*\n*.ppk\ncore.*"
  },
  {
    "path": "GTMM/CMakeLists.txt",
    "chars": 1129,
    "preview": "add_library(Hg STATIC EXCLUDE_FROM_ALL\r\n    assignAgeClassToRunningPool.F90 \r\n    assignRanPoolToAgeClass.F90\r\n    CasaR"
  },
  {
    "path": "GTMM/CasaRegridModule.F90",
    "chars": 37437,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/CleanupCASAarrays.F90",
    "chars": 29841,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/GTMM.F90",
    "chars": 7450,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/GTMM_coupled.F90",
    "chars": 4333,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/HgOutForGEOS.F90",
    "chars": 5110,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/assignAgeClassToRunningPool.F90",
    "chars": 1841,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/assignRanPoolToAgeClass.F90",
    "chars": 1819,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/defineArrays.F90",
    "chars": 54215,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/defineConstants.F90",
    "chars": 4035,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doFPARandLAI.F90",
    "chars": 4423,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doHerbCarbon.F90",
    "chars": 10993,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doHerbCarbonHg.F90",
    "chars": 26519,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doHerbivory.F90",
    "chars": 3383,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doHgDeposition.F90",
    "chars": 3031,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doLatitude.F90",
    "chars": 1254,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doLeafRootShedding.F90",
    "chars": 4054,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doMaxHg.F90",
    "chars": 1849,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doNPP.F90",
    "chars": 3032,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doOptimumTemperature.F90",
    "chars": 1935,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doPET.F90",
    "chars": 2468,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doSoilMoisture.F90",
    "chars": 4484,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doTreeCarbon.F90",
    "chars": 13533,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/doTreeCarbonHg.F90",
    "chars": 28743,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/dorestart_mod.F90",
    "chars": 9101,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/getAgeClassBF.F90",
    "chars": 2067,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/getFireParams.F90",
    "chars": 4493,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/getFuelWood.F90",
    "chars": 1203,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/getSoilMoistParams.F90",
    "chars": 4044,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/getSoilParams.F90",
    "chars": 7112,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/input_gtmm_mod.F90",
    "chars": 2983,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/loadCASAinput.F90",
    "chars": 16712,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/loadHgDeposition.F90",
    "chars": 7820,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/load_GC_data.F90",
    "chars": 1484,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/organizeAgeClasses.F90",
    "chars": 6962,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/processData.F90",
    "chars": 26619,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GTMM/sort_pick_veg.F90",
    "chars": 1250,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/.cvsignore",
    "chars": 46,
    "preview": "*.a\n*.mod\n*.o\n*.pdf\n*.ps\n*.tex\nH\nS\na.out\ngeos\n"
  },
  {
    "path": "GeosCore/.gitignore",
    "chars": 95,
    "preview": "*.[oax]\n*.mod\n*.MOD\n*~*\ngeos\ngeostomas\ngeosapm\n*.pp.*\n*.pdb\n*.inst.*\n*.continue.*\n*.ppk\ncore.*\n"
  },
  {
    "path": "GeosCore/CMakeLists.txt",
    "chars": 3027,
    "preview": "# GeosCore/CMakeLists.txt\n\n# Add a compilation flag to force REAL to REAL*8 if necessary\n# only for file tpcore_window_m"
  },
  {
    "path": "GeosCore/RnPbBe_mod.F90",
    "chars": 15430,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/YuIMN_Code.F90",
    "chars": 12427,
    "preview": "#if   defined ( TOMAS )\n!------------------------------------------------------------------------------\n!               "
  },
  {
    "path": "GeosCore/aero_drydep.F90",
    "chars": 16569,
    "preview": "#ifdef TOMAS\n!------------------------------------------------------------------------------\n!                  GEOS-Che"
  },
  {
    "path": "GeosCore/aerosol_mod.F90",
    "chars": 129231,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/aerosol_thermodynamics_mod.F90",
    "chars": 50651,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/airs_ch4_mod.F90",
    "chars": 52706,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/apm_driv_mod.F90",
    "chars": 257879,
    "preview": "#ifdef APM\n!------------------------------------------------------------------------------\n!                  GEOS-Chem "
  },
  {
    "path": "GeosCore/calc_met_mod.F90",
    "chars": 63850,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/carbon_gases_mod.F90",
    "chars": 58350,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/carbon_mod.F90",
    "chars": 315610,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/chemistry_mod.F90",
    "chars": 55237,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/cldice_HBrHOBr_rxn.F90",
    "chars": 13895,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/cldj_interface_mod.F90",
    "chars": 55801,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/cleanup.F90",
    "chars": 6101,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/convection_mod.F90",
    "chars": 100849,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/depo_mercury_mod.F90",
    "chars": 18325,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/diagnostics_mod.F90",
    "chars": 86286,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/drydep_mod.F90",
    "chars": 204811,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/dust_mod.F90",
    "chars": 75479,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/emissions_mod.F90",
    "chars": 11386,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/exchange_mod.F90",
    "chars": 49723,
    "preview": "#ifdef EXCHANGE\n!------------------------------------------------------------------------------\n!                  GEOS-"
  },
  {
    "path": "GeosCore/fast_jx_mod.F90",
    "chars": 99030,
    "preview": "#ifdef FASTJX\n!------------------------------------------------------------------------------\n!                  GEOS-Ch"
  },
  {
    "path": "GeosCore/fjx_interface_mod.F90",
    "chars": 39014,
    "preview": "#ifdef FASTJX\n!------------------------------------------------------------------------------\n!                  GEOS-Ch"
  },
  {
    "path": "GeosCore/flexgrid_read_mod.F90",
    "chars": 65279,
    "preview": "#if defined( MODEL_CLASSIC )\n!------------------------------------------------------------------------------\n!          "
  },
  {
    "path": "GeosCore/fullchem_mod.F90",
    "chars": 174728,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/gc_environment_mod.F90",
    "chars": 32521,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/get_met_mod.F90",
    "chars": 8684,
    "preview": "#if defined( MODEL_CLASSIC )\n!------------------------------------------------------------------------------\n!          "
  },
  {
    "path": "GeosCore/get_ndep_mod.F90",
    "chars": 7705,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/global_br_mod.F90",
    "chars": 14705,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/gosat_ch4_mod.F90",
    "chars": 48629,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/hco_interface_gc_mod.F90",
    "chars": 203828,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/hco_state_gc_mod.F90",
    "chars": 1608,
    "preview": "!------------------------------------------------------------------------------\n!                    Harmonized Emission"
  },
  {
    "path": "GeosCore/hco_utilities_gc_mod.F90",
    "chars": 122060,
    "preview": "!------------------------------------------------------------------------------\n!                    Harmonized Emission"
  },
  {
    "path": "GeosCore/hcoi_gc_diagn_include.H",
    "chars": 1475,
    "preview": "!EOC\n!------------------------------------------------------------------------------\n!                  GEOS-Chem Global"
  },
  {
    "path": "GeosCore/hcoi_gc_diagn_mod.F90",
    "chars": 33182,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/input_mod.F90",
    "chars": 193616,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/kppsa_interface_mod.F90",
    "chars": 39663,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/land_mercury_mod.F90",
    "chars": 36130,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/linear_chem_mod.F90",
    "chars": 58039,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/linoz_mod.F90",
    "chars": 44199,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/mapping_mod.F90",
    "chars": 12199,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/mercury_mod.F90",
    "chars": 176489,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/mixing_mod.F90",
    "chars": 37444,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/modis_lai_mod.F90",
    "chars": 8161,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/ocean_mercury_mod.F90",
    "chars": 110901,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/olson_landmap_mod.F90",
    "chars": 14887,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/pbl_mix_mod.F90",
    "chars": 24636,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/photolysis_mod.F90",
    "chars": 39352,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/pjc_pfix_mod.F90",
    "chars": 58823,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/pjc_pfix_window_mod.F90",
    "chars": 62886,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/planeflight_mod.F90",
    "chars": 102360,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/pops_mod.F90",
    "chars": 79682,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/rpmares_mod.F90",
    "chars": 75704,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/rrtmg_rad_transfer_mod.F90",
    "chars": 120720,
    "preview": "#ifdef RRTMG\n!------------------------------------------------------------------------------\n!                  GEOS-Che"
  },
  {
    "path": "GeosCore/seasalt_mod.F90",
    "chars": 62983,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/set_boundary_conditions_mod.F90",
    "chars": 8044,
    "preview": "#ifdef MODEL_CLASSIC\n!------------------------------------------------------------------------------\n!                  "
  },
  {
    "path": "GeosCore/set_global_ch4_mod.F90",
    "chars": 10214,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/sfcvmr_mod.F90",
    "chars": 12662,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/sulfate_mod.F90",
    "chars": 362890,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/tagged_o3_mod.F90",
    "chars": 24145,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/tccon_ch4_mod.F90",
    "chars": 37477,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/tomas_mod.F90",
    "chars": 404688,
    "preview": "#ifdef TOMAS\n!------------------------------------------------------------------------------\n!                  GEOS-Che"
  },
  {
    "path": "GeosCore/toms_mod.F90",
    "chars": 12655,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/tpcore_fvdas_mod.F90",
    "chars": 172010,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/tpcore_window_mod.F90",
    "chars": 102480,
    "preview": "! $Id: tpcore_window_mod.f90,v 1.2 2009/10/15 17:46:23 bmy Exp $\nmodule TPCORE_WINDOW_MOD\n!\n!***************************"
  },
  {
    "path": "GeosCore/tracer_mod.F90",
    "chars": 25342,
    "preview": "#if defined( MODEL_GEOS ) || defined( MODEL_GCHP )\n#include \"MAPL_Generic.h\"\n#endif\n!-----------------------------------"
  },
  {
    "path": "GeosCore/transport_mod.F90",
    "chars": 39765,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/ucx_mod.F90",
    "chars": 168399,
    "preview": "!------------------------------------------------------------------------------\n!               MIT Laboratory for Aviat"
  },
  {
    "path": "GeosCore/uvalbedo_mod.F90",
    "chars": 3489,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/vdiff_mod.F90",
    "chars": 89056,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosCore/wetscav_mod.F90",
    "chars": 238334,
    "preview": "!------------------------------------------------------------------------------\n!                  GEOS-Chem Global Chem"
  },
  {
    "path": "GeosRad/.gitignore",
    "chars": 95,
    "preview": "*.[oax]\n*.mod\n*.MOD\n*~*\ngeos\ngeostomas\ngeosapm\n*.pp.*\n*.pdb\n*.inst.*\n*.continue.*\n*.ppk\ncore.*\n"
  },
  {
    "path": "GeosRad/CMakeLists.txt",
    "chars": 1515,
    "preview": "add_library(GeosRad STATIC EXCLUDE_FROM_ALL\n\tmcica_random_numbers.F90\n\tmcica_subcol_gen_lw.F90\n\tmcica_subcol_gen_sw.F90\n"
  },
  {
    "path": "GeosRad/Makefile.nomcica",
    "chars": 19392,
    "preview": "#------------------------------------------------------------------------------\n#          Harvard University Atmospheri"
  },
  {
    "path": "GeosRad/mcica_random_numbers.F90",
    "chars": 16918,
    "preview": "!     path:      $Source: /storm/rc1/cvsroot/rc/rrtmg_lw/src/mcica_random_numbers.f90,v $\n!     author:    $Author: mike"
  },
  {
    "path": "GeosRad/mcica_subcol_gen_lw.F90",
    "chars": 27274,
    "preview": "!     path:      $Source: /storm/rc1/cvsroot/rc/rrtmg_lw/src/mcica_subcol_gen_lw.f90,v $\n!     author:    $Author: mike "
  },
  {
    "path": "GeosRad/mcica_subcol_gen_sw.F90",
    "chars": 28235,
    "preview": "!     path:      $Source: /storm/rc1/cvsroot/rc/rrtmg_sw/src/mcica_subcol_gen_sw.f90,v $\n!     author:    $Author: mike "
  },
  {
    "path": "GeosRad/parkind.F90",
    "chars": 902,
    "preview": "      module parkind\n\n      implicit none\n      save\n\n!-----------------------------------------------------------------"
  },
  {
    "path": "GeosRad/parrrsw.F90",
    "chars": 4924,
    "preview": "\n      module parrrsw\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!--------"
  },
  {
    "path": "GeosRad/parrrtm.F90",
    "chars": 4683,
    "preview": "\n      module parrrtm\n\n      use parkind ,only : im => kind_im\n\n      implicit none\n      save\n\n!-----------------------"
  },
  {
    "path": "GeosRad/rad_driver.F90.safe",
    "chars": 15197,
    "preview": "!------------------------------------------------------------------------------\n!             Atmospheric and Environmen"
  },
  {
    "path": "GeosRad/rrlw_cld.F90",
    "chars": 995,
    "preview": "      module rrlw_cld\n\n      use parkind, only : rb => kind_rb\n\n      implicit none\n      save\n\n!-----------------------"
  },
  {
    "path": "GeosRad/rrlw_con.F90",
    "chars": 1401,
    "preview": "      module rrlw_con\n\n      use parkind, only : rb => kind_rb\n\n      implicit none\n      save\n\n!-----------------------"
  },
  {
    "path": "GeosRad/rrlw_kg01.F90",
    "chars": 2222,
    "preview": "      module rrlw_kg01\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg02.F90",
    "chars": 2079,
    "preview": "      module rrlw_kg02\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg03.F90",
    "chars": 2308,
    "preview": "      module rrlw_kg03\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg04.F90",
    "chars": 2063,
    "preview": "      module rrlw_kg04\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg05.F90",
    "chars": 2338,
    "preview": "      module rrlw_kg05\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg06.F90",
    "chars": 2240,
    "preview": "      module rrlw_kg06\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg07.F90",
    "chars": 2393,
    "preview": "      module rrlw_kg07\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg08.F90",
    "chars": 3096,
    "preview": "      module rrlw_kg08\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg09.F90",
    "chars": 2418,
    "preview": "      module rrlw_kg09\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg10.F90",
    "chars": 2194,
    "preview": "      module rrlw_kg10\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg11.F90",
    "chars": 2440,
    "preview": "      module rrlw_kg11\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg12.F90",
    "chars": 1868,
    "preview": "      module rrlw_kg12\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg13.F90",
    "chars": 2350,
    "preview": "      module rrlw_kg13\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg14.F90",
    "chars": 2193,
    "preview": "      module rrlw_kg14\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg15.F90",
    "chars": 1996,
    "preview": "      module rrlw_kg15\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_kg16.F90",
    "chars": 2154,
    "preview": "      module rrlw_kg16\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!-------"
  },
  {
    "path": "GeosRad/rrlw_ncpar.F90",
    "chars": 1773,
    "preview": "module rrlw_ncpar\n\tuse parkind ,only : im => kind_im, rb => kind_rb\n\n\timplicit none\n        save\n\t\n        real(kind=rb)"
  },
  {
    "path": "GeosRad/rrlw_ref.F90",
    "chars": 1004,
    "preview": "      module rrlw_ref\n\n      use parkind, only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!--------"
  },
  {
    "path": "GeosRad/rrlw_tbl.F90",
    "chars": 1676,
    "preview": "      module rrlw_tbl\n\n      use parkind, only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!--------"
  },
  {
    "path": "GeosRad/rrlw_vsn.F90",
    "chars": 1422,
    "preview": "      module rrlw_vsn\n\n      implicit none\n      save\n\n!----------------------------------------------------------------"
  },
  {
    "path": "GeosRad/rrlw_wvn.F90",
    "chars": 3827,
    "preview": "      module rrlw_wvn\n\n      use parkind, only : im => kind_im, rb => kind_rb\n      use parrrtm, only : nbndlw, mg, ngpt"
  },
  {
    "path": "GeosRad/rrsw_aer.F90",
    "chars": 1815,
    "preview": "      module rrsw_aer\n\n      use parkind, only : im => kind_im, rb => kind_rb\n      use parrrsw, only : nbndsw, naerec\n\n"
  },
  {
    "path": "GeosRad/rrsw_cld.F90",
    "chars": 1969,
    "preview": "      module rrsw_cld\n\n      use parkind, only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!--------"
  },
  {
    "path": "GeosRad/rrsw_con.F90",
    "chars": 1414,
    "preview": "      module rrsw_con\n\n      use parkind, only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!--------"
  },
  {
    "path": "GeosRad/rrsw_kg16.F90",
    "chars": 2043,
    "preview": "      module rrsw_kg16\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng16\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg17.F90",
    "chars": 2061,
    "preview": "      module rrsw_kg17\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng17\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg18.F90",
    "chars": 2045,
    "preview": "      module rrsw_kg18\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng18\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg19.F90",
    "chars": 2045,
    "preview": "      module rrsw_kg19\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng19\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg20.F90",
    "chars": 2136,
    "preview": "      module rrsw_kg20\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng20\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg21.F90",
    "chars": 2060,
    "preview": "      module rrsw_kg21\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng21\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg22.F90",
    "chars": 2041,
    "preview": "      module rrsw_kg22\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng22\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg23.F90",
    "chars": 1956,
    "preview": "      module rrsw_kg23\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng23\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg24.F90",
    "chars": 2417,
    "preview": "      module rrsw_kg24\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng24\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg25.F90",
    "chars": 1929,
    "preview": "      module rrsw_kg25\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng25\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg26.F90",
    "chars": 1519,
    "preview": "      module rrsw_kg26\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng26\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg27.F90",
    "chars": 1941,
    "preview": "      module rrsw_kg27\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng27\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg28.F90",
    "chars": 1832,
    "preview": "      module rrsw_kg28\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng28\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_kg29.F90",
    "chars": 2182,
    "preview": "      module rrsw_kg29\n\n      use parkind ,only : im => kind_im, rb => kind_rb\n      use parrrsw, only : ng29\n\n      imp"
  },
  {
    "path": "GeosRad/rrsw_ref.F90",
    "chars": 945,
    "preview": "      module rrsw_ref\n\n      use parkind, only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!--------"
  },
  {
    "path": "GeosRad/rrsw_tbl.F90",
    "chars": 1314,
    "preview": "      module rrsw_tbl\n\n      use parkind, only : im => kind_im, rb => kind_rb\n\n      implicit none\n      save\n\n!--------"
  },
  {
    "path": "GeosRad/rrsw_vsn.F90",
    "chars": 1481,
    "preview": "      module rrsw_vsn\n\n      implicit none\n      save\n\n!----------------------------------------------------------------"
  },
  {
    "path": "GeosRad/rrsw_wvn.F90",
    "chars": 2166,
    "preview": "      module rrsw_wvn\n\n      use parkind, only : im => kind_im, rb => kind_rb\n      use parrrsw, only : nbndsw, mg, ngpt"
  }
]

// ... and 477 more files (download for full content)

About this extraction

This page contains the full source code of the geoschem/geos-chem GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 677 files (33.4 MB), approximately 8.8M tokens, and a symbol index with 35 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!