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
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
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.