diff --git a/.circleci/config.yml b/.circleci/config.yml index dbd42c6d..9f25aed2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,11 +1,11 @@ version: 2.1 -# Anchors to prevent forgetting to update a version -baselibs_version: &baselibs_version v7.7.0 -bcs_version: &bcs_version v10.23.0 +# Anchors in case we need to override the defaults from the orb +#baselibs_version: &baselibs_version v7.17.0 +#bcs_version: &bcs_version v11.3.0 orbs: - ci: geos-esm/circleci-tools@1 + ci: geos-esm/circleci-tools@2 workflows: build-and-test: @@ -18,7 +18,7 @@ workflows: matrix: parameters: compiler: [gfortran, ifort] - baselibs_version: *baselibs_version + #baselibs_version: *baselibs_version repo: GOCART buildtarget: GOCART2G_GridComp mepodevelop: true @@ -32,7 +32,7 @@ workflows: matrix: parameters: compiler: [gfortran, ifort] - baselibs_version: *baselibs_version + #baselibs_version: *baselibs_version repo: GOCART buildtarget: GOCART2G_GridComp mepodevelop: true @@ -47,7 +47,7 @@ workflows: matrix: parameters: compiler: [gfortran, ifort] - baselibs_version: *baselibs_version + #baselibs_version: *baselibs_version repo: GEOSgcm checkout_fixture: true mepodevelop: true diff --git a/.github/workflows/validate_yaml_files.yml b/.github/workflows/validate_yaml_files.yml index ff19b0d6..dfefbd9a 100644 --- a/.github/workflows/validate_yaml_files.yml +++ b/.github/workflows/validate_yaml_files.yml @@ -24,7 +24,7 @@ jobs: format: colored config_file: .yamllint.yml - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: always() with: name: yamllint-logfile diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d211ce3..1e0eb9b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,21 +7,124 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Removed + +- Removed all ExtData.rc files +-removed lines for anthropogenic emissions of OC, BC, SO2, SO4, and NH3 in their repsective ExtData yaml files as these will enter through HEMCO. + + +### Changed + +- Modified the file paths in carbon, sulfate, and nitrate ExtData.yaml files to used the revised version of the CEDS anthropogenic emissions. Note the previous version has an incorrect seasonal cycle. +- Sulfate surface area density calculation in SU_Compute_Diags was incorrectly being passed the effective radius used for settling along with the sigma width of the number distribution. + Properly it should be passed the number median radius, also present in the RC file. Added a hook to read that field from the RC file ("particle_radius_number"), store in SU grid comp, and pass to SU_Compute_Diags. + This change is zero-diff to the SU internal state. It changes value of export SO4AREA. +- Changed DMS concentration data holder from ExtData provided (SU_DMSO) to local copy (dmso_conc). + This is relevant since if we run source tagged instances where we don't want DMS emissions we would zero out dmso_conc and that is what should be passed to DMSemission subroutine. This is zero diff except in that case. +- Changed SU2G_instance_SU.rc to now have separate filename inputs for explosive and degassing volcanoes +- It changes the formulation of the hydrophobic to hydrophilic conversion for carbon species, now defined by a time scale specified in the instance RC file. + This is now specified by providing an e-folding time in days. This moves the time constant from outside the fortran to the run-time configurable RC file. + This is not quite zero-diff with original code because of the precision of the specification, but testing shows nearly zero-diff result. +- Also now present in the carbon instance RC files is a run-time configurable optional parameterized loss rate (e-folding time in days) per species and per mode. + Default value for all is set to "-1" which means no use of this function. + +### Fixed + +- Use 'CA' component name to identify carbonaceous contributions to PM in UFS diagnostic calculations. These contributions were missing due to changes in field names. +- Add replay import patch for ozone. +- corrected reading variable 'rhod' from files ( it was mispelled as 'rhop') +- Silenced unwarranted error messages from wavelength/channel retrieval functions occurring when 470nm and/or 870nm channels are not included in GOCART resource file. +- Add explicit `find_package()` calls for missing dependencies for MAPL for builds with spack-stack. Will eventually be fixed in MAPL in later versions +- Corrected the units of the gravimetric soil moisture to percent instead of fractional in the FENGSHA dust scheme. +- Fix issue of GOCART/GEOSgcm circular CMake dependencies when used as external project +- Fix UFS/Standalone CMake issue +- Fix type of `k` in `SUvolcanicEmissions` + ### Added +- Additional tuning parameters for the soil moisture and drylimit calculations for application specific tuning. +- Required attributes for the 2D GOCART export fields in AERO_DP bundle have been set in subroutine append_to_bundle in Chem_AeroGeneric.F90. + These export fields are imported by OBIO via Surface GC, and the missing of the attributes was causing the writing of surface import checkpoint to fail. + The issue has been explained in detail on https://github.com/GEOS-ESM/GOCART/issues/258 +- Added export line to GOCART2G_GridCompMod to couple allow use of GOCART + SU sulfate production tendency elsewhere in Chemistry, specifically for + CARMA + +- Update ESMF CMake target to `ESMF::ESMF` + + +- Moved present volcanic emission inventories to one or the other line for these new entries; set other + line /dev/null; this is stop gap until next time we update volcanic emission inventories, at which + point will provide (for AMIP and AMIP.20C) separate explosive and degassing emissions +- Made accommodating changes for above in SU2G_GridCompMod.F90 and in the Process Library +- Verified zero diff in current configuration (this is true of tracers and restarts, but not diagnostics: + until an actual split is made in the input emissions then the volcanic emissions are being assigned to + one or the other emission diagnostics (explosive or degassing). + +- Changed Chem_SettlingSimple in the process library to call Mie Query for radius and rhop inputs to the settling velocity calculation. + The calls to Chem_SettlingSimple were then changed accordingly in each of the species' grid comps. + Since the RH flag is no longer needed, it was removed from GA_EnvironmentMod.F90 and each of the instance RC files. +- State Spec RC files for GOCART2G, CA, DU, NI, SU, and SS were updated such that the long names for AOD are more intuitive +- Modified ExtData.yaml files to persist as climatological anthropogenic emissions after the end of the CEDS dataset in 2019. + Analogous rc files removed as this capability is only available with ExtData2G +- Update `components.yaml` to match that of GEOSgcm v11.6.1 + - ESMA_env v4.29.0 (Baselibs 7.24.0, Updates for SLES15 at NCCS, various fixes) + - ESMA_cmake v3.48.0 (Fixes for NAS, debug flags, Updates for SLES15 at NCCS, MPI detection, ESMF and MPI CMake fixes for Spack) + - GMAO_Shared v1.9.8 (Bug fix for MITgcm, CI fixes, SLES15 Updates) + - MAPL 2.47.1 (Various fixes and features, support for Spack) +- Update CI to use Baselibs by default from CircleCI Orb +- Correct soil moisture parameterization in FENGSHA +- Add `soil_moisture_factor` to the DU2G_instance_DU.rc (same name used in the K14 scheme) and DU2G_GridCompMod.F90 files for FENGSHA +- Add `soil_drylimit_factor` to the DU2G_instance_DU.rc and DU2G_GridCompMod.F90 files for FENGSHA +- Moved process library macros to header file. + +## [v2.2.1] - 2023-05-30 + ### Fixed +- In dust and sea-salt, changed dimensions back to `globalCellCountPerDim` since these are needed to determine emission tuning parameters, not to allocate arrays. + + +## [v2.2.0] - 2023-05-18 + +### Fixed + +- Made needed code changes in `SS2G_GridCompMod.F90` and `CA2G_GridCompMod.F90` to permit data instances of of GOCART aerosols to run +- Added missing brown carbon (BR) climatology hooks to yaml and rc files for data driven instances +- Changed pointers to climatological deposition inputs in yaml and rc files to `/dev/null` since the files pointed to didn't provide them anyway, and in any case they are being used presently in the model +- Changed pointers to climatological nitrate inputs in yaml and rc files to `/dev/null` since pointing to FP files was inconsistent with MERRA-2 files used for other species +- Ensured zero-diff in performance of yaml vs. rc files for ExtData2G vs. ExtData1g for data driven aerosols +- To do: remove hooks to old (legacy) GOCART.data instances in CHEM and setup scripts +- Fixed rc file in legacy O3 component. +- Fixed issue #223 where Global dimension was being used for allocating a local array +- This fixes a long standing issue that one can not start and stop the model in anything less than 3 hour increments to test start/stop regression because of GOCART. +- Fix issue with scattering coefficient calculation with oc +- Fix a long standing issue that one can not start and stop the model in anything less than 3 hour increments to test start/stop regression because of GOCART. + ### Changed --removed lines for anthropogenic emissions of OC, BC, SO2, SO4, and NH3 in their repsective ExtData yaml files. --used ExtData2G to persist aircraft emissions and MERRA-2 GMI inputs after 2019 to eliminate the need for duplicate files for future years +- Comment out ASSERT to allow `GOCART_DT` to not match the `HEARTBEAT_DT` +- Single-moment moist changes from Donifan +- Change names of microphysics schemes to match refactored physics +- Set `SS_SCALE` default to 0.0 +- Updates in CA2G for OpenMP +- Updates for CI + - Update BCs version + - Update components to match GEOSgcm v11.0.0 + +## [2.1.4] - 2023-05-12 + +### Fixed + +- Fix in GOCART2G parent so that it can run with nitrates turned off. This patch of general utility was contributed by NOAA. + ## [2.1.3] - 2023-02-27 ### Added - Added `*` to CA State specs file to allow for ACG to substitute in the long name -- Changes were made so GOCART2G and its children can be run with component level -OpenMP threading. The key change is to create the data structure ThreadWorkspace +- Changes were made so GOCART2G and its children can be run with component level +OpenMP threading. The key change is to create the data structure ThreadWorkspace to hold variables that should be private to each thread to avoid race conditions. Additionally spatially distributed arrays that are not in any of the ESMF states were added to the ESMF internal state so they could be properly handled when @@ -31,8 +134,6 @@ option so they are not written to restart. - Aerosol single scattering backscatter coefficient for each instances and total at wavelengths_profile - Total (molecular + aerosols) attenuated backscatter coefficient from TOA and sfc at 532nm -### Fixed - ### Changed - Moved to use GitHub Action for label enforcement @@ -51,11 +152,6 @@ option so they are not written to restart. - Extinction/Scattering profile exports at model RH at wavelengths_profile - Extinction/Scattering profile exports with RH=20% and RH=80% at wavelengths_profile -### Fixed - -### Changed - - ## [2.1.1] - 2022-09-16 ### Fixed diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b20e22c..c06a9802 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,28 +2,51 @@ cmake_minimum_required (VERSION 3.17) cmake_policy (SET CMP0053 NEW) cmake_policy (SET CMP0054 NEW) -project ( - GOCART - VERSION 2.1.1 - LANGUAGES Fortran CXX C) # Note - CXX is required for ESMF - -if ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") - message(SEND_ERROR "In-source builds are disabled. Please - issue cmake command in separate build directory.") -endif ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") - -# Set the default build type to release -if (NOT CMAKE_BUILD_TYPE) - message (STATUS "Setting build type to 'Release' as none was specified.") - set (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) - # Set the possible values of build type for cmake-gui - set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Release" "MinSizeRel" "RelWithDebInfo") -endif () +# Let's look for the ESMA cmake directory in a few places +# to see if we are building standalone +set (ESMA_CMAKE_DIRS + cmake + @cmake + cmake@ + ) + +foreach (dir IN LISTS ESMA_CMAKE_DIRS) + if (EXISTS ${CMAKE_CURRENT_LIST_DIR}/${dir}) + list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/${dir}") + set (ESMA_CMAKE_PATH "${CMAKE_CURRENT_LIST_DIR}/${dir}" CACHE PATH "Path to ESMA_cmake code") + set(GOCART_STANDALONE TRUE) + endif () +endforeach () # Set build options option (UFS_GOCART "Build GOCART component for UFS" OFF) +# Any UFS build of GOCART is by definition a standalone build +if(UFS_GOCART) + set(GOCART_STANDALONE TRUE) +endif() + +if (GOCART_STANDALONE) + project ( + GOCART + VERSION 2.2.1 + LANGUAGES Fortran CXX C) # Note - CXX is required for ESMF + + if ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") + message(SEND_ERROR "In-source builds are disabled. Please + issue cmake command in separate build directory.") + endif ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") + + # Set the default build type to release + if (NOT CMAKE_BUILD_TYPE) + message (STATUS "Setting build type to 'Release' as none was specified.") + set (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Release" "MinSizeRel" "RelWithDebInfo") + endif () +endif() + set (DOING_GEOS5 YES) # Should find a better place for this - used in Chem component @@ -41,11 +64,12 @@ if (UFS_GOCART) endif() if (NOT COMMAND esma) - list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake@") include (esma) endif() -ecbuild_declare_project() +if(GOCART_STANDALONE) + ecbuild_declare_project() +endif() if (NOT Baselibs_FOUND) # Find dependencies @@ -61,6 +85,12 @@ endif () if (UFS_GOCART) find_package (GFTL_SHARED REQUIRED) + # Dom Heinzeller 2023/08/30 - workaround until https://github.com/GEOS-ESM/MAPL/pull/2320 + # is merged and finds its way into the ufs-weather-model dependency tree + find_package (YAFYAML QUIET) + find_package (FARGPARSE QUIET) + find_package (PFLOGGER QUIET) + # find_package (MAPL REQUIRED) include(mapl_acg) elseif (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/ESMF/Shared/MAPL@") @@ -81,7 +111,9 @@ include_directories(${MPI_Fortran_INCLUDE_PATH}) add_subdirectory (ESMF) add_subdirectory (Process_Library) -ecbuild_install_project (NAME GOCART) +if(GOCART_STANDALONE) + ecbuild_install_project (NAME GOCART) +endif() # https://www.scivision.dev/cmake-auto-gitignore-build-dir/ # --- auto-ignore build directory diff --git a/ESMF/Aerosol_GridComp/CMakeLists.txt b/ESMF/Aerosol_GridComp/CMakeLists.txt index 99628ce9..2c3f31b0 100644 --- a/ESMF/Aerosol_GridComp/CMakeLists.txt +++ b/ESMF/Aerosol_GridComp/CMakeLists.txt @@ -4,7 +4,7 @@ if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Aerosol_GridComp.F90) esma_add_library (${this} SRCS Aerosol_GridComp.F90 - DEPENDENCIES GOCART2G_GridComp MAPL esmf) + DEPENDENCIES GOCART2G_GridComp MAPL ESMF::ESMF) mapl_acg (${this} Aerosol_StateSpecs.rc IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS diff --git a/ESMF/Apps/CMakeLists.txt b/ESMF/Apps/CMakeLists.txt index a2f3c10d..7a26c151 100644 --- a/ESMF/Apps/CMakeLists.txt +++ b/ESMF/Apps/CMakeLists.txt @@ -1,7 +1,7 @@ esma_set_this () set (srcs - GOCART2G_SimpleBundleMod.F90 + GOCART2G_SimpleBundleMod.F90 aop_calculator.F90 GOCART2G_AopMod.F90 ) @@ -18,10 +18,10 @@ endforeach () set (resource_files aop_calculator.rc ) -install( FILES ${resource_files} +install( FILES ${resource_files} DESTINATION etc ) -esma_add_library(${this} - SRCS ${srcs} - DEPENDENCIES MAPL Process_Library esmf NetCDF::NetCDF_Fortran +esma_add_library(${this} + SRCS ${srcs} + DEPENDENCIES MAPL Process_Library ESMF::ESMF NetCDF::NetCDF_Fortran ) diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP.20C/CA2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP.20C/CA2G_GridComp_ExtData.rc deleted file mode 100644 index 14ff068e..00000000 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP.20C/CA2G_GridComp_ExtData.rc +++ /dev/null @@ -1,116 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| - -#========== Data Instance ========================================================== - -climBCphobic 'kg kg-1' Y N 0 0.0 1.0 BCphobic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -climBCphilic 'kg kg-1' Y N 0 0.0 1.0 BCphilic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -climOCphobic 'kg kg-1' Y N 0 0.0 1.0 OCphobic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -climOCphilic 'kg kg-1' Y N 0 0.0 1.0 OCphilic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - -climBCDP001 'kg m-2 s-1' Y N 0 0.0 1.0 BCDP001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCWT001 'kg m-2 s-1' Y N 0 0.0 1.0 BCWT001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCSD001 'kg m-2 s-1' Y N 0 0.0 1.0 BCSD001 /dev/null -climBCSV001 'kg m-2 s-1' Y N 0 0.0 1.0 BCSV001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climBCDP002 'kg m-2 s-1' Y N 0 0.0 1.0 BCDP002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCWT002 'kg m-2 s-1' Y N 0 0.0 1.0 BCWT002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCSD002 'kg m-2 s-1' Y N 0 0.0 1.0 BCSD002 /dev/null -climBCSV002 'kg m-2 s-1' Y N 0 0.0 1.0 BCSV002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climOCDP001 'kg m-2 s-1' Y N 0 0.0 1.0 OCDP001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCWT001 'kg m-2 s-1' Y N 0 0.0 1.0 OCWT001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCSD001 'kg m-2 s-1' Y N 0 0.0 1.0 OCSD001 /dev/null -climOCSV001 'kg m-2 s-1' Y N 0 0.0 1.0 OCSV001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climOCDP002 'kg m-2 s-1' Y N 0 0.0 1.0 OCDP002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCWT002 'kg m-2 s-1' Y N 0 0.0 1.0 OCWT002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCSD002 'kg m-2 s-1' Y N 0 0.0 1.0 OCSD002 /dev/null -climOCSV002 'kg m-2 s-1' Y N 0 0.0 1.0 OCSV002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - - -#=========== Carbonaceous aerosol sources =========================================== -# ORGANIC CARBON -# --------------- -# Biomass burning -OC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass /dev/null - -# Biofuel Source -- Included in AeroCom anthropogenic emissions -OC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -OC_ANTEOC1 NA N Y %y4-%m2-%d2t12:00:00 none none oc_nonenergy ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 -OC_ANTEOC2 NA N Y %y4-%m2-%d2t12:00:00 none none oc_energy ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - -# EDGAR based ship emissions -OC_SHIP NA N Y %y4-%m2-%d2t12:00:00 none none oc_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - -# Aircraft fuel consumption -OC_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none oc_aviation ExtData/chemistry/CEDS/v2021-04-21/L72/OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - -# Aviation emissions during the three phases of flight -OC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -OC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -OC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null - -# SOA production -pSOA_ANTHRO_VOC NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -#============================================================================================================ -# BLACK CARBON -# ------------ -# -BC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass ExtData/chemistry/HFED/v1.0/Y%y4/hfed.emis_bc.x576_y361_t14.%y4.nc4 - -# Biofuel Source -- Included in AeroCom anthropogenic emissions -BC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -BC_ANTEBC1 NA N Y %y4-%m2-%d2t12:00:00 none none bc_nonenergy ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 -BC_ANTEBC2 NA N Y %y4-%m2-%d2t12:00:00 none none bc_energy ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - -# EDGAR based ship emissions -BC_SHIP NA N Y %y4-%m2-%d2t12:00:00 none none bc_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - -# Aircraft fuel consumption -BC_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none bc_aviation ExtData/chemistry/CEDS/v2021-04-21/L72/BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - -# Aviation emissions during the LTO, SDC and CRS phases of flight -BC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation /dev/null -BC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation /dev/null -BC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation /dev/null - -#============================================================================================================ -# BROWN CARBON -# ------------ -# Biomass burning -BRC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass ExtData/chemistry/HFED/v1.0/Y%y4/hfed.emis_oc.x576_y361_t14.%y4.nc4 - -# Terpene emission -BRC_TERPENE NA Y Y %y4-%m2-%d2t12:00:00 none none terpene /dev/null - -# Biofuel Source -- Included in AeroCom anthropogenic emissions -BRC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -BRC_ANTEBRC1 NA Y Y %y4-%m2-%d2t12:00:00 none none anteoc1 /dev/null -BRC_ANTEBRC2 NA Y Y %y4-%m2-%d2t12:00:00 none none anteoc2 /dev/null - -# EDGAR based ship emissions -BRC_SHIP NA Y Y %y4-%m2-%d2t12:00:00 none none oc_ship /dev/null - -# Aircraft fuel consumption -BRC_AIRCRAFT NA Y Y %y4-%m2-%d2t12:00:00 none none none /dev/null - -# Aviation emissions during the three phases of flight -BRC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -BRC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -BRC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null - -# SOA production -pSOA_BIOB_VOC NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -%% diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP/CA2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP/CA2G_GridComp_ExtData.rc deleted file mode 100644 index 9c8fabe2..00000000 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP/CA2G_GridComp_ExtData.rc +++ /dev/null @@ -1,116 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| - -#========== Data Instance ========================================================== - -climBCphobic 'kg kg-1' Y N 0 0.0 1.0 BCphobic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -climBCphilic 'kg kg-1' Y N 0 0.0 1.0 BCphilic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -climOCphobic 'kg kg-1' Y N 0 0.0 1.0 OCphobic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -climOCphilic 'kg kg-1' Y N 0 0.0 1.0 OCphilic ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - -climBCDP001 'kg m-2 s-1' Y N 0 0.0 1.0 BCDP001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCWT001 'kg m-2 s-1' Y N 0 0.0 1.0 BCWT001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCSD001 'kg m-2 s-1' Y N 0 0.0 1.0 BCSD001 /dev/null -climBCSV001 'kg m-2 s-1' Y N 0 0.0 1.0 BCSV001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climBCDP002 'kg m-2 s-1' Y N 0 0.0 1.0 BCDP002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCWT002 'kg m-2 s-1' Y N 0 0.0 1.0 BCWT002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climBCSD002 'kg m-2 s-1' Y N 0 0.0 1.0 BCSD002 /dev/null -climBCSV002 'kg m-2 s-1' Y N 0 0.0 1.0 BCSV002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climOCDP001 'kg m-2 s-1' Y N 0 0.0 1.0 OCDP001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCWT001 'kg m-2 s-1' Y N 0 0.0 1.0 OCWT001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCSD001 'kg m-2 s-1' Y N 0 0.0 1.0 OCSD001 /dev/null -climOCSV001 'kg m-2 s-1' Y N 0 0.0 1.0 OCSV001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climOCDP002 'kg m-2 s-1' Y N 0 0.0 1.0 OCDP002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCWT002 'kg m-2 s-1' Y N 0 0.0 1.0 OCWT002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climOCSD002 'kg m-2 s-1' Y N 0 0.0 1.0 OCSD002 /dev/null -climOCSV002 'kg m-2 s-1' Y N 0 0.0 1.0 OCSV002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - - -#=========== Carbonaceous aerosol sources =========================================== -# ORGANIC CARBON -# --------------- -# Biomass burning -- QFED-v2.x -OC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass /dev/null - -# Biofuel Source -- Included in AeroCom anthropogenic emissions -OC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -OC_ANTEOC1 NA N Y %y4-%m2-%d2t12:00:00 none none oc_nonenergy ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 -OC_ANTEOC2 NA N Y %y4-%m2-%d2t12:00:00 none none oc_energy ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - -# EDGAR based ship emissions -OC_SHIP NA N Y %y4-%m2-%d2t12:00:00 none none oc_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - -# Aircraft fuel consumption -OC_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none oc_aviation ExtData/chemistry/CEDS/v2021-04-21/L72/OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - -# Aviation emissions during the three phases of flight -OC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -OC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -OC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null - -# SOA production -pSOA_ANTHRO_VOC NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -#============================================================================================================ -# BLACK CARBON -# ------------ -# QFED v2.x -BC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_bc.061.%y4%m2%d2.nc4 - -# Biofuel Source -- Included in AeroCom anthropogenic emissions -BC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -BC_ANTEBC1 NA N Y %y4-%m2-%d2t12:00:00 none none bc_nonenergy ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 -BC_ANTEBC2 NA N Y %y4-%m2-%d2t12:00:00 none none bc_energy ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - -# EDGAR based ship emissions -BC_SHIP NA N Y %y4-%m2-%d2t12:00:00 none none bc_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - -# Aircraft fuel consumption -BC_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none bc_aviation ExtData/chemistry/CEDS/v2021-04-21/L72/BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - -# Aviation emissions during the LTO, SDC and CRS phases of flight -BC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation /dev/null -BC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation /dev/null -BC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation /dev/null - -#============================================================================================================ -# BROWN CARBON -# ------------ -# Biomass burning -- QFED-v2.x -BRC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_oc.061.%y4%m2%d2.nc4 - -# Terpene emission -BRC_TERPENE NA Y Y %y4-%m2-%d2t12:00:00 none none terpene /dev/null - -# Biofuel Source -- Included in AeroCom anthropogenic emissions -BRC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -BRC_ANTEBRC1 NA Y Y %y4-%m2-%d2t12:00:00 none none anteoc1 /dev/null -BRC_ANTEBRC2 NA Y Y %y4-%m2-%d2t12:00:00 none none anteoc2 /dev/null - -# EDGAR based ship emissions -BRC_SHIP NA Y Y %y4-%m2-%d2t12:00:00 none none oc_ship /dev/null - -# Aircraft fuel consumption -BRC_AIRCRAFT NA Y Y %y4-%m2-%d2t12:00:00 none none none /dev/null - -# Aviation emissions during the three phases of flight -BRC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -BRC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null -BRC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null - -# SOA production -pSOA_BIOB_VOC NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -%% diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP/CA2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP/CA2G_GridComp_ExtData.yaml index 4813b4d1..3a2b9589 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP/CA2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/AMIP/CA2G_GridComp_ExtData.yaml @@ -1,24 +1,31 @@ Collections: CA2G_BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/L72/BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/L72/BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/L72/OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/L72/OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 + valid_range: "2008-01-01T12:00:00/2008-12-15T12:00:00" CA2G_qfed2.emis_bc.061.%y4%m2%d2.nc4: template: ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_bc.061.%y4%m2%d2.nc4 valid_range: "2000-02-29T12:00/2025-01-01" @@ -44,23 +51,23 @@ Samplings: update_frequency: PT24H update_offset: PT12H update_reference_time: '0' + CA2G_sample_3: + extrapolation: clim + update_frequency: PT24H + update_offset: PT12H + update_reference_time: '0' + source_time: "2019-01-15T12:00/2019-12-15T00:00:00" Exports: BC_AIRCRAFT: - collection: CA2G_BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: bc_aviation + - {starting: "1979-01-15T12:00", collection: CA2G_BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: bc_aviation} + - {starting: "2019-12-15T12:00", collection: CA2G_BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: bc_aviation} BC_ANTEBC1: - collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: bc_nonenergy + - {starting: "1979-01-15T12:00", collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: bc_nonenergy} + - {starting: "2019-12-15T12:00", collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: bc_nonenergy} BC_ANTEBC2: - collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: bc_energy + - {starting: "1979-01-15T12:00", collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: bc_energy} + - {starting: "2019-12-15T12:00", collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: bc_energy} BC_AVIATION_CDS: collection: /dev/null regrid: CONSERVE @@ -85,10 +92,8 @@ Exports: - {starting: "1960-01-16T12:00", collection: CA2G_hfed.emis_bc.x576_y361.%y4%m2.nc4, linear_transformation: [0.0, 0.778], regrid: CONSERVE, sample: CA2G_sample_1, variable: biomass} - {starting: "2000-03-01T00:00", collection: CA2G_qfed2.emis_bc.061.%y4%m2%d2.nc4, linear_transformation: [0.0, 0.778], regrid: CONSERVE, sample: CA2G_sample_1, variable: biomass} BC_SHIP: - collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: bc_shipping + - {starting: "1979-01-15T12:00", collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: bc_shipping} + - {starting: "2019-12-15T12:00", collection: CA2G_BC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: bc_shipping} BRC_AIRCRAFT: collection: /dev/null regrid: CONSERVE @@ -138,20 +143,14 @@ Exports: sample: CA2G_sample_2 variable: terpene OC_AIRCRAFT: - collection: CA2G_OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: oc_aviation + - {starting: "1979-01-15T12:00", collection: CA2G_OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: oc_aviation} + - {starting: "2019-12-15T12:00", collection: CA2G_OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: oc_aviation} OC_ANTEOC1: - collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: oc_nonenergy + - {starting: "1979-01-15T12:00", collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: oc_nonenergy} + - {starting: "2019-12-15T12:00", collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: oc_nonenergy} OC_ANTEOC2: - collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: oc_energy + - {starting: "1979-01-15T12:00", collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: oc_energy} + - {starting: "2019-12-15T12:00", collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: oc_energy} OC_AVIATION_CDS: collection: /dev/null regrid: CONSERVE @@ -181,90 +180,76 @@ Exports: sample: CA2G_sample_1 variable: biomass OC_SHIP: - collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: CA2G_sample_1 - variable: oc_shipping + - {starting: "1979-01-15T12:00", collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, sample: CA2G_sample_1, regrid: CONSERVE, variable: oc_shipping} + - {starting: "2019-12-15T12:00", collection: CA2G_OC-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: CA2G_sample_3, variable: oc_shipping} climBCDP001: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: BCDP001 + collection: /dev/null climBCDP002: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: BCDP002 + collection: /dev/null climBCSD001: collection: /dev/null - sample: CA2G_sample_0 - variable: BCSD001 climBCSD002: collection: /dev/null - sample: CA2G_sample_0 - variable: BCSD002 climBCSV001: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: BCSV001 + collection: /dev/null climBCSV002: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: BCSV002 + collection: /dev/null climBCWT001: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: BCWT001 + collection: /dev/null climBCWT002: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: BCWT002 + collection: /dev/null climBCphilic: collection: CA2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: CA2G_sample_0 - variable: BCphilic + variable: BCPHILIC climBCphobic: collection: CA2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: CA2G_sample_0 - variable: BCphobic + variable: BCPHOBIC + climBRDP001: + collection: /dev/null + climBRDP002: + collection: /dev/null + climBRSD001: + collection: /dev/null + climBRSD002: + collection: /dev/null + climBRSV001: + collection: /dev/null + climBRSV002: + collection: /dev/null + climBRWT001: + collection: /dev/null + climBRWT002: + collection: /dev/null + climBRphilic: + collection: /dev/null + climBRphobic: + collection: /dev/null climOCDP001: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: OCDP001 + collection: /dev/null climOCDP002: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: OCDP002 + collection: /dev/null climOCSD001: collection: /dev/null - sample: CA2G_sample_0 - variable: OCSD001 climOCSD002: collection: /dev/null - sample: CA2G_sample_0 - variable: OCSD002 climOCSV001: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: OCSV001 + collection: /dev/null climOCSV002: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: OCSV002 + collection: /dev/null climOCWT001: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: OCWT001 + collection: /dev/null climOCWT002: - collection: CA2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: CA2G_sample_0 - variable: OCWT002 + collection: /dev/null climOCphilic: collection: CA2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: CA2G_sample_0 - variable: OCphilic + variable: OCPHILIC climOCphobic: collection: CA2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: CA2G_sample_0 - variable: OCphobic + variable: OCPHOBIC pSOA_ANTHRO_VOC: collection: /dev/null regrid: CONSERVE diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridCompMod.F90 b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridCompMod.F90 index 61f8c689..f915da9b 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridCompMod.F90 +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridCompMod.F90 @@ -3,7 +3,7 @@ !============================================================================= !BOP -! !MODULE: CA2G_GridCompMod - GOCART Carbonaceous Aerosol gridded component +! !MODULE: CA2G_GridCompMod - GOCART Carbonaceous Aerosol gridded component ! !INTERFACE: module CA2G_GridCompMod @@ -11,7 +11,7 @@ module CA2G_GridCompMod ! !USES: use ESMF use MAPL - use GOCART2G_MieMod + use GOCART2G_MieMod use Chem_AeroGeneric use iso_c_binding, only: c_loc, c_f_pointer, c_ptr @@ -33,6 +33,7 @@ module CA2G_GridCompMod ! !DESCRIPTION: This module implements GOCART2G's Carbonaceous Aerosol (CA) Gridded Component. ! !REVISION HISTORY: +! 4January2024 Collow - Updated call for ChemSettling ! 15June2020 Sherman, da Silva, Darmenov, Clune - First attempt at refactoring. !EOP @@ -54,6 +55,8 @@ module CA2G_GridCompMod real :: fMonoterpenes = 0.0 ! Fraction of monoterpene emissions -> aerosol real :: fIsoprene = 0.0 ! Franction of isoprene emissions -> aerosol real :: fHydrophobic ! Initially hydrophobic portion + real :: tConvPhobicToPhilic ! e-folding time [days] hydrophobic to hydrophilic + real :: tChemLoss(2) ! e-folding time [days] for parameterized chemistry loss logical :: diurnal_bb ! diurnal biomass burning real :: eAircraftfuel ! Aircraft emission factor: go from kg fuel to kg C real :: aviation_layers(4) ! heights of the LTO, CDS and CRS layers @@ -61,7 +64,14 @@ module CA2G_GridCompMod logical :: doing_point_emissions = .false. character(len=255) :: point_emissions_srcfilen ! filename for pointwise emissions type(ThreadWorkspace), allocatable :: workspaces(:) - end type CA2G_GridComp + integer :: nPts = -1 + integer, allocatable, dimension(:) :: pstart, pend + real, allocatable, dimension(:) :: pLat, & + pLon, & + pBase, & + pTop, & + pEmis + end type CA2G_GridComp type wrap_ type (CA2G_GridComp), pointer :: PTR !=> null() @@ -72,7 +82,7 @@ module CA2G_GridCompMod !============================================================================ !BOP -! !IROUTINE: SetServices +! !IROUTINE: SetServices ! !INTERFACE: subroutine SetServices (GC, RC) @@ -83,11 +93,11 @@ subroutine SetServices (GC, RC) ! !DESCRIPTION: This version uses MAPL_GenericSetServices, which sets ! the Initialize and Finalize services to generic versions. It also -! allocates our instance of a generic state and puts it in the +! allocates our instance of a generic state and puts it in the ! gridded component (GC). Here we only set the two-stage run method ! and declare the data services. -! !REVISION HISTORY: +! !REVISION HISTORY: ! june2019 E.Sherman, A.Da Silva, A.Darmenov, T.Clune First attempt at refactoring !EOP @@ -105,6 +115,7 @@ subroutine SetServices (GC, RC) integer :: i, nbins real :: DEFVAL logical :: data_driven = .true. + logical :: file_exists integer :: num_threads __Iam__('SetServices') @@ -132,14 +143,16 @@ subroutine SetServices (GC, RC) num_threads = MAPL_get_num_threads() allocate(self%workspaces(0:num_threads-1), __STAT__) -! Load resource file +! Load resource file ! ------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'CA2G_instance_'//trim(comp_name)//'.rc', rc=status) - if (status /= 0) then - if (mapl_am_i_root()) print*,'CA2G_instance_'//trim(comp_name)//'.rc does not exist! & - Loading CA2G_instance_'//trim(comp_name)//'.rc instead' - call ESMF_ConfigLoadFile (cfg, 'CA2G_instance_'//trim(comp_name)//'.rc', __RC__) + inquire(file='CA2G_instance_'//trim(comp_name)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'CA2G_instance_'//trim(comp_name)//'.rc', __RC__) + else + if (mapl_am_i_root()) print*,'CA2G_instance_'//trim(comp_name)//'.rc does not exist! & + Loading CA2G_instance_'//trim(comp_name(1:5))//'.rc instead' + call ESMF_ConfigLoadFile (cfg, 'CA2G_instance_'//trim(comp_name(1:5))//'.rc', __RC__) end if ! process generic config items @@ -152,6 +165,12 @@ subroutine SetServices (GC, RC) ! ---------------------------------------------- call ESMF_ConfigGetAttribute (cfg, self%myDOW, label='my_day_of_week:', default=-1, __RC__) call ESMF_ConfigGetAttribute (cfg, self%fhydrophobic, label='hydrophobic_fraction:', __RC__) + call ESMF_ConfigGetAttribute (cfg, self%tConvPhobicToPhilic, & + label='time_days_hydrophobic_to_hydrophilic:', default=2.5, __RC__) + call ESMF_ConfigFindLabel (cfg, 'time_days_chemical_destruction:', __RC__) + do i=1,size(self%tChemLoss) + call ESMF_ConfigGetAttribute (cfg, self%tChemLoss(i), default=-1., __RC__) + end do call ESMF_ConfigGetAttribute (cfg, self%ratPOM, label='pom_ca_ratio:', default=1.0, __RC__) call ESMF_ConfigGetAttribute (cfg, self%fMonoterpenes, label='monoterpenes_emission_fraction:', default=0.0, __RC__) call ESMF_ConfigGetAttribute (cfg, self%fIsoprene, label='isoprene_emission_fraction:', default=0.0, __RC__) @@ -215,7 +234,7 @@ subroutine SetServices (GC, RC) units = 'kg kg-1', & restart = MAPL_RestartOptional, & dims = MAPL_DimsHorzVert, & - vlocation = MAPL_VLocationCenter, __RC__) + vlocation = MAPL_VLocationCenter, __RC__) call MAPL_AddInternalSpec(GC, & short_name = trim(comp_name)//'philic', & @@ -223,7 +242,7 @@ subroutine SetServices (GC, RC) units = 'kg kg-1', & restart = MAPL_RestartOptional, & dims = MAPL_DimsHorzVert, & - vlocation = MAPL_VLocationCenter, __RC__) + vlocation = MAPL_VLocationCenter, __RC__) call MAPL_AddImportSpec(GC, & short_name = 'clim'//trim(GCsuffix)//'phobic', & @@ -231,7 +250,7 @@ subroutine SetServices (GC, RC) units = 'kg kg-1', & restart = MAPL_RestartOptional, & dims = MAPL_DimsHorzVert, & - vlocation = MAPL_VLocationCenter, __RC__) + vlocation = MAPL_VLocationCenter, __RC__) call MAPL_AddImportSpec(GC, & short_name = 'clim'//trim(GCsuffix)//'philic', & @@ -252,7 +271,7 @@ subroutine SetServices (GC, RC) vlocation = MAPL_VLocationCenter, & restart = MAPL_RestartSkip, __RC__) -! !wet deposition +! !wet deposition call MAPL_AddImportSpec(GC, & short_name = 'clim'//trim(GCsuffix)//'WT'//trim(field_name), & long_name = 'Organic Carbon Mixing Ratio (bin '//trim(field_name)//')', & @@ -328,22 +347,22 @@ end subroutine SetServices !============================================================================ !BOP -! !IROUTINE: Initialize +! !IROUTINE: Initialize ! !INTERFACE: subroutine Initialize (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock integer, optional, intent( out) :: RC ! Error code -! !DESCRIPTION: This initializes CA's Grid Component. It primaryily fills -! GOCART's AERO states with its carbonaceous aerosol fields. +! !DESCRIPTION: This initializes CA's Grid Component. It primaryily fills +! GOCART's AERO states with its carbonaceous aerosol fields. -! !REVISION HISTORY: +! !REVISION HISTORY: ! june2019 E.Sherman First attempt at refactoring !EOP @@ -375,11 +394,12 @@ subroutine Initialize (GC, import, export, clock, RC) integer, allocatable, dimension(:) :: channels_ integer :: nmom_ character(len=ESMF_MAXSTR) :: file_ + logical :: file_exists __Iam__('Initialize') !**************************************************************************** -! Begin... +! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- @@ -406,7 +426,7 @@ subroutine Initialize (GC, import, export, clock, RC) ! Get dimensions ! --------------- - call MAPL_GridGet (grid, globalCellCountPerDim=dims, __RC__ ) + call MAPL_GridGet (grid, localCellCountPerDim=dims, __RC__ ) km = dims(3) self%km = km @@ -427,16 +447,19 @@ subroutine Initialize (GC, import, export, clock, RC) self%diurnal_bb = .false. end if -! Load resource file +! Load resource file ! ------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'CA2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - if (status /= 0) then - if (mapl_am_i_root()) print*,'ERROR: CA2G_instance_'//trim(COMP_NAME)//'.rc does not exist!' - return + inquire(file='CA2G_instance_'//trim(comp_name)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'CA2G_instance_'//trim(comp_name)//'.rc', __RC__) + else + if (mapl_am_i_root()) print*,'CA2G_instance_'//trim(comp_name)//'.rc does not exist! & + Loading CA2G_instance_'//trim(comp_name(1:5))//'.rc instead' + call ESMF_ConfigLoadFile (cfg, 'CA2G_instance_'//trim(comp_name(1:5))//'.rc', __RC__) end if -! Call Generic Initialize +! Call Generic Initialize ! ------------------------ call MAPL_GenericInitialize (GC, import, export, clock, __RC__) @@ -450,7 +473,7 @@ subroutine Initialize (GC, import, export, clock, RC) ! If this is a data component, the data is provided in the import ! state via ExtData instead of the actual GOCART children -! ---------------------------------------------------------------- +! ---------------------------------------------------------------- if ( data_driven ) then providerState = import prefix = 'clim' @@ -583,13 +606,13 @@ end subroutine Initialize !============================================================================ !BOP -! !IROUTINE: Run +! !IROUTINE: Run ! !INTERFACE: subroutine Run (GC, import, export, clock, rc) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -610,7 +633,7 @@ subroutine Run (GC, import, export, clock, rc) __Iam__('Run') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -624,7 +647,7 @@ subroutine Run (GC, import, export, clock, rc) ! ----------------------------------- call MAPL_Get (MAPL, INTERNAL_ESMF_STATE=internal, __RC__) -! Is SS data driven? +! Is CA data driven? ! ------------------ call determine_data_driven (COMP_NAME, data_driven, __RC__) @@ -643,19 +666,19 @@ end subroutine Run !============================================================================ !BOP -! !IROUTINE: Run1 +! !IROUTINE: Run1 ! !INTERFACE: subroutine Run1 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Computes emissions/sources for Sea Salt +! !DESCRIPTION: Computes emissions/sources for Carbon !EOP !============================================================================ @@ -692,7 +715,7 @@ subroutine Run1 (GC, import, export, clock, RC) __Iam__('Run1') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -707,7 +730,7 @@ subroutine Run1 (GC, import, export, clock, RC) ! Get parameters from generic state. ! ----------------------------------- - call MAPL_Get (mapl, INTERNAL_ESMF_STATE=internal, & + call MAPL_Get (mapl, INTERNAL_ESMF_STATE=internal, & LONS = LONS, & LATS = LATS, __RC__ ) @@ -718,7 +741,7 @@ subroutine Run1 (GC, import, export, clock, RC) else if (comp_name(1:5) == 'CA.bc') then GCsuffix = 'BC' else if (comp_name(1:5) == 'CA.br') then - GCsuffix = 'BR' + GCsuffix = 'BR' end if call MAPL_GetPointer (internal, intPtr_phobic, trim(comp_name)//'phobic', __RC__) @@ -779,7 +802,7 @@ subroutine Run1 (GC, import, export, clock, RC) aviation_cds_src = BC_AVIATION_CDS aviation_crs_src = BC_AVIATION_CRS allocate(biogvoc_src, mold=BC_BIOMASS, __STAT__) -! Black carbon has no biogvoc_src, so we set it to zero. +! Black carbon has no biogvoc_src, so we set it to zero. ! biogvoc_src is still needed for the call to CAEmissions, however it ! effectivly does nothing since we set all its values to zero. biogvoc_src = 0.0 @@ -882,14 +905,14 @@ end subroutine Run1 !============================================================================ !BOP -! !IROUTINE: Run2 +! !IROUTINE: Run2 ! !INTERFACE: subroutine Run2 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -917,6 +940,7 @@ subroutine Run2 (GC, import, export, clock, RC) character(len=2) :: GCsuffix character(len=ESMF_MAXSTR) :: short_name real, pointer, dimension(:,:,:) :: intPtr_phobic, intPtr_philic + real, pointer, dimension(:,:) :: flux_ptr real, parameter :: cpd = 1004.16 integer :: i1, j1, i2, j2, km @@ -926,7 +950,7 @@ subroutine Run2 (GC, import, export, clock, RC) __Iam__('Run2') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -973,7 +997,7 @@ subroutine Run2 (GC, import, export, clock, RC) end if if (trim(comp_name) == 'CA.br') then - pSOA_VOC = pSOA_BIOB_VOC + pSOA_VOC = pSOA_BIOB_VOC where (1.01 * pSOA_VOC > MAPL_UNDEF) pSOA_VOC = 0.0 intPtr_philic = intPtr_philic + self%cdt * pSOA_VOC/airdens @@ -982,19 +1006,31 @@ subroutine Run2 (GC, import, export, clock, RC) end if ! Ad Hoc transfer of hydrophobic to hydrophilic aerosols -! Following Chin's parameterization, the rate constant is -! k = 4.63e-6 s-1 (.4 day-1; e-folding time = 2.5 days) - call phobicTophilic (intPtr_phobic, intPtr_philic, HYPHIL, self%km, self%cdt, MAPL_GRAV, delp, __RC__) +! Rate controlled in RC file; tConvPhobicToPhilic < 0 means no transfer + call phobicToPhilic (intPtr_phobic, intPtr_philic, HYPHIL, & + self%tConvPhobicToPhilic, self%km, self%cdt, MAPL_GRAV, delp, __RC__) + +! Ad Hoc chemical destruction of carbon +! This applies a simple exponential decay to both hydrophobic and +! hydrophilic modes with the time constant tChemLoss (e-folding +! time in days) + do n = 1, self%nbins + call MAPL_VarSpecGet(InternalSpec(n), SHORT_NAME=short_name, __RC__) + call MAPL_GetPointer(internal, NAME=short_name, ptr=int_ptr, __RC__) + call carbonChemLoss (self%km, self%klid, n, self%cdt, MAPL_GRAV, delp, & + self%tChemLoss(n), int_ptr, CH, __RC__) + end do ! CA Settling ! ----------- do n = 1, self%nbins call MAPL_VarSpecGet(InternalSpec(n), SHORT_NAME=short_name, __RC__) call MAPL_GetPointer(internal, NAME=short_name, ptr=int_ptr, __RC__) - - call Chem_Settling (self%km, self%klid, n, self%rhFlag, self%cdt, MAPL_GRAV, & - self%radius(n)*1.e-6, self%rhop(n), int_ptr, t, airdens, & - rh2, zle, delp, SD, __RC__) + nullify(flux_ptr) + flux_ptr => SD(:,:,n) + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, n, self%cdt, MAPL_GRAV, & + int_ptr, t, airdens, & + rh2, zle, delp, flux_ptr, __RC__) end do ! CA Deposition @@ -1074,7 +1110,7 @@ end subroutine Run2 !============================================================================ !BOP -! !IROUTINE: Run_data -- ExtData Sea Salt Grid Component +! !IROUTINE: Run_data -- ExtData Carbon Grid Component ! !INTERFACE: @@ -1082,13 +1118,13 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: IMPORT ! Import state type (ESMF_State), intent(inout) :: EXPORT ! Export state type (ESMF_State), intent(inout) :: INTERNAL ! Interal state integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. +! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. !EOP !============================================================================ @@ -1105,7 +1141,7 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) __Iam__('Run_data') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -1175,7 +1211,7 @@ subroutine aerosol_optics(state, rc) __Iam__('CA2G::aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1192,7 +1228,7 @@ subroutine aerosol_optics(state, rc) band = 0 call ESMF_AttributeGet(state, name='band_for_aerosol_optics', value=band, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, ple, trim(fld_name), __RC__) @@ -1295,7 +1331,7 @@ subroutine mie_(mie, nbins, band, q, rh, bext_s, bssa_s, basym_s, rc) bext_s = bext_s + bext ! extinction bssa_s = bssa_s + (bssa*bext) ! scattering extinction - basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction + basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction end do @@ -1337,7 +1373,7 @@ subroutine monochromatic_aerosol_optics(state, rc) __Iam__('CA2G::monochromatic_aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridComp_ExtData.yaml index e434cb4f..38b921db 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_GridComp_ExtData.yaml @@ -1,9 +1,9 @@ Collections: CA2G_BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/L72/BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/L72/BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/L72/OC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/L72/BC-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 valid_range: "1979-01-15T12:00/2019-12-15T12:00" CA2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 @@ -39,7 +39,8 @@ Samplings: update_frequency: PT24H update_offset: PT12H update_reference_time: '0' - source_time: "2019-01-15T12:00/2019-12-15T12:00" + source_time: "2019-01-15T12:00/2019-12-15T00:00:00" + Exports: BC_AIRCRAFT: diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_StateSpecs.rc b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_StateSpecs.rc index de20e655..4942206f 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_StateSpecs.rc +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_StateSpecs.rc @@ -89,6 +89,7 @@ category: EXPORT *DP | kg m-2 s-1 | xy | N | nbins | * Aerosol Dry Deposition (Bin %d) *WT | kg m-2 s-1 | xy | N | nbins | * Aerosol Wet Deposition (Bin %d) *SV | kg m-2 s-1 | xy | N | nbins | * Aerosol Convective Scavenging (Bin %d) + *CH | kg m-2 s-1 | xy | N | nbins | * Aerosol Parameterized Chemical Loss (Bin %d) *EMAN | kg m-2 s-1 | xy | N | | * Aerosol Anthropogenic Emissions *EMBB | kg m-2 s-1 | xy | N | | * Aerosol Biomass Burning Emissions *EMBF | kg m-2 s-1 | xy | N | | * Aerosol Biofuel Emissions @@ -97,10 +98,10 @@ category: EXPORT *PSOA | kg m-2 s-1 | xy | N | | * Aerosol SOA Production *SMASS | kg m-3 | xy | N | | * Aerosol Surface Mass Concentration *CMASS | kg m-2 | xy | N | | * Aerosol Column Mass Density - *EXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | * Aerosol Extinction AOT - *STEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | * Aerosol Extinction AOT Stratosphere - *SCATAU | 1 | xy | N | size(self%wavelengths_vertint) | * Aerosol Scattering AOT - *STSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | * Aerosol Scattering AOT Stratosphere + *EXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | * Aerosol Optical Depth + *STEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | * Stratospheric Aerosol Optical Thickness + *SCATAU | 1 | xy | N | size(self%wavelengths_vertint) | * Aerosol Optical Depth Due to Scattering + *STSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | * Stratospheric Aerosol Optical Thickness Due to Scattering *ANGSTR | 1 | xy | N | | * Aerosol Angstrom parameter [470-870 nm] *FLUXU | kg m-1 s-1 | xy | N | | * Aerosol column u-wind mass flux *FLUXV | kg m-1 s-1 | xy | N | | * Aerosol column v-wind mass flux diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.bc.rc b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.bc.rc index e39a970e..035d68a4 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.bc.rc +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.bc.rc @@ -3,7 +3,7 @@ # aerosol_radBands_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opticsBands_BC.v1_3.RRTMG.nc -aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/optics_BC.v1_3.nc +aerosol_monochromatic_optics_file: /discover/nobackup/pcolarco/fvInput/AeroCom/x/optics_BC.v1_6.nc # Aircraft emission factor: convert input unit to kg C aircraft_fuel_emission_factor: 1.0000 @@ -14,6 +14,12 @@ aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 # Initially hydrophobic portion hydrophobic_fraction: 0.8 +# Rate of conversion of hydrophobic to hydrophilic [days] +time_days_hydrophobic_to_hydrophilic: 2.5 + +# Rate of chemical destruction of carbon species [days] +time_days_chemical_destruction: -1. -1. + # Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED) fscav: 0.0 0.4 @@ -29,8 +35,6 @@ fnum: 1.50e19 1.50e19 # Number median radius [um] particle_radius_microns: 0.35 0.35 -rhFlag: 0 - # Sigma of lognormal number distribution sigma: 2.0 2.0 diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.br.rc b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.br.rc index 7f333ffa..38fe4d3b 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.br.rc +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.br.rc @@ -3,7 +3,7 @@ # aerosol_radBands_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opticsBands_BRC.v1_5.RRTMG.nc -aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/optics_BRC.v1_5.nc +aerosol_monochromatic_optics_file: /discover/nobackup/pcolarco/fvInput/AeroCom/x/optics_BRC.v1_6.nc # Aircraft emission factor: convert input unit to kg C aircraft_fuel_emission_factor: 1.0000 @@ -17,11 +17,15 @@ pom_ca_ratio: 1.8 # particle radius particle_radius_microns: 0.35 0.35 -rhFlag: 0 - # Initially hydrophobic portion hydrophobic_fraction: 0.5 +# Rate of conversion of hydrophobic to hydrophilic [days] +time_days_hydrophobic_to_hydrophilic: 2.5 + +# Rate of chemical destruction of carbon species [days] +time_days_chemical_destruction: -1. -1. + # Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED) fscav: 0.0 0.4 diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.oc.rc b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.oc.rc index 741d6bfd..5b01c262 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.oc.rc +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CA2G_instance_CA.oc.rc @@ -3,7 +3,7 @@ # aerosol_radBands_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opticsBands_OC.v1_3.RRTMG.nc -aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/optics_OC.v1_3.nc +aerosol_monochromatic_optics_file: /discover/nobackup/pcolarco/fvInput/AeroCom/x/optics_OC.v1_6.nc # Aircraft emission factor: convert input unit to kg C aircraft_fuel_emission_factor: 1.0000 @@ -21,11 +21,15 @@ pom_ca_ratio: 1.8 # particle radius particle_radius_microns: 0.35 0.35 -rhFlag: 0 - # Initially hydrophobic portion hydrophobic_fraction: 0.5 +# Rate of conversion of hydrophobic to hydrophilic [days] +time_days_hydrophobic_to_hydrophilic: 2.5 + +# Rate of chemical destruction of carbon species [days] +time_days_chemical_destruction: -1. -1. + # Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED) fscav: 0.0 0.4 diff --git a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CMakeLists.txt b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CMakeLists.txt index 5cee19b7..7b97c2dc 100644 --- a/ESMF/GOCART2G_GridComp/CA2G_GridComp/CMakeLists.txt +++ b/ESMF/GOCART2G_GridComp/CA2G_GridComp/CMakeLists.txt @@ -2,10 +2,10 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES MAPL GA_Environment Chem_Shared2G Process_Library esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES MAPL GA_Environment Chem_Shared2G Process_Library ESMF::ESMF NetCDF::NetCDF_Fortran) -mapl_acg (${this} CA2G_StateSpecs.rc - IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS +mapl_acg (${this} CA2G_StateSpecs.rc + IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS GET_POINTERS DECLARE_POINTERS) file (GLOB_RECURSE rc_files CONFIGURE_DEPENDS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.rc *.yaml) diff --git a/ESMF/GOCART2G_GridComp/CMakeLists.txt b/ESMF/GOCART2G_GridComp/CMakeLists.txt index 0df44f66..c6a06179 100644 --- a/ESMF/GOCART2G_GridComp/CMakeLists.txt +++ b/ESMF/GOCART2G_GridComp/CMakeLists.txt @@ -15,13 +15,13 @@ set (srcs set (resource_files GOCART2G_GridComp.rc - ) + ) -install( FILES ${resource_files} +install( FILES ${resource_files} DESTINATION etc ) -set (dependencies MAPL Chem_Shared2G Process_Library esmf) +set (dependencies MAPL Chem_Shared2G Process_Library ESMF::ESMF) esma_add_library (${this} SRCS ${srcs} SUBCOMPONENTS ${alldirs} diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP.20C/DU2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP.20C/DU2G_GridComp_ExtData.rc deleted file mode 120000 index 7d86d9a2..00000000 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP.20C/DU2G_GridComp_ExtData.rc +++ /dev/null @@ -1 +0,0 @@ -../DU2G_GridComp_ExtData.rc \ No newline at end of file diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP/DU2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP/DU2G_GridComp_ExtData.rc deleted file mode 120000 index 7d86d9a2..00000000 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP/DU2G_GridComp_ExtData.rc +++ /dev/null @@ -1 +0,0 @@ -../DU2G_GridComp_ExtData.rc \ No newline at end of file diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP/DU2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP/DU2G_GridComp_ExtData.yaml index a851a547..69df0e8f 100644 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP/DU2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/DU2G_GridComp/AMIP/DU2G_GridComp_ExtData.yaml @@ -5,12 +5,11 @@ Collections: template: ExtData/chemistry/DUST/v0.0.0/sfc/_gldas-fao.soil_texture.x1152_y721_t1.nc4 DU2G_arlems-roughness.x1151_y720_t1.nc4: template: ExtData/chemistry/DUST/v0.0.0/sfc/arlems-roughness.x1151_y720_t1.nc4 - DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 DU2G_gocart.dust_source.v5a.x1152_y721.nc: template: ExtData/chemistry/DUST/v0.0.0/sfc/gocart.dust_source.v5a.x1152_y721.nc + DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: + template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 + valid_range: "2008-01-01T12:00:00/2008-12-15T12:00:00" DU2G_qvi.006.%y4.nc4: template: ExtData/chemistry/NDVI/v1.0.r3/sfc/qvi.006.%y4.nc4 DU2G_veg20.x1152_y721_t1.nc4: @@ -68,103 +67,64 @@ Exports: sample: DU2G_sample_0 variable: roughness climDUDP001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP001 + collection: /dev/null climDUDP002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP002 + collection: /dev/null climDUDP003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP003 + collection: /dev/null climDUDP004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP004 + collection: /dev/null climDUDP005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP005 + collection: /dev/null climDUSD001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD001 + collection: /dev/null climDUSD002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD002 + collection: /dev/null climDUSD003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD003 + collection: /dev/null climDUSD004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD004 + collection: /dev/null climDUSD005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD005 + collection: /dev/null climDUSV001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV001 + collection: /dev/null climDUSV002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV002 + collection: /dev/null climDUSV003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV003 + collection: /dev/null climDUSV004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV004 + collection: /dev/null climDUSV005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV005 + collection: /dev/null climDUWT001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT001 + collection: /dev/null climDUWT002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT002 + collection: /dev/null climDUWT003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT003 + collection: /dev/null climDUWT004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT004 + collection: /dev/null climDUWT005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT005 + collection: /dev/null climdu001: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du001 + variable: DU001 climdu002: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du002 + variable: DU002 climdu003: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du003 + variable: DU003 climdu004: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du004 + variable: DU004 climdu005: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du005 + variable: DU005 + diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/CMakeLists.txt b/ESMF/GOCART2G_GridComp/DU2G_GridComp/CMakeLists.txt index f3662b33..ac8e86f5 100644 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/CMakeLists.txt +++ b/ESMF/GOCART2G_GridComp/DU2G_GridComp/CMakeLists.txt @@ -2,10 +2,10 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES GA_Environment MAPL Chem_Shared2G Process_Library esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES GA_Environment MAPL Chem_Shared2G Process_Library ESMF::ESMF NetCDF::NetCDF_Fortran) -mapl_acg (${this} DU2G_StateSpecs.rc - IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS +mapl_acg (${this} DU2G_StateSpecs.rc + IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS GET_POINTERS DECLARE_POINTERS) file (GLOB_RECURSE rc_files CONFIGURE_DEPENDS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.rc *.yaml) diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridCompMod.F90 b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridCompMod.F90 index b442198b..4e0788fd 100644 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridCompMod.F90 +++ b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridCompMod.F90 @@ -3,7 +3,7 @@ !============================================================================= !BOP -! !MODULE: DU2G_GridCompMod - GOCART refactoring of the DU gridded component +! !MODULE: DU2G_GridCompMod - GOCART refactoring of the DU gridded component ! !INTERFACE: module DU2G_GridCompMod @@ -11,7 +11,7 @@ module DU2G_GridCompMod ! !USES: use ESMF use MAPL - use GOCART2G_MieMod + use GOCART2G_MieMod use Chem_AeroGeneric use iso_c_binding, only: c_loc, c_f_pointer, c_ptr @@ -19,7 +19,7 @@ module DU2G_GridCompMod use GA_EnvironmentMod use MAPL_StringTemplate, only: StrTemplate !$ use omp_lib - + implicit none private @@ -32,6 +32,7 @@ module DU2G_GridCompMod ! !DESCRIPTION: This module implements GOCART's Dust (DU) Gridded Component. ! !REVISION HISTORY: +! 4January2024 Collow - Updated call for ChemSettling ! 16Oct2019 Sherman, da Silva, Darmenov, Clune - First attempt at refactoring !EOP @@ -59,10 +60,11 @@ module DU2G_GridCompMod real :: alpha ! FENGSHA scaling factor real :: gamma ! FENGSHA tuning exponent real :: kvhmax ! FENGSHA max. vertical/horizontal mass flux ratio [1] + real :: f_sdl ! FENGSHA drylimit tuning factor real :: Ch_DU_res(NHRES) ! resolutions used for Ch_DU real :: Ch_DU ! dust emission tuning coefficient [kg s2 m-5]. logical :: maringFlag=.false. ! maring settling velocity correction - integer :: day_save = -1 + integer :: day_save = -1 character(len=:), allocatable :: emission_scheme ! emission scheme selector integer :: clayFlag ! clay and silt term in K14 real :: f_swc ! soil mosture scaling factor @@ -83,7 +85,7 @@ module DU2G_GridCompMod !============================================================================ !BOP -! !IROUTINE: SetServices +! !IROUTINE: SetServices ! !INTERFACE: subroutine SetServices (GC, RC) @@ -94,11 +96,11 @@ subroutine SetServices (GC, RC) ! !DESCRIPTION: This version uses MAPL_GenericSetServices, which sets ! the Initialize and Finalize services to generic versions. It also -! allocates our instance of a generic state and puts it in the +! allocates our instance of a generic state and puts it in the ! gridded component (GC). Here we only set the two-stage run method ! and declare the data services. -! !REVISION HISTORY: +! !REVISION HISTORY: ! 16oct2019 E.Sherman, A.Da Silva, A.Darmenov, T.Clune First attempt at refactoring !EOP @@ -117,6 +119,7 @@ subroutine SetServices (GC, RC) integer :: i real :: DEFVAL logical :: data_driven = .true. + logical :: file_exists integer :: num_threads __Iam__('SetServices') @@ -137,14 +140,15 @@ subroutine SetServices (GC, RC) num_threads = MAPL_get_num_threads() allocate(self%workspaces(0:num_threads-1), __STAT__) -! Load resource file +! Load resource file ! ------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - - if (status /= 0) then - if (mapl_am_i_root()) print*,'DU2G_instance_'//trim(COMP_NAME)//'.rc does not exist! Loading DU2G_GridComp_DU.rc instead' - call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_DU.rc', __RC__) + inquire(file='DU2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else + if (mapl_am_i_root()) print*,'DU2G_instance_'//trim(COMP_NAME)//'.rc does not exist! Loading DU2G_GridComp_DU.rc instead' + call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_DU.rc', __RC__) end if ! process generic config items @@ -181,6 +185,8 @@ subroutine SetServices (GC, RC) case ('fengsha') call ESMF_ConfigGetAttribute (cfg, self%alpha, label='alpha:', __RC__) call ESMF_ConfigGetAttribute (cfg, self%gamma, label='gamma:', __RC__) + call ESMF_ConfigGetAttribute (cfg, self%f_swc, label='soil_moisture_factor:', __RC__) + call ESMF_ConfigGetAttribute (cfg, self%f_sdl, label='soil_drylimit_factor:', __RC__) call ESMF_ConfigGetAttribute (cfg, self%kvhmax, label='vertical_to_horizontal_flux_ratio_limit:', __RC__) case ('k14') call ESMF_ConfigGetAttribute (cfg, self%clayFlag, label='clayFlag:', __RC__) @@ -243,7 +249,7 @@ subroutine SetServices (GC, RC) VLOCATION = MAPL_VLocationCenter, & RESTART = MAPL_RestartSkip, __RC__) - do i = 1, self%nbins + do i = 1, self%nbins write (field_name, '(A, I0.3)') '', i call MAPL_AddImportSpec(GC, & short_name = 'climdu'//trim(field_name), & @@ -262,7 +268,7 @@ subroutine SetServices (GC, RC) vlocation = MAPL_VLocationCenter, & restart = MAPL_RestartSkip, __RC__) -! !wet deposition +! !wet deposition call MAPL_AddImportSpec(GC, & short_name = 'climDUWT'//trim(field_name), & long_name = 'Dust Mixing Ratio (bin '//trim(field_name)//')', & @@ -338,22 +344,22 @@ end subroutine SetServices !============================================================================ !BOP -! !IROUTINE: Initialize +! !IROUTINE: Initialize ! !INTERFACE: subroutine Initialize (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock integer, optional, intent( out) :: RC ! Error code -! !DESCRIPTION: This initializes DU's Grid Component. It primaryily fills -! GOCART's AERO states with its dust fields. +! !DESCRIPTION: This initializes DU's Grid Component. It primaryily fills +! GOCART's AERO states with its dust fields. -! !REVISION HISTORY: +! !REVISION HISTORY: ! 16oct2019 E.Sherman, A.da Silva, T.Clune, A.Darmenov - First attempt at refactoring !EOP @@ -386,10 +392,11 @@ subroutine Initialize (GC, import, export, clock, RC) integer, allocatable, dimension(:) :: channels_ integer :: nmom_ character(len=ESMF_MAXSTR) :: file_ + logical :: file_exists __Iam__('Initialize') !**************************************************************************** -! Begin... +! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- @@ -406,10 +413,13 @@ subroutine Initialize (GC, import, export, clock, RC) VERIFY_(STATUS) self => wrap%ptr - call MAPL_GridGet ( grid, globalCellCountPerDim=dims, __RC__ ) +! Global dimensions are needed here for choosing tuning parameters +! ---------------------------------------------------------------- + call MAPL_GridGet (grid, globalCellCountPerDim=dims, __RC__ ) ! Dust emission tuning coefficient [kg s2 m-5]. NOT bin specific. -! --------------------------------------------------------------- +! TO DO: find a more robust way to implement resolution dependent tuning +! ---------------------------------------------------------------------- self%Ch_DU = Chem_UtilResVal(dims(1), dims(2), self%Ch_DU_res(:), __RC__) self%Ch_DU = self%Ch_DU * 1.0e-9 @@ -427,21 +437,22 @@ subroutine Initialize (GC, import, export, clock, RC) ! Get DTs ! ------- - call MAPL_GetResource(mapl, HDT, Label='RUN_DT:', __RC__) + call MAPL_GetResource(mapl, HDT, Label='RUN_DT:', __RC__) call MAPL_GetResource(mapl, CDT, Label='GOCART_DT:', default=real(HDT), __RC__) self%CDT = CDT -! Load resource file +! Load resource file ! ------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_'//trim(COMP_NAME)//'.rc', RC=STATUS) - if (status /= 0) then - if (mapl_am_i_root()) print*,'DU2G_instance_'//trim(COMP_NAME)//'.rc does not exist! & - loading DU2G_instance_DU.rc instead' - call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_DU.rc', __RC__) + inquire(file='DU2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else + if (mapl_am_i_root()) print*,'DU2G_instance_'//trim(COMP_NAME)//'.rc does not exist! Loading DU2G_GridComp_DU.rc instead' + call ESMF_ConfigLoadFile (cfg, 'DU2G_instance_DU.rc', __RC__) end if -! Call Generic Initialize +! Call Generic Initialize ! ------------------------ call MAPL_GenericInitialize (GC, import, export, clock, __RC__) @@ -455,7 +466,7 @@ subroutine Initialize (GC, import, export, clock, RC) ! If this is a data component, the data is provided in the import ! state via ExtData instead of the actual GOCART children -! ---------------------------------------------------------------- +! ---------------------------------------------------------------- if ( data_driven ) then providerState = import prefix = 'clim' @@ -583,13 +594,13 @@ end subroutine Initialize !============================================================================ !BOP -! !IROUTINE: Run +! !IROUTINE: Run ! !INTERFACE: subroutine Run (GC, import, export, clock, rc) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -610,7 +621,7 @@ subroutine Run (GC, import, export, clock, rc) __Iam__('Run') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -643,13 +654,13 @@ end subroutine Run !============================================================================ !BOP -! !IROUTINE: Run1 +! !IROUTINE: Run1 ! !INTERFACE: subroutine Run1 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -694,7 +705,7 @@ subroutine Run1 (GC, import, export, clock, RC) __Iam__('Run1') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -787,10 +798,12 @@ subroutine Run1 (GC, import, export, clock, RC) if (associated(DU_EROD)) DU_EROD = f_erod_ case ('fengsha') + call DustEmissionFENGSHA (frlake, frsnow, lwi, slc, du_clay, du_sand, du_silt, & du_ssm, du_rdrag, airdens(:,:,self%km), ustar, du_uthres, & self%alpha, self%gamma, self%kvhmax, MAPL_GRAV, & - self%rhop, self%sdist, emissions_surface, __RC__) + self%rhop, self%sdist, self%f_sdl, self%f_swc, emissions_surface, __RC__) + case ('ginoux') call DustEmissionGOCART2G(self%radius*1.e-6, frlake, wet1, lwi, u10m, v10m, & @@ -867,14 +880,14 @@ end subroutine Run1 !============================================================================ !BOP -! !IROUTINE: Run2 +! !IROUTINE: Run2 ! !INTERFACE: subroutine Run2 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -899,12 +912,13 @@ subroutine Run2 (GC, import, export, clock, RC) integer :: i1, j1, i2, j2, km real, parameter :: cpd = 1004.16 real, target, allocatable, dimension(:,:,:) :: RH20,RH80 + real, pointer, dimension(:,:) :: flux_ptr #include "DU2G_DeclarePointer___.h" __Iam__('Run2') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -935,11 +949,11 @@ subroutine Run2 (GC, import, export, clock, RC) ! Dust Settling ! ------------- do n = 1, self%nbins - call Chem_Settling (self%km, self%klid, n, self%rhFlag, self%cdt, MAPL_GRAV, & - self%radius(n)*1.e-6, self%rhop(n), DU(:,:,:,n), t, airdens, & - rh2, zle, delp, DUSD, correctionMaring=self%maringFlag, __RC__) - - + nullify(flux_ptr) + if (associated(DUSD)) flux_ptr => DUSD(:,:,n) + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, n, self%cdt, MAPL_GRAV, & + DU(:,:,:,n), t, airdens, & + rh2, zle, delp, flux_ptr, correctionMaring=self%maringFlag, __RC__) end do ! Dust Deposition @@ -998,8 +1012,8 @@ subroutine Run2 (GC, import, export, clock, RC) wavelengths_vertint=self%wavelengths_vertint*1.0e-9, aerosol=DU, & grav=MAPL_GRAV, tmpu=t, rhoa=airdens, & rh=rh20, u=u, v=v, delp=delp, ple=ple,tropp=tropp, & - extcoef = DUEXTCOEFRH20, scacoef = DUSCACOEFRH20, NO3nFlag=.False., __RC__) - + extcoef = DUEXTCOEFRH20, scacoef = DUSCACOEFRH20, NO3nFlag=.False., __RC__) + RH80(:,:,:) = 0.80 call Aero_Compute_Diags (mie=self%diag_Mie, km=self%km, klid=self%klid, nbegin=1, & @@ -1008,8 +1022,8 @@ subroutine Run2 (GC, import, export, clock, RC) wavelengths_vertint=self%wavelengths_vertint*1.0e-9, aerosol=DU, & grav=MAPL_GRAV, tmpu=t, rhoa=airdens, & rh=rh80, u=u, v=v, delp=delp, ple=ple,tropp=tropp, & - extcoef = DUEXTCOEFRH80, scacoef = DUSCACOEFRH80, NO3nFlag=.False., __RC__) - + extcoef = DUEXTCOEFRH80, scacoef = DUSCACOEFRH80, NO3nFlag=.False., __RC__) + deallocate(RH20,RH80) RETURN_(ESMF_SUCCESS) @@ -1023,13 +1037,13 @@ end subroutine Run2 subroutine Run_data (GC, import, export, internal, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_State), intent(inout) :: internal ! Interal state integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. +! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. ! Locals character (len=ESMF_MAXSTR) :: COMP_NAME @@ -1046,7 +1060,7 @@ subroutine Run_data (GC, import, export, internal, RC) !EOP !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -1106,7 +1120,7 @@ subroutine aerosol_optics(state, rc) __Iam__('DU2G::aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1117,7 +1131,7 @@ subroutine aerosol_optics(state, rc) band = 0 call ESMF_AttributeGet (state, name='band_for_aerosol_optics', value=band, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet (state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer (state, ple, trim(fld_name), __RC__) @@ -1191,7 +1205,7 @@ subroutine aerosol_optics(state, rc) subroutine mie_(mie, nbins, band, q, rh, bext_s, bssa_s, basym_s, rc) implicit none - + type(GOCART2G_Mie), intent(inout) :: mie ! mie table integer, intent(in ) :: nbins ! number of bins integer, intent(in ) :: band ! channel @@ -1256,7 +1270,7 @@ subroutine monochromatic_aerosol_optics(state, rc) __Iam__('DU2G::monochromatic_aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1267,7 +1281,7 @@ subroutine monochromatic_aerosol_optics(state, rc) wavelength = 0. call ESMF_AttributeGet (state, name='wavelength_for_aerosol_optics', value=wavelength, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet (state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer (state, ple, trim(fld_name), __RC__) diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridComp_ExtData.yaml index a851a547..69df0e8f 100644 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_GridComp_ExtData.yaml @@ -5,12 +5,11 @@ Collections: template: ExtData/chemistry/DUST/v0.0.0/sfc/_gldas-fao.soil_texture.x1152_y721_t1.nc4 DU2G_arlems-roughness.x1151_y720_t1.nc4: template: ExtData/chemistry/DUST/v0.0.0/sfc/arlems-roughness.x1151_y720_t1.nc4 - DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 DU2G_gocart.dust_source.v5a.x1152_y721.nc: template: ExtData/chemistry/DUST/v0.0.0/sfc/gocart.dust_source.v5a.x1152_y721.nc + DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: + template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 + valid_range: "2008-01-01T12:00:00/2008-12-15T12:00:00" DU2G_qvi.006.%y4.nc4: template: ExtData/chemistry/NDVI/v1.0.r3/sfc/qvi.006.%y4.nc4 DU2G_veg20.x1152_y721_t1.nc4: @@ -68,103 +67,64 @@ Exports: sample: DU2G_sample_0 variable: roughness climDUDP001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP001 + collection: /dev/null climDUDP002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP002 + collection: /dev/null climDUDP003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP003 + collection: /dev/null climDUDP004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP004 + collection: /dev/null climDUDP005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUDP005 + collection: /dev/null climDUSD001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD001 + collection: /dev/null climDUSD002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD002 + collection: /dev/null climDUSD003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD003 + collection: /dev/null climDUSD004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD004 + collection: /dev/null climDUSD005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSD005 + collection: /dev/null climDUSV001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV001 + collection: /dev/null climDUSV002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV002 + collection: /dev/null climDUSV003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV003 + collection: /dev/null climDUSV004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV004 + collection: /dev/null climDUSV005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUSV005 + collection: /dev/null climDUWT001: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT001 + collection: /dev/null climDUWT002: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT002 + collection: /dev/null climDUWT003: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT003 + collection: /dev/null climDUWT004: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT004 + collection: /dev/null climDUWT005: - collection: DU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: DU2G_sample_2 - variable: DUWT005 + collection: /dev/null climdu001: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du001 + variable: DU001 climdu002: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du002 + variable: DU002 climdu003: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du003 + variable: DU003 climdu004: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du004 + variable: DU004 climdu005: collection: DU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: DU2G_sample_2 - variable: du005 + variable: DU005 + diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_StateSpecs.rc b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_StateSpecs.rc index a53bdd55..d5fc35fc 100644 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_StateSpecs.rc +++ b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_StateSpecs.rc @@ -71,19 +71,19 @@ category: EXPORT #........................................................................................ DUSMASS | kg m-3 | xy | N | | Dust Surface Mass Concentration DUCMASS | kg m-2 | xy | N | | Dust Column Mass Density - DUEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Extinction AOT - DUSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Extinction AOT Stratosphere - DUSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Scattering AOT - DUSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Scattering AOT Stratosphere - DUSMASS25 | kg m-3 | xy | N | | Dust Surface Mass Concentration - PM 2.5 - DUCMASS25 | kg m-2 | xy | N | | Dust Column Mass Density - PM 2.5 - DUEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Dust Extinction AOT - PM 2.5 - DUSCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Dust Scattering AOT - PM 2.5 + DUEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Aerosol Optical Depth + DUSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Stratospheric Aerosol Optical Thickness + DUSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Aerosol Optical Depth Due to Scattering + DUSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Dust Stratospheric Aerosol Optical Thickness Due to Scattering + DUSMASS25 | kg m-3 | xy | N | | Dust Surface Mass Concentration of Particulate Matter < 2.5 microns (PM 2.5) + DUCMASS25 | kg m-2 | xy | N | | Dust Column Mass Density of Particulate Matter < 2.5 microns (PM 2.5) + DUEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Dust Aerosol Optical Depth from Particulate Matter < 2.5 microns (PM2.5) + DUSCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Dust Aerosol Optical Depth Due to Scattering from Particulate Matter < 2.5 microns (PM2.5) DUAERIDX | 1 | xy | N | | Dust TOMS UV Aerosol Index DUFLUXU | kg m-1 s-1 | xy | N | | Dust column u-wind mass flux DUFLUXV | kg m-1 s-1 | xy | N | | Dust column v-wind mass flux - DUEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Dust Extinction AOT - PM 1.0 um - DUSCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Dust Scattering AOT - PM 1.0 um + DUEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Dust Aerosol Optical Depth from Particulate Matter < 1 micron (PM1.0) + DUSCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Dust Aerosol Optical Depth Due to Scattering from Particulate Matter < 1 micron (PM1.0) DUANGSTR | 1 | xy | N | | Dust Angstrom parameter [470-870 nm] DUEM | kg m-2 s-1 | xy | N | self%nbins | Dust Emission (Bin %d) DUSD | kg m-2 s-1 | xy | N | self%nbins | Dust Sedimentation (Bin %d) diff --git a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_instance_DU.rc b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_instance_DU.rc index 30df3064..ae0a325d 100644 --- a/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_instance_DU.rc +++ b/ESMF/GOCART2G_GridComp/DU2G_GridComp/DU2G_instance_DU.rc @@ -3,7 +3,7 @@ # aerosol_radBands_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opticsBands_DU.v15_3.RRTMG.nc -aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/optics_DU.v15_3.nc +aerosol_monochromatic_optics_file: /discover/nobackup/pcolarco/fvInput/AeroCom/x/optics_DU.v15_6.nc particle_radius_microns: 0.73 1.4 2.4 4.5 8.0 @@ -50,8 +50,6 @@ molecular_weight: 0.1 0.1 0.1 0.1 0.1 # Number of particles per kg mass fnum: 2.45e14 3.28e13 6.52e12 9.89e11 1.76e11 -rhFlag: 0 - # Maring settling velocity correction maringFlag: .true. @@ -63,3 +61,5 @@ pressure_lid_in_hPa: 0.01 alpha: 0.3 gamma: 1.3 vertical_to_horizontal_flux_ratio_limit: 2.e-04 +soil_drylimit_factor: 1.0 +# soil_moisture_factor: 1.0 diff --git a/ESMF/GOCART2G_GridComp/GA_Environment/CMakeLists.txt b/ESMF/GOCART2G_GridComp/GA_Environment/CMakeLists.txt index c95604f2..c63aea96 100644 --- a/ESMF/GOCART2G_GridComp/GA_Environment/CMakeLists.txt +++ b/ESMF/GOCART2G_GridComp/GA_Environment/CMakeLists.txt @@ -2,7 +2,7 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES MAPL Chem_Shared2G Process_Library esmf + DEPENDENCIES MAPL Chem_Shared2G Process_Library ESMF::ESMF ) # CMake has an OpenMP issue with NAG Fortran: https://gitlab.kitware.com/cmake/cmake/-/issues/21280 diff --git a/ESMF/GOCART2G_GridComp/GA_Environment/GA_EnvironmentMod.F90 b/ESMF/GOCART2G_GridComp/GA_Environment/GA_EnvironmentMod.F90 index bfac0c34..ea6eaa86 100644 --- a/ESMF/GOCART2G_GridComp/GA_Environment/GA_EnvironmentMod.F90 +++ b/ESMF/GOCART2G_GridComp/GA_Environment/GA_EnvironmentMod.F90 @@ -19,7 +19,6 @@ module GA_EnvironmentMod ! logical :: scav_byColdCloud ! new flag example real, allocatable :: molwght(:) ! molecular weight !NOT UNIVERSAL ONLY FOR GASES, real, allocatable :: fnum(:) ! number of particles per kg mass - integer :: rhFlag integer :: nbins integer :: km ! vertical grid dimension real :: CDT ! chemistry timestep (secs) @@ -66,7 +65,6 @@ subroutine load_from_config(self, cfg, universal_cfg, rc) call ESMF_ConfigGetAttribute (cfg, self%fscav, label='fscav:', __RC__) call ESMF_ConfigGetAttribute (cfg, self%molwght, label='molecular_weight:', __RC__) call ESMF_ConfigGetAttribute (cfg, self%fnum, label='fnum:', __RC__) - call ESMF_ConfigGetAttribute (cfg, self%rhFlag, label='rhFlag:', __RC__) call ESMF_ConfigGetAttribute (cfg, self%plid, label='pressure_lid_in_hPa:', __RC__) call ESMF_ConfigGetAttribute (universal_cfg, self%wavelengths_profile, label='wavelengths_for_profile_aop_in_nm:', __RC__) call ESMF_ConfigGetAttribute (universal_cfg, self%wavelengths_vertint, & diff --git a/ESMF/GOCART2G_GridComp/GOCART2G_GridCompMod.F90 b/ESMF/GOCART2G_GridComp/GOCART2G_GridCompMod.F90 index 0a7b9890..2c0fc346 100644 --- a/ESMF/GOCART2G_GridComp/GOCART2G_GridCompMod.F90 +++ b/ESMF/GOCART2G_GridComp/GOCART2G_GridCompMod.F90 @@ -58,8 +58,8 @@ module GOCART2G_GridCompMod ! !DESCRIPTION: ! -! {\tt GOCART} is a gridded component from the GOCART model and includes -! dust, sea salt, sulfates, nitrate, organic and black carbon. +! {\tt GOCART} is a gridded component from the GOCART model and includes +! dust, sea salt, sulfates, nitrate, organic and black carbon. ! ! @@ -67,7 +67,7 @@ module GOCART2G_GridCompMod ! ! 25feb2005 da Silva First crack. ! 19jul2006 da Silva First separate GOCART component. -! 14Oct2019 E.Sherman, A.Darmenov, A. da Silva, T. Clune First attempt at refactoring. +! 14Oct2019 E.Sherman, A.Darmenov, A. da Silva, T. Clune First attempt at refactoring. ! !EOP !============================================================================ @@ -89,11 +89,11 @@ subroutine SetServices (GC, RC) ! !DESCRIPTION: This version uses MAPL_GenericSetServices, which sets ! the Initialize and Finalize services to generic versions. It also -! allocates our instance of a generic state and puts it in the +! allocates our instance of a generic state and puts it in the ! gridded component (GC). Here we only set the two-stage run method and ! declare the data services. -! !REVISION HISTORY: +! !REVISION HISTORY: ! 14oct2019 Sherman, da Silva, Darmenov, Clune - First attempt at refactoring for ESMF compatibility @@ -102,7 +102,7 @@ subroutine SetServices (GC, RC) !============================================================================ ! ! Locals - character (len=ESMF_MAXSTR) :: COMP_NAME + character (len=ESMF_MAXSTR) :: COMP_NAME type (ESMF_Config) :: myCF ! GOCART2G_GridComp.rc type (ESMF_Config) :: cf ! universal config type (GOCART_State), pointer :: self @@ -189,7 +189,7 @@ subroutine SetServices (GC, RC) ! Define EXPORT states -! This state is needed by radiation and moist. It contains +! This state is needed by radiation and moist. It contains ! aerosols and callback methods ! -------------------------------------------------------- call MAPL_AddExportSpec(GC, & @@ -214,8 +214,11 @@ subroutine SetServices (GC, RC) #include "GOCART2G_Export___.h" #include "GOCART2G_Import___.h" +! Allow children of Chemistry to connect to these fields + if ((self%SU%instances(1)%is_active)) call MAPL_AddExportSpec (GC, SHORT_NAME='PSO4', CHILD_ID=self%SU%instances(1)%id, __RC__) + ! Add connectivities for Nitrate component -! Nitrate currently only supports one Nitrate component. Nitrate only +! Nitrate currently only supports one Nitrate component. Nitrate only ! uses the first active dust and sea salt instance. if (size(self%NI%instances) > 0) then if ((self%DU%instances(1)%is_active)) then @@ -255,7 +258,7 @@ end subroutine SetServices subroutine Initialize (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -264,13 +267,13 @@ subroutine Initialize (GC, import, export, clock, RC) ! !DESCRIPTION: This initializes the GOCART Grid Component. It primarily creates ! its exports and births its children. -! !REVISION HISTORY: +! !REVISION HISTORY: ! 14oct2019 E.Sherman First attempt at refactoring !EOP !============================================================================ -! Locals +! Locals character (len=ESMF_MAXSTR) :: COMP_NAME type (MAPL_MetaComp), pointer :: MAPL @@ -286,7 +289,7 @@ subroutine Initialize (GC, import, export, clock, RC) type (wrap_) :: wrap integer :: n_modes - integer, parameter :: n_gocart_modes = 14 + integer, parameter :: n_gocart_modes = 14 integer :: dims(3) character(len=ESMF_MAXSTR) :: aero_aci_modes(n_gocart_modes) @@ -296,7 +299,7 @@ subroutine Initialize (GC, import, export, clock, RC) __Iam__('Initialize') !**************************************************************************** -! Begin... +! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- @@ -399,8 +402,8 @@ subroutine Initialize (GC, import, export, clock, RC) ! Attach the aerosol optics method. Used in Radiation. call ESMF_MethodAdd (aero, label='run_aerosol_optics', userRoutine=run_aerosol_optics, __RC__) - ! This attribute indicates if the aerosol optics method is implemented or not. - ! Radiation will not call the aerosol optics method unless this attribute is + ! This attribute indicates if the aerosol optics method is implemented or not. + ! Radiation will not call the aerosol optics method unless this attribute is ! explicitly set to true. call ESMF_AttributeSet(aero, name='implements_aerosol_optics_method', value=.true., __RC__) @@ -408,7 +411,7 @@ subroutine Initialize (GC, import, export, clock, RC) ! ------------------------------------------------------------ aero_aci_modes = (/'du001 ', 'du002 ', 'du003 ', & 'du004 ', 'du005 ', & - 'ss001 ', 'ss002 ', 'ss003 ', & + 'ss001 ', 'ss002 ', 'ss003 ', & 'sulforg01', 'sulforg02', 'sulforg03', & 'bcphilic ', 'ocphilic ', 'brcphilic'/) @@ -424,18 +427,9 @@ subroutine Initialize (GC, import, export, clock, RC) call ESMF_ConfigGetAttribute(CF, CCNtuning, default=1.8, label='CCNTUNING:', __RC__) call ESMF_AttributeSet(aero, name='ccn_tuning', value=CCNtuning, __RC__) - call ESMF_ConfigGetAttribute( CF, CLDMICRO, Label='CLDMICRO:', default="1MOMENT", RC=STATUS) + call ESMF_ConfigGetAttribute( CF, CLDMICRO, Label='CLDMICR_OPTION:', default="BACM_1M", RC=STATUS) call ESMF_AttributeSet(aero, name='cldmicro', value=CLDMICRO, __RC__) - ! scaling factor for sea salt - if(adjustl(CLDMICRO)=="2MOMENT") then - call ESMF_ConfigGetAttribute(CF, f_aci_seasalt, default=4.0, label='SS_SCALE:', __RC__) - call ESMF_AttributeSet(aero, name='seasalt_scaling_factor', value=f_aci_seasalt, __RC__) - else - call ESMF_ConfigGetAttribute(CF, f_aci_seasalt, default=14.0, label='SS_SCALE:', __RC__) - call ESMF_AttributeSet(aero, name='seasalt_scaling_factor', value=f_aci_seasalt, __RC__) - endif - ! Add variables to AERO state call add_aero (aero, label='air_temperature', label2='T', grid=grid, typekind=MAPL_R4, __RC__) call add_aero (aero, label='fraction_of_land_type', label2='FRLAND', grid=grid, typekind=MAPL_R4, __RC__) @@ -456,24 +450,24 @@ subroutine Initialize (GC, import, export, clock, RC) contains subroutine add_aero_states_(instances) - type(Instance), intent(in) :: instances(:) + type(Instance), intent(in) :: instances(:) type (ESMF_State) :: child_state type (ESMF_FieldBundle) :: child_bundle type (ESMF_Field), allocatable :: fieldList(:) - + integer :: i integer :: id integer :: fieldCount __Iam__('Initialize::add_aero_states_') - + do i = 1, size(instances) if (.not. instances(i)%is_active) cycle id = instances(i)%id - + call ESMF_GridCompGet (gcs(id), __RC__ ) call ESMF_StateGet (gex(id), trim(instances(i)%name)//'_AERO', child_state, __RC__) call ESMF_StateAdd (aero, [child_state], __RC__) - + if (instances(i)%name(1:2) /= 'NI') then call ESMF_StateGet (gex(id), trim(instances(i)%name)//'_AERO_DP', child_bundle, __RC__) call ESMF_FieldBundleGet (child_bundle, fieldCount=fieldCount, __RC__) @@ -490,7 +484,7 @@ end subroutine Initialize !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !BOP -! !IROUTINE: RUN -- Run method for GOCART2G +! !IROUTINE: RUN -- Run method for GOCART2G ! !INTERFACE: @@ -498,13 +492,13 @@ end subroutine Initialize subroutine Run1 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Run method +! !DESCRIPTION: Run method !EOP !============================================================================ @@ -522,7 +516,7 @@ subroutine Run1 (GC, import, export, clock, RC) __Iam__('Run1') !**************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle @@ -558,7 +552,7 @@ end subroutine Run1 subroutine Run2 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -623,7 +617,7 @@ subroutine Run2 (GC, import, export, clock, RC) real, pointer, dimension(:,:,:,:) :: suscacoefrh20, suscacoefrh80 real, pointer, dimension(:,:,:,:) :: subckcoef real, pointer, dimension(:,:) :: suangstr, so4smass - real, pointer, dimension(:,:,:) :: bcexttau, bcstexttau, bcscatau, bcstscatau + real, pointer, dimension(:,:,:) :: bcexttau, bcstexttau, bcscatau, bcstscatau real, pointer, dimension(:,:,:,:) :: bcextcoef, bcscacoef real, pointer, dimension(:,:,:,:) :: bcextcoefrh20, bcextcoefrh80 real, pointer, dimension(:,:,:,:) :: bcscacoefrh20, bcscacoefrh80 @@ -648,7 +642,8 @@ subroutine Run2 (GC, import, export, clock, RC) real, allocatable :: tau_mol_layer(:,:,:), tau_aer_layer(:,:,:) real, allocatable :: tau_mol(:,:), tau_aer(:,:) real :: c1, c2, c3 - real, parameter :: pi = 3.141529265 + real :: nifactor + real, parameter :: pi = 3.141529265 integer :: ind550, ind532 integer :: i1, i2, j1, j2, km, k,kk @@ -657,7 +652,7 @@ subroutine Run2 (GC, import, export, clock, RC) __Iam__('Run2') !**************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -730,7 +725,7 @@ subroutine Run2 (GC, import, export, clock, RC) if (ind550 == 0) then !$omp critical (G2G_1) - print*,trim(Iam),' : 550nm wavelengths is not present in GOCART2G_GridComp.rc.',& + print*,trim(Iam),' : 550nm wavelengths is not present in GOCART2G_GridComp.rc.',& ' Cannot produce TOTANGSTR variable without 550nm wavelength.' !$omp end critical (G2G_1) VERIFY_(100) @@ -779,7 +774,7 @@ subroutine Run2 (GC, import, export, clock, RC) if(associated(totexttfm) .and. associated(duexttfm)) totexttfm(:,:,w) = totexttfm(:,:,w)+duexttfm(:,:,w) if(associated(totscatfm) .and. associated(duscatfm)) totscatfm(:,:,w) = totscatfm(:,:,w)+duscatfm(:,:,w) end do - + do w = 1, size(self%wavelengths_profile) if(associated(totextcoef) .and. associated(duextcoef)) totextcoef(:,:,:,w) = totextcoef(:,:,:,w)+duextcoef(:,:,:,w) if(associated(totextcoefrh20) .and. associated(duextcoefrh20)) totextcoefrh20(:,:,:,w) = totextcoefrh20(:,:,:,w)+duextcoefrh20(:,:,:,w) @@ -789,7 +784,7 @@ subroutine Run2 (GC, import, export, clock, RC) if(associated(totscacoefrh80) .and. associated(duscacoefrh80)) totscacoefrh80(:,:,:,w) = totscacoefrh80(:,:,:,w)+duscacoefrh80(:,:,:,w) if(associated(totbckcoef) .and. associated(dubckcoef)) totbckcoef(:,:,:,w) = totbckcoef(:,:,:,w)+dubckcoef(:,:,:,w) end do - + call MAPL_GetPointer (gex(self%DU%instances(n)%id), dusmass, 'DUSMASS', __RC__) call MAPL_GetPointer (gex(self%DU%instances(n)%id), dusmass25, 'DUSMASS25', __RC__) if(associated(pm) .and. associated(dusmass)) pm = pm + dusmass @@ -803,7 +798,7 @@ subroutine Run2 (GC, import, export, clock, RC) tau1 = tau1 + duexttau(:,:,ind550)*exp(c1*duangstr) tau2 = tau2 + duexttau(:,:,ind550)*exp(c2*duangstr) end if - end if + end if end do ! Sea Salt @@ -847,7 +842,7 @@ subroutine Run2 (GC, import, export, clock, RC) if(associated(totscacoefrh80) .and. associated(ssscacoefrh80)) totscacoefrh80(:,:,:,w) = totscacoefrh80(:,:,:,w)+ssscacoefrh80(:,:,:,w) if(associated(totbckcoef) .and. associated(ssbckcoef)) totbckcoef(:,:,:,w) = totbckcoef(:,:,:,w)+ssbckcoef(:,:,:,w) enddo - + call MAPL_GetPointer (gex(self%SS%instances(n)%id), sssmass, 'SSSMASS', __RC__) call MAPL_GetPointer (gex(self%SS%instances(n)%id), sssmass25, 'SSSMASS25', __RC__) if(associated(pm) .and. associated(sssmass)) pm = pm + sssmass @@ -905,7 +900,7 @@ subroutine Run2 (GC, import, export, clock, RC) if(associated(totscacoefrh80) .and. associated(niscacoefrh80)) totscacoefrh80(:,:,:,w) = totscacoefrh80(:,:,:,w)+niscacoefrh80(:,:,:,w) if(associated(totbckcoef) .and. associated(nibckcoef)) totbckcoef(:,:,:,w) = totbckcoef(:,:,:,w)+nibckcoef(:,:,:,w) end do - + call MAPL_GetPointer (gex(self%NI%instances(n)%id), nismass, 'NISMASS', __RC__) call MAPL_GetPointer (gex(self%NI%instances(n)%id), nismass25, 'NISMASS25', __RC__) call MAPL_GetPointer (gex(self%NI%instances(n)%id), nh4smass, 'NH4SMASS', __RC__) @@ -924,6 +919,11 @@ subroutine Run2 (GC, import, export, clock, RC) end do ! Sulfates + nifactor = 132.14/96.06 + if (size(self%NI%instances) > 0) then + if ((self%NI%instances(1)%is_active) .and. (index(self%NI%instances(1)%name, 'data') == 0 )) nifactor = 1.0 + end if + do n = 1, size(self%SU%instances) if ((self%SU%instances(n)%is_active) .and. (index(self%SU%instances(n)%name, 'data') == 0 )) then call MAPL_GetPointer (gex(self%SU%instances(n)%id), suexttau, 'SUEXTTAU', __RC__) @@ -960,25 +960,18 @@ subroutine Run2 (GC, import, export, clock, RC) if(associated(totscacoefrh80) .and. associated(suscacoefrh80)) totscacoefrh80(:,:,:,w) = totscacoefrh80(:,:,:,w)+suscacoefrh80(:,:,:,w) if(associated(totbckcoef) .and. associated(subckcoef)) totbckcoef(:,:,:,w) = totbckcoef(:,:,:,w)+subckcoef(:,:,:,w) end do - + call MAPL_GetPointer (gex(self%SU%instances(n)%id), pso4, 'PSO4', __RC__) if(associated(pso4tot) .and. associated(pso4)) pso4tot = pso4tot + pso4 call MAPL_GetPointer (gex(self%SU%instances(n)%id), so4smass, 'SO4SMASS', __RC__) - if ((self%NI%instances(1)%is_active) .and. (index(self%NI%instances(1)%name, 'data') == 0 )) then ! Nitrates currently only support one active instance. We check the NI gridded component because SO4MASS can be altered by NI chemistry. - if(associated(pm) .and. associated(so4smass)) pm = pm + so4smass - if(associated(pm25) .and. associated(so4smass)) pm25 = pm25 + so4smass - if(associated(pm_rh35) .and. associated(so4smass)) pm_rh35 = pm_rh35 + 1.33*so4smass - if(associated(pm25_rh35) .and. associated(so4smass)) pm25_rh35 = pm25_rh35 + 1.33*so4smass - if(associated(pm_rh50) .and. associated(so4smass)) pm_rh50 = pm_rh50 + 1.51*so4smass - if(associated(pm25_rh50) .and. associated(so4smass)) pm25_rh50 = pm25_rh50 + 1.51*so4smass - else - if(associated(pm) .and. associated(so4smass)) pm = pm + (132.14/96.06)*so4smass - if(associated(pm25) .and. associated(so4smass)) pm25 = pm25 + (132.14/96.06)*so4smass - if(associated(pm_rh35) .and. associated(so4smass)) pm_rh35 = pm_rh35 + 1.33*(132.14/96.06)*so4smass - if(associated(pm25_rh35) .and. associated(so4smass)) pm25_rh35 = pm25_rh35 + 1.33*(132.14/96.06)*so4smass - if(associated(pm_rh50) .and. associated(so4smass)) pm_rh50 = pm_rh50 + 1.51*(132.14/96.06)*so4smass - if(associated(pm25_rh50) .and. associated(so4smass)) pm25_rh50 = pm25_rh50 + 1.51*(132.14/96.06)*so4smass + if(associated(so4smass)) then + if(associated(pm) ) pm = pm + nifactor*so4smass + if(associated(pm25) ) pm25 = pm25 + nifactor*so4smass + if(associated(pm_rh35) ) pm_rh35 = pm_rh35 + 1.33*nifactor*so4smass + if(associated(pm25_rh35)) pm25_rh35 = pm25_rh35 + 1.33*nifactor*so4smass + if(associated(pm_rh50) ) pm_rh50 = pm_rh50 + 1.51*nifactor*so4smass + if(associated(pm25_rh50)) pm25_rh50 = pm25_rh50 + 1.51*nifactor*so4smass end if if(associated(totangstr) .and. associated(suexttau) .and. associated(suangstr)) then @@ -1068,22 +1061,22 @@ subroutine Run2 (GC, import, export, clock, RC) if(associated(totexttfm) .and. associated(ocexttau)) totexttfm(:,:,w) = totexttfm(:,:,w)+ocexttau(:,:,w) if(associated(totscatfm) .and. associated(ocscatau)) totscatfm(:,:,w) = totscatfm(:,:,w)+ocscatau(:,:,w) end do - + do w = 1, size(self%wavelengths_profile) if(associated(totextcoef) .and. associated(ocextcoef)) totextcoef(:,:,:,w) = totextcoef(:,:,:,w)+ocextcoef(:,:,:,w) if(associated(totextcoefrh20) .and. associated(ocextcoefrh20)) totextcoefrh20(:,:,:,w) = totextcoefrh20(:,:,:,w)+ocextcoefrh20(:,:,:,w) if(associated(totextcoefrh80) .and. associated(ocextcoefrh80)) totextcoefrh80(:,:,:,w) = totextcoefrh80(:,:,:,w)+ocextcoefrh80(:,:,:,w) if(associated(totscacoef) .and. associated(ocscacoef)) totscacoef(:,:,:,w) = totscacoef(:,:,:,w)+ocscacoef(:,:,:,w) if(associated(totscacoefrh20) .and. associated(ocscacoefrh20)) totscacoefrh20(:,:,:,w) = totscacoefrh20(:,:,:,w)+ocscacoefrh20(:,:,:,w) - if(associated(totscacoefrh20) .and. associated(ocscacoefrh20)) totscacoefrh20(:,:,:,w) = totscacoefrh20(:,:,:,w)+ocscacoefrh20(:,:,:,w) + if(associated(totscacoefrh80) .and. associated(ocscacoefrh80)) totscacoefrh80(:,:,:,w) = totscacoefrh80(:,:,:,w)+ocscacoefrh80(:,:,:,w) if(associated(totbckcoef) .and. associated(ocbckcoef)) totbckcoef(:,:,:,w) = totbckcoef(:,:,:,w)+ocbckcoef(:,:,:,w) end do - + call MAPL_GetPointer (gex(self%CA%instances(n)%id), ocsmass, 'CA.ocSMASS', __RC__) if(associated(pm) .and. associated(ocsmass)) pm = pm + ocsmass if(associated(pm25) .and. associated(ocsmass)) pm25 = pm25 + ocsmass if(associated(pm_rh35) .and. associated(ocsmass)) pm_rh35 = pm_rh35 + 1.16*ocsmass ! needs to be revisited: OCpho + 1.16 OCphi - if(associated(pm25_rh35) .and. associated(ocsmass)) pm25_rh35 = pm25_rh35 + 1.16*ocsmass ! + if(associated(pm25_rh35) .and. associated(ocsmass)) pm25_rh35 = pm25_rh35 + 1.16*ocsmass ! if(associated(pm_rh50) .and. associated(ocsmass)) pm_rh50 = pm_rh50 + 1.24*ocsmass ! needs to be revisited: OCpho + 1.24 OCphi if(associated(pm25_rh50) .and. associated(ocsmass)) pm25_rh50 = pm25_rh50 + 1.24*ocsmass ! @@ -1128,12 +1121,12 @@ subroutine Run2 (GC, import, export, clock, RC) if(associated(totscacoefrh80) .and. associated(brscacoefrh80)) totscacoefrh80(:,:,:,w) = totscacoefrh80(:,:,:,w)+brscacoefrh80(:,:,:,w) if(associated(totbckcoef) .and. associated(brbckcoef)) totbckcoef(:,:,:,w) = totbckcoef(:,:,:,w)+brbckcoef(:,:,:,w) end do - + call MAPL_GetPointer (gex(self%CA%instances(n)%id), brsmass, 'CA.brSMASS', __RC__) if(associated(pm) .and. associated(brsmass)) pm = pm + brsmass if(associated(pm25) .and. associated(brsmass)) pm25 = pm25 + brsmass if(associated(pm_rh35) .and. associated(brsmass)) pm_rh35 = pm_rh35 + 1.16*brsmass ! needs to be revisited: OCpho + 1.16 OCphi - if(associated(pm25_rh35) .and. associated(brsmass)) pm25_rh35 = pm25_rh35 + 1.16*brsmass ! + if(associated(pm25_rh35) .and. associated(brsmass)) pm25_rh35 = pm25_rh35 + 1.16*brsmass ! if(associated(pm_rh50) .and. associated(brsmass)) pm_rh50 = pm_rh50 + 1.24*brsmass ! needs to be revisited: OCpho + 1.24 OCphi if(associated(pm25_rh50) .and. associated(brsmass)) pm25_rh50 = pm25_rh50 + 1.24*brsmass ! @@ -1145,7 +1138,7 @@ subroutine Run2 (GC, import, export, clock, RC) end do ! Finish calculating totangstr - if(associated(totangstr)) then + if(associated(totangstr)) then totangstr = log(tau1/tau2)/c3 end if @@ -1172,11 +1165,11 @@ subroutine Run2 (GC, import, export, clock, RC) VERIFY_(100) end if - ! Pressure at layer edges (ple shape (im,jm, km+1) on the edge + ! Pressure at layer edges (ple shape (im,jm, km+1) on the edge i1 = lbound(ple, 1); i2 = ubound(ple, 1) j1 = lbound(ple, 2); j2 = ubound(ple, 2) - km = ubound(ple, 3) ! km =72 index starts at 0 + km = ubound(ple, 3) ! km =72 index starts at 0 ! Pressure for each layer allocate(P(i1:i2,j1:j2,km), __STAT__) do k = 1, km @@ -1190,7 +1183,7 @@ subroutine Run2 (GC, import, export, clock, RC) ! tau mol for each layer allocate(tau_mol_layer(i1:i2,j1:j2,km), delz(i1:i2,j1:j2,km),__STAT__) delz = delp / (MAPL_GRAV * airdens) - tau_mol_layer = backscat_mol * 8.* pi /3. * delz + tau_mol_layer = backscat_mol * 8.* pi /3. * delz ! tau aer for each layer allocate(tau_aer_layer(i1:i2,j1:j2,km), __STAT__) @@ -1198,25 +1191,25 @@ subroutine Run2 (GC, import, export, clock, RC) allocate(tau_aer(i1:i2,j1:j2), __STAT__) allocate(tau_mol(i1:i2,j1:j2), __STAT__) - - ! TOTAL ABCK TOA - ! top layer + + ! TOTAL ABCK TOA + ! top layer totabcktoa(:,:,1) = (totbckcoef(:,:,1,ind532) + backscat_mol(:,:,1)) * exp(-tau_aer_layer(:,:,1)) * exp(-tau_mol_layer(:,:,1)) ! layer 2 to the layer at the surface(km) do k = 2, km tau_aer = 0. tau_mol = 0. ! for each layer - do kk = 1, k - tau_aer = tau_aer + tau_aer_layer(:,:,kk) - tau_mol = tau_mol + tau_mol_layer(:,:,kk) + do kk = 1, k + tau_aer = tau_aer + tau_aer_layer(:,:,kk) + tau_mol = tau_mol + tau_mol_layer(:,:,kk) enddo tau_aer = tau_aer + 0.5 * tau_aer_layer(:,:,k) tau_mol = tau_mol + 0.5 * tau_mol_layer(:,:,k) totabcktoa(:,:,k) = (totbckcoef(:,:,k,ind532) + backscat_mol(:,:,k)) * exp(-tau_aer) * exp(-tau_mol) enddo - - ! TOTAL ABCK SFC - ! bottom layer + + ! TOTAL ABCK SFC + ! bottom layer totabcksfc(:,:,km) = (totbckcoef(:,:,km,ind532) + backscat_mol(:,:,km)) * exp(-tau_aer_layer(:,:,km)) * exp(-tau_mol_layer(:,:,km)) ! layer 2nd from the surface to the top of the atmoshere (km) do k = km-1, 1, -1 @@ -1326,9 +1319,9 @@ subroutine createInstances_ (self, GC, rc) RETURN_(ESMF_SUCCESS) contains - + subroutine addChildren__ (gc, species, setServices, rc) - + type (ESMF_GridComp), intent(inout) :: gc type(Constituent), intent(inout) :: species external :: setServices @@ -1378,7 +1371,7 @@ subroutine serialize_bundle (state, rc) __Iam__('GOCART2G::serialize_bundle') -! !Description: Callback for AERO_RAD state used in GAAS module to provide a +! !Description: Callback for AERO_RAD state used in GAAS module to provide a ! serialized ESMF_Bundle of aerosol fields. !----------------------------------------------------------------------------------- ! Begin... @@ -1461,7 +1454,7 @@ subroutine run_aerosol_optics (state, rc) ! Description: Used in Radiation gridded components to provide aerosol properties !----------------------------------------------------------------------------------- -! Begin... +! Begin... ! Radiation band ! -------------- @@ -1472,7 +1465,7 @@ subroutine run_aerosol_optics (state, rc) call ESMF_AttributeGet(state, name='relative_humidity_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, RH, trim(fld_name), __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, PLE, trim(fld_name), __RC__) @@ -1606,7 +1599,7 @@ subroutine aerosol_activation_properties(state, rc) ! Local ! --------- character(len=ESMF_MAXSTR) :: mode ! mode name - character(len=ESMF_MAXSTR) :: mode_ ! lowercase mode name + character(len=ESMF_MAXSTR) :: mode_ ! lowercase mode name type(ESMF_State) :: child_state @@ -1620,16 +1613,15 @@ subroutine aerosol_activation_properties(state, rc) real, dimension(:,:,:,:), pointer :: ptr_4d ! aerosol mass mixing ratio (temporary) real, dimension(:,:,:), pointer :: ptr_3d ! aerosol mass mixing ratio (temporary) - real, dimension(:,:,:), pointer :: num ! number concentration of aerosol particles + real, dimension(:,:,:), pointer :: num ! number concentration of aerosol particles real, dimension(:,:,:), pointer :: diameter ! dry size of aerosol real, dimension(:,:,:), pointer :: sigma ! width of aerosol mode real, dimension(:,:,:), pointer :: density ! density of aerosol - real, dimension(:,:,:), pointer :: hygroscopicity ! hygroscopicity of aerosol + real, dimension(:,:,:), pointer :: hygroscopicity ! hygroscopicity of aerosol real, dimension(:,:,:), pointer :: f_dust ! fraction of dust aerosol - real, dimension(:,:,:), pointer :: f_soot ! fraction of soot aerosol + real, dimension(:,:,:), pointer :: f_soot ! fraction of soot aerosol real, dimension(:,:,:), pointer :: f_organic ! fraction of organic aerosol - real :: ss_scale ! sea salt scaling factor real :: max_clean ! max mixing ratio before considered polluted real :: ccn_tuning ! tunes conversion factors for sulfate character(LEN=ESMF_MAXSTR) :: cld_micro @@ -1665,7 +1657,7 @@ subroutine aerosol_activation_properties(state, rc) __Iam__('GOCART2G::aerosol_activation_properties') -! Begin... +! Begin... ! Get list of child states within state and add to aeroList ! --------------------------------------------------------- @@ -1695,12 +1687,12 @@ subroutine aerosol_activation_properties(state, rc) ! ------------ call ESMF_AttributeGet(state, name='aerosol_mode', value=mode, __RC__) -! Land fraction +! Land fraction ! ------------- call ESMF_AttributeGet(state, name='fraction_of_land_type', value=fld_name, __RC__) call MAPL_GetPointer(state, f_land, trim(fld_name), __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, ple, trim(fld_name), __RC__) @@ -1742,7 +1734,6 @@ subroutine aerosol_activation_properties(state, rc) ! Sea salt scaling fctor ! ---------------------- - call ESMF_AttributeGet(state, name='seasalt_scaling_factor', value=ss_scale, __RC__) call ESMF_AttributeGet(state, name='max_q_clean', value=max_clean, __RC__) call ESMF_AttributeGet(state, name='cldmicro', value=cld_micro, __RC__) call ESMF_AttributeGet(state, name='ccn_tuning', value=ccn_tuning, __RC__) @@ -1773,7 +1764,7 @@ subroutine aerosol_activation_properties(state, rc) else if (index(mode_, 'ss00') > 0) then ! Sea Salt ! compute the total mass mixing ratio and impose a tri-modal size distribution do i = 1, size(aeroList) - if (index(aeroList(i), 'SS') > 0) then + if (index(aeroList(i), 'SS') > 0) then call ESMF_StateGet(state, trim(aeroList(i)), child_state, __RC__) call MAPL_GetPointer(child_state, ptr_4d, 'SS', __RC__) do j = 1, ubound(ptr_4d, 4) @@ -1781,14 +1772,6 @@ subroutine aerosol_activation_properties(state, rc) ptr_3d => ptr_4d(:,:,:,j) end do - ! temperature correction over the ocean - allocate(f(i2,j2, km), __STAT__) - call ocean_correction_(f, f_land, temperature(1:i2,1:j2,km), ss_scale, 1, i2, 1, j2, km) - - ! apply the correction factor - q = f * q - deallocate(f, __STAT__) - hygroscopicity = k_SS density = densSS end if @@ -1818,11 +1801,6 @@ subroutine aerosol_activation_properties(state, rc) density = densORG * ptr_3d + density end if - ! required by the aap_(...) - if((adjustl(cld_micro)/="2MOMENT") .and. (index(aeroList(i), 'SU') > 0)) then ! maintained for compatibility with the single moment - call ESMF_StateGet(state, trim(aeroList(i)), child_state, __RC__) - call MAPL_GetPointer(child_state, ptr_3d, 'SO4', __RC__) - end if end do where (q > 2.0e-12 .and. hygroscopicity > tiny(0.0)) @@ -1915,11 +1893,11 @@ subroutine aap_(mode, q, num, diameter, sigma, f_dust, f_soot, f_organic, dens_, real, intent(in), dimension(i1:i2,j1:j2,km) :: q_ ! auxiliary mass real, intent(in), dimension(i1:i2,j1:j2,km) :: dens_ ! density - real, intent(out), dimension(i1:i2,j1:j2,km) :: num ! number concentration of aerosol particles + real, intent(out), dimension(i1:i2,j1:j2,km) :: num ! number concentration of aerosol particles real, intent(out), dimension(i1:i2,j1:j2,km) :: diameter ! dry size of aerosol - real, intent(out), dimension(i1:i2,j1:j2,km) :: sigma ! width of aerosol mode + real, intent(out), dimension(i1:i2,j1:j2,km) :: sigma ! width of aerosol mode real, intent(out), dimension(i1:i2,j1:j2,km) :: f_dust ! fraction of dust aerosol - real, intent(out), dimension(i1:i2,j1:j2,km) :: f_soot ! fraction of soot aerosol + real, intent(out), dimension(i1:i2,j1:j2,km) :: f_soot ! fraction of soot aerosol real, intent(out), dimension(i1:i2,j1:j2,km) :: f_organic ! fraction of organic aerosol integer, intent(out) :: rc ! return code @@ -1948,22 +1926,10 @@ subroutine aap_(mode, q, num, diameter, sigma, f_dust, f_soot, f_organic, dens_, f_soot = 0.0 f_organic = 0.0 - if(adjustl(cld_micro)=="2MOMENT") then - qaux=q !this corrects a bug - else - qaux = q_ !keep it to get zero diff with the single moment - max_clean = 5.0e-7 - ccn_tuning = 1.0 - end if - + qaux=q !this corrects a bug if (index(mode_, 'ss00') > 0) then - if(adjustl(cld_micro)=="2MOMENT") then - TPI (1) = 230e6 ! num fraction (reduced 091015) - else - TPI (1) = 100e6 ! num fraction (reduced 091015) - end if - + TPI (1) = 230e6 ! num fraction (reduced 091015) DPGI (1) = 0.02e-6 ! modal diameter (m) SIGI (1) = log(1.6) ! geometric dispersion (sigma_g) ! accumulation @@ -2004,11 +1970,11 @@ subroutine aap_(mode, q, num, diameter, sigma, f_dust, f_soot, f_organic, dens_, ! fine TPIclean (1) = 1.0e9 ! total concentration (# m-3) DPGIclean (1) = 0.016e-6 ! modal diameter (m) - SIGIclean (1) = log(1.6) ! geometric dispersion (sigma_g) + SIGIclean (1) = log(1.6) ! geometric dispersion (sigma_g) ! accumulation TPIclean (2) = 8.0e8 ! total concentration (# m-3) DPGIclean (2) = 0.067e-6 ! modal diameter (m) - SIGIclean (2) = log(2.1) ! geometric dispersion (sigma_g) + SIGIclean (2) = log(2.1) ! geometric dispersion (sigma_g) !Coarse TPIclean (3) = 2.0e6 ! total concentration (# m-3) DPGIclean (3) = 0.93e-6 ! modal diameter (m) @@ -2075,7 +2041,7 @@ subroutine aap_(mode, q, num, diameter, sigma, f_dust, f_soot, f_organic, dens_, elsewhere sigma = SIGIclean(1) diameter = DPGIclean(1) - num = TPIclean(1) * qaux*ccn_tuning / (dens_*fmassclean) ! only sulfate + num = TPIclean(1) * qaux*ccn_tuning / (dens_*fmassclean) ! only sulfate end where case ('sulforg02') @@ -2128,44 +2094,6 @@ subroutine aap_(mode, q, num, diameter, sigma, f_dust, f_soot, f_organic, dens_, end subroutine aap_ - subroutine ocean_correction_(f, f_land, t_air_sfc, ss_scale, i1, i2, j1, j2, km) - - implicit none - - integer, intent(in) :: i1, i2 ! dimension bounds - integer, intent(in) :: j1, j2 ! ... // .. - integer, intent(in) :: km ! ... // .. - - real, intent(in ), dimension(i1:i2,j1:j2) :: f_land ! fraction of land - real, intent(in ), dimension(i1:i2,j1:j2) :: t_air_sfc ! air temperature in the surface model layer - real, intent(in ) :: ss_scale ! scaling factor for sea salt at low T - - real, intent(out), dimension(i1:i2,j1:j2, km) :: f ! correction factor - - ! local - integer :: i, j - real :: usurf - - f = 1.0 - - do j = j1, j2 - do i = i1, i2 - if (f_land(i,j) < 0.1) then !ocean - - if(adjustl(cld_micro) .ne."2MOMENT") then - usurf = max(min((t_air_sfc(i,j) - 285.0) / 2.0, 10.0), -10.0) !smooth transition around some T value - else - usurf = max(min((t_air_sfc(i,j) - 285.0) / 2.0, 30.0), -30.0) !smooth transition around some T value - end if - usurf = min(ss_scale / (1.0 + exp(usurf)), 20.0) - - f(i,j,:) = (1.0 + usurf) - end if - end do - end do - - end subroutine ocean_correction_ - end subroutine aerosol_activation_properties @@ -2202,7 +2130,7 @@ subroutine get_monochromatic_aop (state, rc) ! Description: Used in GAAS gridded component to provide aerosol properties !----------------------------------------------------------------------------------- -! Begin... +! Begin... ! Radiation band ! -------------- @@ -2213,7 +2141,7 @@ subroutine get_monochromatic_aop (state, rc) call ESMF_AttributeGet(state, name='relative_humidity_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, RH, trim(fld_name), __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, PLE, trim(fld_name), __RC__) @@ -2323,7 +2251,7 @@ subroutine get_mixRatioSum (state, rc) ! Description: Used in GAAS gridded component to provide sum of aerosol mixing ratio !-------------------------------------------------------------------------------------- -! Begin... +! Begin... call ESMF_AttributeGet(state, name='aerosolName', value=aeroName, __RC__) call ESMF_AttributeGet(state, name='im', value=im, __RC__) @@ -2451,7 +2379,7 @@ subroutine getAerosolSum (aeroToken, state, aeroList, aeroOut, rc) ! Begin... endInd = len_trim(aeroToken) - + aeroOut = 0.0 do i = 1, size(aeroList) if (trim(aeroList(i)(1:endInd)) == trim(aeroToken)) then diff --git a/ESMF/GOCART2G_GridComp/GOCART2G_StateSpecs.rc b/ESMF/GOCART2G_GridComp/GOCART2G_StateSpecs.rc index ba8ca591..7a7cbe90 100644 --- a/ESMF/GOCART2G_GridComp/GOCART2G_StateSpecs.rc +++ b/ESMF/GOCART2G_GridComp/GOCART2G_StateSpecs.rc @@ -21,14 +21,14 @@ category: EXPORT #---------------------------------------------------------------------------------------- PSO4TOT | kg m-2 s-1 | xyz | C | | Total Sulfate Produced in GOCART #........................................................................................ - TOTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Extinction AOT [550 nm] - TOTSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Extinction AOT [550 nm] Stratosphere - TOTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Scattering AOT [550 nm] - TOTSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Scattering AOT [550 nm] Stratosphere - TOTEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Extinction AOT [550 nm] - PM2.5 - TOTSCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Extinction AOT [550 nm] - PM2.5 - TOTEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Extinction AOT [550 nm] - PM1.0 - TOTSCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Extinction AOT [550 nm] - PM1.0 + TOTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Optical Depth at 550 nm + TOTSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Stratospheric Aerosol Optical Thickness at 550 nm + TOTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Optical Depth at 550 nm Due to Scattering + TOTSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Total Stratospheric Aerosol Optical Thickness at 550 nm Due to Scattering + TOTEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Optical Depth at 550 nm from Particluate Matter < 2.5 microns (PM2.5) + TOTSCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Optical Depth at 550 nm Due to Scattering from Particulate Matter < 2.5 microns (PM2.5) + TOTEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Optical Depth at 550 nm from Particluate Matter < 1 micron (PM1.0) + TOTSCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Total Aerosol Optical Depth at 550 nm Due to Scattering from Particulate Matter < 1 micron (PM1.0) TOTANGSTR | 1 | xy | N | | Total Aerosol Angstrom parameter [470-870 nm] TOTEXTCOEF | m-1 | xyz | C | size(self%wavelengths_profile) | Total Aerosol Extinction coefficient TOTEXTCOEFRH20 | m-1 | xyz | C | size(self%wavelengths_profile) | Total Aerosol Extinction coefficient - Fixed RH=20% @@ -39,12 +39,12 @@ category: EXPORT TOTBCKCOEF | m-1 sr-1 | xyz | C | size(self%wavelengths_profile) | Total Aerosol Single Scattering Backscatter coefficient TOTABCKTOA | m-1 sr-1 | xyz | C | | Total Attenuated Backscatter Coefficient from TOA [532nm] TOTABCKSFC | m-1 sr-1 | xyz | C | | Total Attenuated Backscatter Coefficient from surface [532nm] - PM | kg m-3 | xy | N | | Total reconstructed PM - PM_RH35 | kg m-3 | xy | N | | Total reconstructed PM(RH=35%) - PM_RH50 | kg m-3 | xy | N | | Total reconstructed PM(RH=50%) - PM25 | kg m-3 | xy | N | | Total reconstructed PM2.5 - PM25_RH35 | kg m-3 | xy | N | | Total reconstructed PM2.5(RH=35%) - PM25_RH50 | kg m-3 | xy | N | | Total reconstructed PM2.5(RH=50%) + PM | kg m-3 | xy | N | | Total Reconstructed Dry Particulate Matter + PM_RH35 | kg m-3 | xy | N | | Total Reconstructed Particulate Matter at 35% Relative Humidity + PM_RH50 | kg m-3 | xy | N | | Total Reconstructed Particulate Matter at 50% Relative Humidity + PM25 | kg m-3 | xy | N | | Total Reconstructed Dry Particulate Matter < 2.5 microns (PM2.5) + PM25_RH35 | kg m-3 | xy | N | | Total Reconstructed Particulate Matter < 2.5 microns (PM2.5) at 35% Relative Humidity + PM25_RH50 | kg m-3 | xy | N | | Total Reconstructed Particulate Matter < 2.5 microns (PM2.5) at 50% Relative Humidity category: INTERNAL #---------------------------------------------------------------------------------------- diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP.20C/NI2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP.20C/NI2G_GridComp_ExtData.rc deleted file mode 100644 index 366cb441..00000000 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP.20C/NI2G_GridComp_ExtData.rc +++ /dev/null @@ -1,27 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------|---------- -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | File -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | Frequency -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------|----------- - -# ======= Nitrate Data Instance ========== -climNO3an1 'kg kg-1' N Y F0 none none NO3AN1 /discover/nobackup/projects/gmao/gmao_ops/pub/fp/das/Y%y4/M%m2/D%d2/GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 2017-02-01T00:00:00P03:00 -climNO3an2 'kg kg-1' N Y F0 none none NO3AN2 /discover/nobackup/projects/gmao/gmao_ops/pub/fp/das/Y%y4/M%m2/D%d2/GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 2017-02-01T00:00:00P03:00 -climNO3an3 'kg kg-1' N Y F0 none none NO3AN3 /discover/nobackup/projects/gmao/gmao_ops/pub/fp/das/Y%y4/M%m2/D%d2/GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 2017-02-01T00:00:00P03:00 - -# ======= Nitrate Sources ======== -EMI_NH3_BB 'kg m-2 s-1' N Y %y4-%m2-%d2T12:00:00 none 0.778 biomass ExtData/chemistry/HFED/v1.0/Y%y4/hfed.emis_nh3.x576_y361_t14.%y4.nc4 -EMI_NH3_AG 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_EN 'kg m-2 s-1' N Y %y4-%m2-%d2t12:00:00 none none nh3 ExtData/chemistry/CEDS/v2021-04-21/sfc/NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4 -EMI_NH3_IN 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_RE 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_TR 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_OC 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none emiss_ocn ExtData/chemistry/GEIA/v0.0.0/sfc/GEIA.emis_NH3.ocean.x576_y361.t12.20080715_12z.nc4 - -NITRATE_HNO3 'mol mol-1' N N %y4-%m2-%d2T12:00:00 none 0.20 hno3 ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 - -NI_regionMask NA N V - none none REGION_MASK ExtData/chemistry/Masks/v0.0.0/sfc/ARCTAS.region_mask.x540_y361.2008.nc - -#DU kg kg-1 N N - none none DU /dev/null -%% - diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP/NI2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP/NI2G_GridComp_ExtData.rc deleted file mode 100644 index de55d3c5..00000000 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP/NI2G_GridComp_ExtData.rc +++ /dev/null @@ -1,27 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------|---------- -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | File -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | Frequency -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------|----------- - -# ======= Nitrate Data Instance ========== -climNO3an1 'kg kg-1' N Y F0 none none NO3AN1 /discover/nobackup/projects/gmao/gmao_ops/pub/fp/das/Y%y4/M%m2/D%d2/GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 2017-02-01T00:00:00P03:00 -climNO3an2 'kg kg-1' N Y F0 none none NO3AN2 /discover/nobackup/projects/gmao/gmao_ops/pub/fp/das/Y%y4/M%m2/D%d2/GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 2017-02-01T00:00:00P03:00 -climNO3an3 'kg kg-1' N Y F0 none none NO3AN3 /discover/nobackup/projects/gmao/gmao_ops/pub/fp/das/Y%y4/M%m2/D%d2/GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 2017-02-01T00:00:00P03:00 - -# ======= Nitrate Sources ======== -EMI_NH3_BB 'kg m-2 s-1' N Y %y4-%m2-%d2T12:00:00 none 0.778 biomass ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_nh3.061.%y4%m2%d2.nc4 -EMI_NH3_AG 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_EN 'kg m-2 s-1' N Y %y4-%m2-%d2t12:00:00 none none nh3 ExtData/chemistry/CEDS/v2021-04-21/sfc/NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4 -EMI_NH3_IN 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_RE 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_TR 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none nh3_emis /dev/null -EMI_NH3_OC 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none emiss_ocn ExtData/chemistry/GEIA/v0.0.0/sfc/GEIA.emis_NH3.ocean.x576_y361.t12.20080715_12z.nc4 - -NITRATE_HNO3 'mol mol-1' N N %y4-%m2-%d2T12:00:00 none 0.20 hno3 ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 - -NI_regionMask NA N V - none none REGION_MASK ExtData/chemistry/Masks/v0.0.0/sfc/ARCTAS.region_mask.x540_y361.2008.nc - -#DU kg kg-1 N N - none none DU /dev/null -%% - diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP/NI2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP/NI2G_GridComp_ExtData.yaml index 3018b116..7d14f853 100644 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP/NI2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/NI2G_GridComp/AMIP/NI2G_GridComp_ExtData.yaml @@ -3,12 +3,11 @@ Collections: template: ExtData/chemistry/Masks/v0.0.0/sfc/ARCTAS.region_mask.x540_y361.2008.nc NI2G_GEIA.emis_NH3.ocean.x576_y361.t12.20080715_12z.nc4: template: ExtData/chemistry/GEIA/v0.0.0/sfc/GEIA.emis_NH3.ocean.x576_y361.t12.20080715_12z.nc4 - NI2G_GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4: - template: /discover/nobackup/projects/gmao/gmao_ops/pub/fp/das/Y%y4/M%m2/D%d2/GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 NI2G_MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4: template: ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 NI2G_NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" NI2G_qfed2.emis_nh3.061.%y4%m2%d2.nc4: template: ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_nh3.061.%y4%m2%d2.nc4 valid_range: "2000-02-29T12:00/2025-01-01" @@ -30,6 +29,11 @@ Samplings: update_reference_time: '0' NI2G_sample_3: extrapolation: persist_closest + NI2G_sample_4: + update_frequency: PT24H + update_offset: PT12H + update_reference_time: '0' + source_time: "2019-01-15T12:00/2019-12-15T00:00:00" Exports: EMI_NH3_AG: @@ -41,10 +45,8 @@ Exports: - {starting: "1960-01-16T12:00", collection: NI2G_hfed.emis_nh3.x576_y361.%y4%m2.nc4, linear_transformation: [0.0, 0.778], regrid: CONSERVE, sample: NI2G_sample_1, variable: biomass} - {starting: "2000-03-01T00:00", collection: NI2G_qfed2.emis_nh3.061.%y4%m2%d2.nc4, linear_transformation: [0.0, 0.778], regrid: CONSERVE, sample: NI2G_sample_1, variable: biomass} EMI_NH3_EN: - collection: NI2G_NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: NI2G_sample_1 - variable: nh3 + - {starting: "1979-01-15T12:00", collection: NI2G_NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4, sample: NI2G_sample_1, regrid: CONSERVE, variable: nh3} + - {starting: "2019-12-15T12:00", collection: NI2G_NH3-em-anthro_CMIP_CEDS_gn.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: NI2G_sample_4, variable: nh3} EMI_NH3_IN: collection: /dev/null regrid: CONSERVE @@ -78,18 +80,10 @@ Exports: sample: NI2G_sample_3 variable: REGION_MASK climNO3an1: - collection: NI2G_GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 - regrid: CONSERVE - sample: NI2G_sample_0 - variable: NO3AN1 + collection: /dev/null climNO3an2: - collection: NI2G_GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 - regrid: CONSERVE - sample: NI2G_sample_0 - variable: NO3AN2 + collection: /dev/null climNO3an3: - collection: NI2G_GEOS.fp.asm.inst3_3d_aer_Nv.%y4%m2%d2_%h2%n2.V01.nc4 - regrid: CONSERVE - sample: NI2G_sample_0 - variable: NO3AN3 + collection: /dev/null + diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/CMakeLists.txt b/ESMF/GOCART2G_GridComp/NI2G_GridComp/CMakeLists.txt index 233b1ae5..bbacc0de 100644 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/CMakeLists.txt +++ b/ESMF/GOCART2G_GridComp/NI2G_GridComp/CMakeLists.txt @@ -2,10 +2,10 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES GA_Environment MAPL Chem_Shared2G Process_Library esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES GA_Environment MAPL Chem_Shared2G Process_Library ESMF::ESMF NetCDF::NetCDF_Fortran) -mapl_acg (${this} NI2G_StateSpecs.rc - IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS +mapl_acg (${this} NI2G_StateSpecs.rc + IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS GET_POINTERS DECLARE_POINTERS) file (GLOB_RECURSE rc_files CONFIGURE_DEPENDS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.rc *.yaml) diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridCompMod.F90 b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridCompMod.F90 index 0305c43c..ca497816 100644 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridCompMod.F90 +++ b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridCompMod.F90 @@ -3,7 +3,7 @@ !============================================================================= !BOP -! !MODULE: NI2G_GridCompMod - GOCART Nitrate gridded component +! !MODULE: NI2G_GridCompMod - GOCART Nitrate gridded component ! !INTERFACE: module NI2G_GridCompMod @@ -11,7 +11,7 @@ module NI2G_GridCompMod ! !USES: use ESMF use MAPL - use GOCART2G_MieMod + use GOCART2G_MieMod use Chem_AeroGeneric use iso_c_binding, only: c_loc, c_f_pointer, c_ptr @@ -42,6 +42,7 @@ module NI2G_GridCompMod ! !DESCRIPTION: This module implements GOCART's Nitrate (NI) Gridded Component. ! !REVISION HISTORY: +! 4January2024 Collow - Updated call for ChemSettling ! 01July2020 Sherman, da Silva, Darmenov, Clune - First attempt at refactoring. !EOP @@ -55,7 +56,6 @@ module NI2G_GridCompMod type, extends(GA_Environment) :: NI2G_GridComp !logical :: first logical :: recycle_HNO3 = .false. - !real, allocatable :: xhno3(:,:,:) ! buffer for NITRATE_HNO3 [kg/(m^2 sec)]; moved to ESMF internal state real, allocatable :: rmedDU(:), rmedSS(:) ! DU and SS radius real, allocatable :: fnumDU(:), fnumSS(:) ! DU and SS particles per kg mass type(ThreadWorkspace), allocatable :: workspaces(:) @@ -70,7 +70,7 @@ module NI2G_GridCompMod !============================================================================ !BOP -! !IROUTINE: SetServices +! !IROUTINE: SetServices ! !INTERFACE: subroutine SetServices ( GC, RC ) @@ -81,7 +81,7 @@ subroutine SetServices ( GC, RC ) ! DESCRIPTION: This version uses MAPL_GenericSetServices, which sets ! the Initialize and Finalize services to generic versions. It also -! allocates our instance of a generic state and puts it in the +! allocates our instance of a generic state and puts it in the ! gridded component (GC). Here we only set the two-stage run method ! and declare the data services. @@ -101,6 +101,7 @@ subroutine SetServices ( GC, RC ) real :: DEFVAL logical :: data_driven=.true. + logical :: file_exists integer :: num_threads __Iam__('SetServices') @@ -121,11 +122,13 @@ subroutine SetServices ( GC, RC ) num_threads = MAPL_get_num_threads() allocate(self%workspaces(0:num_threads-1), __STAT__) -! Load resource file +! Load resource file ! ------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'NI2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - if (status /= 0) then + inquire(file='NI2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'NI2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else if (mapl_am_i_root()) print*,'NI2G_instance_'//trim(COMP_NAME)//'.rc does not exist! Loading NI2G_instance_NI.rc instead' call ESMF_ConfigLoadFile (cfg, 'NI2G_instance_NI.rc', __RC__) end if @@ -147,7 +150,7 @@ subroutine SetServices ( GC, RC ) DEFVAL = 0.0 -! Import and Internal states if data instance +! Import and Internal states if data instance ! ------------------------------------------- if (data_driven) then @@ -227,7 +230,7 @@ subroutine SetServices ( GC, RC ) end if ! (data_driven) -! Import, Export, Internal states for computational instance +! Import, Export, Internal states for computational instance ! ---------------------------------------------------------- if (.not. data_driven) then #include "NI2G_Export___.h" @@ -263,27 +266,27 @@ end subroutine SetServices !============================================================================ !BOP -! !IROUTINE: Initialize +! !IROUTINE: Initialize ! !INTERFACE: subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: IMPORT ! Import state type (ESMF_State), intent(inout) :: EXPORT ! Export state type (ESMF_Clock), intent(inout) :: CLOCK ! The clock integer, optional, intent( out) :: RC ! Error code -! !DESCRIPTION: This initializes the Nitrate gridded component. It primaryily -! fills GOCART's AERO states with its nitrate fields. +! !DESCRIPTION: This initializes the Nitrate gridded component. It primaryily +! fills GOCART's AERO states with its nitrate fields. -! !REVISION HISTORY: +! !REVISION HISTORY: ! 30June2020 E.Sherman First attempt at refactoring !EOP !============================================================================ -! !Locals +! !Locals character (len=ESMF_MAXSTR) :: COMP_NAME type (MAPL_MetaComp), pointer :: MAPL type (ESMF_Config) :: universal_cfg @@ -312,7 +315,6 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) type(ESMF_Calendar) :: calendar type(ESMF_Time) :: currentTime - type(ESMF_Alarm) :: alarm_HNO3 type(ESMF_Time) :: ringTime type(ESMF_TimeInterval) :: ringInterval integer :: year, month, day, hh, mm, ss @@ -323,10 +325,11 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) integer, allocatable, dimension(:) :: channels_ integer :: nmom_ character(len=ESMF_MAXSTR) :: file_ + logical :: file_exists __Iam__('Initialize') !**************************************************************************** -! Begin... +! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- @@ -334,10 +337,10 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) Iam = trim(COMP_NAME) // '::' //trim(Iam) ! Get my internal MAPL_Generic state -! ----------------------------------- +! ----------------------------------- call MAPL_GetObjectFromGC (GC, MAPL, __RC__) - -! Get my internal private state + +! Get my internal private state ! ----------------------------- call ESMF_UserCompGetInternalState(GC, 'NI2G_GridComp', wrap, STATUS) VERIFY_(STATUS) @@ -345,32 +348,30 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! Get dimensions ! --------------- - !call MAPL_GridGet (grid, globalCellCountPerDim=dims, __RC__ ) call MAPL_GridGet (grid, localCellCountPerDim=dims, __RC__ ) km = dims(3) self%km = km - !allocate(self%xhno3(dims(1),dims(2),dims(3)), __STAT__) - ! Get DTs ! ------- call MAPL_GetResource(mapl, HDT, Label='RUN_DT:', __RC__) call MAPL_GetResource(mapl, CDT, Label='GOCART_DT:', default=real(HDT), __RC__) self%CDT = CDT -! Load resource file and get number of bins +! Load resource file and get number of bins ! ------------------------------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'NI2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - if (status /= 0) then - if (mapl_am_i_root()) print*,'NI2G_instance_'//trim(COMP_NAME)//'.rc does not exist! & - loading NI2G_instance_NI.rc instead' - call ESMF_ConfigLoadFile( cfg, 'NI2G_instance_NI.rc', __RC__) + inquire(file='NI2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'NI2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else + if (mapl_am_i_root()) print*,'NI2G_instance_'//trim(COMP_NAME)//'.rc does not exist! Loading NI2G_instance_NI.rc instead' + call ESMF_ConfigLoadFile (cfg, 'NI2G_instance_NI.rc', __RC__) end if !self%first = .true. -! Call Generic Initialize +! Call Generic Initialize ! ---------------------------------------- call MAPL_GenericInitialize (GC, import, export, clock, __RC__) @@ -378,9 +379,6 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! ----------------------------------- call MAPL_Get ( mapl, INTERNAL_ESMF_STATE = internal, __RC__) -! xhno3 is moved to ESMF internal state -! call MAPL_GetPointer(internal, NAME='XHNO3', ptr=xhno3, __RC__) - ! Is NI data driven? ! ------------------ call determine_data_driven (COMP_NAME, data_driven, __RC__) @@ -402,25 +400,6 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) call ESMF_AttributeGet(field, name='fnum', valueList=self%fnumSS, __RC__) end if -! Se HNO3 recycle alarm - if (.not. data_driven) then - call ESMF_ClockGet(clock, calendar=calendar, currTime=currentTime, __RC__) - call ESMF_TimeGet(currentTime, YY=year, MM=month, DD=day, H=hh, M=mm, S=ss, __RC__) - call ESMF_TimeSet(ringTime, YY=year, MM=month, DD=day, H=0, M=0, S=0, __RC__) - call ESMF_TimeIntervalSet(ringInterval, H=3, calendar=calendar, __RC__) - - do while (ringTime < currentTime)! DO WE NEED THIS? - ringTime = currentTime + ringInterval - end do - - alarm_HNO3 = ESMF_AlarmCreate(Clock = clock, & - Name = 'HNO3_RECYCLE_ALARM', & - RingInterval = ringInterval, & - RingTime = currentTime, & - Enabled = .true. , & - Sticky = .false. , __RC__) - end if - ! If this is a data component, the data is provided in the import ! state via ExtData instead of the actual GOCART children ! ---------------------------------------------------------------- @@ -491,7 +470,7 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) end if self%instance = instance - + ! Create Radiation Mie Table ! -------------------------- call ESMF_ConfigGetAttribute (cfg, file_, label="aerosol_radBands_optics_file:", __RC__ ) @@ -552,13 +531,13 @@ end subroutine Initialize !============================================================================ !BOP -! !IROUTINE: Run +! !IROUTINE: Run ! !INTERFACE: subroutine Run (GC, import, export, clock, rc) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -579,7 +558,7 @@ subroutine Run (GC, import, export, clock, rc) __Iam__('Run') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -612,13 +591,13 @@ end subroutine Run !============================================================================ !BOP -! !IROUTINE: Run1 +! !IROUTINE: Run1 ! !INTERFACE: subroutine Run1 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -641,7 +620,7 @@ subroutine Run1 (GC, import, export, clock, RC) __Iam__('Run1') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -701,14 +680,14 @@ end subroutine Run1 !============================================================================ !BOP -! !IROUTINE: Run2 +! !IROUTINE: Run2 ! !INTERFACE: subroutine Run2 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -733,7 +712,6 @@ subroutine Run2 (GC, import, export, clock, RC) real, pointer, dimension(:,:) :: flux_ptr real, pointer, dimension(:,:,:) :: fluxWT_ptr - type (ESMF_ALARM) :: alarm logical :: alarm_is_ringing integer :: i1, j1, i2, j2, km real, target,allocatable, dimension(:,:,:) :: RH20,RH80 @@ -747,7 +725,7 @@ subroutine Run2 (GC, import, export, clock, RC) __Iam__('Run2') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -773,23 +751,20 @@ subroutine Run2 (GC, import, export, clock, RC) allocate(dqa, mold=lwi, __STAT__) allocate(drydepositionfrequency, mold=lwi, __STAT__) -! check hno3 alarm - call ESMF_ClockGetAlarm(clock, 'HNO3_RECYCLE_ALARM', alarm, __RC__) - alarm_is_ringing = ESMF_AlarmIsRinging(alarm, __RC__) + alarm_is_ringing = daily_alarm(clock,30000,_RC) ! Save local copy of HNO3 for first pass through run method regardless thread = MAPL_get_current_thread() workspace => self%workspaces(thread) - if (workspace%first) then - xhno3 = MAPL_UNDEF - workspace%first = .false. - end if + !if (workspace%first) then + !xhno3 = MAPL_UNDEF + !workspace%first = .false. + !end if ! Recycle HNO3 every 3 hours if (alarm_is_ringing) then xhno3 = NITRATE_HNO3 - !call ESMF_AlarmRingerOff(alarm, __RC__) end if if (associated(NIPNO3AQ)) NIPNO3AQ(:,:) = 0. @@ -805,56 +780,36 @@ subroutine Run2 (GC, import, export, clock, RC) MAPL_PI, MAPL_RUNIV/1000., airdens, t, rh2, delp, DU, & SS, self%rmedDU*1.e-6, self%rmedSS*1.e-6, & self%fnumDU, self%fnumSS, self%km, self%klid, & - self%cdt, MAPL_GRAV, fMassHNO3, fMassNO3, NO3an1, NO3an2, & + self%cdt, MAPL_GRAV, fMassHNO3, fMassNO3, NO3an1, NO3an2, & NO3an3, HNO3CONC, HNO3SMASS, HNO3CMASS, __RC__) +! Save local copy of HNO3 for first pass through run method regardless ! NI Settling ! ----------- -! Because different bins having different swelling coefficients I need to -! handle the call to settling differently. - -! Ammonium - settles like ammonium sulfate (rhflag = 3) - rhflag = 3 -! call Chem_SettlingSimpleOrig (self%km, self%klid, rhflag, MAPL_GRAV, self%cdt, & -! 1.e-6*self%radius(nNH4a), self%rhop(nNH4a), & -! NH4a, t, airdens, rh2, delp, zle, NH4SD, __RC__) - call Chem_SettlingSimple (self%km, self%klid, rhFlag, self%cdt, MAPL_GRAV, & - self%radius(nNH4a)*1.e-6, self%rhop(nNH4a), NH4a, t, & - airdens, rh2, zle, delp, NH4SD, __RC__) - -! Nitrate bin 1 - settles like ammonium sulfate (rhflag = 3) - rhflag = 3 +! Ammonium - settles like bin 1 of nitrate + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, 1, self%cdt, MAPL_GRAV, & + NH4a, t, airdens, rh2, zle, delp, NH4SD, __RC__) +! Nitrate Bin 1 nullify(flux_ptr) if (associated(NISD)) flux_ptr => NISD(:,:,1) -! call Chem_SettlingSimpleOrig (self%km, self%klid, rhFlag, MAPL_GRAV, self%cdt, & -! 1.e-6*self%radius(nNO3an1), self%rhop(nNO3an1), & -! NO3an1, t, airdens, rh2, delp, zle, flux_ptr, __RC__) - call Chem_SettlingSimple (self%km, self%klid, rhFlag, self%cdt, MAPL_GRAV, & - self%radius(nNO3an1)*1.e-6, self%rhop(nNO3an1), NO3an1, & - t, airdens, rh2, zle, delp, flux_ptr, __RC__) - -! Nitrate bin 2 - settles like sea salt (rhflag = 2) - rhflag = 2 + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, 1, self%cdt, MAPL_GRAV, & + NO3an1, t, airdens, & + rh2, zle, delp, flux_ptr, __RC__) +! Nitrate Bin 2 nullify(flux_ptr) if (associated(NISD)) flux_ptr => NISD(:,:,2) -! call Chem_SettlingSimpleOrig (self%km, self%klid, rhFlag, MAPL_GRAV, self%cdt, & -! 1.e-6*self%radius(nNO3an2), self%rhop(nNO3an2), & -! NO3an2, t, airdens, rh2, delp, zle, flux_ptr, __RC__) - call Chem_SettlingSimple (self%km, self%klid, rhFlag, self%cdt, MAPL_GRAV, & - self%radius(nNO3an2)*1.e-6, self%rhop(nNO3an2), NO3an2, & - t, airdens, rh2, zle, delp, flux_ptr, __RC__) - -! Nitrate bin 1 - settles like dust (rhflag = 0) - rhflag = 0 + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, 2, self%cdt, MAPL_GRAV, & + NO3an2, t, airdens, & + rh2, zle, delp, flux_ptr, __RC__) +! Nitrate Bin 3 nullify(flux_ptr) if (associated(NISD)) flux_ptr => NISD(:,:,3) -! call Chem_SettlingSimpleOrig (self%km, self%klid, rhFlag, MAPL_GRAV, self%cdt, & -! 1.e-6*self%radius(nNO3an3), self%rhop(nNO3an3), & -! NO3an3, t, airdens, rh2, delp, zle, flux_ptr, __RC__) - call Chem_SettlingSimple (self%km, self%klid, rhFlag, self%cdt, MAPL_GRAV, & - self%radius(nNO3an3)*1.e-6, self%rhop(nNO3an3), NO3an3, & - t, airdens, rh2, zle, delp, flux_ptr, __RC__) + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, 3, self%cdt, MAPL_GRAV, & + NO3an3, t, airdens, & + rh2, zle, delp, flux_ptr, __RC__) + + ! NI Deposition ! ----------- @@ -862,6 +817,7 @@ subroutine Run2 (GC, import, export, clock, RC) call DryDeposition(self%km, t, airdens, zle, lwi, ustar, zpbl, sh,& MAPL_KARMAN, cpd, MAPL_GRAV, z0h, drydepositionfrequency, __RC__ ) +! Save local copy of HNO3 for first pass through run method regardless ! NH3 dqa = 0. do i=1,ubound(lwi,1) @@ -873,6 +829,7 @@ subroutine Run2 (GC, import, export, clock, RC) end if end do end do +! Save local copy of HNO3 for first pass through run method regardless NH3(:,:,self%km) = NH3(:,:,self%km) - dqa if( associated(NH3DP) ) NH3DP = dqa*delp(:,:,self%km)/MAPL_GRAV/self%cdt @@ -912,6 +869,7 @@ subroutine Run2 (GC, import, export, clock, RC) call WetRemovalGOCART2G (self%km, self%klid, self%nbins, self%nbins, 1, self%cdt, 'NH3', & KIN, MAPL_GRAV, fwet, NH3, ple, t, airdens, & pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, fluxWT_ptr, __RC__) +! Save local copy of HNO3 for first pass through run method regardless if (associated(NH3WT)) NH3WT = fluxWT_ptr(:,:,1) ! NH4a @@ -946,6 +904,7 @@ subroutine Run2 (GC, import, export, clock, RC) KIN, MAPL_GRAV, fwet, NO3an3, ple, t, airdens, & pfl_lsan, pfi_lsan, cn_prcp, ncn_prcp, NIWT, __RC__) +! Save local copy of HNO3 for first pass through run method regardless ! Compute desired output diagnostics ! ---------------------------------- ! Certain variables are multiplied by 1.0e-9 to convert from nanometers to meters @@ -959,6 +918,7 @@ subroutine Run2 (GC, import, export, clock, RC) aerosol=aerosol, grav=MAPL_GRAV, tmpu=t, rhoa=airdens, rh=rh2, u=u, v=v, & delp=delp, ple=ple, tropp=tropp,& sfcmass=NH4SMASS, colmass=NH4CMASS, mass=NH4MASS, conc=NH4CONC, __RC__) +! Save local copy of HNO3 for first pass through run method regardless aerosol(:,:,:,1) = NH3 call Aero_Compute_Diags (mie=self%diag_Mie, km=self%km, klid=self%klid, nbegin=1, & @@ -968,6 +928,7 @@ subroutine Run2 (GC, import, export, clock, RC) aerosol=aerosol, grav=MAPL_GRAV, tmpu=t, rhoa=airdens, rh=rh2, u=u, v=v, & delp=delp, ple=ple, tropp=tropp,& sfcmass=NH3SMASS, colmass=NH3CMASS, mass=NH3MASS, conc=NH3CONC, __RC__) +! Save local copy of HNO3 for first pass through run method regardless aerosol(:,:,:,1) = NO3an1 call Aero_Compute_Diags (mie=self%diag_Mie, km=self%km, klid=self%klid, nbegin=1, & @@ -979,6 +940,7 @@ subroutine Run2 (GC, import, export, clock, RC) sfcmass=NISMASS25, colmass=NICMASS25, mass=NIMASS25, conc=NICONC25, & exttau25=NIEXTT25, scatau25=NISCAT25, exttaufm=NIEXTTFM, scataufm=NISCATFM, & NO3nFlag=.true., __RC__) +! Save local copy of HNO3 for first pass through run method regardless aerosol(:,:,:,1) = NO3an1 aerosol(:,:,:,2) = NO3an2 @@ -1008,8 +970,9 @@ subroutine Run2 (GC, import, export, clock, RC) wavelengths_vertint=self%wavelengths_vertint*1.0e-9, aerosol=aerosol, & grav=MAPL_GRAV, tmpu=t, rhoa=airdens, & rh=rh20,u=u, v=v, delp=delp, ple=ple,tropp=tropp, & - extcoef = NIEXTCOEFRH20, scacoef=NISCACOEFRH20, __RC__) - + extcoef = NIEXTCOEFRH20, scacoef=NISCACOEFRH20, __RC__) +! Save local copy of HNO3 for first pass through run method regardless + RH80(:,:,:) = 0.80 call Aero_Compute_Diags (mie=self%diag_Mie, km=self%km, klid=self%klid, nbegin=1, & nbins=3, & @@ -1017,11 +980,14 @@ subroutine Run2 (GC, import, export, clock, RC) wavelengths_vertint=self%wavelengths_vertint*1.0e-9, aerosol=aerosol, & grav=MAPL_GRAV, tmpu=t, rhoa=airdens, & rh=rh80,u=u, v=v, delp=delp, ple=ple,tropp=tropp, & - extcoef = NIEXTCOEFRH80, scacoef=NISCACOEFRH80,__RC__) - - deallocate(RH20,RH80) + + extcoef = NIEXTCOEFRH80, scacoef=NISCACOEFRH80,__RC__) +! Save local copy of HNO3 for first pass through run method regardless + + deallocate(RH20,RH80) + RETURN_(ESMF_SUCCESS) - + end subroutine Run2 @@ -1035,13 +1001,13 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: IMPORT ! Import state type (ESMF_State), intent(inout) :: EXPORT ! Export state type (ESMF_State), intent(inout) :: INTERNAL ! Interal state integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. +! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. !EOP !============================================================================ @@ -1055,7 +1021,7 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) __Iam__('Run_data') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -1119,7 +1085,7 @@ subroutine aerosol_optics(state, rc) __Iam__('NI2G::aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1136,7 +1102,7 @@ subroutine aerosol_optics(state, rc) band = 0 call ESMF_AttributeGet(state, name='band_for_aerosol_optics', value=band, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, ple, trim(fld_name), __RC__) @@ -1240,7 +1206,7 @@ subroutine mie_(mie, nbins, band, q, rh, bext_s, bssa_s, basym_s, rc) bext_s = bext_s + bext ! extinction bssa_s = bssa_s + (bssa*bext) ! scattering extinction - basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction + basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction end do @@ -1283,7 +1249,7 @@ subroutine monochromatic_aerosol_optics(state, rc) __Iam__('NI2G:: monochromatic_aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1300,7 +1266,7 @@ subroutine monochromatic_aerosol_optics(state, rc) call ESMF_AttributeGet(state, name='wavelength_for_aerosol_optics', value=wavelength, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, ple, trim(fld_name), __RC__) @@ -1361,5 +1327,38 @@ subroutine monochromatic_aerosol_optics(state, rc) end subroutine monochromatic_aerosol_optics + function daily_alarm(clock,freq,rc) result(is_ringing) + logical :: is_ringing + type(ESMF_Clock), intent(in) :: clock + integer, intent(in) :: freq + integer, optional, intent(out) :: rc + + type(ESMF_Time) :: current_time + integer :: status,year,month,day,hour,minute,second,initial_time,int_seconds + integer :: nhh,nmm,nss,freq_sec + + type(ESMF_TimeInterval) :: new_diff,esmf_freq + type(ESMF_Time) :: reff_time,new_esmf_time + + call ESMF_ClockGet(clock,currTIme=current_time,_RC) + call ESMF_TimeGet(current_time,yy=year,mm=month,dd=day,h=hour,m=minute,s=second,_RC) + + int_seconds = 0 + call MAPL_UnpackTIme(freq,nhh,nmm,nss) + is_ringing = .false. + call ESMF_TimeSet(reff_time,yy=year,mm=month,dd=day,h=0,m=0,s=0,_RC) + new_esmf_time = reff_time + call ESMF_TimeIntervalSet(esmf_freq,h=nhh,m=nmm,s=nss ,_RC) + do while (int_seconds < 86400) + if ( new_esmf_time == current_time) then + is_ringing = .true. + exit + end if + new_esmf_time = new_esmf_time + esmf_freq + new_diff = new_esmf_time - reff_time + call ESMF_TimeIntervalGet(new_diff,s=int_seconds,_RC) + enddo + _RETURN(_SUCCESS) + end function end module NI2G_GridCompMod diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridComp_ExtData.yaml index 8410c444..d927e12a 100644 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_GridComp_ExtData.yaml @@ -34,7 +34,8 @@ Samplings: update_frequency: PT24H update_offset: PT12H update_reference_time: '0' - source_time: "2019-01-15T12:00:00/2019-12-17T00:00:00" + source_time: "2019-01-15T12:00:00/2019-12-15T00:00:00" + Exports: EMI_NH3_AG: diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_StateSpecs.rc b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_StateSpecs.rc index 039fa4c7..b0cc0632 100644 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_StateSpecs.rc +++ b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_StateSpecs.rc @@ -49,12 +49,12 @@ category: EXPORT NH3MASS | kg/kg | xyz | C | | Ammonia Mass Mixing Ratio NH4MASS | kg/kg | xyz | C | | Ammonium Aerosol Mass Mixing Ratio NIMASS | kg/kg | xyz | C | | Nitrate Mass Mixing Ratio - NIMASS25 | kg/kg | xyz | C | | Nitrate Mass Mixing Ratio [PM2.5] + NIMASS25 | kg/kg | xyz | C | | Nitrate Mass Mixing Ratio of Particulate Matter < 2.5 microns (PM2.5) HNO3CONC | kg m-3 | xyz | C | | Nitric Acid Mass Concentration NH3CONC | kg m-3 | xyz | C | | Ammonia Mass Concentration NH4CONC | kg m-3 | xyz | C | | Ammonium Mass Concentration NICONC | kg m-3 | xyz | C | | Nitrate Mass Concentration - NICONC25 | kg m-3 | xyz | C | | Nitrate Mass Concentration [PM2.5] + NICONC25 | kg m-3 | xyz | C | | Nitrate Mass Concentration of Particulate Matter < 2.5 microns (PM2.5) NIEXTCOEF | m-1 | xyz | C | size(self%wavelengths_profile) | Nitrate Extinction Coefficient NIEXTCOEFRH20 | m-1 | xyz | C | size(self%wavelengths_profile) | Nitrate Extinction Coefficient - fixed RH=20% NIEXTCOEFRH80 | m-1 | xyz | C | size(self%wavelengths_profile) | Nitrate Extinction Coefficient - fixed RH=80% @@ -83,20 +83,20 @@ category: EXPORT NH3SMASS | kg m-3 | xy | N | | Ammonia Surface Mass Concentration NH4SMASS | kg m-3 | xy | N | | Ammonium Surface Mass Concentration NISMASS | kg m-3 | xy | N | | Nitrate Surface Mass Concentration - NISMASS25 | kg m-3 | xy | N | | Nitrate Surface Mass Concentration [PM2.5] + NISMASS25 | kg m-3 | xy | N | | Nitrate Surface Mass Concentration of Particulate Matter < 2.5 microns (PM2.5) HNO3CMASS | kg m-3 | xy | N | | Nitric Acid Column Mass Density NH3CMASS | kg m-3 | xy | N | | Ammonia Column Mass Density NH4CMASS | kg m-3 | xy | N | | Ammonium Column Mass Density NICMASS | kg m-2 | xy | N | | Nitrate Column Mass Density - NICMASS25 | kg m-2 | xy | N | | Nitrate Column Mass Density [PM2.5] - NIEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Extinction AOT - PM 1.0 um - NISCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Scattering AOT - PM 1.0 um - NIEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Extinction AOT - PM 2.5 um - NISCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Scattering AOT - PM 2.5 um - NIEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Extinction AOT - NISTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Extinction AOT Stratosphere - NISCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Scattering AOT - NISTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Scattering AOT Stratosphere + NICMASS25 | kg m-2 | xy | N | | Nitrate Column Mass Density of Particulate Matter < 2.5 microns (PM2.5) + NIEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Aerosol Optical Depth from Particulate Matter < 1 micron (PM1.0) + NISCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Aerosol Optical Depth Due to Scattering from Particulate Matter < 1 micron (PM1.0) + NIEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Aerosol Optical Depth from Particulate Matter < 2.5 microns (PM2.5) + NISCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Aerosol Optical Depth Due to Scattering from Particulate Matter < 2.5 microns (PM2.5) + NIEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Aerosol Optical Depth + NISTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Stratospheric Aerosol Optical Thickness + NISCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Aerosol Optical Depth Due to Scattering + NISTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Nitrate Stratospheric Aerosol Optical Thickness Due to Scattering NIANGSTR | 1 | xy | N | | Nitrate Angstrom parameter [470-870 nm] NIFLUXU | kg m-1 s-1 | xy | N | | Nitrate column u-wind mass flux NIFLUXV | kg m-1 s-1 | xy | N | | Nitrate column v-wind mass flux @@ -112,7 +112,7 @@ category: INTERNAL NO3an1 |kg kg-1 | xyz | C | MAPL_RestartOptional | T | DYNAMICS:TURBULENCE:MOIST | Nitrate size bin 001 NO3an2 |kg kg-1 | xyz | C | MAPL_RestartOptional | T | DYNAMICS:TURBULENCE:MOIST | Nitrate size bin 002 NO3an3 |kg kg-1 | xyz | C | MAPL_RestartOptional | T | DYNAMICS:TURBULENCE:MOIST | Nitrate size bin 003 - XHNO3 |kg m-2 s-1| xyz | C | MAPL_RestartSkip | F | | buffer for NITRATE_HNO3 + XHNO3 |kg m-2 s-1| xyz | C | | F | | buffer for NITRATE_HNO3 #******************************************************** # diff --git a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_instance_NI.rc b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_instance_NI.rc index 23647978..92c97e44 100644 --- a/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_instance_NI.rc +++ b/ESMF/GOCART2G_GridComp/NI2G_GridComp/NI2G_instance_NI.rc @@ -5,7 +5,7 @@ nbins: 5 aerosol_radBands_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opticsBands_NI.v2_5.RRTMG.nc -aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/optics_NI.v2_5.nc +aerosol_monochromatic_optics_file: /discover/nobackup/pcolarco/fvInput/AeroCom/x/optics_NI.v2_5.nc # Scavenging efficiency per bin [km-1] fscav: 0.0 0.4 0.4 0.4 0.4 @@ -29,5 +29,3 @@ particle_radius_number: 0.0118 0.0118 0.0118 0.0118 0.0118 sigma: 2.0 2.0 2.0 2.0 2.0 pressure_lid_in_hPa: 0.01 - -rhFlag: 0 diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP.20C/SS2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP.20C/SS2G_GridComp_ExtData.rc deleted file mode 120000 index f4a705ce..00000000 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP.20C/SS2G_GridComp_ExtData.rc +++ /dev/null @@ -1 +0,0 @@ -../SS2G_GridComp_ExtData.rc \ No newline at end of file diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP/SS2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP/SS2G_GridComp_ExtData.rc deleted file mode 120000 index f4a705ce..00000000 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP/SS2G_GridComp_ExtData.rc +++ /dev/null @@ -1 +0,0 @@ -../SS2G_GridComp_ExtData.rc \ No newline at end of file diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP/SS2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP/SS2G_GridComp_ExtData.yaml index 251e1063..ffc5b17a 100644 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP/SS2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/SS2G_GridComp/AMIP/SS2G_GridComp_ExtData.yaml @@ -1,8 +1,7 @@ Collections: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 + valid_range: "2008-01-01T12:00:00/2008-12-15T12:00:00" Samplings: SS2G_sample_0: @@ -10,103 +9,64 @@ Samplings: Exports: climSSDP001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP001 + collection: /dev/null climSSDP002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP002 + collection: /dev/null climSSDP003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP003 + collection: /dev/null climSSDP004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP004 + collection: /dev/null climSSDP005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP005 + collection: /dev/null climSSSD001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD001 + collection: /dev/null climSSSD002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD002 + collection: /dev/null climSSSD003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD003 + collection: /dev/null climSSSD004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD004 + collection: /dev/null climSSSD005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD005 + collection: /dev/null climSSSV001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV001 + collection: /dev/null climSSSV002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV002 + collection: /dev/null climSSSV003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV003 + collection: /dev/null climSSSV004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV004 + collection: /dev/null climSSSV005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV005 + collection: /dev/null climSSWT001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT001 + collection: /dev/null climSSWT002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT002 + collection: /dev/null climSSWT003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT003 + collection: /dev/null climSSWT004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT004 + collection: /dev/null climSSWT005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT005 + collection: /dev/null climss001: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss001 + variable: SS001 climss002: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss002 + variable: SS002 climss003: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss003 + variable: SS003 climss004: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss004 + variable: SS004 climss005: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss005 + variable: SS005 + diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/CMakeLists.txt b/ESMF/GOCART2G_GridComp/SS2G_GridComp/CMakeLists.txt index 06c1f146..306eea65 100644 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/CMakeLists.txt +++ b/ESMF/GOCART2G_GridComp/SS2G_GridComp/CMakeLists.txt @@ -2,10 +2,10 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES MAPL GA_Environment Chem_Shared2G Process_Library esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES MAPL GA_Environment Chem_Shared2G Process_Library ESMF::ESMF NetCDF::NetCDF_Fortran) -mapl_acg (${this} SS2G_StateSpecs.rc - IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS +mapl_acg (${this} SS2G_StateSpecs.rc + IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS GET_POINTERS DECLARE_POINTERS) file (GLOB_RECURSE rc_files CONFIGURE_DEPENDS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.rc *.yaml) diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridCompMod.F90 b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridCompMod.F90 index c65a0407..c9b6f007 100644 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridCompMod.F90 +++ b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridCompMod.F90 @@ -3,7 +3,7 @@ !============================================================================= !BOP -! !MODULE: SS2G_GridCompMod - GOCART refactoring of the SS gridded component +! !MODULE: SS2G_GridCompMod - GOCART refactoring of the SS gridded component ! !INTERFACE: module SS2G_GridCompMod @@ -11,7 +11,7 @@ module SS2G_GridCompMod ! !USES: use ESMF use MAPL - use GOCART2G_MieMod + use GOCART2G_MieMod use Chem_AeroGeneric use iso_c_binding, only: c_loc, c_f_pointer, c_ptr @@ -45,7 +45,7 @@ module SS2G_GridCompMod real, allocatable :: rlow(:) ! particle effective radius lower bound [um] real, allocatable :: rup(:) ! particle effective radius upper bound [um] real, allocatable :: rmed(:) ! number median radius [um] - integer :: sstEmisFlag ! Choice of SST correction to emissions: + integer :: sstEmisFlag ! Choice of SST correction to emissions: ! 0 - none; 1 - Jaegle et al. 2011; 2 - GEOS5 logical :: hoppelFlag ! Apply the Hoppel correction to emissions (Fan and Toon, 2011) logical :: weibullFlag ! Apply the Weibull distribution to wind speed for emissions (Fan and Toon, 2011) @@ -64,7 +64,7 @@ module SS2G_GridCompMod !============================================================================ !BOP -! !IROUTINE: SetServices +! !IROUTINE: SetServices ! !INTERFACE: subroutine SetServices ( GC, RC ) @@ -75,7 +75,7 @@ subroutine SetServices ( GC, RC ) ! DESCRIPTION: This version uses MAPL_GenericSetServices, which sets ! the Initialize and Finalize services to generic versions. It also -! allocates our instance of a generic state and puts it in the +! allocates our instance of a generic state and puts it in the ! gridded component (GC). Here we only set the two-stage run method ! and declare the data services. @@ -96,6 +96,7 @@ subroutine SetServices ( GC, RC ) integer :: i real :: DEFVAL logical :: data_driven=.true. + logical :: file_exists __Iam__('SetServices') @@ -112,11 +113,13 @@ subroutine SetServices ( GC, RC ) allocate (self, __STAT__) wrap%ptr => self -! Load resource file +! Load resource file ! ------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'SS2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - if (status /= 0) then + inquire(file='SS2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'SS2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else if (mapl_am_i_root()) print*,'SS2G_instance_'//trim(COMP_NAME)//'.rc does not exist! loading SS2G_instance_SS.rc instead' call ESMF_ConfigLoadFile (cfg, 'SS2G_instance_SS.rc', __RC__) end if @@ -151,7 +154,7 @@ subroutine SetServices ( GC, RC ) DEFVAL = 0.0 -! Import and Internal states if data instance +! Import and Internal states if data instance ! ------------------------------------------- if (data_driven) then @@ -167,6 +170,16 @@ subroutine SetServices ( GC, RC ) add2export=.true., __RC__) + call MAPL_AddInternalSpec(gc,& + & short_name='DEEP_LAKES_MASK', & + & units='1', & + & dims=MAPL_DimsHorzOnly, & + & vlocation=MAPL_VlocationNone, & + & add2export=.false., & + & long_name='Deep Lakes Mask', & + & _RC) + + ! Pressure at layer edges ! ----------------------- call MAPL_AddImportSpec(GC, & @@ -206,7 +219,7 @@ subroutine SetServices ( GC, RC ) VLOCATION = MAPL_VLocationCenter, & RESTART = MAPL_RestartSkip, __RC__) -! ! wet deposition +! ! wet deposition call MAPL_AddImportSpec(GC, & SHORT_NAME = 'climSSWT'//trim(field_name), & LONG_NAME = 'Sea Salt wet removal (bin '//trim(field_name)//')', & @@ -236,7 +249,7 @@ subroutine SetServices ( GC, RC ) end if ! (data_driven) -! Import, Export, Internal states for computational instance +! Import, Export, Internal states for computational instance ! ---------------------------------------------------------- if (.not. data_driven) then #include "SS2G_Export___.h" @@ -282,27 +295,27 @@ end subroutine SetServices !============================================================================ !BOP -! !IROUTINE: Initialize +! !IROUTINE: Initialize ! !INTERFACE: subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: IMPORT ! Import state type (ESMF_State), intent(inout) :: EXPORT ! Export state type (ESMF_Clock), intent(inout) :: CLOCK ! The clock integer, optional, intent( out) :: RC ! Error code -! !DESCRIPTION: This initializes SS' Grid Component. It primaryily fills -! GOCART's AERO states with its sea salt fields. +! !DESCRIPTION: This initializes SS' Grid Component. It primaryily fills +! GOCART's AERO states with its sea salt fields. -! !REVISION HISTORY: +! !REVISION HISTORY: ! 24oct2019 E.Sherman First attempt at refactoring !EOP !============================================================================ -! !Locals +! !Locals character (len=ESMF_MAXSTR) :: COMP_NAME type (MAPL_MetaComp), pointer :: MAPL type (ESMF_Grid) :: grid @@ -319,7 +332,7 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) integer :: instance type (ESMF_Field) :: field, fld character (len=ESMF_MAXSTR) :: prefix, bin_index - real, pointer, dimension(:,:) :: lats + real, pointer, dimension(:,:) :: lats real, pointer, dimension(:,:) :: lons real :: CDT ! chemistry timestep (secs) integer :: HDT ! model timestep (secs) @@ -333,10 +346,11 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) integer, allocatable, dimension(:) :: channels_ integer :: nmom_ character(len=ESMF_MAXSTR) :: file_ + logical :: file_exists __Iam__('Initialize') !**************************************************************************** -! Begin... +! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- @@ -353,15 +367,15 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) VERIFY_(STATUS) self => wrap%ptr -! Get dimensions -! --------------- +! Global dimensions are needed here for choosing tuning parameters +! ---------------------------------------------------------------- call MAPL_GridGet (grid, globalCellCountPerDim=dims, __RC__ ) km = dims(3) self%km = km -! Scaling factor to multiply calculated -! emissions by. Applies to all size bins. -! ---------------------------------------- +! Scaling factor to multiply calculated emissions by. Applies to all size bins. +! TO DO: find a more robust way to implement resolution dependent tuning +! ------------------------------------------------------------------------------- self%emission_scale = Chem_UtilResVal(dims(1), dims(2), self%emission_scale_res(:), __RC__) ! Get DTs @@ -370,17 +384,18 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) call MAPL_GetResource(mapl, CDT, Label='GOCART_DT:', default=real(HDT), __RC__) self%CDT = CDT -! Load resource file and get number of bins +! Load resource file and get number of bins ! ------------------------------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'SS2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - if (status /= 0) then - if (mapl_am_i_root()) print*,'SS2G_instance_'//trim(COMP_NAME)//'.rc does not exist! & - loading SS2G_instance_SS.rc instead' - call ESMF_ConfigLoadFile( cfg, 'SS2G_instance_SS.rc', __RC__) + inquire(file='SS2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'SS2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else + if (mapl_am_i_root()) print*,'SS2G_instance_'//trim(COMP_NAME)//'.rc does not exist! loading SS2G_instance_SS.rc instead' + call ESMF_ConfigLoadFile (cfg, 'SS2G_instance_SS.rc', __RC__) end if -! Call Generic Initialize +! Call Generic Initialize ! ---------------------------------------- call MAPL_GenericInitialize (GC, import, export, clock, __RC__) @@ -416,7 +431,7 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) call ESMF_StateGet (export, trim(COMP_NAME)//'_AERO_DP' , Bundle_DP, __RC__) call ESMF_StateGet (internal, 'SS', field, __RC__) - call ESMF_AttributeSet(field, NAME='klid', value=self%klid, __RC__) +! call ESMF_AttributeSet(field, NAME='klid', value=self%klid, __RC__) fld = MAPL_FieldCreate (field, 'SS', __RC__) call MAPL_StateAdd (aero, fld, __RC__) @@ -493,22 +508,17 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! call MAPL_StateAdd (aero, field, __RC__) ! call ESMF_StateGet (import, 'RH2', field, __RC__) ! call MAPL_StateAdd (aero, field, __RC__) - call add_aero (aero, label='extinction_in_air_due_to_ambient_aerosol', label2='EXT', grid=grid, typekind=MAPL_R8,__RC__) call add_aero (aero, label='single_scattering_albedo_of_ambient_aerosol', label2='SSA', grid=grid, typekind=MAPL_R8,__RC__) call add_aero (aero, label='asymmetry_parameter_of_ambient_aerosol', label2='ASY', grid=grid, typekind=MAPL_R8,__RC__) call add_aero (aero, label='monochromatic_extinction_in_air_due_to_ambient_aerosol', & label2='monochromatic_EXT', grid=grid, typekind=MAPL_R4,__RC__) call add_aero (aero, label='sum_of_internalState_aerosol', label2='aerosolSum', grid=grid, typekind=MAPL_R4, __RC__) - call ESMF_AttributeSet (aero, name='band_for_aerosol_optics', value=0, __RC__) call ESMF_AttributeSet (aero, name='wavelength_for_aerosol_optics', value=0., __RC__) - mieTable_pointer = transfer(c_loc(self), [1]) call ESMF_AttributeSet (aero, name='mieTable_pointer', valueList=mieTable_pointer, itemCount=size(mieTable_pointer), __RC__) - call ESMF_AttributeSet (aero, name='internal_variable_name', value='SS', __RC__) - call ESMF_MethodAdd (aero, label='aerosol_optics', userRoutine=aerosol_optics, __RC__) call ESMF_MethodAdd (aero, label='monochromatic_aerosol_optics', userRoutine=monochromatic_aerosol_optics, __RC__) call ESMF_MethodAdd (aero, label='get_mixR', userRoutine=get_mixR, __RC__) @@ -520,7 +530,6 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) call MAPL_GetPointer (internal, NAME='DEEP_LAKES_MASK', ptr=deep_lakes_mask, __RC__) call deepLakesMask (lons, lats, real(MAPL_RADIANS_TO_DEGREES), deep_lakes_mask, __RC__) - RETURN_(ESMF_SUCCESS) end subroutine Initialize @@ -528,13 +537,13 @@ end subroutine Initialize !============================================================================ !BOP -! !IROUTINE: Run +! !IROUTINE: Run ! !INTERFACE: subroutine Run (GC, import, export, clock, rc) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -555,7 +564,7 @@ subroutine Run (GC, import, export, clock, rc) __Iam__('Run') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -588,13 +597,13 @@ end subroutine Run !============================================================================ !BOP -! !IROUTINE: Run1 +! !IROUTINE: Run1 ! !INTERFACE: subroutine Run1 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -619,14 +628,14 @@ subroutine Run1 (GC, import, export, clock, RC) real(kind=DP), allocatable, dimension(:,:) :: gweibull - integer :: n + integer :: n #include "SS2G_DeclarePointer___.h" __Iam__('Run1') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -663,7 +672,7 @@ subroutine Run1 (GC, import, export, clock, RC) call jeagleSSTcorrection(self%sstEmisFlag, fsstemis, ts, __RC__) ! Apply a Weibull distribution to emissions wind speeds -! ----------------------------------------------------- +! ----------------------------------------------------- allocate(gweibull(ubound(u10m,1), ubound(u10m,2)), __STAT__ ) call weibullDistribution (gweibull, self%weibullFlag, u10m, v10m, __RC__) @@ -687,12 +696,13 @@ subroutine Run1 (GC, import, export, clock, RC) ! For the Hoppel correction need to compute the wet radius and settling velocity ! in the surface - if (self%hoppelFlag) then - call hoppelCorrection (self%radius(n)*1.e-6, self%rhop(n), rh2(:,:,self%km), & - dz, ustar, self%rhFlag, airdens(:,:,self%km), t(:,:,self%km), & - MAPL_GRAV, MAPL_KARMAN, fhoppel, __RC__) - end if - +! Collow: commented out 9 Jan 2024 as this is not consistent with the updated settling based on the optics files. The flag to call this is set to false in the instance RC file. This should be revistited in the future. +! if (self%hoppelFlag) then +! call hoppelCorrection (self%radius(n)*1.e-6, self%rhop(n), rh2(:,:,self%km), & +! dz, ustar, self%rhFlag, airdens(:,:,self%km), t(:,:,self%km), & +! MAPL_GRAV, MAPL_KARMAN, fhoppel, __RC__) +! end if + memissions = self%emission_scale * fgridefficiency * fsstemis * fhoppel * gweibull * memissions dqa = memissions * self%cdt * MAPL_GRAV / delp(:,:,self%km) SS(:,:,self%km,n) = SS(:,:,self%km,n) + dqa @@ -707,24 +717,24 @@ subroutine Run1 (GC, import, export, clock, RC) RETURN_(ESMF_SUCCESS) - end subroutine Run1 + end subroutine Run1 !============================================================================ !BOP -! !IROUTINE: Run2 +! !IROUTINE: Run2 ! !INTERFACE: subroutine Run2 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Run2 method for the Dust Grid Component. +! !DESCRIPTION: Run2 method for the Sea Salt Grid Component. !EOP !============================================================================ @@ -742,12 +752,13 @@ subroutine Run2 (GC, import, export, clock, RC) integer :: i1, j1, i2, j2, km real, target, allocatable, dimension(:,:,:) :: RH20,RH80 + real, pointer, dimension(:,:) :: flux_ptr #include "SS2G_DeclarePointer___.h" __Iam__('Run2') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -776,9 +787,11 @@ subroutine Run2 (GC, import, export, clock, RC) ! Sea Salt Settling ! ----------------- do n = 1, self%nbins - call Chem_Settling (self%km, self%klid, n, self%rhFlag, self%cdt, MAPL_GRAV, & - self%radius(n)*1.e-6, self%rhop(n), SS(:,:,:,n), t, airdens, & - rh2, zle, delp, SSSD, __RC__) + nullify(flux_ptr) + if (associated(SSSD)) flux_ptr => SSSD(:,:,n) + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, n, self%cdt, MAPL_GRAV, & + SS(:,:,:,n), t, airdens, & + rh2, zle, delp, flux_ptr, __RC__) end do ! Deposition @@ -829,25 +842,25 @@ subroutine Run2 (GC, import, export, clock, RC) allocate(RH20(i1:i2,j1:j2,km), __STAT__) allocate(RH80(i1:i2,j1:j2,km), __STAT__) - RH20(:,:,:) = 0.20 + RH20(:,:,:) = 0.20 call Aero_Compute_Diags (mie=self%diag_Mie, km=self%km, klid=self%klid, nbegin=1, & - nbins=self%nbins, rlow=self%rlow, & - rup=self%rup, wavelengths_profile=self%wavelengths_profile*1.0e-9, & + nbins=self%nbins, rlow=self%rlow, rup=self%rup, & + wavelengths_profile=self%wavelengths_profile*1.0e-9, & wavelengths_vertint=self%wavelengths_vertint*1.0e-9, aerosol=SS, & grav=MAPL_GRAV, tmpu=t, rhoa=airdens, & rh=rh20,u=u, v=v, delp=delp, ple=ple,tropp=tropp, & extcoef = SSEXTCOEFRH20, scacoef = SSSCACOEFRH20, NO3nFlag=.False., __RC__) - + RH80(:,:,:) = 0.80 call Aero_Compute_Diags (mie=self%diag_Mie, km=self%km, klid=self%klid, nbegin=1, & - nbins=self%nbins, rlow=self%rlow, & - rup=self%rup, wavelengths_profile=self%wavelengths_profile*1.0e-9, & + nbins=self%nbins, rlow=self%rlow, rup=self%rup, & + wavelengths_profile=self%wavelengths_profile*1.0e-9, & wavelengths_vertint=self%wavelengths_vertint*1.0e-9, aerosol=SS, & grav=MAPL_GRAV, tmpu=t, rhoa=airdens, & rh=rh80,u=u, v=v, delp=delp, ple=ple,tropp=tropp, & extcoef = SSEXTCOEFRH80, scacoef = SSSCACOEFRH80, NO3nFlag=.False., __RC__) - deallocate(RH20,RH80) + deallocate(RH20,RH80) RETURN_(ESMF_SUCCESS) end subroutine Run2 @@ -862,13 +875,13 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: IMPORT ! Import state type (ESMF_State), intent(inout) :: EXPORT ! Export state type (ESMF_State), intent(inout) :: INTERNAL ! Interal state integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. +! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. !EOP !============================================================================ @@ -886,7 +899,7 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) __Iam__('Run_data') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -946,7 +959,7 @@ subroutine aerosol_optics(state, rc) __Iam__('SS2G::aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -957,7 +970,7 @@ subroutine aerosol_optics(state, rc) band = 0 call ESMF_AttributeGet(state, name='band_for_aerosol_optics', value=band, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, ple, trim(fld_name), __RC__) @@ -1061,7 +1074,7 @@ subroutine mie_(mie, nbins, band, q, rh, bext_s, bssa_s, basym_s, rc) bext_s = bext_s + bext ! extinction bssa_s = bssa_s + (bssa*bext) ! scattering extinction - basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction + basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction end do RETURN_(ESMF_SUCCESS) @@ -1098,7 +1111,7 @@ subroutine monochromatic_aerosol_optics(state, rc) __Iam__('SS2G::monochromatic_aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1109,7 +1122,7 @@ subroutine monochromatic_aerosol_optics(state, rc) wavelength = 0. call ESMF_AttributeGet (state, name='wavelength_for_aerosol_optics', value=wavelength, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet (state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer (state, ple, trim(fld_name), __RC__) diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridComp_ExtData.yaml index 251e1063..ffc5b17a 100644 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_GridComp_ExtData.yaml @@ -1,8 +1,7 @@ Collections: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 + valid_range: "2008-01-01T12:00:00/2008-12-15T12:00:00" Samplings: SS2G_sample_0: @@ -10,103 +9,64 @@ Samplings: Exports: climSSDP001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP001 + collection: /dev/null climSSDP002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP002 + collection: /dev/null climSSDP003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP003 + collection: /dev/null climSSDP004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP004 + collection: /dev/null climSSDP005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSDP005 + collection: /dev/null climSSSD001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD001 + collection: /dev/null climSSSD002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD002 + collection: /dev/null climSSSD003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD003 + collection: /dev/null climSSSD004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD004 + collection: /dev/null climSSSD005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSD005 + collection: /dev/null climSSSV001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV001 + collection: /dev/null climSSSV002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV002 + collection: /dev/null climSSSV003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV003 + collection: /dev/null climSSSV004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV004 + collection: /dev/null climSSSV005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSSV005 + collection: /dev/null climSSWT001: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT001 + collection: /dev/null climSSWT002: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT002 + collection: /dev/null climSSWT003: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT003 + collection: /dev/null climSSWT004: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT004 + collection: /dev/null climSSWT005: - collection: SS2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SS2G_sample_0 - variable: SSWT005 + collection: /dev/null climss001: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss001 + variable: SS001 climss002: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss002 + variable: SS002 climss003: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss003 + variable: SS003 climss004: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss004 + variable: SS004 climss005: collection: SS2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SS2G_sample_0 - variable: ss005 + variable: SS005 + diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_StateSpecs.rc b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_StateSpecs.rc index 4feb4050..6adfe688 100644 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_StateSpecs.rc +++ b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_StateSpecs.rc @@ -42,7 +42,7 @@ category: EXPORT NAME | UNITS | DIMS | VLOC | UNGRIDDED | LONG NAME #---------------------------------------------------------------------------------------- SSMASS | kg kg-1 | xyz | C | | Sea Salt Mass Mixing Ratio - SSMASS25 | kg kg-1 | xyz | C | | Sea Salt Mass Mixing Ratio - PM 2.5 + SSMASS25 | kg kg-1 | xyz | C | | Sea Salt Mass Mixing Ratio of Particulate Matter < 2.5 microns (PM2.5) SSCONC | kg m-3 | xyz | C | | Sea Salt Mass Concentration SSEXTCOEF | m-1 | xyz | C | size(self%wavelengths_profile) | Sea Salt Extinction Coefficient SSEXTCOEFRH20 | m-1 | xyz | C | size(self%wavelengths_profile) | Sea Salt Extinction Coefficient - Fixed RH=20% @@ -59,17 +59,17 @@ category: EXPORT SSSV | kg m-2 s-1 | xy | N | self%nbins | Sea Salt Convective Scavenging (Bin %d) SSSMASS | kg m-3 | xy | N | | Sea Salt Surface Mass Concentration SSCMASS | kg m-2 | xy | N | | Sea Salt Column Mass Density - SSEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Extinction AOT - SSSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Extinction AOT Stratosphere - SSSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Scattering AOT - SSSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Scattering AOT Stratosphere - SSSMASS25 | kg m-3 | xy | N | | Sea Salt Surface Mass Concentration - PM 2.5 - SSCMASS25 | kg m-2 | xy | N | | Sea Salt Column Mass Density - PM 2.5 - SSEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Extinction AOT - PM 2.5 - SSSCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Scattering AOT - PM 2.5 + SSEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Aerosol Optical Depth + SSSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Stratospheric Aerosol Optical Thickness + SSSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Aerosol Optical Depth Due to Scattering + SSSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Stratospheric Aerosol Optical Thickness Due to Scattering + SSSMASS25 | kg m-3 | xy | N | | Sea Salt Surface Mass Concentration of Particulate Matter < 2.5 microns (PM2.5) + SSCMASS25 | kg m-2 | xy | N | | Sea Salt Column Mass Density of Particulate Matter < 2.5 microns (PM2.5) + SSEXTT25 | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Aerosol Optical Depth from Particulate Matter < 2.5 microns (PM2.5) + SSSCAT25 | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Aerosol Optical Depth Due to Scattering from Particulate Matter < 2.5 microns (PM2.5) SSAERIDX | 1 | xy | N | | Sea Salt TOMS UV Aerosol Index - SSEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Extinction AOT [550 nm] - PM 1.0 um - SSSCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Scattering AOT [550 nm] - PM 1.0 um + SSEXTTFM | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Aerosol Optical Depth from Particulate Matter < 1 micron (PM1.0) + SSSCATFM | 1 | xy | N | size(self%wavelengths_vertint) | Sea Salt Aerosol Optical Depth Due to Scattering from Particulate Matter < 1 micron (PM1.0) SSANGSTR | 1 | xy | N | | Sea Salt Angstrom parameter [470-870 nm] SSFLUXU | kg m-1 s-1 | xy | N | | Sea Salt column u-wind mass flux SSFLUXV | kg m-1 s-1 | xy | N | | Sea Salt column v-wind mass flux diff --git a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_instance_SS.rc b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_instance_SS.rc index 62be6a53..540d1b7d 100644 --- a/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_instance_SS.rc +++ b/ESMF/GOCART2G_GridComp/SS2G_GridComp/SS2G_instance_SS.rc @@ -3,7 +3,7 @@ # aerosol_radBands_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opticsBands_SS.v3_3.RRTMG.nc -aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/optics_SS.v3_3.nc +aerosol_monochromatic_optics_file: /discover/nobackup/pcolarco/fvInput/AeroCom/x/optics_SS.v3_6.nc particle_radius_microns: 0.079 0.316 1.119 2.818 7.772 @@ -23,10 +23,6 @@ sstEmisFlag: 2 # Apply a correction to e hoppelFlag: .false. # Apply Hoppel correction (set non-zero, see Fan and Toon 2011) weibullFlag: .false. # Apply Weibull distribution (set non-zero, see Fan and Toon 2011) -# Method of apply relative humidity to particle radius -rhFlag: 2 # RH swelling of Seasalt (1 for Fitzgerald 1975, - # 2 for Gerber 1985 method) - # Molecular weight of species [kg mole-1] molecular_weight: 0.058 0.058 0.058 0.058 0.058 diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP.20C/SU2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP.20C/SU2G_GridComp_ExtData.rc deleted file mode 100644 index 400a635a..00000000 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP.20C/SU2G_GridComp_ExtData.rc +++ /dev/null @@ -1,67 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| - -#===== Sulfate Data Instance ========================================== -climSO4 'kg kg-1' Y N 0 0.0 1.0 SO4 ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -#climDMS 'kg kg-1' Y N - 0.0 1.0 none /dev/null -#climMSA 'kg kg-1' Y N - 0.0 1.0 none /dev/null -#climSO2 'kg kg-1' Y N - 0.0 1.0 none /dev/null - -climSUDP001 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT001 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD001 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD001 /dev/null -climSUSV001 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climSUDP002 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT002 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD002 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD002 /dev/null -climSUSV002 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climSUDP003 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP003 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT003 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT003 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD003 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD003 /dev/null -climSUSV003 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV003 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climSUDP004 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP004 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT004 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT004 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD004 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD004 /dev/null -climSUSV004 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV004 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - - -#====== Sulfate Sources ================================================= -# Biomass burning -SU_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass ExtData/chemistry/HFED/v1.0/Y%y4/hfed.emis_so2.x576_y361_t14.%y4.nc4 - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -SU_ANTHROL1 NA N Y %y4-%m2-%d2t12:00:00 none none so2_nonenergy ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 -SU_ANTHROL2 NA N Y %y4-%m2-%d2t12:00:00 none none so2_energy ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - -# Ship emissions -SU_SHIPSO2 NA N Y %y4-%m2-%d2t12:00:00 none none so2_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 -SU_SHIPSO4 NA N Y %y4-%m2-%d2t12:00:00 none none so4_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - -# Aircraft fuel consumption -SU_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none so2_aviation ExtData/chemistry/CEDS/v2021-04-21/L72/SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - -# DMS concentration -SU_DMSO NA Y Y %y4-%m2-%d2t12:00:00 none none conc ExtData/chemistry/Lana/v2011/DMSclim_sfcconcentration.x360_y181_t12.Lana2011.nc4 - -# Aviation emissions during the three phases of flight -SU_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation /dev/null -SU_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation /dev/null -SU_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation /dev/null - -# H2O2, OH and NO3 mixing ratios -SU_H2O2 NA N Y %y4-%m2-%d2t12:00:00 none none h2o2 ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 -SU_OH NA N Y %y4-%m2-%d2t12:00:00 none none oh ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 -SU_NO3 NA N Y %y4-%m2-%d2t12:00:00 none none no3 ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 - -# Production of SO2 from OCS oxidation -pSO2_OCS NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -#SU_regionMask NA N v - none none REGION_MASK ExtData/chemistry/Masks/v0.0.0/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP.20C/SU2G_instance_SU.rc b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP.20C/SU2G_instance_SU.rc index 1901e354..39a28308 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP.20C/SU2G_instance_SU.rc +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP.20C/SU2G_instance_SU.rc @@ -8,7 +8,8 @@ aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opti nbins: 4 # Volcanic pointwise sources -volcano_srcfilen: ExtData/chemistry/CARN/v202106/sfc/so2_volcanic_emissions_Carns.%y4%m2%d2.rc +volcano_srcfilen_explosive: ExtData/chemistry/CARN/v202401/explosive/so2_explosive_volcanic_emissions_CARN_v202401.%y4%m2%d2.rc +volcano_srcfilen_degassing: ExtData/chemistry/CARN/v202401/so2_volcanic_emissions_CARN_v202401.degassing_only.rc # Heights [m] of LTO, CDS and CRS aviation emissions layers aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_GridComp_ExtData.rc b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_GridComp_ExtData.rc deleted file mode 100644 index 9bfe1831..00000000 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_GridComp_ExtData.rc +++ /dev/null @@ -1,67 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| - -#===== Sulfate Data Instance ========================================== -climSO4 'kg kg-1' Y N 0 0.0 1.0 SO4 ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 -#climDMS 'kg kg-1' Y N - 0.0 1.0 none /dev/null -#climMSA 'kg kg-1' Y N - 0.0 1.0 none /dev/null -#climSO2 'kg kg-1' Y N - 0.0 1.0 none /dev/null - -climSUDP001 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT001 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD001 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD001 /dev/null -climSUSV001 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV001 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climSUDP002 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT002 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD002 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD002 /dev/null -climSUSV002 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV002 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climSUDP003 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP003 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT003 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT003 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD003 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD003 /dev/null -climSUSV003 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV003 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - -climSUDP004 'kg m-2 s-1' Y N 0 0.0 1.0 SUDP004 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUWT004 'kg m-2 s-1' Y N 0 0.0 1.0 SUWT004 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 -climSUSD004 'kg m-2 s-1' Y N 0 0.0 1.0 SUSD004 /dev/null -climSUSV004 'kg m-2 s-1' Y N 0 0.0 1.0 SUSV004 ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - - -#====== Sulfate Sources ================================================= -# Biomass burning -- QFED-v2.x -SU_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.778 biomass ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_so2.061.%y4%m2%d2.nc4 - -# Anthropogenic (BF & FF) emissions -- allowed to input as two layers -SU_ANTHROL1 NA N Y %y4-%m2-%d2t12:00:00 none none so2_nonenergy ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 -SU_ANTHROL2 NA N Y %y4-%m2-%d2t12:00:00 none none so2_energy ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - -# Ship emissions -SU_SHIPSO2 NA N Y %y4-%m2-%d2t12:00:00 none none so2_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 -SU_SHIPSO4 NA N Y %y4-%m2-%d2t12:00:00 none none so4_shipping ExtData/chemistry/CEDS/v2021-04-21/sfc/SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - -# Aircraft fuel consumption -SU_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none so2_aviation ExtData/chemistry/CEDS/v2021-04-21/L72/SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - -# DMS concentration -SU_DMSO NA Y Y %y4-%m2-%d2t12:00:00 none none conc ExtData/chemistry/Lana/v2011/DMSclim_sfcconcentration.x360_y181_t12.Lana2011.nc4 - -# Aviation emissions during the three phases of flight -SU_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation /dev/null -SU_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation /dev/null -SU_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation /dev/null - -# H2O2, OH and NO3 mixing ratios -SU_H2O2 NA N Y %y4-%m2-%d2t12:00:00 none none h2o2 ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 -SU_OH NA N Y %y4-%m2-%d2t12:00:00 none none oh ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 -SU_NO3 NA N Y %y4-%m2-%d2t12:00:00 none none no3 ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 - -# Production of SO2 from OCS oxidation -pSO2_OCS NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null - -#SU_regionMask NA N v - none none REGION_MASK ExtData/chemistry/Masks/v0.0.0/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_GridComp_ExtData.yaml index 0df14b74..2a71f075 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_GridComp_ExtData.yaml @@ -4,19 +4,23 @@ Collections: SU2G_MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4: template: ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/L72/SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/L72/SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" SU2G_SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" SU2G_SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" SU2G_SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" SU2G_SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/sfc/SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/sfc/SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 + valid_range: "1979-01-15T12:00/2019-12-15T12:00" SU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 - SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4: - template: ExtData/chemistry/MERRA2/v0.0.0/sfc/merra2.aer_Nx.2003-2015.2008%m2clm.nc4 + valid_range: "2008-01-01T12:00:00/2008-12-15T12:00:00" SU2G_qfed2.emis_so2.061.%y4%m2%d2.nc4: template: ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_so2.061.%y4%m2%d2.nc4 valid_range: "2000-02-29T12:00/2025-01-01" @@ -36,23 +40,23 @@ Samplings: update_frequency: PT24H update_offset: PT12H update_reference_time: '0' + SU2G_sample_3: + extrapolation: clim + update_frequency: PT24H + update_offset: PT12H + update_reference_time: '0' + source_time: "2019-01-15T12:00/2019-12-15T00:00:00" Exports: SU_AIRCRAFT: - collection: SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 - regrid: CONSERVE - sample: SU2G_sample_1 - variable: so2_aviation + - {starting: "1979-01-15T12:00", collection: SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: so2_aviation} + - {starting: "2019-12-15T12:00", collection: SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, regrid: CONSERVE, sample: SU2G_sample_3, variable: so2_aviation} SU_ANTHROL1: - collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: SU2G_sample_1 - variable: so2_nonenergy + - {starting: "1979-01-15T12:00", collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: so2_nonenergy} + - {starting: "2019-12-15T12:00", collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_nonenergy.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: SU2G_sample_3, variable: so2_nonenergy} SU_ANTHROL2: - collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: SU2G_sample_1 - variable: so2_energy + - {starting: "1979-01-15T12:00", collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: so2_energy} + - {starting: "2019-12-15T12:00", collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_energy.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: SU2G_sample_3, variable: so2_energy} SU_AVIATION_CDS: collection: /dev/null regrid: CONSERVE @@ -92,83 +96,47 @@ Exports: sample: SU2G_sample_1 variable: oh SU_SHIPSO2: - collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: SU2G_sample_1 - variable: so2_shipping + - {starting: "1979-01-15T12:00", collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: so2_shipping} + - {starting: "2019-12-15T12:00", collection: SU2G_SO2-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: SU2G_sample_3, variable: so2_shipping} SU_SHIPSO4: - collection: SU2G_SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4 - regrid: CONSERVE - sample: SU2G_sample_1 - variable: so4_shipping + - {starting: "1979-01-15T12:00", collection: SU2G_SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: so4_shipping} + - {starting: "2019-12-15T12:00", collection: SU2G_SO4-em-anthro_CMIP_CEDS_gn_shipping.x2304_y1441_t12.%y4.nc4, regrid: CONSERVE, sample: SU2G_sample_3, variable: so4_shipping} climSO4: collection: SU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SU2G_sample_0 variable: SO4 climSUDP001: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUDP001 + collection: /dev/null climSUDP002: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUDP002 + collection: /dev/null climSUDP003: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUDP003 + collection: /dev/null climSUDP004: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUDP004 + collection: /dev/null climSUSD001: collection: /dev/null - sample: SU2G_sample_0 - variable: SUSD001 climSUSD002: collection: /dev/null - sample: SU2G_sample_0 - variable: SUSD002 climSUSD003: collection: /dev/null - sample: SU2G_sample_0 - variable: SUSD003 climSUSD004: collection: /dev/null - sample: SU2G_sample_0 - variable: SUSD004 climSUSV001: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUSV001 + collection: /dev/null climSUSV002: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUSV002 + collection: /dev/null climSUSV003: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUSV003 + collection: /dev/null climSUSV004: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUSV004 + collection: /dev/null climSUWT001: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUWT001 + collection: /dev/null climSUWT002: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUWT002 + collection: /dev/null climSUWT003: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUWT003 + collection: /dev/null climSUWT004: - collection: SU2G_merra2.aer_Nx.2003-2015.2008%m2clm.nc4 - sample: SU2G_sample_0 - variable: SUWT004 + collection: /dev/null pSO2_OCS: collection: /dev/null regrid: CONSERVE diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_instance_SU.rc b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_instance_SU.rc index 1901e354..a2a1fd9c 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_instance_SU.rc +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/AMIP/SU2G_instance_SU.rc @@ -8,7 +8,8 @@ aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opti nbins: 4 # Volcanic pointwise sources -volcano_srcfilen: ExtData/chemistry/CARN/v202106/sfc/so2_volcanic_emissions_Carns.%y4%m2%d2.rc +volcano_srcfilen_explosive: ExtData/chemistry/CARN/v202401/explosive/so2_explosive_volcanic_emissions_CARN_v202401.%y4%m2%d2.rc +volcano_srcfilen_degassing: ExtData/chemistry/CARN/v202401/sfc/so2_volcanic_emissions_CARN_v202401.degassing_only.rc # Heights [m] of LTO, CDS and CRS aviation emissions layers aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/CMakeLists.txt b/ESMF/GOCART2G_GridComp/SU2G_GridComp/CMakeLists.txt index eba7571e..323b2392 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/CMakeLists.txt +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/CMakeLists.txt @@ -2,7 +2,7 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES GA_Environment MAPL Chem_Shared2G Process_Library esmf) + DEPENDENCIES GA_Environment MAPL Chem_Shared2G Process_Library ESMF::ESMF) mapl_acg (${this} SU2G_StateSpecs.rc IMPORT_SPECS EXPORT_SPECS INTERNAL_SPECS diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridCompMod.F90 b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridCompMod.F90 index 430cf08c..6c84a01a 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridCompMod.F90 +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridCompMod.F90 @@ -3,7 +3,7 @@ !============================================================================= !BOP -! !MODULE: SU2G_GridCompMod - GOCART refactoring of the SU gridded component +! !MODULE: SU2G_GridCompMod - GOCART refactoring of the SU gridded component ! !INTERFACE: module SU2G_GridCompMod @@ -11,7 +11,7 @@ module SU2G_GridCompMod ! !USES: use ESMF use MAPL - use GOCART2G_MieMod + use GOCART2G_MieMod use Chem_AeroGeneric use iso_c_binding, only: c_loc, c_f_pointer, c_ptr @@ -48,12 +48,16 @@ module SU2G_GridCompMod ! !DESCRIPTION: This module implements GOCART's Sulfer (SU) Gridded Component. ! !REVISION HISTORY: +! 04January2024 Collow - Update to ChemSettling Call ! 08July2020 Sherman, da Silva, Darmenov, Clune - First attempt at refactoring. !EOP !=========================================================================== ! !Sulfer state type :: ThreadWorkspace + integer :: nymd_last = -1 ! Previous nymd. Updated daily + +! Degassing volcanoes integer :: nVolc = 0 real, allocatable, dimension(:) :: vLat, & vLon, & @@ -62,7 +66,17 @@ module SU2G_GridCompMod vCloud integer, allocatable, dimension(:) :: vStart, & vEnd - integer :: nymd_last = -1 ! Previous nymd. Updated daily +! Explosive volcanoes + integer :: nVolcE = 0 + real, allocatable, dimension(:) :: vLatE, & + vLonE, & + vSO2E, & + vElevE, & + vCloudE + integer, allocatable, dimension(:) :: vStartE, & + vEndE + +! Other point emissions of Sulfate (SO4) integer :: nPts = -1 integer, allocatable, dimension(:) :: pstart, pend real, allocatable, dimension(:) :: pLat, & @@ -82,12 +96,15 @@ module SU2G_GridCompMod real :: aviation_layers(4) ! heights of the LTO, CDS and CRS layers real :: fSO4anth ! Fraction of anthropogenic emissions that are SO4 !logical :: firstRun = .true. + real, allocatable :: rmed(:) ! Median radius of lognormal number distribution real, allocatable :: sigma(:) ! Sigma of lognormal number distribution !real, pointer :: h2o2_init(:,:,:) ! Special handling for volcanic emissions - character(len=255) :: volcano_srcfilen -! !Workspae for point emissions + character(len=255) :: volcano_srcfilen_degassing + character(len=255) :: volcano_srcfilen_explosive + +! Workspace for point emissions logical :: doing_point_emissions = .false. character(len=255) :: point_emissions_srcfilen ! filename for pointwise emissions type(ThreadWorkspace), allocatable :: workspaces(:) @@ -102,7 +119,7 @@ module SU2G_GridCompMod !============================================================================ !BOP -! !IROUTINE: SetServices +! !IROUTINE: SetServices ! !INTERFACE: subroutine SetServices ( GC, RC ) @@ -113,7 +130,7 @@ subroutine SetServices ( GC, RC ) ! DESCRIPTION: This version uses MAPL_GenericSetServices, which sets ! the Initialize and Finalize services to generic versions. It also -! allocates our instance of a generic state and puts it in the +! allocates our instance of a generic state and puts it in the ! gridded component (GC). Here we only set the two-stage run method ! and declare the data services. @@ -136,6 +153,7 @@ subroutine SetServices ( GC, RC ) integer :: i real :: DEFVAL logical :: data_driven=.true. + logical :: file_exists integer :: num_threads __Iam__('SetServices') @@ -156,11 +174,13 @@ subroutine SetServices ( GC, RC ) num_threads = MAPL_get_num_threads() allocate(self%workspaces(0:num_threads-1), __STAT__) -! Load resource file +! Load resource file ! ------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'SU2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - if (status /= 0) then + inquire(file='SU2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'SU2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else if (mapl_am_i_root()) print*,'SU2G_instance_'//trim(COMP_NAME)//'.rc does not exist! loading SU2G_instance_SU.rc instead' call ESMF_ConfigLoadFile (cfg, 'SU2G_instance_SU.rc', __RC__) end if @@ -168,12 +188,15 @@ subroutine SetServices ( GC, RC ) ! process generic config items call self%GA_Environment%load_from_config( cfg, universal_cfg, __RC__) + allocate(self%rmed(self%nbins), __STAT__) allocate(self%sigma(self%nbins), __STAT__) ! process SU-specific items - call ESMF_ConfigGetAttribute(cfg, self%volcano_srcfilen, label='volcano_srcfilen:', __RC__) + call ESMF_ConfigGetAttribute(cfg, self%volcano_srcfilen_degassing, label='volcano_srcfilen_degassing:', __RC__) + call ESMF_ConfigGetAttribute(cfg, self%volcano_srcfilen_explosive, label='volcano_srcfilen_explosive:', __RC__) call ESMF_ConfigGetAttribute(cfg, self%eAircraftFuel, label='aircraft_fuel_emission_factor:', __RC__) call ESMF_ConfigGetAttribute(cfg, self%fSO4anth, label='so4_anthropogenic_fraction:', __RC__) + call ESMF_ConfigGetAttribute(cfg, self%rmed, label='particle_radius_number:', __RC__) call ESMF_ConfigGetAttribute(cfg, self%sigma, label='sigma:', __RC__) call ESMF_ConfigFindLabel (cfg, 'aviation_vertical_layers:', __RC__) do i=1,size(self%aviation_layers) @@ -202,7 +225,7 @@ subroutine SetServices ( GC, RC ) DEFVAL = 0.0 -! Import and Internal states if data instance +! Import and Internal states if data instance ! ------------------------------------------- if (data_driven) then @@ -242,7 +265,7 @@ subroutine SetServices ( GC, RC ) units='kg kg-1', & dims=MAPL_DimsHorzVert, & vlocation=MAPL_VlocationCenter, & - restart=MAPL_RestartOptional, __RC__) + restart=MAPL_RestartOptional, __RC__) do i = 1, self%nbins write(field_name, '(A, I0.3)') '', i @@ -255,7 +278,7 @@ subroutine SetServices ( GC, RC ) VLOCATION = MAPL_VLocationCenter, & RESTART = MAPL_RestartSkip, __RC__) -! ! wet deposition +! ! wet deposition call MAPL_AddImportSpec(GC, & SHORT_NAME = 'climSUWT'//trim(field_name), & LONG_NAME = 'Sulfate wet deposition (bin '//trim(field_name)//')', & @@ -292,7 +315,7 @@ subroutine SetServices ( GC, RC ) UNITS = '1', & DIMS = MAPL_DimsHorzVert, & VLOCATION = MAPL_VLocationCenter, & - RESTART = MAPL_RestartSkip, __RC__) + RESTART = MAPL_RestartSkip, __RC__) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'SU_OH', & @@ -300,7 +323,7 @@ subroutine SetServices ( GC, RC ) UNITS = '1', & DIMS = MAPL_DimsHorzVert, & VLOCATION = MAPL_VLocationCenter, & - RESTART = MAPL_RestartSkip, __RC__) + RESTART = MAPL_RestartSkip, __RC__) call MAPL_AddImportSpec(GC, & SHORT_NAME = 'SU_NO3', & @@ -311,7 +334,7 @@ subroutine SetServices ( GC, RC ) RESTART = MAPL_RestartSkip, __RC__) end if -! Import, Export, Internal states for computational instance +! Import, Export, Internal states for computational instance ! ---------------------------------------------------------- if (.not. data_driven) then #include "SU2G_Export___.h" @@ -356,26 +379,26 @@ end subroutine SetServices !============================================================================ !BOP -! !IROUTINE: Initialize +! !IROUTINE: Initialize ! !INTERFACE: subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: IMPORT ! Import state type (ESMF_State), intent(inout) :: EXPORT ! Export state type (ESMF_Clock), intent(inout) :: CLOCK ! The clock integer, optional, intent( out) :: RC ! Error code -! !DESCRIPTION: This initializes SU Grid Component. +! !DESCRIPTION: This initializes SU Grid Component. -! !REVISION HISTORY: +! !REVISION HISTORY: ! 08July2019 E.Sherman First attempt at refactoring !EOP !============================================================================ -! !Locals +! !Locals character (len=ESMF_MAXSTR) :: COMP_NAME type (MAPL_MetaComp), pointer :: MAPL type (ESMF_Grid) :: grid @@ -386,7 +409,6 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) type (ESMF_FieldBundle) :: Bundle_DP type (wrap_) :: wrap type (SU2G_GridComp), pointer :: self - type (ESMF_Alarm) :: alarm_H2O2 integer, allocatable :: mieTable_pointer(:) integer :: i, dims(3), km @@ -413,10 +435,11 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) integer, allocatable, dimension(:) :: channels_ integer :: nmom_ character(len=ESMF_MAXSTR) :: file_ + logical :: file_exists __Iam__('Initialize') !**************************************************************************** -! Begin... +! Begin... ! Get the target components name and set-up traceback handle. ! ----------------------------------------------------------- @@ -435,7 +458,7 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! Get dimensions ! --------------- - call MAPL_GridGet (grid, globalCellCountPerDim=dims, __RC__ ) + call MAPL_GridGet (grid, localCellCountPerDim=dims, __RC__ ) km = dims(3) self%km = km @@ -456,17 +479,18 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) self%diurnal_bb = .false. end if -! Load resource file and get number of bins +! Load resource file and get number of bins ! ------------------------------------------- cfg = ESMF_ConfigCreate (__RC__) - call ESMF_ConfigLoadFile (cfg, 'SU2G_instance_'//trim(COMP_NAME)//'.rc', rc=status) - if (status /= 0) then - if (mapl_am_i_root()) print*,'SU2G_instance_'//trim(COMP_NAME)//'.rc does not exist! & - loading SU2G_instance_SU.rc instead' - call ESMF_ConfigLoadFile( cfg, 'SU2G_instance_SU.rc', __RC__) + inquire(file='SU2G_instance_'//trim(COMP_NAME)//'.rc', exist=file_exists) + if (file_exists) then + call ESMF_ConfigLoadFile (cfg, 'SU2G_instance_'//trim(COMP_NAME)//'.rc', __RC__) + else + if (mapl_am_i_root()) print*,'SU2G_instance_'//trim(COMP_NAME)//'.rc does not exist! loading SU2G_instance_SU.rc instead' + call ESMF_ConfigLoadFile (cfg, 'SU2G_instance_SU.rc', __RC__) end if -! Call Generic Initialize +! Call Generic Initialize ! ---------------------------------------- call MAPL_GenericInitialize (GC, import, export, clock, __RC__) @@ -482,26 +506,6 @@ subroutine Initialize (GC, IMPORT, EXPORT, CLOCK, RC) ! ------------------ call determine_data_driven (COMP_NAME, data_driven, __RC__) -! Set H2O2 recycle alarm -! ---------------------- - if (.not. data_driven) then - call ESMF_ClockGet(clock, calendar=calendar, currTime=currentTime, __RC__) - call ESMF_TimeGet(currentTime, YY=year, MM=month, DD=day, H=hh, M=mm, S=ss, __RC__) - call ESMF_TimeSet(ringTime, YY=year, MM=month, DD=day, H=0, M=0, S=0, __RC__) - call ESMF_TimeIntervalSet(ringInterval, H=3, calendar=calendar, __RC__) - - do while (ringTime < currentTime)! DO WE NEED THIS? - ringTime = currentTime + ringInterval - end do - - alarm_H2O2 = ESMF_AlarmCreate(Clock = clock, & - Name = 'H2O2_RECYCLE_ALARM', & - RingInterval = ringInterval, & - RingTime = currentTime, & - Enabled = .true. , & - Sticky = .false. , __RC__) - end if - ! If this is a data component, the data is provided in the import ! state via ExtData instead of the actual GOCART children ! ---------------------------------------------------------------- @@ -640,13 +644,13 @@ end subroutine Initialize !============================================================================ !BOP -! !IROUTINE: Run +! !IROUTINE: Run ! !INTERFACE: subroutine Run (GC, import, export, clock, rc) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -667,7 +671,7 @@ subroutine Run (GC, import, export, clock, rc) __Iam__('Run') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -700,13 +704,13 @@ end subroutine Run !============================================================================ !BOP -! !IROUTINE: Run1 +! !IROUTINE: Run1 ! !INTERFACE: subroutine Run1 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock @@ -734,7 +738,7 @@ subroutine Run1 (GC, import, export, clock, RC) real, dimension(:,:), allocatable :: so2biomass_src, so2biomass_src_, so2anthro_l1_src, & so2anthro_l2_src, so2ship_src, so4ship_src, dmso_conc, & aviation_lto_src, aviation_cds_src, aviation_crs_src - integer, dimension(:), allocatable :: iPointVolc, jPointVolc, iPoint, jPoint + integer, dimension(:), allocatable :: iPoint, jPoint real, dimension(:,:,:), allocatable :: emissions_point character (len=ESMF_MAXSTR) :: fname ! file name for point source emissions logical :: fileExists @@ -748,7 +752,7 @@ subroutine Run1 (GC, import, export, clock, RC) __Iam__('Run1') !***************************************************************************** -! Begin... +! Begin... nullify(dummyMSA) @@ -828,34 +832,54 @@ subroutine Run1 (GC, import, export, clock, RC) where(1.01*aviation_cds_src > MAPL_UNDEF ) aviation_cds_src = 0. where(1.01*aviation_crs_src > MAPL_UNDEF ) aviation_crs_src = 0. +! Start with a clean emission diagnostic + if(associated(SUEM)) SUEM = 0.0 + + ! Update emissions/production if necessary (daily) ! ----------------------------------------------- thread = MAPL_get_current_thread() workspace => self%workspaces(thread) - +! Update Volcanic SO2 Emissions Daily if(workspace%nymd_last /= nymd) then workspace%nymd_last = nymd -! Get pointwise SO2 and altitude of volcanoes from a daily file data base - if(index(self%volcano_srcfilen,'volcanic_') /= 0) then - call StrTemplate(fname, self%volcano_srcfilen, xid='unknown', & +! DEGASSING: Get pointwise SO2 and altitude of volcanoes from a daily file data base + workspace%nVolc = 0 ! case of /dev/null (no volcanoes) or ill-formed filename + if(index(self%volcano_srcfilen_degassing,'volcanic_') /= 0) then + call StrTemplate(fname, self%volcano_srcfilen_degassing, xid='unknown', & nymd=nymd, nhms=120000 ) - call ReadPointEmissions (nymd, fname, workspace%nVolc, workspace%vLat, workspace%vLon, & + inquire(file=fname, exist=fileExists) + if (fileExists) then + call ReadPointEmissions (nymd, fname, workspace%nVolc, workspace%vLat, workspace%vLon, & workspace%vElev, workspace%vCloud, workspace%vSO2, workspace%vStart, & workspace%vEnd, label='volcano', __RC__) - workspace%vSO2 = workspace%vSO2 * fMassSO2 / fMassSulfur -! Special possible case - if(self%volcano_srcfilen(1:9) == '/dev/null') workspace%nVolc = 0 + workspace%vSO2 = workspace%vSO2 * fMassSO2 / fMassSulfur + end if + end if + +! EXPLOSIVE: Get pointwise SO2 and altitude of volcanoes from a daily file data base + workspace%nVolcE = 0 ! case of /dev/null (no volcanoes) or ill-formed filename + if(index(self%volcano_srcfilen_explosive,'volcanic_') /= 0) then + call StrTemplate(fname, self%volcano_srcfilen_explosive, xid='unknown', & + nymd=nymd, nhms=120000 ) + inquire(file=fname, exist=fileExists) + if (fileExists) then + call ReadPointEmissions (nymd, fname, workspace%nVolcE, workspace%vLatE, workspace%vLonE, & + workspace%vElevE, workspace%vCloudE, workspace%vSO2E, workspace%vStartE, & + workspace%vEndE, label='volcano', __RC__) + workspace%vSO2 = workspace%vSO2 * fMassSO2 / fMassSulfur + end if end if + end if -! Apply volcanic emissions -! ------------------------ +! DEGASSING: Apply volcanic emissions +! ----------------------------------- if (workspace%nVolc > 0) then - if (associated(SO2EMVE)) SO2EMVE=0.0 if (associated(SO2EMVN)) SO2EMVN=0.0 - allocate(iPointVolc(workspace%nVolc), jPointVolc(workspace%nVolc), __STAT__) - call MAPL_GetHorzIJIndex(workspace%nVolc, iPointVolc, jPointVolc, & + allocate(iPoint(workspace%nVolc), jPoint(workspace%nVolc), __STAT__) + call MAPL_GetHorzIJIndex(workspace%nVolc, iPoint, jPoint, & grid = grid, & lon = workspace%vLon/real(MAPL_RADIANS_TO_DEGREES), & lat = workspace%vLat/real(MAPL_RADIANS_TO_DEGREES), & @@ -866,8 +890,30 @@ subroutine Run1 (GC, import, export, clock, RC) end if call SUvolcanicEmissions (workspace%nVolc, workspace%vStart, workspace%vEnd, workspace%vSO2, workspace%vElev, & - workspace%vCloud, iPointVolc, jPointVolc, nhms, SO2EMVN, SO2EMVE, SO2, nSO2, SUEM, & + workspace%vCloud, iPoint, jPoint, nhms, SO2EMVN, SO2, nSO2, SUEM, & self%km, self%cdt, MAPL_GRAV, zle, delp, area, workspace%vLat, workspace%vLon, __RC__) + deallocate(iPoint, jPoint, __STAT__) + end if + +! EXPLOSIVE: Apply volcanic emissions +! ----------------------------------- + if (workspace%nVolcE > 0) then + if (associated(SO2EMVE)) SO2EMVE=0.0 + allocate(iPoint(workspace%nVolcE), jPoint(workspace%nVolcE), __STAT__) + call MAPL_GetHorzIJIndex(workspace%nVolcE, iPoint, jPoint, & + grid = grid, & + lon = workspace%vLon/real(MAPL_RADIANS_TO_DEGREES), & + lat = workspace%vLat/real(MAPL_RADIANS_TO_DEGREES), & + rc = status) + if ( status /= 0 ) then + if (mapl_am_i_root()) print*, trim(Iam), ' - cannot get indices for point emissions' + VERIFY_(status) + end if + + call SUvolcanicEmissions (workspace%nVolcE, workspace%vStartE, workspace%vEndE, workspace%vSO2E, workspace%vElevE, & + workspace%vCloudE, iPoint, jPoint, nhms, SO2EMVE, SO2, nSO2, SUEM, & + self%km, self%cdt, MAPL_GRAV, zle, delp, area, workspace%vLatE, workspace%vLonE, __RC__) + deallocate(iPoint, jPoint, __STAT__) end if ! Apply diurnal cycle if so desired @@ -895,11 +941,11 @@ subroutine Run1 (GC, import, export, clock, RC) self%aviation_layers, & aviation_lto_src, & aviation_cds_src, & - aviation_crs_src, __RC__) + aviation_crs_src, __RC__) - if (associated(dms)) then + if (associated(dms)) then call DMSemission (self%km, self%cdt, MAPL_GRAV, t, u10m, v10m, lwi, delp, & - fMassDMS, SU_DMSO, dms, SUEM, nDMS, __RC__) + fMassDMS, dmso_conc, dms, SUEM, nDMS, __RC__) end if ! Add source of OCS-produced SO2 @@ -941,7 +987,8 @@ subroutine Run1 (GC, import, export, clock, RC) call updatePointwiseEmissions (self%km, workspace%pBase, workspace%pTop, workspace%pEmis, workspace%nPts, & workspace%pStart, workspace%pEnd, zle, & area, iPoint, jPoint, nhms, emissions_point, __RC__) - + + deallocate(iPoint, jPoint, __STAT__) SO4 = SO4 + self%cdt * MAPL_GRAV / delp * emissions_point end if @@ -951,20 +998,20 @@ end subroutine Run1 !============================================================================ !BOP -! !IROUTINE: Run2 +! !IROUTINE: Run2 ! !INTERFACE: subroutine Run2 (GC, import, export, clock, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: import ! Import state type (ESMF_State), intent(inout) :: export ! Export state type (ESMF_Clock), intent(inout) :: clock ! The clock integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Run2 method for the Dust Grid Component. +! !DESCRIPTION: Run2 method for the Sulfate Grid Component. !EOP !============================================================================ @@ -975,7 +1022,6 @@ subroutine Run2 (GC, import, export, clock, RC) type (wrap_) :: wrap type (SU2G_GridComp), pointer :: self type (ESMF_Time) :: time - type (ESMF_Alarm) :: ALARM type(MAPL_VarSpec), pointer :: InternalSpec(:) integer :: nymd, nhms, iyr, imm, idd, ihr, imn, isc @@ -989,19 +1035,20 @@ subroutine Run2 (GC, import, export, clock, RC) real, dimension(:,:,:), allocatable :: xoh, xno3, xh2o2 real, dimension(:,:), allocatable :: drydepositionf + real, pointer, dimension(:,:,:) :: dummyMSA !=> null() ! this is so the model can run without MSA enabled - logical :: alarm_is_ringing + logical :: alarm_is_ringing type(ThreadWorkspace), pointer :: workspace integer :: thread integer :: i1, j1, i2, j2, km real, target, allocatable, dimension(:,:,:) :: RH20,RH80 - + real, pointer, dimension(:,:) :: flux_ptr #include "SU2G_DeclarePointer___.h" __Iam__('Run2') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -1020,9 +1067,9 @@ subroutine Run2 (GC, import, export, clock, RC) LATS = LATS, __RC__ ) #include "SU2G_GetPointer___.h" - + call MAPL_GetPointer(internal, dummyMSA, 'MSA', rc=status) - + ! Extract nymd(yyyymmdd) from clock ! --------------------------------- call ESMF_ClockGet (clock, currTime=time, __RC__) @@ -1039,12 +1086,10 @@ subroutine Run2 (GC, import, export, clock, RC) thread = MAPL_get_current_thread() workspace => self%workspaces(thread) - call ESMF_ClockGetAlarm(clock, 'H2O2_RECYCLE_ALARM', alarm, __RC__) - alarm_is_ringing = ESMF_AlarmIsRinging(alarm, __RC__) + alarm_is_ringing = daily_alarm(clock,30000,_RC) ! recycle H2O2 every 3 hours if (alarm_is_ringing) then - workspace%recycle_h2o2 = ESMF_AlarmIsRinging(alarm, __RC__) - !call ESMF_AlarmRingerOff(alarm, __RC__) + workspace%recycle_h2o2 = .true. end if allocate(xoh, mold=airdens, __STAT__) @@ -1053,13 +1098,13 @@ subroutine Run2 (GC, import, export, clock, RC) xoh = 0.0 xno3 = 0.0 - if (workspace%firstRun) then - xh2o2 = MAPL_UNDEF - h2o2_init = MAPL_UNDEF - workspace%firstRun = .false. - end if + !if (workspace%firstRun) then + !xh2o2 = MAPL_UNDEF + !h2o2_init = MAPL_UNDEF + !workspace%firstRun = .false. + !end if - xh2o2 = h2o2_init + xh2o2 = h2o2_init call SulfateUpdateOxidants (nymd, nhms, LONS, LATS, airdens, self%km, self%cdt, & workspace%nymd_oxidants, MAPL_UNDEF, real(MAPL_RADIANS_TO_DEGREES), & @@ -1078,10 +1123,11 @@ subroutine Run2 (GC, import, export, clock, RC) call MAPL_VarSpecGet(InternalSpec(n), SHORT_NAME=short_name, __RC__) call MAPL_GetPointer(internal, NAME=short_name, ptr=int_ptr, __RC__) - - call Chem_Settling (self%km, self%klid, n, self%rhFlag, self%cdt, MAPL_GRAV, & - self%radius(n)*1.e-6, self%rhop(n), int_ptr, t, airdens, & - rh2, zle, delp, SUSD, __RC__) + nullify(flux_ptr) + if (associated(SUSD)) flux_ptr => SUSD(:,:,n) + call Chem_SettlingSimple (self%km, self%klid, self%diag_Mie, 1, self%cdt, MAPL_GRAV, & + int_ptr, t, airdens, & + rh2, zle, delp, flux_ptr, __RC__) end do allocate(drydepositionf, mold=lwi, __STAT__) @@ -1107,7 +1153,7 @@ subroutine Run2 (GC, import, export, clock, RC) SUWT, SUPSO4, SUPSO4WT, PSO4, PSO4WET, __RC__ ) ! Certain variables are multiplied by 1.0e-9 to convert from nanometers to meters - call SU_Compute_Diags ( self%km, self%klid, self%radius(nSO4), self%sigma(nSO4), self%rhop(nSO4), & + call SU_Compute_Diags ( self%km, self%klid, self%rmed(nSO4), self%sigma(nSO4), self%rhop(nSO4), & MAPL_GRAV, MAPL_PI, nSO4, self%diag_Mie, & self%wavelengths_profile*1.0e-9, self%wavelengths_vertint*1.0e-9, & t, airdens, delp, ple,tropp, rh2, u, v, DMS, SO2, SO4, dummyMSA, & @@ -1126,7 +1172,7 @@ subroutine Run2 (GC, import, export, clock, RC) allocate(RH80(i1:i2,j1:j2,km), __STAT__) RH20(:,:,:) = 0.20 - call SU_Compute_Diags ( km=self%km, klid=self%klid, rmed=self%radius(nSO4), sigma=self%sigma(nSO4),& + call SU_Compute_Diags ( km=self%km, klid=self%klid, rmed=self%rmed(nSO4), sigma=self%sigma(nSO4),& rhop=self%rhop(nSO4), & grav=MAPL_GRAV, pi=MAPL_PI, nSO4=nSO4, mie=self%diag_Mie, & wavelengths_profile=self%wavelengths_profile*1.0e-9, & @@ -1136,7 +1182,7 @@ subroutine Run2 (GC, import, export, clock, RC) scacoef = SUSCACOEFRH20, __RC__) RH80(:,:,:) = 0.80 - call SU_Compute_Diags ( km=self%km, klid=self%klid, rmed=self%radius(nSO4), sigma=self%sigma(nSO4),& + call SU_Compute_Diags ( km=self%km, klid=self%klid, rmed=self%rmed(nSO4), sigma=self%sigma(nSO4),& rhop=self%rhop(nSO4), & grav=MAPL_GRAV, pi=MAPL_PI, nSO4=nSO4, mie=self%diag_Mie, & wavelengths_profile=self%wavelengths_profile*1.0e-9, & @@ -1160,13 +1206,13 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) ! !ARGUMENTS: - type (ESMF_GridComp), intent(inout) :: GC ! Gridded component + type (ESMF_GridComp), intent(inout) :: GC ! Gridded component type (ESMF_State), intent(inout) :: IMPORT ! Import state type (ESMF_State), intent(inout) :: EXPORT ! Export state type (ESMF_State), intent(inout) :: INTERNAL ! Interal state integer, optional, intent( out) :: RC ! Error code: -! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. +! !DESCRIPTION: Updates pointers in Internal state with fields from ExtData. !EOP !============================================================================ @@ -1180,7 +1226,7 @@ subroutine Run_data (GC, IMPORT, EXPORT, INTERNAL, RC) __Iam__('Run_data') !***************************************************************************** -! Begin... +! Begin... ! Get my name and set-up traceback handle ! --------------------------------------- @@ -1238,7 +1284,7 @@ subroutine aerosol_optics(state, rc) __Iam__('SU2G::aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1255,7 +1301,7 @@ subroutine aerosol_optics(state, rc) band = 0 call ESMF_AttributeGet(state, name='band_for_aerosol_optics', value=band, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, ple, trim(fld_name), __RC__) @@ -1359,7 +1405,7 @@ subroutine mie_(mie, nbins, band, q, rh, bext_s, bssa_s, basym_s, rc) bext_s = bext_s + bext ! extinction bssa_s = bssa_s + (bssa*bext) ! scattering extinction - basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction + basym_s = basym_s + gasym*(bssa*bext) ! asymetry parameter multiplied by scatering extiction end do @@ -1401,7 +1447,7 @@ subroutine monochromatic_aerosol_optics(state, rc) __Iam__('SU2G::monochromatic_aerosol_optics') -! Begin... +! Begin... ! Mie Table instance/index ! ------------------------ @@ -1418,7 +1464,7 @@ subroutine monochromatic_aerosol_optics(state, rc) call ESMF_AttributeGet(state, name='wavelength_for_aerosol_optics', value=wavelength, __RC__) -! Pressure at layer edges +! Pressure at layer edges ! ------------------------ call ESMF_AttributeGet(state, name='air_pressure_for_aerosol_optics', value=fld_name, __RC__) call MAPL_GetPointer(state, ple, trim(fld_name), __RC__) @@ -1479,6 +1525,38 @@ subroutine monochromatic_aerosol_optics(state, rc) end subroutine monochromatic_aerosol_optics + function daily_alarm(clock,freq,rc) result(is_ringing) + logical :: is_ringing + type(ESMF_Clock), intent(in) :: clock + integer, intent(in) :: freq + integer, optional, intent(out) :: rc + + type(ESMF_Time) :: current_time + integer :: status,year,month,day,hour,minute,second,initial_time,int_seconds + integer :: nhh,nmm,nss,freq_sec + + type(ESMF_TimeInterval) :: new_diff,esmf_freq + type(ESMF_Time) :: reff_time,new_esmf_time + + call ESMF_ClockGet(clock,currTIme=current_time,_RC) + call ESMF_TimeGet(current_time,yy=year,mm=month,dd=day,h=hour,m=minute,s=second,_RC) + + int_seconds = 0 + call MAPL_UnpackTIme(freq,nhh,nmm,nss) + is_ringing = .false. + call ESMF_TimeSet(reff_time,yy=year,mm=month,dd=day,h=0,m=0,s=0,_RC) + new_esmf_time = reff_time + call ESMF_TimeIntervalSet(esmf_freq,h=nhh,m=nmm,s=nss ,_RC) + do while (int_seconds < 86400) + if ( new_esmf_time == current_time) then + is_ringing = .true. + exit + end if + new_esmf_time = new_esmf_time + esmf_freq + new_diff = new_esmf_time - reff_time + call ESMF_TimeIntervalGet(new_diff,s=int_seconds,_RC) + enddo + _RETURN(_SUCCESS) + end function end module SU2G_GridCompMod - diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridComp_ExtData.yaml b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridComp_ExtData.yaml index c4329cb4..e6411584 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridComp_ExtData.yaml +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_GridComp_ExtData.yaml @@ -5,7 +5,7 @@ Collections: template: ExtData/chemistry/MERRA2GMI/v0.0.0/L72/MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 valid_range: "1979-01-15T12:00/2019-12-15T12:00" SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4: - template: ExtData/chemistry/CEDS/v2021-04-21/L72/SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 + template: ExtData/chemistry/CEDS/v2021-04-21-revised/L72/SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4 valid_range: "1979-01-15T12:00/2019-12-15T12:00" SU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4: template: ExtData/chemistry/MERRA2/v0.0.0/L72/merra2.aer_Nv.2003-2015.2008%m2clm.nc4 @@ -39,7 +39,7 @@ Samplings: Exports: SU_AIRCRAFT: - - {starting: "1979-01-15T12:00", collection: SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, regrid: CONSERVE, sample: SU2G_sample_1, variable: so2_aviation} + - {starting: "1979-01-15T12:00", collection: SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: so2_aviation} - {starting: "2019-12-15T12:00", collection: SU2G_SO2-em-AIR-anthro_input4MIPs_emissions_CMIP_CEDS-2021-04-21_gn__aviation.x576_y361_z72_t12.%y4.nc4, regrid: CONSERVE, sample: SU2G_sample_3, variable: so2_aviation} SU_AVIATION_CDS: collection: /dev/null @@ -71,8 +71,10 @@ Exports: - {starting: "1979-01-15T12:00", collection: SU2G_MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: no3} - {starting: "2019-12-15T12:00", collection: SU2G_MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4, sample: SU2G_sample_3, regrid: CONSERVE, variable: no3} SU_OH: - - {starting: "1979-01-15T12:00", collection: SU2G_MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4, sample: SU2G_sample_1, regrid: CONSERVE, variable: oh} - - {starting: "2019-12-15T12:00", collection: SU2G_MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4, sample: SU2G_sample_3, regrid: CONSERVE, variable: oh} + collection: SU2G_MERRA2_GMI.tavg24_3d_dac_Nv.x576_y361_t12.%y4.nc4 + regrid: CONSERVE + sample: SU2G_sample_1 + variable: oh climSO4: collection: SU2G_merra2.aer_Nv.2003-2015.2008%m2clm.nc4 sample: SU2G_sample_0 diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_StateSpecs.rc b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_StateSpecs.rc index 89756c6f..ddcdf0b2 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_StateSpecs.rc +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_StateSpecs.rc @@ -53,10 +53,10 @@ category: EXPORT #---------------------------------------------------------------------------------------- NAME | UNITS | DIMS | VLOC | UNGRIDDED | LONG NAME #---------------------------------------------------------------------------------------- - SUEM | kg m-2 s-1 | xy | N | self%nbins | Sulfer Emission (Bin %d) - SUDP | kg m-2 s-1 | xy | N | self%nbins | Sulfate Dry Deposition (Bin %d) - SUSD | kg m-2 s-1 | xy | N | self%nbins | Sulfate Settling (Bin %d) - SUWT | kg m-2 s-1 | xy | N | self%nbins | Sulfate Wet Deposition (Bin %d) + SUEM | kg m-2 s-1 | xy | N | self%nbins | Sulfur Emission (Bin %d) + SUDP | kg m-2 s-1 | xy | N | self%nbins | Sulfur Dry Deposition (Bin %d) + SUSD | kg m-2 s-1 | xy | N | self%nbins | Sulfur Settling (Bin %d) + SUWT | kg m-2 s-1 | xy | N | self%nbins | Sulfur Wet Deposition (Bin %d) SUSV | kg m-2 s-1 | xy | N | self%nbins | Sulfate Convective Scavenging (Bin %d) SO4EMAN | kg m-2 s-1 | xy | N | | SO4 Anthropogenic Emissions SO2EMAN | kg m-2 s-1 | xy | N | | SO2 Anthropogenic Emissions @@ -95,10 +95,10 @@ category: EXPORT SUFLUXU | kg m-1 s-1 | xy | N | | SO4 column u-wind mass flux SUFLUXV | kg m-1 s-1 | xy | N | | SO4 column v-wind mass flux SO4MASS | kg kg-1 | xyz | C | | SO4 Aerosol Mass Mixing Ratio - SUEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Extinction AOT - SUSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Extinction AOT Stratosphere - SUSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Scattering AOT - SUSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Scattering AOT Stratosphere + SUEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Aerosol Optical Depth + SUSTEXTTAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Stratospheric Aerosol Optical Thickness + SUSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Aerosol Optical Depth Due to Scattering + SUSTSCATAU | 1 | xy | N | size(self%wavelengths_vertint) | SO4 Stratospheric Aerosol Optical Thickness Due to Scattering SO4SAREA | m2 m-3 | xyz | C | | SO4 Surface Area Density SO4SNUM | m-3 | xyz | C | | SO4 Number Density @@ -112,7 +112,7 @@ category: INTERNAL SO2 |kg kg-1| xyz | C | MAPL_RestartOptional | T | DYNAMICS:TURBULENCE:MOIST | Sulphur dioxide SO4 |kg kg-1| xyz | C | MAPL_RestartOptional | T | DYNAMICS:TURBULENCE:MOIST | Sulphate aerosol MSA |kg kg-1| xyz | C | MAPL_RestartOptional | T | DYNAMICS:TURBULENCE:MOIST | Methanesulphonic acid - H2O2_INIT |kg kg-1| xyz | C | MAPL_RestartSkip | F | | private H2O2 that is saved and used to initialize + H2O2_INIT |kg kg-1| xyz | C | | F | | private H2O2 that is saved and used to initialize #******************************************************** diff --git a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_instance_SU.rc b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_instance_SU.rc index a842807a..f46a747e 100644 --- a/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_instance_SU.rc +++ b/ESMF/GOCART2G_GridComp/SU2G_GridComp/SU2G_instance_SU.rc @@ -3,12 +3,13 @@ # aerosol_radBands_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/opticsBands_SU.v1_3.RRTMG.nc -aerosol_monochromatic_optics_file: ExtData/chemistry/AerosolOptics/v0.0.0/x/optics_SU.v1_3.nc +aerosol_monochromatic_optics_file: /discover/nobackup/pcolarco/fvInput/AeroCom/x/optics_SU.v1_6.nc nbins: 4 # Volcanic pointwise sources -volcano_srcfilen: ExtData/chemistry/CARN/v202106/sfc/so2_volcanic_emissions_CARN_v202106.degassing_only.rc +volcano_srcfilen_explosive: /dev/null +volcano_srcfilen_degassing: ExtData/chemistry/CARN/v202401/sfc/so2_volcanic_emissions_CARN_v202401.degassing_only.rc # Heights [m] of LTO, CDS and CRS aviation emissions layers aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 @@ -25,9 +26,6 @@ fscav: 0.0 0.0 0.4 0.4 # Dry particle radius [um], used for settling particle_radius_microns: 0.0 0.0 0.35 0.0 -# Type of settling to use (see Chem_SettlingMod) -rhFlag: 4 - # Dry particle density [kg m-3] particle_density: -1 -1 1700 -1 diff --git a/ESMF/GOCART_GridComp/CFC_GridComp/AMIP.20C/CFC_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CFC_GridComp/AMIP.20C/CFC_GridComp_ExtData.rc deleted file mode 100644 index 7035706f..00000000 --- a/ESMF/GOCART_GridComp/CFC_GridComp/AMIP.20C/CFC_GridComp_ExtData.rc +++ /dev/null @@ -1,8 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CFC12 NA N Y - none none CFC-12_EMISSION ExtData/g5chem/sfc/ARCTAS.CFC12.emission.x540_y361.2008.hdf -%% - diff --git a/ESMF/GOCART_GridComp/CFC_GridComp/AMIP/CFC_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CFC_GridComp/AMIP/CFC_GridComp_ExtData.rc deleted file mode 100644 index 7035706f..00000000 --- a/ESMF/GOCART_GridComp/CFC_GridComp/AMIP/CFC_GridComp_ExtData.rc +++ /dev/null @@ -1,8 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CFC12 NA N Y - none none CFC-12_EMISSION ExtData/g5chem/sfc/ARCTAS.CFC12.emission.x540_y361.2008.hdf -%% - diff --git a/ESMF/GOCART_GridComp/CFC_GridComp/CFC_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CFC_GridComp/CFC_GridComp_ExtData.rc deleted file mode 100644 index 7035706f..00000000 --- a/ESMF/GOCART_GridComp/CFC_GridComp/CFC_GridComp_ExtData.rc +++ /dev/null @@ -1,8 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CFC12 NA N Y - none none CFC-12_EMISSION ExtData/g5chem/sfc/ARCTAS.CFC12.emission.x540_y361.2008.hdf -%% - diff --git a/ESMF/GOCART_GridComp/CFC_GridComp/CMakeLists.txt b/ESMF/GOCART_GridComp/CFC_GridComp/CMakeLists.txt index 927e7449..20aecab7 100644 --- a/ESMF/GOCART_GridComp/CFC_GridComp/CMakeLists.txt +++ b/ESMF/GOCART_GridComp/CFC_GridComp/CMakeLists.txt @@ -2,7 +2,7 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 ESMF::ESMF NetCDF::NetCDF_Fortran) esma_generate_gocart_code (${this} "-B\;-C\;-N\;GOCART") diff --git a/ESMF/GOCART_GridComp/CH4_GridComp/AMIP.20C/CH4_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CH4_GridComp/AMIP.20C/CH4_GridComp_ExtData.rc deleted file mode 100644 index cd77dc88..00000000 --- a/ESMF/GOCART_GridComp/CH4_GridComp/AMIP.20C/CH4_GridComp_ExtData.rc +++ /dev/null @@ -1,39 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CH4_sfcFluxanimls NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_ANIMLS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxcoal NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_COAL /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxleak NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_LEAK /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxgasvnt NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_GASVNT /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxhydz NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_HYDZ /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxmsw NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_MSW /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxsoilab NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_SOILAB /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtrmite NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TRMITE /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxbogs NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BOGS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxburn NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BURN /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxricec NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_RICEC /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxswamps NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_SWAMPS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtundra NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TUNDRA /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxbf NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BF /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtot NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TOT /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_ohanimls NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohcoal NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohleak NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohgasvnt NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohhydz NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohmsw NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohsoilab NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtrmite NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohbogs NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohburn NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohricec NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohswamps NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtundra NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohbf NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtot NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -# -CH4_regionMask NA N v - none none REGION_MASK ExtData/g5chem/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - diff --git a/ESMF/GOCART_GridComp/CH4_GridComp/AMIP/CH4_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CH4_GridComp/AMIP/CH4_GridComp_ExtData.rc deleted file mode 100644 index cd77dc88..00000000 --- a/ESMF/GOCART_GridComp/CH4_GridComp/AMIP/CH4_GridComp_ExtData.rc +++ /dev/null @@ -1,39 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CH4_sfcFluxanimls NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_ANIMLS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxcoal NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_COAL /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxleak NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_LEAK /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxgasvnt NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_GASVNT /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxhydz NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_HYDZ /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxmsw NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_MSW /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxsoilab NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_SOILAB /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtrmite NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TRMITE /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxbogs NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BOGS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxburn NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BURN /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxricec NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_RICEC /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxswamps NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_SWAMPS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtundra NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TUNDRA /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxbf NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BF /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtot NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TOT /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_ohanimls NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohcoal NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohleak NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohgasvnt NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohhydz NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohmsw NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohsoilab NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtrmite NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohbogs NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohburn NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohricec NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohswamps NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtundra NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohbf NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtot NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -# -CH4_regionMask NA N v - none none REGION_MASK ExtData/g5chem/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - diff --git a/ESMF/GOCART_GridComp/CH4_GridComp/CH4_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CH4_GridComp/CH4_GridComp_ExtData.rc deleted file mode 100644 index cd77dc88..00000000 --- a/ESMF/GOCART_GridComp/CH4_GridComp/CH4_GridComp_ExtData.rc +++ /dev/null @@ -1,39 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CH4_sfcFluxanimls NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_ANIMLS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxcoal NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_COAL /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxleak NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_LEAK /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxgasvnt NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_GASVNT /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxhydz NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_HYDZ /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxmsw NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_MSW /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxsoilab NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_SOILAB /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtrmite NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TRMITE /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxbogs NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BOGS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxburn NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BURN /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxricec NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_RICEC /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxswamps NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_SWAMPS /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtundra NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TUNDRA /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxbf NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_BF /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_sfcFluxtot NA Y Y %y4-%m2-%d2t12:00:00 none none CH4_TOT /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/emist_plusCH4WangAposteriori.x288_y181_z72_t12.2006.nc -CH4_ohanimls NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohcoal NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohleak NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohgasvnt NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohhydz NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohmsw NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohsoilab NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtrmite NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohbogs NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohburn NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohricec NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohswamps NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtundra NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohbf NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CH4_ohtot NA Y Y %y4-%m2-%d2t12:00:00 none none oh /discover/nobackup/projects/gmao/share/dasilva/fvInput/g5chem/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -# -CH4_regionMask NA N v - none none REGION_MASK ExtData/g5chem/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - diff --git a/ESMF/GOCART_GridComp/CMakeLists.txt b/ESMF/GOCART_GridComp/CMakeLists.txt index cce3ec13..5e017637 100644 --- a/ESMF/GOCART_GridComp/CMakeLists.txt +++ b/ESMF/GOCART_GridComp/CMakeLists.txt @@ -22,7 +22,7 @@ install( FILES ${resource_files} DESTINATION etc ) -set (dependencies Chem_Base Chem_Shared MAPL GMAO_mpeu esmf) +set (dependencies Chem_Base Chem_Shared MAPL GMAO_mpeu ESMF::ESMF) esma_add_library (${this} SRCS ${srcs} SUBCOMPONENTS ${alldirs} diff --git a/ESMF/GOCART_GridComp/CO2_GridComp/AMIP.20C/CO2_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CO2_GridComp/AMIP.20C/CO2_GridComp_ExtData.rc deleted file mode 100644 index ad06aea5..00000000 --- a/ESMF/GOCART_GridComp/CO2_GridComp/AMIP.20C/CO2_GridComp_ExtData.rc +++ /dev/null @@ -1,19 +0,0 @@ -PrimaryExports%% -# A = Climatology? Y/N; B = Conservative regridding? Y/N -#---------------+-------------------+-+-+---------------------+--------+--------+------------------------------------ -# Export | | | |_______ Refresh _____|____ Factors ____|_______ External File __________ -# Name | Units |A|B| Time Template | Offset | Scale | Variable | Template -#---------------+-------------------+-+-+---------------------+--------+--------+-------------+---------------------- - CO2_BIOMASS 'kg CO2 m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none biomass ExtData/chemistry/HFED/v1.0/Y%y4/hfed.emis_co2.x576_y361_t14.%y4.nc4 - CO2_FF 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2ff ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - CO2_NEP 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2nep ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - CO2_OCN 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2ocn ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - - CO2_CMS_BIOMASS 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none biomass ExtData/PIESA/sfc/CMS/em.daily.1x1.25.%y4.nc - CO2_CMS_FF 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none emco2ff ExtData/PIESA/sfc/CMS/ORNL_TRANSCOM.co2_ff_nep_ocn.x288_y181_t12.%y4.nc - CO2_CMS_NEP 'kg C m-2 s-1' N Y P0000-00-00T03:00 none none emco2nep ExtData/PIESA/sfc/CMS/casa.3hr.1x1.25.%y4.nc - CO2_CMS_OCN 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none emco2ocn ExtData/PIESA/sfc/CMS/NOBM_fco2.daily.1x1.25.%y4.nc - - CO2_regionMask NA N v - none none REGION_MASK ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc -#---------------+-------------------+-+-+---------------------+--------+--------+-------------+---------------------- -%% diff --git a/ESMF/GOCART_GridComp/CO2_GridComp/AMIP/CO2_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CO2_GridComp/AMIP/CO2_GridComp_ExtData.rc deleted file mode 100644 index c1244ab9..00000000 --- a/ESMF/GOCART_GridComp/CO2_GridComp/AMIP/CO2_GridComp_ExtData.rc +++ /dev/null @@ -1,19 +0,0 @@ -PrimaryExports%% -# A = Climatology? Y/N; B = Conservative regridding? Y/N -#---------------+-------------------+-+-+---------------------+--------+--------+------------------------------------ -# Export | | | |_______ Refresh _____|____ Factors ____|_______ External File __________ -# Name | Units |A|B| Time Template | Offset | Scale | Variable | Template -#---------------+-------------------+-+-+---------------------+--------+--------+-------------+---------------------- - CO2_BIOMASS 'kg CO2 m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none biomass ExtData/PIESA/sfc/QFED/v2.4r6/climatology/qfed2.emis_co2.005.x1152_y721_t12.2003_2012.2007.nc4 - CO2_FF 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2ff ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - CO2_NEP 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2nep ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - CO2_OCN 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2ocn ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - - CO2_CMS_BIOMASS 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none biomass ExtData/PIESA/sfc/CMS/em.daily.1x1.25.%y4.nc - CO2_CMS_FF 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none emco2ff ExtData/PIESA/sfc/CMS/ORNL_TRANSCOM.co2_ff_nep_ocn.x288_y181_t12.%y4.nc - CO2_CMS_NEP 'kg C m-2 s-1' N Y P0000-00-00T03:00 none none emco2nep ExtData/PIESA/sfc/CMS/casa.3hr.1x1.25.%y4.nc - CO2_CMS_OCN 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none emco2ocn ExtData/PIESA/sfc/CMS/NOBM_fco2.daily.1x1.25.%y4.nc - - CO2_regionMask NA N v - none none REGION_MASK ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc -#---------------+-------------------+-+-+---------------------+--------+--------+-------------+---------------------- -%% diff --git a/ESMF/GOCART_GridComp/CO2_GridComp/CMakeLists.txt b/ESMF/GOCART_GridComp/CO2_GridComp/CMakeLists.txt index 927e7449..20aecab7 100644 --- a/ESMF/GOCART_GridComp/CO2_GridComp/CMakeLists.txt +++ b/ESMF/GOCART_GridComp/CO2_GridComp/CMakeLists.txt @@ -2,7 +2,7 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 ESMF::ESMF NetCDF::NetCDF_Fortran) esma_generate_gocart_code (${this} "-B\;-C\;-N\;GOCART") diff --git a/ESMF/GOCART_GridComp/CO2_GridComp/CO2_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CO2_GridComp/CO2_GridComp_ExtData.rc deleted file mode 100644 index c1244ab9..00000000 --- a/ESMF/GOCART_GridComp/CO2_GridComp/CO2_GridComp_ExtData.rc +++ /dev/null @@ -1,19 +0,0 @@ -PrimaryExports%% -# A = Climatology? Y/N; B = Conservative regridding? Y/N -#---------------+-------------------+-+-+---------------------+--------+--------+------------------------------------ -# Export | | | |_______ Refresh _____|____ Factors ____|_______ External File __________ -# Name | Units |A|B| Time Template | Offset | Scale | Variable | Template -#---------------+-------------------+-+-+---------------------+--------+--------+-------------+---------------------- - CO2_BIOMASS 'kg CO2 m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none biomass ExtData/PIESA/sfc/QFED/v2.4r6/climatology/qfed2.emis_co2.005.x1152_y721_t12.2003_2012.2007.nc4 - CO2_FF 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2ff ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - CO2_NEP 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2nep ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - CO2_OCN 'kg C m-2 s-1' Y Y F%y4-%m2-%d2t12:00:00 none none emco2ocn ExtData/PIESA/sfc/bian.co2.x288_y181_t12.2001.nc - - CO2_CMS_BIOMASS 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none biomass ExtData/PIESA/sfc/CMS/em.daily.1x1.25.%y4.nc - CO2_CMS_FF 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none emco2ff ExtData/PIESA/sfc/CMS/ORNL_TRANSCOM.co2_ff_nep_ocn.x288_y181_t12.%y4.nc - CO2_CMS_NEP 'kg C m-2 s-1' N Y P0000-00-00T03:00 none none emco2nep ExtData/PIESA/sfc/CMS/casa.3hr.1x1.25.%y4.nc - CO2_CMS_OCN 'kg C m-2 s-1' N Y F%y4-%m2-%d2t12:00:00 none none emco2ocn ExtData/PIESA/sfc/CMS/NOBM_fco2.daily.1x1.25.%y4.nc - - CO2_regionMask NA N v - none none REGION_MASK ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc -#---------------+-------------------+-+-+---------------------+--------+--------+-------------+---------------------- -%% diff --git a/ESMF/GOCART_GridComp/CO_GridComp/AMIP.20C/CO_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CO_GridComp/AMIP.20C/CO_GridComp_ExtData.rc deleted file mode 100755 index 6a662b98..00000000 --- a/ESMF/GOCART_GridComp/CO_GridComp/AMIP.20C/CO_GridComp_ExtData.rc +++ /dev/null @@ -1,112 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CO_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 1.11 biomass ExtData/chemistry/HFED/v1.0/Y%y4/hfed.emis_co.x576_y361_t14.%y4.nc4 -CO_OH NA Y Y %y4-%m2-%d2t12:00:00 none none oh ExtData/PIESA/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CO_CH4 NA Y Y %y4-%m2-%d2t12:00:00 none none ch4 ExtData/PIESA/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CO_BF NA Y Y %y4-%m2-%d2t12:00:00 none 1.19 emcobf ExtData/PIESA/sfc/co_biofuel_v2.x360_y181_t12.2001.nc -CO_FS NA Y Y %y4-%m2-%d2t12:00:00 none 1.20 emcofs ExtData/PIESA/sfc/co_fossilfuel_v2.x360_y181_t12.2001.nc -CO_ISOP NA Y Y %y4-%m2-%d2t12:00:00 none 0.2 emcoisop ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc -CO_NVOC NA Y Y %y4-%m2-%d2t12:00:00 none none emconvoc ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc -CO_TERP NA Y Y %y4-%m2-%d2t12:00:00 none none emcoterp ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc - -CO_CH4bbae NA Y Y - none none ch4 /dev/null -CO_BFbbae NA Y Y - none none bf /dev/null -CO_FSbbae NA Y Y - none none fs /dev/null -CO_ISOPbbae NA Y Y - none none isop /dev/null -CO_NVOCbbae NA Y Y - none none nvoc /dev/null -CO_TERPbbae NA Y Y - none none terp /dev/null -# -CO_CH4bbna NA Y Y - none none ch4 /dev/null -CO_BFbbna NA Y Y - none none bf /dev/null -CO_FSbbna NA Y Y - none none fs /dev/null -CO_ISOPbbna NA Y Y - none none isop /dev/null -CO_NVOCbbna NA Y Y - none none nvoc /dev/null -CO_TERPbbna NA Y Y - none none terp /dev/null -# -CO_CH4bbla NA Y Y - none none ch4 /dev/null -CO_BFbbla NA Y Y - none none bf /dev/null -CO_FSbbla NA Y Y - none none fs /dev/null -CO_ISOPbbla NA Y Y - none none isop /dev/null -CO_NVOCbbla NA Y Y - none none nvoc /dev/null -CO_TERPbbla NA Y Y - none none terp /dev/null -# -CO_CH4bbaf NA Y Y - none none ch4 /dev/null -CO_BFbbaf NA Y Y - none none bf /dev/null -CO_FSbbaf NA Y Y - none none fs /dev/null -CO_ISOPbbaf NA Y Y - none none isop /dev/null -CO_NVOCbbaf NA Y Y - none none nvoc /dev/null -CO_TERPbbaf NA Y Y - none none terp /dev/null -# -CO_CH4bbgl NA Y Y - none none ch4 /dev/null -CO_BFbbgl NA Y Y - none none bf /dev/null -CO_FSbbgl NA Y Y - none none fs /dev/null -CO_ISOPbbgl NA Y Y - none none isop /dev/null -CO_NVOCbbgl NA Y Y - none none nvoc /dev/null -CO_TERPbbgl NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbna NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbeu NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbas NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbgl NA Y Y - none none terp /dev/null -# -CO_regionMask NA N V - none none REGION_MASK ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - - -DerivedExports%% -# ---------|---------|--------------------------------------------| -# Export | Primary |_________________ Mask _____________________| -# Name | Name | Name | Expression | -# ---------|---------|------------|-------------------------------| -# ---------|---------|------------|-------------------------------| -CO_BIOMASSbbae regionmask(CO_BIOMASS,CO_regionMask;3,9,10) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbna regionmask(CO_BIOMASS,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbla regionmask(CO_BIOMASS,CO_regionMask;2,6) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbaf regionmask(CO_BIOMASS,CO_regionMask;5) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbgl CO_BIOMASS %y4-%m2-%d2t12:00:00 -# -CO_CH4nbna regionmask(CO_CH4,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_BFnbna regionmask(CO_BF,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_FSnbna regionmask(CO_FS,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_ISOPnbna regionmask(CO_ISOP,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_NVOCnbna regionmask(CO_NVOC,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_TERPnbna regionmask(CO_TERP,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbeu regionmask(CO_CH4,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_BFnbeu regionmask(CO_BF,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_FSnbeu regionmask(CO_FS,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_ISOPnbeu regionmask(CO_ISOP,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_NVOCnbeu regionmask(CO_NVOC,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_TERPnbeu regionmask(CO_TERP,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbas regionmask(CO_CH4,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_BFnbas regionmask(CO_BF,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_FSnbas regionmask(CO_FS,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_ISOPnbas regionmask(CO_ISOP,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_NVOCnbas regionmask(CO_NVOC,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_TERPnbas regionmask(CO_TERP,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbgl CO_CH4 %y4-%m2-%d2t12:00:00 -CO_BFnbgl CO_BF %y4-%m2-%d2t12:00:00 -CO_FSnbgl CO_FS %y4-%m2-%d2t12:00:00 -CO_ISOPnbgl CO_ISOP %y4-%m2-%d2t12:00:00 -CO_NVOCnbgl CO_NVOC %y4-%m2-%d2t12:00:00 -CO_TERPnbgl CO_TERP %y4-%m2-%d2t12:00:00 -# -CO_OHbbae CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbna CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbla CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbaf CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbgl CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbna CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbeu CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbas CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbgl CO_OH %y4-%m2-%d2t12:00:00 -%% - diff --git a/ESMF/GOCART_GridComp/CO_GridComp/AMIP/CO_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CO_GridComp/AMIP/CO_GridComp_ExtData.rc deleted file mode 100755 index f1748325..00000000 --- a/ESMF/GOCART_GridComp/CO_GridComp/AMIP/CO_GridComp_ExtData.rc +++ /dev/null @@ -1,112 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CO_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 1.11 biomass ExtData/chemistry/QFED/v2.6r1/sfc/0.1/Y%y4/M%m2/qfed2.emis_co.061.%y4%m2%d2.nc4 -CO_OH NA Y Y %y4-%m2-%d2t12:00:00 none none oh ExtData/PIESA/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CO_CH4 NA Y Y %y4-%m2-%d2t12:00:00 none none ch4 ExtData/PIESA/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CO_BF NA Y Y %y4-%m2-%d2t12:00:00 none 1.19 emcobf ExtData/PIESA/sfc/co_biofuel_v2.x360_y181_t12.2001.nc -CO_FS NA Y Y %y4-%m2-%d2t12:00:00 none 1.20 emcofs ExtData/PIESA/sfc/co_fossilfuel_v2.x360_y181_t12.2001.nc -CO_ISOP NA Y Y %y4-%m2-%d2t12:00:00 none 0.2 emcoisop ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc -CO_NVOC NA Y Y %y4-%m2-%d2t12:00:00 none none emconvoc ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc -CO_TERP NA Y Y %y4-%m2-%d2t12:00:00 none none emcoterp ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc - -CO_CH4bbae NA Y Y - none none ch4 /dev/null -CO_BFbbae NA Y Y - none none bf /dev/null -CO_FSbbae NA Y Y - none none fs /dev/null -CO_ISOPbbae NA Y Y - none none isop /dev/null -CO_NVOCbbae NA Y Y - none none nvoc /dev/null -CO_TERPbbae NA Y Y - none none terp /dev/null -# -CO_CH4bbna NA Y Y - none none ch4 /dev/null -CO_BFbbna NA Y Y - none none bf /dev/null -CO_FSbbna NA Y Y - none none fs /dev/null -CO_ISOPbbna NA Y Y - none none isop /dev/null -CO_NVOCbbna NA Y Y - none none nvoc /dev/null -CO_TERPbbna NA Y Y - none none terp /dev/null -# -CO_CH4bbla NA Y Y - none none ch4 /dev/null -CO_BFbbla NA Y Y - none none bf /dev/null -CO_FSbbla NA Y Y - none none fs /dev/null -CO_ISOPbbla NA Y Y - none none isop /dev/null -CO_NVOCbbla NA Y Y - none none nvoc /dev/null -CO_TERPbbla NA Y Y - none none terp /dev/null -# -CO_CH4bbaf NA Y Y - none none ch4 /dev/null -CO_BFbbaf NA Y Y - none none bf /dev/null -CO_FSbbaf NA Y Y - none none fs /dev/null -CO_ISOPbbaf NA Y Y - none none isop /dev/null -CO_NVOCbbaf NA Y Y - none none nvoc /dev/null -CO_TERPbbaf NA Y Y - none none terp /dev/null -# -CO_CH4bbgl NA Y Y - none none ch4 /dev/null -CO_BFbbgl NA Y Y - none none bf /dev/null -CO_FSbbgl NA Y Y - none none fs /dev/null -CO_ISOPbbgl NA Y Y - none none isop /dev/null -CO_NVOCbbgl NA Y Y - none none nvoc /dev/null -CO_TERPbbgl NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbna NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbeu NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbas NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbgl NA Y Y - none none terp /dev/null -# -CO_regionMask NA N V - none none REGION_MASK ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - - -DerivedExports%% -# ---------|---------|--------------------------------------------| -# Export | Primary |_________________ Mask _____________________| -# Name | Name | Name | Expression | -# ---------|---------|------------|-------------------------------| -# ---------|---------|------------|-------------------------------| -CO_BIOMASSbbae regionmask(CO_BIOMASS,CO_regionMask;3,9,10) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbna regionmask(CO_BIOMASS,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbla regionmask(CO_BIOMASS,CO_regionMask;2,6) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbaf regionmask(CO_BIOMASS,CO_regionMask;5) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbgl CO_BIOMASS %y4-%m2-%d2t12:00:00 -# -CO_CH4nbna regionmask(CO_CH4,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_BFnbna regionmask(CO_BF,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_FSnbna regionmask(CO_FS,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_ISOPnbna regionmask(CO_ISOP,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_NVOCnbna regionmask(CO_NVOC,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_TERPnbna regionmask(CO_TERP,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbeu regionmask(CO_CH4,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_BFnbeu regionmask(CO_BF,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_FSnbeu regionmask(CO_FS,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_ISOPnbeu regionmask(CO_ISOP,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_NVOCnbeu regionmask(CO_NVOC,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_TERPnbeu regionmask(CO_TERP,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbas regionmask(CO_CH4,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_BFnbas regionmask(CO_BF,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_FSnbas regionmask(CO_FS,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_ISOPnbas regionmask(CO_ISOP,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_NVOCnbas regionmask(CO_NVOC,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_TERPnbas regionmask(CO_TERP,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbgl CO_CH4 %y4-%m2-%d2t12:00:00 -CO_BFnbgl CO_BF %y4-%m2-%d2t12:00:00 -CO_FSnbgl CO_FS %y4-%m2-%d2t12:00:00 -CO_ISOPnbgl CO_ISOP %y4-%m2-%d2t12:00:00 -CO_NVOCnbgl CO_NVOC %y4-%m2-%d2t12:00:00 -CO_TERPnbgl CO_TERP %y4-%m2-%d2t12:00:00 -# -CO_OHbbae CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbna CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbla CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbaf CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbgl CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbna CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbeu CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbas CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbgl CO_OH %y4-%m2-%d2t12:00:00 -%% - diff --git a/ESMF/GOCART_GridComp/CO_GridComp/CMakeLists.txt b/ESMF/GOCART_GridComp/CO_GridComp/CMakeLists.txt index ef32201f..1a17c597 100644 --- a/ESMF/GOCART_GridComp/CO_GridComp/CMakeLists.txt +++ b/ESMF/GOCART_GridComp/CO_GridComp/CMakeLists.txt @@ -2,7 +2,7 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 ESMF::ESMF NetCDF::NetCDF_Fortran) esma_generate_gocart_code (${this} "-B\;-E\;-F\;-N\;GOCART") diff --git a/ESMF/GOCART_GridComp/CO_GridComp/CO_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/CO_GridComp/CO_GridComp_ExtData.rc deleted file mode 100755 index 8294d023..00000000 --- a/ESMF/GOCART_GridComp/CO_GridComp/CO_GridComp_ExtData.rc +++ /dev/null @@ -1,112 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -CO_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 1.11 biomass ExtData/chemistry/QFED/v2.5r1-nrt/sfc/0.1/Y%y4/M%m2/qfed2.emis_co.006.%y4%m2%d2.nc4 -CO_OH NA Y Y %y4-%m2-%d2t12:00:00 none none oh ExtData/PIESA/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CO_CH4 NA Y Y %y4-%m2-%d2t12:00:00 none none ch4 ExtData/PIESA/L72/gmi_oh_ch4_h2o2_no3.x144_y91_z72_t12.2006.nc -CO_BF NA Y Y %y4-%m2-%d2t12:00:00 none 1.19 emcobf ExtData/PIESA/sfc/co_biofuel_v2.x360_y181_t12.2001.nc -CO_FS NA Y Y %y4-%m2-%d2t12:00:00 none 1.20 emcofs ExtData/PIESA/sfc/co_fossilfuel_v2.x360_y181_t12.2001.nc -CO_ISOP NA Y Y %y4-%m2-%d2t12:00:00 none 0.2 emcoisop ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc -CO_NVOC NA Y Y %y4-%m2-%d2t12:00:00 none none emconvoc ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc -CO_TERP NA Y Y %y4-%m2-%d2t12:00:00 none none emcoterp ExtData/PIESA/sfc/co_biogenic.x288_y181_t12.2006.nc - -CO_CH4bbae NA Y Y - none none ch4 /dev/null -CO_BFbbae NA Y Y - none none bf /dev/null -CO_FSbbae NA Y Y - none none fs /dev/null -CO_ISOPbbae NA Y Y - none none isop /dev/null -CO_NVOCbbae NA Y Y - none none nvoc /dev/null -CO_TERPbbae NA Y Y - none none terp /dev/null -# -CO_CH4bbna NA Y Y - none none ch4 /dev/null -CO_BFbbna NA Y Y - none none bf /dev/null -CO_FSbbna NA Y Y - none none fs /dev/null -CO_ISOPbbna NA Y Y - none none isop /dev/null -CO_NVOCbbna NA Y Y - none none nvoc /dev/null -CO_TERPbbna NA Y Y - none none terp /dev/null -# -CO_CH4bbla NA Y Y - none none ch4 /dev/null -CO_BFbbla NA Y Y - none none bf /dev/null -CO_FSbbla NA Y Y - none none fs /dev/null -CO_ISOPbbla NA Y Y - none none isop /dev/null -CO_NVOCbbla NA Y Y - none none nvoc /dev/null -CO_TERPbbla NA Y Y - none none terp /dev/null -# -CO_CH4bbaf NA Y Y - none none ch4 /dev/null -CO_BFbbaf NA Y Y - none none bf /dev/null -CO_FSbbaf NA Y Y - none none fs /dev/null -CO_ISOPbbaf NA Y Y - none none isop /dev/null -CO_NVOCbbaf NA Y Y - none none nvoc /dev/null -CO_TERPbbaf NA Y Y - none none terp /dev/null -# -CO_CH4bbgl NA Y Y - none none ch4 /dev/null -CO_BFbbgl NA Y Y - none none bf /dev/null -CO_FSbbgl NA Y Y - none none fs /dev/null -CO_ISOPbbgl NA Y Y - none none isop /dev/null -CO_NVOCbbgl NA Y Y - none none nvoc /dev/null -CO_TERPbbgl NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbna NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbeu NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbas NA Y Y - none none terp /dev/null -# -CO_BIOMASSnbgl NA Y Y - none none terp /dev/null -# -CO_regionMask NA N V - none none REGION_MASK ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc -%% - - -DerivedExports%% -# ---------|---------|--------------------------------------------| -# Export | Primary |_________________ Mask _____________________| -# Name | Name | Name | Expression | -# ---------|---------|------------|-------------------------------| -# ---------|---------|------------|-------------------------------| -CO_BIOMASSbbae regionmask(CO_BIOMASS,CO_regionMask;3,9,10) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbna regionmask(CO_BIOMASS,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbla regionmask(CO_BIOMASS,CO_regionMask;2,6) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbaf regionmask(CO_BIOMASS,CO_regionMask;5) %y4-%m2-%d2t12:00:00 -CO_BIOMASSbbgl CO_BIOMASS %y4-%m2-%d2t12:00:00 -# -CO_CH4nbna regionmask(CO_CH4,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_BFnbna regionmask(CO_BF,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_FSnbna regionmask(CO_FS,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_ISOPnbna regionmask(CO_ISOP,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_NVOCnbna regionmask(CO_NVOC,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -CO_TERPnbna regionmask(CO_TERP,CO_regionMask;1) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbeu regionmask(CO_CH4,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_BFnbeu regionmask(CO_BF,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_FSnbeu regionmask(CO_FS,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_ISOPnbeu regionmask(CO_ISOP,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_NVOCnbeu regionmask(CO_NVOC,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -CO_TERPnbeu regionmask(CO_TERP,CO_regionMask;3,9) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbas regionmask(CO_CH4,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_BFnbas regionmask(CO_BF,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_FSnbas regionmask(CO_FS,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_ISOPnbas regionmask(CO_ISOP,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_NVOCnbas regionmask(CO_NVOC,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -CO_TERPnbas regionmask(CO_TERP,CO_regionMask;4,10) %y4-%m2-%d2t12:00:00 -# -CO_CH4nbgl CO_CH4 %y4-%m2-%d2t12:00:00 -CO_BFnbgl CO_BF %y4-%m2-%d2t12:00:00 -CO_FSnbgl CO_FS %y4-%m2-%d2t12:00:00 -CO_ISOPnbgl CO_ISOP %y4-%m2-%d2t12:00:00 -CO_NVOCnbgl CO_NVOC %y4-%m2-%d2t12:00:00 -CO_TERPnbgl CO_TERP %y4-%m2-%d2t12:00:00 -# -CO_OHbbae CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbna CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbla CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbaf CO_OH %y4-%m2-%d2t12:00:00 -CO_OHbbgl CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbna CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbeu CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbas CO_OH %y4-%m2-%d2t12:00:00 -CO_OHnbgl CO_OH %y4-%m2-%d2t12:00:00 -%% - diff --git a/ESMF/GOCART_GridComp/GOCART_GridCompMod.F90 b/ESMF/GOCART_GridComp/GOCART_GridCompMod.F90 index 7d872e15..f24add8e 100644 --- a/ESMF/GOCART_GridComp/GOCART_GridCompMod.F90 +++ b/ESMF/GOCART_GridComp/GOCART_GridCompMod.F90 @@ -1162,7 +1162,7 @@ subroutine Run1_ ( gc, impChem, expChem, clock, rc ) ! ---------------------------------------------------------------------------------------- ! Assume that DT is always an integral number of seconds ! Add a fraction to both (and then truncate to int), to avoid cases like 900 /= 899.999999 - _ASSERT(abs(cdt-hdt) < 0.1, 'Implementation of GOCART_DT is problematic; set GOCART_DT = HEARTBEAT_DT') +!! _ASSERT(abs(cdt-hdt) < 0.1, 'Implementation of GOCART_DT is problematic; set GOCART_DT = HEARTBEAT_DT') allocate(r4ZTH(SIZE(LATS,1), SIZE(LATS,2)), __STAT__) allocate( ZTH(SIZE(LATS,1), SIZE(LATS,2)), __STAT__) diff --git a/ESMF/GOCART_GridComp/O3_GridComp/AMIP.20C/O3_GridComp.rc b/ESMF/GOCART_GridComp/O3_GridComp/AMIP.20C/O3_GridComp.rc index 2a5d767d..9c2e9e0d 100644 --- a/ESMF/GOCART_GridComp/O3_GridComp/AMIP.20C/O3_GridComp.rc +++ b/ESMF/GOCART_GridComp/O3_GridComp/AMIP.20C/O3_GridComp.rc @@ -3,7 +3,7 @@ # # Parameterized chemistry # ----------------------- -PCHEMs_file_name: /discover/nobackup/ltakacs/bcs/Ganymed-2_0_M/Shared/pchem.species.Clim_Prod_Loss.z_721x72.nc4 +PCHEMs_file_name: /discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Ganymed-2_0_M/Shared/pchem.species.Clim_Prod_Loss.z_721x72.nc4 pchem_clim_years: 1 # GMI chemistry diff --git a/ESMF/GOCART_GridComp/O3_GridComp/AMIP.20C/O3_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/O3_GridComp/AMIP.20C/O3_GridComp_ExtData.rc deleted file mode 100644 index 3f562311..00000000 --- a/ESMF/GOCART_GridComp/O3_GridComp/AMIP.20C/O3_GridComp_ExtData.rc +++ /dev/null @@ -1,52 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -O3_ireg NA Y Y - none none ireg ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID001 NA Y Y - none none iuseVegID001 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID002 NA Y Y - none none iuseVegID002 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID003 NA Y Y - none none iuseVegID003 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID004 NA Y Y - none none iuseVegID004 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID005 NA Y Y - none none iuseVegID005 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID006 NA Y Y - none none iuseVegID006 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID007 NA Y Y - none none iuseVegID007 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID008 NA Y Y - none none iuseVegID008 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID009 NA Y Y - none none iuseVegID009 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID010 NA Y Y - none none iuseVegID010 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID011 NA Y Y - none none iuseVegID011 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID012 NA Y Y - none none iuseVegID012 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID013 NA Y Y - none none iuseVegID013 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID014 NA Y Y - none none iuseVegID014 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID015 NA Y Y - none none iuseVegID015 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID001 NA Y Y - none none ilandVegID001 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID002 NA Y Y - none none ilandVegID002 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID003 NA Y Y - none none ilandVegID003 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID004 NA Y Y - none none ilandVegID004 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID005 NA Y Y - none none ilandVegID005 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID006 NA Y Y - none none ilandVegID006 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID007 NA Y Y - none none ilandVegID007 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID008 NA Y Y - none none ilandVegID008 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID009 NA Y Y - none none ilandVegID009 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID010 NA Y Y - none none ilandVegID010 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID011 NA Y Y - none none ilandVegID011 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID012 NA Y Y - none none ilandVegID012 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID013 NA Y Y - none none ilandVegID013 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID014 NA Y Y - none none ilandVegID014 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID015 NA Y Y - none none ilandVegID015 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_laiVegID001 NA Y Y - none none laiVegID001 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID002 NA Y Y - none none laiVegID002 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID003 NA Y Y - none none laiVegID003 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID004 NA Y Y - none none laiVegID004 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID005 NA Y Y - none none laiVegID005 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID006 NA Y Y - none none laiVegID006 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID007 NA Y Y - none none laiVegID007 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID008 NA Y Y - none none laiVegID008 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID009 NA Y Y - none none laiVegID009 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID010 NA Y Y - none none laiVegID010 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID011 NA Y Y - none none laiVegID011 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID012 NA Y Y - none none laiVegID012 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID013 NA Y Y - none none laiVegID013 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID014 NA Y Y - none none laiVegID014 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID015 NA Y Y - none none laiVegID015 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -%% diff --git a/ESMF/GOCART_GridComp/O3_GridComp/AMIP/O3_GridComp.rc b/ESMF/GOCART_GridComp/O3_GridComp/AMIP/O3_GridComp.rc index 2a5d767d..9c2e9e0d 100644 --- a/ESMF/GOCART_GridComp/O3_GridComp/AMIP/O3_GridComp.rc +++ b/ESMF/GOCART_GridComp/O3_GridComp/AMIP/O3_GridComp.rc @@ -3,7 +3,7 @@ # # Parameterized chemistry # ----------------------- -PCHEMs_file_name: /discover/nobackup/ltakacs/bcs/Ganymed-2_0_M/Shared/pchem.species.Clim_Prod_Loss.z_721x72.nc4 +PCHEMs_file_name: /discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Ganymed-2_0_M/Shared/pchem.species.Clim_Prod_Loss.z_721x72.nc4 pchem_clim_years: 1 # GMI chemistry diff --git a/ESMF/GOCART_GridComp/O3_GridComp/AMIP/O3_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/O3_GridComp/AMIP/O3_GridComp_ExtData.rc deleted file mode 100644 index 3f562311..00000000 --- a/ESMF/GOCART_GridComp/O3_GridComp/AMIP/O3_GridComp_ExtData.rc +++ /dev/null @@ -1,52 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -O3_ireg NA Y Y - none none ireg ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID001 NA Y Y - none none iuseVegID001 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID002 NA Y Y - none none iuseVegID002 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID003 NA Y Y - none none iuseVegID003 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID004 NA Y Y - none none iuseVegID004 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID005 NA Y Y - none none iuseVegID005 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID006 NA Y Y - none none iuseVegID006 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID007 NA Y Y - none none iuseVegID007 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID008 NA Y Y - none none iuseVegID008 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID009 NA Y Y - none none iuseVegID009 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID010 NA Y Y - none none iuseVegID010 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID011 NA Y Y - none none iuseVegID011 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID012 NA Y Y - none none iuseVegID012 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID013 NA Y Y - none none iuseVegID013 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID014 NA Y Y - none none iuseVegID014 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID015 NA Y Y - none none iuseVegID015 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID001 NA Y Y - none none ilandVegID001 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID002 NA Y Y - none none ilandVegID002 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID003 NA Y Y - none none ilandVegID003 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID004 NA Y Y - none none ilandVegID004 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID005 NA Y Y - none none ilandVegID005 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID006 NA Y Y - none none ilandVegID006 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID007 NA Y Y - none none ilandVegID007 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID008 NA Y Y - none none ilandVegID008 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID009 NA Y Y - none none ilandVegID009 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID010 NA Y Y - none none ilandVegID010 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID011 NA Y Y - none none ilandVegID011 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID012 NA Y Y - none none ilandVegID012 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID013 NA Y Y - none none ilandVegID013 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID014 NA Y Y - none none ilandVegID014 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID015 NA Y Y - none none ilandVegID015 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_laiVegID001 NA Y Y - none none laiVegID001 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID002 NA Y Y - none none laiVegID002 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID003 NA Y Y - none none laiVegID003 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID004 NA Y Y - none none laiVegID004 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID005 NA Y Y - none none laiVegID005 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID006 NA Y Y - none none laiVegID006 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID007 NA Y Y - none none laiVegID007 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID008 NA Y Y - none none laiVegID008 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID009 NA Y Y - none none laiVegID009 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID010 NA Y Y - none none laiVegID010 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID011 NA Y Y - none none laiVegID011 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID012 NA Y Y - none none laiVegID012 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID013 NA Y Y - none none laiVegID013 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID014 NA Y Y - none none laiVegID014 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID015 NA Y Y - none none laiVegID015 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -%% diff --git a/ESMF/GOCART_GridComp/O3_GridComp/O3_GridComp.rc b/ESMF/GOCART_GridComp/O3_GridComp/O3_GridComp.rc index 2a5d767d..9c2e9e0d 100755 --- a/ESMF/GOCART_GridComp/O3_GridComp/O3_GridComp.rc +++ b/ESMF/GOCART_GridComp/O3_GridComp/O3_GridComp.rc @@ -3,7 +3,7 @@ # # Parameterized chemistry # ----------------------- -PCHEMs_file_name: /discover/nobackup/ltakacs/bcs/Ganymed-2_0_M/Shared/pchem.species.Clim_Prod_Loss.z_721x72.nc4 +PCHEMs_file_name: /discover/nobackup/projects/gmao/bcs_shared/legacy_bcs/Ganymed-2_0_M/Shared/pchem.species.Clim_Prod_Loss.z_721x72.nc4 pchem_clim_years: 1 # GMI chemistry diff --git a/ESMF/GOCART_GridComp/O3_GridComp/O3_GridCompMod.F90 b/ESMF/GOCART_GridComp/O3_GridComp/O3_GridCompMod.F90 index 0873000f..9e212a27 100644 --- a/ESMF/GOCART_GridComp/O3_GridComp/O3_GridCompMod.F90 +++ b/ESMF/GOCART_GridComp/O3_GridComp/O3_GridCompMod.F90 @@ -636,6 +636,7 @@ SUBROUTINE O3_GridCompRun ( gcO3, w_c, impChem, expChem, & REAL, ALLOCATABLE :: dryDepFreq(:,:) REAL, ALLOCATABLE :: dO3(:,:) INTEGER, ALLOCATABLE :: oro(:,:) + REAL, ALLOCATABLE :: tropPa(:,:) REAL, ALLOCATABLE :: lai2D(:,:) CHARACTER(LEN= 3) :: laiID @@ -889,7 +890,8 @@ SUBROUTINE O3_GridCompRun ( gcO3, w_c, impChem, expChem, & ! Repair bad tropopause pressures, if any exist ! --------------------------------------------- - CALL Chem_UtilTroppFixer(i2, j2, tropp, VERBOSE=.TRUE., RC=status) + ALLOCATE(tropPa(i1:i2,j1:j2), _STAT) + CALL Chem_UtilTroppFixer(i2, j2, tropp, VERBOSE=.TRUE., NEWTROPP=tropPa, RC=status) VERIFY_(status) ! Perform parameterized production and loss chemistry @@ -1288,13 +1290,14 @@ SUBROUTINE doProdLoss(rc) mask = 0 DO k=1,km - WHERE(plPa(:,:,k) <= tropp(:,:)) mask(:,:,k) = 1 - WHERE(tropp(:,:) == MAPL_UNDEF) mask(:,:,k) = 0 + WHERE(plPa(:,:,k) <= tropPa(:,:)) mask(:,:,k) = 1 + WHERE(tropPa(:,:) == MAPL_UNDEF) mask(:,:,k) = 0 END DO n = w_c%reg%i_O3 WHERE(mask == 1) w_c%qa(n)%data3d = (w_c%qa(n)%data3d + cdt*Pi)/(1.00 + cdt*Li) + DEALLOCATE(tropPa, _STAT) DEALLOCATE(mask, STAT=status) VERIFY_(status) DEALLOCATE(Pclim, STAT=status) diff --git a/ESMF/GOCART_GridComp/O3_GridComp/O3_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/O3_GridComp/O3_GridComp_ExtData.rc deleted file mode 100644 index 3f562311..00000000 --- a/ESMF/GOCART_GridComp/O3_GridComp/O3_GridComp_ExtData.rc +++ /dev/null @@ -1,52 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -O3_ireg NA Y Y - none none ireg ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID001 NA Y Y - none none iuseVegID001 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID002 NA Y Y - none none iuseVegID002 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID003 NA Y Y - none none iuseVegID003 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID004 NA Y Y - none none iuseVegID004 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID005 NA Y Y - none none iuseVegID005 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID006 NA Y Y - none none iuseVegID006 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID007 NA Y Y - none none iuseVegID007 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID008 NA Y Y - none none iuseVegID008 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID009 NA Y Y - none none iuseVegID009 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID010 NA Y Y - none none iuseVegID010 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID011 NA Y Y - none none iuseVegID011 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID012 NA Y Y - none none iuseVegID012 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID013 NA Y Y - none none iuseVegID013 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID014 NA Y Y - none none iuseVegID014 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_iuseVegID015 NA Y Y - none none iuseVegID015 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID001 NA Y Y - none none ilandVegID001 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID002 NA Y Y - none none ilandVegID002 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID003 NA Y Y - none none ilandVegID003 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID004 NA Y Y - none none ilandVegID004 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID005 NA Y Y - none none ilandVegID005 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID006 NA Y Y - none none ilandVegID006 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID007 NA Y Y - none none ilandVegID007 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID008 NA Y Y - none none ilandVegID008 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID009 NA Y Y - none none ilandVegID009 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID010 NA Y Y - none none ilandVegID010 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID011 NA Y Y - none none ilandVegID011 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID012 NA Y Y - none none ilandVegID012 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID013 NA Y Y - none none ilandVegID013 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID014 NA Y Y - none none ilandVegID014 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_ilandVegID015 NA Y Y - none none ilandVegID015 ExtData/g5chem/sfc/vegetationType_GMI.x288_y181_t12.2006.nc -O3_laiVegID001 NA Y Y - none none laiVegID001 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID002 NA Y Y - none none laiVegID002 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID003 NA Y Y - none none laiVegID003 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID004 NA Y Y - none none laiVegID004 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID005 NA Y Y - none none laiVegID005 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID006 NA Y Y - none none laiVegID006 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID007 NA Y Y - none none laiVegID007 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID008 NA Y Y - none none laiVegID008 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID009 NA Y Y - none none laiVegID009 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID010 NA Y Y - none none laiVegID010 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID011 NA Y Y - none none laiVegID011 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID012 NA Y Y - none none laiVegID012 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID013 NA Y Y - none none laiVegID013 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID014 NA Y Y - none none laiVegID014 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -O3_laiVegID015 NA Y Y - none none laiVegID015 ExtData/g5chem/sfc/leafAreaIndex_GMI.x288_y181_t12.2006.nc -%% diff --git a/ESMF/GOCART_GridComp/Rn_GridComp/AMIP.20C/Rn_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/Rn_GridComp/AMIP.20C/Rn_GridComp_ExtData.rc deleted file mode 100644 index acb6e571..00000000 --- a/ESMF/GOCART_GridComp/Rn_GridComp/AMIP.20C/Rn_GridComp_ExtData.rc +++ /dev/null @@ -1,17 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -Rn_EMISSION NA Y Y %y4-%m2-%d2t12:00:00 none none Rn_EMISSION ExtData/g5chem/sfc/gocart.radon.x540_y361.nc -RN_regionMask NA N V - none none REGION_MASK ExtData/g5chem/sfc/RADON.region_mask.x540_y361.2001.nc -%% - -DerivedExports%% -Rn_EMISSIONAfri regionmask(Rn_EMISSION,Rn_regionMask;5) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONAsia regionmask(Rn_EMISSION,Rn_regionMask;4) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONAust regionmask(Rn_EMISSION,Rn_regionMask;7) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONEuro regionmask(Rn_EMISSION,Rn_regionMask;3) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONSoAm regionmask(Rn_EMISSION,Rn_regionMask;6) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONNoAm regionmask(Rn_EMISSION,Rn_regionMask;1,2) %y4-%m2-%d2t12:00:00 -%% diff --git a/ESMF/GOCART_GridComp/Rn_GridComp/AMIP/Rn_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/Rn_GridComp/AMIP/Rn_GridComp_ExtData.rc deleted file mode 100644 index acb6e571..00000000 --- a/ESMF/GOCART_GridComp/Rn_GridComp/AMIP/Rn_GridComp_ExtData.rc +++ /dev/null @@ -1,17 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -Rn_EMISSION NA Y Y %y4-%m2-%d2t12:00:00 none none Rn_EMISSION ExtData/g5chem/sfc/gocart.radon.x540_y361.nc -RN_regionMask NA N V - none none REGION_MASK ExtData/g5chem/sfc/RADON.region_mask.x540_y361.2001.nc -%% - -DerivedExports%% -Rn_EMISSIONAfri regionmask(Rn_EMISSION,Rn_regionMask;5) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONAsia regionmask(Rn_EMISSION,Rn_regionMask;4) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONAust regionmask(Rn_EMISSION,Rn_regionMask;7) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONEuro regionmask(Rn_EMISSION,Rn_regionMask;3) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONSoAm regionmask(Rn_EMISSION,Rn_regionMask;6) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONNoAm regionmask(Rn_EMISSION,Rn_regionMask;1,2) %y4-%m2-%d2t12:00:00 -%% diff --git a/ESMF/GOCART_GridComp/Rn_GridComp/CMakeLists.txt b/ESMF/GOCART_GridComp/Rn_GridComp/CMakeLists.txt index ef32201f..1a17c597 100644 --- a/ESMF/GOCART_GridComp/Rn_GridComp/CMakeLists.txt +++ b/ESMF/GOCART_GridComp/Rn_GridComp/CMakeLists.txt @@ -2,7 +2,7 @@ esma_set_this () esma_add_library (${this} SRCS ${this}Mod.F90 - DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 esmf NetCDF::NetCDF_Fortran) + DEPENDENCIES Chem_Shared Chem_Base GMAO_mpeu MAPL_cfio_r4 ESMF::ESMF NetCDF::NetCDF_Fortran) esma_generate_gocart_code (${this} "-B\;-E\;-F\;-N\;GOCART") diff --git a/ESMF/GOCART_GridComp/Rn_GridComp/Rn_GridComp_ExtData.rc b/ESMF/GOCART_GridComp/Rn_GridComp/Rn_GridComp_ExtData.rc deleted file mode 100644 index acb6e571..00000000 --- a/ESMF/GOCART_GridComp/Rn_GridComp/Rn_GridComp_ExtData.rc +++ /dev/null @@ -1,17 +0,0 @@ -PrimaryExports%% -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | -# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | -# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| -Rn_EMISSION NA Y Y %y4-%m2-%d2t12:00:00 none none Rn_EMISSION ExtData/g5chem/sfc/gocart.radon.x540_y361.nc -RN_regionMask NA N V - none none REGION_MASK ExtData/g5chem/sfc/RADON.region_mask.x540_y361.2001.nc -%% - -DerivedExports%% -Rn_EMISSIONAfri regionmask(Rn_EMISSION,Rn_regionMask;5) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONAsia regionmask(Rn_EMISSION,Rn_regionMask;4) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONAust regionmask(Rn_EMISSION,Rn_regionMask;7) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONEuro regionmask(Rn_EMISSION,Rn_regionMask;3) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONSoAm regionmask(Rn_EMISSION,Rn_regionMask;6) %y4-%m2-%d2t12:00:00 -Rn_EMISSIONNoAm regionmask(Rn_EMISSION,Rn_regionMask;1,2) %y4-%m2-%d2t12:00:00 -%% diff --git a/ESMF/Shared/CMakeLists.txt b/ESMF/Shared/CMakeLists.txt index e9a3f721..139f88ae 100644 --- a/ESMF/Shared/CMakeLists.txt +++ b/ESMF/Shared/CMakeLists.txt @@ -6,16 +6,18 @@ set (srcs esma_add_library(${this} SRCS ${srcs} - DEPENDENCIES MAPL esmf) + DEPENDENCIES MAPL ESMF::ESMF) if( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/@GSW ) set (gsw_ECBUILD_SYSTEM_INCLUDED TRUE) endif() -if ( IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/MAPL@ ) - esma_add_subdirectories ( - MAPL - ) +if (NOT TARGET MAPL) + if ( IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/MAPL@ ) + esma_add_subdirectories ( + MAPL + ) + endif () endif () if ( IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/GMAO_Shared@ ) diff --git a/ESMF/Shared/Chem_AeroGeneric.F90 b/ESMF/Shared/Chem_AeroGeneric.F90 index e1da972b..a0f8bbb1 100644 --- a/ESMF/Shared/Chem_AeroGeneric.F90 +++ b/ESMF/Shared/Chem_AeroGeneric.F90 @@ -7,8 +7,8 @@ !BOP ! -! !MODULE: Chem_AeroGeneric - Utilitarian subroutines used by GOCART2G children. -! +! !MODULE: Chem_AeroGeneric - Utilitarian subroutines used by GOCART2G children. +! ! ! !INTERFACE: ! @@ -48,7 +48,7 @@ module Chem_AeroGeneric !==================================================================================== subroutine add_aero (state, label, label2, grid, typekind, ptr, rc) -! Description: Adds fields to aero state for aerosol optics calcualtions. +! Description: Adds fields to aero state for aerosol optics calcualtions. implicit none @@ -109,7 +109,7 @@ recursive subroutine determine_data_driven(COMP_NAME, data_driven, RC) __Iam__('determine_data_driven') -! Begin... +! Begin... ! Is DU data driven? ! ------------------ @@ -142,7 +142,7 @@ subroutine append_to_bundle(varName, providerState, prefix, bundle, rc) integer :: dimCount, i real, pointer :: orig_ptr(:,:,:) real, pointer :: ptr2d(:,:) - character(len=ESMF_MAXSTR) :: bin_index, varNameNew + character(len=ESMF_MAXSTR) :: bin_index, varNameNew, units, longname ! Description: Adds deposition variables to deposition bundle @@ -155,18 +155,25 @@ subroutine append_to_bundle(varName, providerState, prefix, bundle, rc) call ESMF_FieldGet (field, dimCount=dimCount, __RC__) if (dimCount == 2) then ! this handles data instances - call MAPL_FieldBundleAdd (bundle, field, __RC__) + call MAPL_FieldBundleAdd (bundle, field, __RC__) else if (dimCount == 3) then ! this handles computational instances call ESMF_FieldGet (field, grid=grid, __RC__) call MAPL_GetPointer (providerState, orig_ptr, trim(prefix)//trim(varName), __RC__) + call ESMF_AttributeGet(field, name='UNITS', value=units, __RC__) + call ESMF_AttributeGet(field, name='LONG_NAME', value=longname, __RC__) + longname=longname(1:index(trim(longname), '(Bin')-1) if ((index(trim(varname), 'DU') > 0) .or. (index(trim(varname), 'SS') > 0)) then do i = 1, size(orig_ptr, 3) write (bin_index,'(A, I0.3)') '', i ptr2d => orig_ptr(:,:,i) - field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farrayPtr=ptr2d,& - name=trim(varName)//trim(bin_index) , __RC__) + field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farray=ptr2d,& + name=trim(varName)//trim(bin_index) , indexflag=ESMF_INDEX_DELOCAL, __RC__) + call ESMF_AttributeSet(field2d, name='DIMS', value=MAPL_DimsHorzOnly, _RC) + call ESMF_AttributeSet(field2d, name='VLOCATION', value=MAPL_VLocationNone, _RC) + call ESMF_AttributeSet(field2d, name='UNITS', value=trim(units), _RC) + call ESMF_AttributeSet(field2d, name='LONG_NAME', value=trim(longname)//' Bin '//trim(bin_index), _RC) call MAPL_AllocateCoupling (field2D, __RC__) call MAPL_FieldBundleAdd (bundle, field2D, __RC__) end do @@ -174,8 +181,12 @@ subroutine append_to_bundle(varName, providerState, prefix, bundle, rc) if (index(trim(varname), 'SU') > 0) then ! only use SO4, which is the 3rd index ptr2d => orig_ptr(:,:,3) - field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farrayPtr=ptr2d,& - name=trim(varName)//'003' , __RC__) + field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farray=ptr2d,& + name=trim(varName)//'003' , indexflag=ESMF_INDEX_DELOCAL, __RC__) + call ESMF_AttributeSet(field2d, name='DIMS', value=MAPL_DimsHorzOnly, _RC) + call ESMF_AttributeSet(field2d, name='VLOCATION', value=MAPL_VLocationNone, _RC) + call ESMF_AttributeSet(field2d, name='UNITS', value=units, _RC) + call ESMF_AttributeSet(field2d, name='LONG_NAME', value=trim(longname)//' Bin 003', _RC) call MAPL_AllocateCoupling (field2D, __RC__) call MAPL_FieldBundleAdd (bundle, field2D, __RC__) end if @@ -185,8 +196,12 @@ subroutine append_to_bundle(varName, providerState, prefix, bundle, rc) write (bin_index,'(A, I0.3)') '', i ptr2d => orig_ptr(:,:,i) varNameNew = 'OC'//varName(6:7) - field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farrayPtr=ptr2d,& - name=trim(varNameNew)//trim(bin_index) , __RC__) + field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farray=ptr2d,& + name=trim(varNameNew)//trim(bin_index) , indexflag=ESMF_INDEX_DELOCAL, __RC__) + call ESMF_AttributeSet(field2d, name='DIMS', value=MAPL_DimsHorzOnly, _RC) + call ESMF_AttributeSet(field2d, name='VLOCATION', value=MAPL_VLocationNone, _RC) + call ESMF_AttributeSet(field2d, name='UNITS', value=units, _RC) + call ESMF_AttributeSet(field2d, name='LONG_NAME', value=trim(longname)//' Bin '//trim(bin_index), _RC) call MAPL_AllocateCoupling (field2D, __RC__) call MAPL_FieldBundleAdd (bundle, field2D, __RC__) end do @@ -197,8 +212,12 @@ subroutine append_to_bundle(varName, providerState, prefix, bundle, rc) write (bin_index,'(A, I0.3)') '', i ptr2d => orig_ptr(:,:,i) varNameNew = 'BC'//varName(6:7) - field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farrayPtr=ptr2d,& - name=trim(varNameNew)//trim(bin_index) , __RC__) + field2D = ESMF_FieldCreate(grid=grid, datacopyflag=ESMF_DATACOPY_REFERENCE, farray=ptr2d,& + name=trim(varNameNew)//trim(bin_index) , indexflag=ESMF_INDEX_DELOCAL, __RC__) + call ESMF_AttributeSet(field2d, name='DIMS', value=MAPL_DimsHorzOnly, _RC) + call ESMF_AttributeSet(field2d, name='VLOCATION', value=MAPL_VLocationNone, _RC) + call ESMF_AttributeSet(field2d, name='UNITS', value=units, _RC) + call ESMF_AttributeSet(field2d, name='LONG_NAME', value=trim(longname)//' Bin '//trim(bin_index), _RC) call MAPL_AllocateCoupling (field2D, __RC__) call MAPL_FieldBundleAdd (bundle, field2D, __RC__) end do @@ -206,7 +225,7 @@ subroutine append_to_bundle(varName, providerState, prefix, bundle, rc) else if (dimCount > 3) then if(mapl_am_i_root()) print*,'Chem_AeroGenric::append_to_bundle does not currently support fields greater than 3 dimensions' - VERIFY_(824) + VERIFY_(824) end if RETURN_(ESMF_SUCCESS) @@ -232,7 +251,7 @@ subroutine setZeroKlid(km, klid, int_ptr) ! ! !REVISION HISTORY: ! -! 25Aug2020 E.Sherman - Written +! 25Aug2020 E.Sherman - Written ! ! !Local Variables integer :: k @@ -269,7 +288,7 @@ subroutine setZeroKlid4d (km, klid, int_ptr) ! ! !REVISION HISTORY: ! -! 25Aug2020 E.Sherman - Written +! 25Aug2020 E.Sherman - Written ! ! !Local Variables integer :: k, n @@ -312,7 +331,7 @@ subroutine findKlid (klid, plid, ple, rc) ! ! !REVISION HISTORY: ! -! 25Aug2020 E.Sherman - Written +! 25Aug2020 E.Sherman - Written ! ! !Local Variables integer :: k, j, i diff --git a/ESMF/UFS/Aerosol_Diag_Mod.F90 b/ESMF/UFS/Aerosol_Diag_Mod.F90 index 2300e090..1d38c7e1 100644 --- a/ESMF/UFS/Aerosol_Diag_Mod.F90 +++ b/ESMF/UFS/Aerosol_Diag_Mod.F90 @@ -147,11 +147,6 @@ function PMGetTracerWeight(name, pm, w) result(nbins) nbins = 1 select case (trim(name)) - case ('CAphilicCA.bc', & - 'CAphilicCA.oc', & - 'CAphobicCA.bc', & - 'CAphobicCA.oc') - ! -- set to 1 by default case ('DU') select case (trim(pm)) case ('PM10') @@ -183,7 +178,8 @@ function PMGetTracerWeight(name, pm, w) result(nbins) w(3) = w25_ss3 end select case default - nbins = 0 + ! -- carbonaceous emissions have weights equal to 1 (default) + if (name(1:2) /= 'CA') nbins = 0 end select end function PMGetTracerWeight diff --git a/ESMF/UFS/CMakeLists.txt b/ESMF/UFS/CMakeLists.txt index 3a0b501e..0b79aa6b 100644 --- a/ESMF/UFS/CMakeLists.txt +++ b/ESMF/UFS/CMakeLists.txt @@ -10,7 +10,7 @@ set (srcs Aerosol_Tracer_Mod.F90 ) -set (dependencies Aerosol_GridComp MAPL esmf) +set (dependencies Aerosol_GridComp MAPL ESMF::ESMF) esma_add_library (${this} SRCS ${srcs} DEPENDENCIES ${dependencies}) diff --git a/Process_Library/CMakeLists.txt b/Process_Library/CMakeLists.txt index d4d9ff1c..76fe00ef 100644 --- a/Process_Library/CMakeLists.txt +++ b/Process_Library/CMakeLists.txt @@ -5,9 +5,9 @@ set (srcs GOCART2G_Process.F90 ) -esma_add_library(${this} - SRCS ${srcs} - DEPENDENCIES esmf NetCDF::NetCDF_Fortran +esma_add_library(${this} + SRCS ${srcs} + DEPENDENCIES ESMF::ESMF NetCDF::NetCDF_Fortran ) # CMake has an OpenMP issue with NAG Fortran: https://gitlab.kitware.com/cmake/cmake/-/issues/21280 diff --git a/Process_Library/GOCART2G_MieMod.F90 b/Process_Library/GOCART2G_MieMod.F90 index a595d8d4..572963d7 100644 --- a/Process_Library/GOCART2G_MieMod.F90 +++ b/Process_Library/GOCART2G_MieMod.F90 @@ -1,3 +1,4 @@ +#include "Process.H" !BOP ! ! !MODULE: GOCART2G_MieMod --- Reader for aerosol mie tables @@ -290,7 +291,7 @@ type(GOCART2G_Mie) function GOCART2G_MieCreate ( MieFile, wavelengths, nmom, rc endif ! Dry particle density (will be pulled from wet particle radius) - rc = nf90_inq_varid(ncid,'rhop',ivarid) + rc = nf90_inq_varid(ncid,'rhod',ivarid) if(rc .ne. NF90_NOERR) then ! not in table, fill in dummy variable rhod_table = -999. else @@ -540,13 +541,15 @@ integer function getChannel(this, wavelength, rc) result (ch) endif enddo - if (present(rc)) rc = 0 - - if (ch < 0) then - !$omp critical (GetCha) - print*, "wavelength of ",wavelength, " is an invalid value." - !$omp end critical (GetCha) - if (present(rc)) rc = -1 + if (present(rc)) then + if (ch > 0) then + rc = __SUCCESS__ + else + rc = __FAIL__ + !$omp critical (GetCha) + print*, "wavelength of ",wavelength, " is an invalid value." + !$omp end critical (GetCha) + endif endif end function getChannel @@ -558,18 +561,22 @@ real function getWavelength(this, ith_channel, rc) result (wavelength) real, parameter :: w_tol = 1.e-9 integer :: i - if (present(rc)) rc = 0 - if (ith_channel <=0 .or. ith_channel > this%nch ) then - !$omp critical (GetWav) - print*, "The channel of ",ith_channel, " is an invalid channel number." - !$omp end critical (GetWav) - if (present(rc)) rc = -1 - wavelength = -1. ! meanlingless nagative - return + wavelength = -1. ! meaningless negative + else + wavelength = this%wavelengths(ith_channel) endif - - wavelength = this%wavelengths(ith_channel) + + if (present(rc)) then + if (wavelength > 0) then + rc = __SUCCESS__ + else + rc = __FAIL__ + !$omp critical (GetWav) + print*, "The channel of ",ith_channel, " is an invalid channel number." + !$omp end critical (GetWav) + endif + endif end function getWavelength diff --git a/Process_Library/GOCART2G_Process.F90 b/Process_Library/GOCART2G_Process.F90 index 6892082c..9351052d 100644 --- a/Process_Library/GOCART2G_Process.F90 +++ b/Process_Library/GOCART2G_Process.F90 @@ -1,13 +1,4 @@ -#define __SUCCESS__ 0 -#define __FAIL__ 1 -#define __VERIFY__(x) if(x/=0) then; if(present(rc)) rc=x; return; endif -#define __VERIFY_NO_OPT__(x) if(x/=0) then; rc=x; return; endif -#define __RC__ rc=status); __VERIFY__(status -#define __RC_NO_OPT__ rc=status); __VERIFY_NO_OPT__(status -#define __STAT__ stat=status); __VERIFY__(status -#define __IOSTAT__ iostat=status); __VERIFY__(status -#define __RETURN__(x) if (present(rc)) rc=x; return -#define __ASSERT__(expr) if(.not. (expr)) then; if (present(rc)) rc=-1; return; endif +#include "Process.H" !------------------------------------------------------------------------- ! ! !MODULE: GOCART2G_Process -- GOCART2G process library @@ -50,7 +41,8 @@ module GOCART2G_Process public wetRadius public hoppelCorrection public CAEmission - public phobicTophilic + public phobicToPhilic + public carbonChemLoss public NIheterogenousChem public SulfateDistributeEmissions public DMSemission @@ -178,7 +170,7 @@ end subroutine DustAerosolDistributionKok ! !IROUTINE: soilMoistureConvertVol2Grav - volumetric to gravimetric soil moisture ! ! !INTERFACE: - real function soilMoistureConvertVol2Grav(vsoil, sandfrac, rhop) + real function soilMoistureConvertVol2Grav(vsoil, sandfrac) ! !USES: implicit NONE @@ -186,7 +178,6 @@ real function soilMoistureConvertVol2Grav(vsoil, sandfrac, rhop) ! !INPUT PARAMETERS: real, intent(in) :: vsoil ! volumetric soil moisture fraction [1] real, intent(in) :: sandfrac ! fractional sand content [1] - real, intent(in) :: rhop ! dry dust density [kg m-3] ! !DESCRIPTION: Convert soil moisture fraction from volumetric to gravimetric. ! @@ -200,16 +191,16 @@ real function soilMoistureConvertVol2Grav(vsoil, sandfrac, rhop) ! !CONSTANTS: real, parameter :: rhow = 1000. ! density of water [kg m-3] - + real, parameter :: rhop = 1700. !EOP !------------------------------------------------------------------------- ! Begin... ! Saturated volumetric water content (sand-dependent) ! [m3 m-3] - vsat = 0.489 - 0.00126 * ( 100. * sandfrac ) + vsat = 0.489 - 0.126 * sandfrac ! Gravimetric soil content - soilMoistureConvertVol2Grav = vsoil * rhow / (rhop * (1. - vsat)) + soilMoistureConvertVol2Grav = 100. * vsoil * rhow / (rhop * (1. - vsat)) end function soilMoistureConvertVol2Grav @@ -219,7 +210,7 @@ end function soilMoistureConvertVol2Grav ! !IROUTINE: moistureCorrectionFecan - Correction factor for Fecan soil moisture ! ! !INTERFACE: - real function moistureCorrectionFecan(slc, sand, clay, rhop) + real function moistureCorrectionFecan(slc, sand, clay, b) ! !USES: implicit NONE @@ -228,7 +219,7 @@ real function moistureCorrectionFecan(slc, sand, clay, rhop) real, intent(in) :: slc ! liquid water content of top soil layer, volumetric fraction [1] real, intent(in) :: sand ! fractional sand content [1] real, intent(in) :: clay ! fractional clay content [1] - real, intent(in) :: rhop ! dry dust density [kg m-3] + real, intent(in) :: b ! drylimit factor from zender 2003 ! !DESCRIPTION: Compute correction factor to account for Fecal soil moisture ! @@ -246,10 +237,10 @@ real function moistureCorrectionFecan(slc, sand, clay, rhop) ! Begin... ! Convert soil moisture from volumetric to gravimetric - grvsoilm = soilMoistureConvertVol2Grav(slc, sand, rhop) + grvsoilm = soilMoistureConvertVol2Grav(slc, sand) ! Compute fecan dry limit - drylimit = clay * (14.0 * clay + 17.0) + drylimit = b * clay * (14.0 * clay + 17.0) ! Compute soil moisture correction moistureCorrectionFecan = sqrt(1.0 + 1.21 * max(0., grvsoilm - drylimit)**0.68) @@ -303,7 +294,7 @@ end function DustFluxV2HRatioMB95 ! !INTERFACE: subroutine DustEmissionFENGSHA(fraclake, fracsnow, oro, slc, clay, sand, silt, & ssm, rdrag, airdens, ustar, uthrs, alpha, gamma, & - kvhmax, grav, rhop, distribution, emissions, rc) + kvhmax, grav, rhop, distribution, drylimit_factor, moist_correct, emissions, rc) ! !USES: implicit NONE @@ -327,7 +318,8 @@ subroutine DustEmissionFENGSHA(fraclake, fracsnow, oro, slc, clay, sand, silt, real, intent(in) :: grav ! gravity [m/sec^2] real, dimension(:), intent(in) :: rhop ! soil class density [kg/m^3] real, dimension(:), intent(in) :: distribution ! normalized dust binned distribution [1] - + real, intent(in) :: drylimit_factor ! drylimit tuning factor from zender2003 + real, intent(in) :: moist_correct ! moisture correction factor ! !OUTPUT PARAMETERS: real, intent(out) :: emissions(:,:,:) ! binned surface emissions [kg/(m^2 sec)] integer, intent(out) :: rc ! Error return code: __SUCCESS__ or __FAIL__ @@ -352,6 +344,7 @@ subroutine DustEmissionFENGSHA(fraclake, fracsnow, oro, slc, clay, sand, silt, real :: rustar real :: total_emissions real :: u_sum, u_thresh + real :: smois ! !CONSTANTS: real, parameter :: ssm_thresh = 1.e-02 ! emit above this erodibility threshold [1] @@ -405,24 +398,25 @@ subroutine DustEmissionFENGSHA(fraclake, fracsnow, oro, slc, clay, sand, silt, ! Compute threshold wind friction velocity using drag partition ! ------------------------------------------------------------- rustar = rdrag(i,j) * ustar(i,j) - + + ! Fecan moisture correction + ! ------------------------- + smois = slc(i,j) * moist_correct + h = moistureCorrectionFecan(smois, sand(i,j), clay(i,j), drylimit_factor) + + ! Adjust threshold + ! ---------------- + u_thresh = uthrs(i,j) * h + + u_sum = rustar + u_thresh + + ! Compute Horizontal Saltation Flux according to Eq (9) in Webb et al. (2020) + ! --------------------------------------------------------------------------- + q = max(0., rustar - u_thresh) * u_sum * u_sum + ! Now compute size-dependent total emission flux ! ---------------------------------------------- do n = 1, nbins - ! Fecan moisture correction - ! ------------------------- - h = moistureCorrectionFecan(slc(i,j), sand(i,j), clay(i,j), rhop(n)) - - ! Adjust threshold - ! ---------------- - u_thresh = uthrs(i,j) * h - - u_sum = rustar + u_thresh - - ! Compute Horizontal Saltation Flux according to Eq (9) in Webb et al. (2020) - ! --------------------------------------------------------------------------- - q = max(0., rustar - u_thresh) * u_sum * u_sum - ! Distribute emissions to bins and convert to mass flux (kg s-1) ! -------------------------------------------------------------- emissions(i,j,n) = distribution(n) * total_emissions * q @@ -1092,9 +1086,9 @@ end subroutine DistributePointEmission !BOP ! !IROUTINE: Chem_SettlingSimple - subroutine Chem_SettlingSimple ( km, klid, flag, cdt, grav, & - radiusInp, rhopInp, int_qa, tmpu, & - rhoa, rh, hghte, delp, fluxout, & + subroutine Chem_SettlingSimple ( km, klid, mie, bin, cdt, grav, & + int_qa, tmpu, rhoa, rh, hghte, & + delp, fluxout, & vsettleOut, correctionMaring, rc) ! !USES: @@ -1104,11 +1098,10 @@ subroutine Chem_SettlingSimple ( km, klid, flag, cdt, grav, & ! !INPUT PARAMETERS: integer, intent(in) :: km ! total model levels integer, intent(in) :: klid ! index for pressure lid - integer, intent(in) :: flag ! flag to control particle swelling (see note) + type(GOCART2G_Mie), intent(in) :: mie ! mie table + integer, intent(in) :: bin ! aerosol bin index real, intent(in) :: cdt real, intent(in) :: grav ! gravity [m/sec^2] - real, intent(in) :: radiusInp ! particle radius [microns] - real, intent(in) :: rhopInp ! soil class density [kg/m^3] real, dimension(:,:,:), intent(inout) :: int_qa ! aerosol [kg/kg] real, pointer, dimension(:,:,:), intent(in) :: tmpu ! temperature [K] real, pointer, dimension(:,:,:), intent(in) :: rhoa ! air density [kg/m^3] @@ -1133,13 +1126,11 @@ subroutine Chem_SettlingSimple ( km, klid, flag, cdt, grav, & ! !DESCRIPTION: Gravitational settling of aerosol between vertical ! layers. Assumes input radius in [m] and density (rhop) -! in [kg m-3]. If flag is set, use the Fitzgerald 1975 (flag = 1) -! or Gerber 1985 (flag = 2) parameterization to update the -! particle radius for the calculation (local variables radius -! and rhop). +! in [kg m-3]arrays from the optics files. ! ! !REVISION HISTORY: -! +! 02Jan2024 Collow Removed calls to particle swelling and added +! interpolation based on RH ! 17Sep2004 Colarco Strengthen sedimentation flux out at surface ! by setting removal to be valid from middle of ! surface layer @@ -1200,10 +1191,10 @@ subroutine Chem_SettlingSimple ( km, klid, flag, cdt, grav, & enddo ! If radius le 0 then get out - if(radiusInp .le. 0.) then - status = 100 - __RETURN__(STATUS) - end if +! if(radiusInp .le. 0.) then +! status = 100 +! __RETURN__(STATUS) +! end if ! Find the column dry mass before sedimentation do k = klid, km @@ -1214,22 +1205,23 @@ subroutine Chem_SettlingSimple ( km, klid, flag, cdt, grav, & enddo enddo -! Particle swelling - call ParticleSwelling(i1, i2, j1, j2, km, rh, radiusInp, rhopInp, radius, rhop, flag) - +! Find radius and density of the wet particle + call mie%Query(550e-9,bin, & + qa*delp/grav, & + rh, reff=radius, rhop=rhop, __RC__) ! Settling velocity of the wet particle do k = klid, km do j = j1, j2 do i = i1, i2 - call Chem_CalcVsettle(radius(i,j,k), rhop(i,j,k), rhoa(i,j,k), & + call Chem_CalcVsettle(radius(i,j,k)*1.e-6, rhop(i,j,k), rhoa(i,j,k), & tmpu(i,j,k), vsettle(i,j,k), grav) end do end do end do - + if(present(correctionMaring)) then if (correctionMaring) then - vsettle = max(1.0e-9, vsettle - v_upwardMaring) + vsettle = max(1.0e-9, vsettle - v_upwardMaring) endif endif @@ -1252,7 +1244,6 @@ subroutine Chem_SettlingSimple ( km, klid, flag, cdt, grav, & if( associated(fluxout) ) then fluxout(:,:) = (cmass_before - cmass_after)/cdt endif - int_qa = qa __RETURN__(__SUCCESS__) @@ -1279,7 +1270,7 @@ subroutine Chem_Settling ( km, klid, bin, flag, cdt, grav, & integer, intent(in) :: flag ! flag to control particle swelling (see note) real, intent(in) :: cdt real, intent(in) :: grav ! gravity [m/sec^2] - real, intent(in) :: radiusInp ! particle radius [microns] + real, intent(in) :: radiusInp ! particle radius [meters] (converted from microns in call to function) real, intent(in) :: rhopInp ! soil class density [kg/m^3] real, dimension(:,:,:), intent(inout) :: int_qa ! aerosol [kg/kg] real, pointer, dimension(:,:,:), intent(in) :: tmpu ! temperature [K] @@ -4692,16 +4683,17 @@ end subroutine distribute_aviation_emissions !BOP ! -! !IROUTINE: phobicTophilic +! !IROUTINE: phobicToPhilic ! ! !INTERFACE: subroutine phobicTophilic (aerosol_phobic, aerosol_philic, aerosol_toHydrophilic, & - km, cdt, grav, delp, rc) + tConvPhobicToPhilic, km, cdt, grav, delp, rc) ! !USES: implicit NONE ! !INPUT PARAMETERS: + real, intent(in) :: tConvPhobicToPhilic ! e-folding time in days to transfer integer, intent(in) :: km ! total model level real, intent(in) :: cdt ! chemistry model time-step [sec] real, intent(in) :: grav ! [m/sec^2] @@ -4716,7 +4708,7 @@ subroutine phobicTophilic (aerosol_phobic, aerosol_philic, aerosol_toHydrophilic ! !Local Variables integer :: i, j, k - real :: qUpdate, delq + real :: qUpdate, delq, ts !EOP !------------------------------------------------------------------------------------ @@ -4724,10 +4716,17 @@ subroutine phobicTophilic (aerosol_phobic, aerosol_philic, aerosol_toHydrophilic if(associated(aerosol_toHydrophilic)) aerosol_toHydrophilic = 0.0 +! tConvPhobicToPhilic is the e-folding time (in days) of the conversion +! If < 0 no conversion is desired; exit the subroutine + if(tConvPhobicToPhilic < 0) then + __RETURN__(__SUCCESS__) + endif + ts = tConvPhobicToPhilic*86400. + do k = 1, km do j = 1, ubound(delp, 2) do i = 1, ubound(delp, 1) - qUpdate = aerosol_phobic(i,j,k)*exp(-4.63e-6*cdt) + qUpdate = aerosol_phobic(i,j,k)*exp(-cdt/ts) qUpdate = max(qUpdate,1.e-32) delq = max(0.,aerosol_phobic(i,j,k)-qUpdate) aerosol_phobic(i,j,k) = qUpdate @@ -4742,6 +4741,70 @@ subroutine phobicTophilic (aerosol_phobic, aerosol_philic, aerosol_toHydrophilic __RETURN__(__SUCCESS__) end subroutine phobicTophilic +!============================================================================ +!BOP +! +! !IROUTINE: carbonChemLoss +! +! !INTERFACE: + subroutine carbonChemLoss (km, klid, n, cdt, grav, delp, & + tChemLoss, int_qa, fluxout, rc) + +! !USES: + implicit NONE + +! !INPUT PARAMETERS: + real, intent(in) :: tChemLoss ! e-folding loss time [days] + integer, intent(in) :: km ! total model levels + integer, intent(in) :: klid ! index for pressure lid + integer, intent(in) :: n ! bin index number + real, intent(in) :: cdt ! time step [s] + real, intent(in) :: grav ! acceleration of gravity [m/sec^2] + real, dimension(:,:,:), intent(inout) :: int_qa ! aerosol [kg/kg] + real, pointer, dimension(:,:,:), intent(in) :: delp ! pressure level thickness [Pa] + +! !OUTPUT PARAMETERS: + + real, pointer, dimension(:,:,:), intent(inout) :: fluxout ! Mass lost by chemistry [kg/m^2/s] + integer, optional, intent(out) :: rc ! Error return code: + ! 0 - all is well + ! 1 - + +! !Local Variables + integer :: i, j, k + real :: qUpdate, delq, ts + +!EOP +!------------------------------------------------------------------------------------ +! Begin... + + if(associated(fluxout)) fluxout(:,:,n) = 0.0 + +! tChemLoss is the e-folding time (in days) of parameterized chemistry loss +! If < 0 no loss is desired; exit the subroutine + if(tChemLoss < 0) then + __RETURN__(__SUCCESS__) + endif + ts = tChemLoss*86400. + + do k = klid, km + do j = 1, ubound(delp, 2) + do i = 1, ubound(delp, 1) + qUpdate = int_qa(i,j,k)*exp(-cdt/ts) + qUpdate = max(qUpdate,1.e-32) + delq = max(0.,int_qa(i,j,k)-qUpdate) + int_qa(i,j,k) = qUpdate + if(associated(fluxout)) & + fluxout(i,j,n) = fluxout(i,j,n) & + + delq*delp(i,j,k)/grav/cdt + + end do + end do + end do + + __RETURN__(__SUCCESS__) + end subroutine carbonChemLoss + !============================================================================ !BOP @@ -5673,7 +5736,7 @@ end subroutine DMSemission ! !IROUTINE: SUvolcanicEmissions subroutine SUvolcanicEmissions (nVolc, vStart, vEnd, vSO2, vElev, vCloud, iPoint, & - jPoint, nhms, SO2EMVN, SO2EMVE, SO2, nSO2, SU_emis, km, cdt, grav,& + jPoint, nhms, SO2EMVol, SO2, nSO2, SU_emis, km, cdt, grav,& hghte, delp, area, vLat, vLon, rc) ! !USES: implicit NONE @@ -5697,8 +5760,7 @@ subroutine SUvolcanicEmissions (nVolc, vStart, vEnd, vSO2, vElev, vCloud, iPoint real, dimension(:), intent(in) :: vLat ! latitude specified in file [degree] real, dimension(:), intent(in) :: vLon ! longitude specified in file [degree] ! !INOUT PARAMETERS: - real, pointer, dimension(:,:), intent(inout) :: SO2EMVN ! non-explosive volcanic emissions [kg m-2 s-1] - real, pointer, dimension(:,:), intent(inout) :: SO2EMVE ! explosive volcanic emissions [kg m-2 s-1] + real, pointer, dimension(:,:), intent(inout) :: SO2EMVol ! volcanic emissions [kg m-2 s-1] real, pointer, dimension(:,:,:), intent(inout) :: SO2 ! SO2 [kg kg-1] real, pointer, dimension(:,:,:), intent(inout) :: SU_emis ! SU emissions, kg/m2/s real, dimension(:), intent(inout) :: vElev ! bottom elevation of emissions [m] @@ -5714,15 +5776,14 @@ subroutine SUvolcanicEmissions (nVolc, vStart, vEnd, vSO2, vElev, vCloud, iPoint ! 22July2020 E.Sherman ! ! !Local Variables - integer :: i, j, it + integer :: i, j, k, it real, dimension(:,:,:), allocatable :: emissions_point real :: so2volcano - real :: hup, hlow, dzvolc, dz, z1, k + real :: hup, hlow, dzvolc, dz, z1 real :: deltaSO2v real, dimension(:,:), allocatable :: z0 real, allocatable, dimension(:,:) :: srcSO2volc - real, allocatable, dimension(:,:) :: srcSO2volce !EOP !------------------------------------------------------------------------- @@ -5731,13 +5792,9 @@ subroutine SUvolcanicEmissions (nVolc, vStart, vEnd, vSO2, vElev, vCloud, iPoint if (nVolc > 0) then allocate(srcSO2volc, mold=area) - allocate(srcSO2volce, mold=area) srcSO2volc = 0. - srcSO2volce = 0. - if (associated(SU_emis)) SU_emis = 0.0 - if (associated(SO2EMVN)) SO2EMVN = 0. - if (associated(SO2EMVE)) SO2EMVE = 0. + if (associated(SO2EMVol)) SO2EMVol = 0. allocate(z0, mold=area) z0 = hghte(:,:,km) @@ -5776,11 +5833,7 @@ subroutine SUvolcanicEmissions (nVolc, vStart, vEnd, vSO2, vElev, vCloud, iPoint ! Diagnostic - sum of volcanos ! ---------------------------- - if (hup .eq. hlow) then - srcSO2volc(i,j) = srcSO2volc(i,j) + so2volcano - else - srcSO2volce(i,j) = srcSO2volce(i,j) + so2volcano - endif + srcSO2volc(i,j) = srcSO2volc(i,j) + so2volcano dzvolc = hup-hlow do k = km, 1, -1 @@ -5827,9 +5880,8 @@ subroutine SUvolcanicEmissions (nVolc, vStart, vEnd, vSO2, vElev, vCloud, iPoint enddo ! it end if ! nVolc > 0 - if (associated(SO2EMVN)) SO2EMVN = SO2EMVN + srcSO2volc - if (associated(SO2EMVE)) SO2EMVE = SO2EMVE + srcSO2volce - if (associated(SU_emis)) SU_emis(:,:,nSO2) = SU_emis(:,:,nSO2) + srcSO2volc + srcSO2volce + if (associated(SO2EMVol)) SO2EMVol = SO2EMVol + srcSO2volc + if (associated(SU_emis)) SU_emis(:,:,nSO2) = SU_emis(:,:,nSO2) + srcSO2volc __RETURN__(__SUCCESS__) end subroutine SUvolcanicEmissions diff --git a/Process_Library/MieQuery.H b/Process_Library/MieQuery.H index 51db0438..2e2c6e9e 100644 --- a/Process_Library/MieQuery.H +++ b/Process_Library/MieQuery.H @@ -118,6 +118,10 @@ rEff = 1.E6* __RHINTERP2__(this%rEff, irh, arh, bin, rEff) endif + if(present(rhop)) then + rhop = __RHINTERP2__(this%rhop, irh, arh, bin, rhop) + endif + if(present(p11)) then p11 = __RHINTERP3__(this%p11, irh, arh, channel, bin, p11) endif @@ -130,6 +134,10 @@ gf = __RHINTERP2__(this%gf, irh, arh, bin, gf) endif + if(present(rhop)) then + rhop = __RHINTERP2__(this%rhop, irh, arh, bin, rhop) + endif + if(present(rhod)) then rhod = __RHINTERP2__(this%rhod, irh, arh, bin, rhod) endif diff --git a/Process_Library/Process.H b/Process_Library/Process.H new file mode 100644 index 00000000..fa74ee6c --- /dev/null +++ b/Process_Library/Process.H @@ -0,0 +1,10 @@ +#define __SUCCESS__ 0 +#define __FAIL__ 1 +#define __VERIFY__(x) if(x/=0) then; if(present(rc)) rc=x; return; endif +#define __VERIFY_NO_OPT__(x) if(x/=0) then; rc=x; return; endif +#define __RC__ rc=status); __VERIFY__(status +#define __RC_NO_OPT__ rc=status); __VERIFY_NO_OPT__(status +#define __STAT__ stat=status); __VERIFY__(status +#define __IOSTAT__ iostat=status); __VERIFY__(status +#define __RETURN__(x) if (present(rc)) rc=x; return +#define __ASSERT__(expr) if(.not. (expr)) then; if (present(rc)) rc=-1; return; endif diff --git a/components.yaml b/components.yaml index 715bcea1..5330f040 100644 --- a/components.yaml +++ b/components.yaml @@ -5,13 +5,13 @@ GOCART: env: local: ./env@ remote: ../ESMA_env.git - tag: v4.8.0 + tag: v4.29.0 develop: main cmake: local: ./cmake@ remote: ../ESMA_cmake.git - tag: v3.24.0 + tag: v3.48.0 develop: develop ecbuild: @@ -22,17 +22,18 @@ ecbuild: HEMCO: local: ./ESMF/HEMCO_GridComp@ remote: ../HEMCO.git - branch: geos/v2.2.3 + tag: geos/v2.2.3 + develop: geos/develop GMAO_Shared: local: ./ESMF/Shared/GMAO_Shared@ remote: ../GMAO_Shared.git - tag: v1.6.3 + tag: v1.9.8 sparse: ./config/GMAO_Shared.sparse develop: main MAPL: local: ./ESMF/Shared/MAPL@ remote: ../MAPL.git - tag: v2.34.0 + tag: v2.47.1 develop: develop