Developing GCHP

From Geos-chem
Revision as of 23:49, 9 November 2020 by Lizzie Lundgren (Talk | contribs)

Jump to: navigation, search

Previous | Next | Getting Started with GCHP | GCHP Main Page

  1. Hardware and Software Requirements
  2. Setting Up the GCHP Environment
  3. Downloading Source Code and Data Directories
  4. Compiling
  5. Obtaining a Run Directory
  6. Running GCHP: Basics
  7. Running GCHP: Configuration
  8. Output Data
  9. Developing GCHP
  10. Run Configuration Files

Please note that documentation on this page primarily reflects the latest GCHP public release which is currently the GCHP 12 series. The documentation will be updated for the GCHP 13.0.0 release over the coming months.


GCHP works as a layer around GEOS-Chem, simulating the more complex environment of a full atmospheric global circulation model (AGCM). Most model updates will involve editing GEOS-Chem source code as you would with GEOS-Chem Classic (GCC). However, certain updates such as specifying output variables or adding new input fields may require development within the GCHP-specific source code. In addition, sometimes debugging will lead you into the MAPL source code. This page provides an overview of the code structure to help navigate and debug GCHP.

This page is a work in progress. Please send feedback/comments to GEOS-Chem Support Team specifying what you would like to see clarified or added.

GCHP Architecture

High-level Execution of GEOS-Chem Classic

When running the GEOS-Chem Classic executable gcclassic, the main routine in GeosCore/main.F performs the following functions:

  1. Read in simulation settings from input.geos
  2. Set up arrays to hold data such as species concentrations and meteorological data
  3. Loop though the following steps until the simulation is complete:
    1. Read meteorological data into the State_Met object from pre-determined locations
    2. Calculate emissions in each grid box via HEMCO
    3. Calculate chemistry in each grid box via FlexChem
    4. Calculate transport between grid boxes

Although the code for each of these functions is found in different files (e.g. chemistry_mod.F, transport_mod.F), all of the routines are called from main.F.

High-level Execution of GCHP

A primary difference between GCHP and GEOS-Chem Classic is that main.F is replaced by GCHPctm.F90 which interacts with the ESMF and GMAO MAPL frameworks. MAPL provides an interface with ESMF which allows different gridded components to be unaware of each other's existence except for explicitly defined interfaces. The functional flow now looks more like this:

  1. Initialize the MAPL_Cap gridded component which represents the highest level structure of GCHP. MAPL CAP will create three "child" gridded components:
    1. Input gridded component, called ExtData
    2. Output gridded component, called History
    3. Chemical-transport gridded component, called GCHP_GridComp
  2. Within the GCHP gridded component three "grandchild" gridded components are established:
    1. GEOS-Chem to calculate chemistry (includes interfacing with HEMCO)
    2. FV3Dycore to calculate advection
    3. GCHPctmEnv, an environment gridded component, to do interim calculations between GEOS-Chem and FV3
  3. After all gridded components are established, the SetServices commands are called to declare dependencies and connections between the various gridded components
  4. Following SetServices are the Initialize, </tt>Run</tt>, and Finalize methods (IRF) which are custom defined for each gridded component. Initialize is run first.
  5. The “Run” command is then executed in a loop over time. For each timestep it does the following:
    1. Request input data from ExtData
    2. Send a “Run” command to each component in the GCHP gridded component (GCHPctmEnv, then advection, then GEOS-Chem including HEMCO)
    3. Send output data to History
  6. Once the CTM component is done, a “Finalize” command is sent to all components and the model exits

GCHP Updates Required with GEOS-Chem Classic Updates

GEOS-Chem Update Implications for GCHP GCHP Update Required Notes
Add 3D State_Met field GCHP compatibility with gfortran 6+ requires nullifying rather than deallocating 3D State_Met fields. Edit subroutine cleanup_state_met_mod in Headers/state_met_mod.F90 to use NULLIFY for GCHP and DEALLOCATE for GEOS_Chem. A C-preprocessor ifdef is already in the subroutine to do this for existing fields. If you deallocate rather than nullify a 3D State_Met field in GCHP then your run will hang during finalization if using gfortran 6+.
Add or remove external met-field of any dimension GCHP State_Met fields that are read from file are specified as imports in configuration file ExtData.rc and in source code file GCHP/Includes_Before_Run.H. 1. Add or remove the meteorology source to ExtData.rc in the run directory
2. Add or remove setting the State_Met field to the import in GCHP/Includes_Before_Run.H
3. Add or remove the meteorology field from the Import State in GCHP/Registry/Chem_Registry.rc
If you do not import the met-field via ExtData.rc then later references to it will cause a run fail. If you omit the met-field from both ExtData.rc and Includes_Before_Run.H then you will introduce a silent bug where the State_Met field is always zero.
Add or remove field in State_Met, State_Chm, or State_Diag All state fields are individually listed in HISTORY.rc as potential diagnostic outputs since wildcards are not used in GCHP History. Update configuration file HISTORY.rc based on your changes to state variables. Omitting an existing state variable from HISTORY.rc will not cause an error but the field will not be included in any output collections. Including a state variable that no longer exists will cause an error during run-time when metadata for the field is not found in GEOS-Chem.
Add or remove advected species All advected species are listed in HISTORY.rc for diagnostic output since GCHP does not use wildcards Update the SpeciesConc collections in configuration file HISTORY.rc when changing the set of advected species. Omitting an existing species from HISTORY.rc will not cause an error but the species concentration will not be output in the diagnostics. Including an obsolete species in the HISTORY.rc species list will result in an error during run-time.
Change arguments list passed to subroutine called in main.F GCHP file gigc_chunk_mod.F90 is the equivalent of GEOS-Chem Classic main.F and therefore contains many of the same calls to subroutines. Check if the subroutine you are modifying is called within GCHP and update accordingly. Failing to update the arguments passed to a subroutine called in GCHP will result in a compile error.
Add or remove subroutines called in main.F GCHP file gigc_chunk_mod.F90 is the equivalent of GEOS-Chem Classic main.F and therefore contains many of the same calls to subroutines. Add or remove the call to the subroutine within GCHP module gigc_chunk_mod.F90, where appropriate. Be sure to understand whether the functionality is relevant or required for GCHP prior to adding or removing a subroutine call. Omitting a new GEOS-Chem functionality in GCHP may introduce a silent bug and result in diverging model output. Removal of a GEOS-Chem subroutine that is still called in GCHP will result in a compile error.
Add, remove, or modify emissions in HEMCO_Config.rc GEOS-Chem Classic uses HEMCO for emissions I/O, regridding, and computation and gets all its information from HEMCO_Config.rc alone. In contrast, GCHP uses two configuration files for emissions: HEMCO_Config.rc and ExtData.rc. The former is used for HEMCO names, scaling, category, and hierarchy and the latter is used for file I/O and regridding handled by MAPL/ESMF. For consistency, all GEOS-Chem emissions updates should be incorporated into the GCHP HEMCO_Config.rc file, even for fields that are not used such as filename, dimensions, units, and time information. HEMCO_Config.rc fields not used in GCHP may still be checked for errors in HEMCO and therefore must conform to HEMCO rules. Units, dimensions, filename, HEMCO name, and file variable name, among other settings, must be incorporated into ExtData.rc. Inconsistencies between HEMCO_Config.rc and ExtData.rc, and format issues in either, will result in GCHP run-time errors. Issues in HEMCO_Config.rc will cause GCHP to crash immediately, while issues in ExtData.rc will occur later on during initialization. Isolate errors by turning off or commenting out emissions in HEMCO_Config.rc which will prompt GCHP to ignore them in ExtData.rc.
Update GEOS-Chem initial restart files GCHP restart files are GEOS-Chem Classic restart files regridded to cubed sphere. For reasonable GEOS-Chem Classic versus GCHP benchmark comparisons, the GCHP and GEOS-Chem initial restarts should be updated in sync. Regrid GEOS-Chem Classic 4x5 standard restart file to c24, c48, c90, c180, and c360 using csregridtool. Diverging GEOS-Chem Classic and GCHP restart files will result in benchmark results that are not comparable.

--Lizzie Lundgren (talk) 20:53, 28 August 2018 (UTC)

Previous | Next | Getting Started with GCHP | GCHP Main Page