MERRA-2 implementation details

From Geos-chem
Revision as of 15:04, 12 August 2015 by Bmy (Talk | contribs) (NcdfUtil/perl subdirectory)

Jump to: navigation, search

Page is under construction.jpg

Required coding changes in GEOS-Chem

As noted in the section above, the similarities between MERRA and GEOS-FP (especially of the vertical grids) means that in most cases we can just treat MERRA in the same way as for GEOS-5. In many areas of the code, the coding changes are straightforward and simply involve an extension of C-preprocessor statements such as:

#if defined( GEOS_5 ) || defined( MERRA )

to

#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )

In other areas of GEOS-Chem the changes are more involved. Below we provide a description of the areas of GEOS-Chem that were modified for MERRA:

Top-level directory

File Modifications made
Makefile_header.mk
  • If MET=merra2 or MET=merra-2 (case-insensitive), then activate the MERRA2 C-preprocessor switch
    • i.e. Add -DMERRA2 to the Makefile variable USER_DEFS.
  • If GRID=05x0625 is added, then activate the GRID05x0625 C-preprocessor switch
    • i.e. Add -DGRID05x0625 to the Makefile variable USER_DEFS.

--Bob Y. (talk) 21:25, 11 August 2015 (UTC)

Headers directory

The following modifications for MERRA2 were made in the Headers/ directory:

File Modifications made
CMN_SIZE_mod.F
  • Added size parameters for GEOS-FP grids at 4° x 5° 2° x 2.5° and 0.25° x 0.3125° resolution
gigc_input_opt_mod.F90
  • Add MERRA2_DIR to the OptInput derived type
  • Set Input_Opt%MERRA2_DIR = './' in routine Init_GIGC_Input_Opt
gigc_state_met_mod.F90 Multiple instances:
  • Now use: #if defined( GEOS_FP ) || defined( MERRA ) || defined( MERRA2 )

--Bob Y. (talk) 21:26, 11 August 2015 (UTC)

GeosUtil directory

The following modifications for GEOS-FP were made in the GeosUtil/ directory:

File Modifications made
bpch2_mod.F In routine GET_MODELNAME:
  • Add MERRA2_47L and MERRA2 modelnames to the #if block

In routine GET_NAME_EXT:

  • Return grid name merra2 for MERRA2 fields

In routine GET_NAME_EXT_2D:

  • Now use #if defined( MERRA ) || defined( MERRA2 )

In routine GET_RES_EXT:

  • Return resolution string <tt>05x0625 for 0.5° x 0.625° grids
pressure_mod.F In routines GET_PEDGE and GET_PEDGE_FULLGRID:
  • Compute PEDGE for MERRA2 in the same way as for GEOS-5, MERRA, and GEOS-FP

In routine INIT_PRESSURE:

  • Initialize Ap and Bp for MERRA2 in the same way as for GEOS-5, MERRA, and GEOS-FP
time_mod.F In routine GET_A1_TIME:
  • Compute the DATE array for MERRA2 the same way as is done for MERRA and GEOS-FP
transfer_mod.F In several routines:
  • Changed code to #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )

--Bob Y. (talk) 21:40, 11 August 2015 (UTC)

GeosCore directory

The following modifications for GEOS-FP were made in the GeosCore/ directory:

File Modifications made
calcrate.F Multiple instances:
  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
carbon_mod.F Multiple instances:
  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
cldice_HbrHOBr_mod.F Multiple instances:
  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
convection_mod.F

In routine DO_CONVECTION:

  • Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
dao_mod.F

In routine COPY_I6_FIELDS:

  • Changed code to: #if defined( GEOS_FP ) || defined( MERRA2 )

In routine INTERP:

  • Changed code to: #if defined( GEOS_FP ) || defined( MERRA2 )
depo_mercury_mod.F

In routine ADD_Hg2_SNOWPACK

  • Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
dust_dead_mod.F

In routine DST_MBL:

  • For GEOS-FP, add a new value for parameter FLX_MSS_FDG_FCT. The scale factor ensures that we get the same dust totals (w/in roundoff error) as for GEOS-5.
fast_jx_mod.F In routine FAST_JX:
  • Do cloud overlapping for GEOS-FP in the same way as for GEOS-5 and MERRA.
  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
gamap_mod.F

In routine INIT_TRACERINFO:

  • Changed code to: #elif defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
geosfp_read_mod.F90
  • Added this module w/ routines to read GEOS-FP met data (in netCDF format)
global_ch4_mod.F

In routines WETLAND_EMIS and READ_COPROD:

  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
input_mod.F

In routine READ_SIMULATION_MENU:

  • Read value for GEOS_FP_DIR from input.geos file and save into Input_Opt
  • Set LUNZIP=.FALSE. for GEOS-FP met

In routine READ_CONVECTION_MENU:

  • Change #if statement to allow non-local PBL mixing for GEOS-FP met data

In routine READ_EMISSIONS_MENU:

  • Turn off LMEGANMONO when LMEGAN is turned off

In routine VALIDATE_DIRECTORIES:

  • Error check GEOS_FP_DIR for start & end date
land_mercury_mod.F

In routines LAND_MERCURY_FLUX:

  • Changed code to: #if defined( MERRA ) || defined( GEOS_FP )

In routines SOILEMIS:

  • Changed code to: #if defined( MERRA ) || defined( GEOS_FP )
  • Extend #if statement for variable SOIL_EMIS_FAC to get the code to compile w/o error.
    (NOTE: Team Hg: you will have to submit a proper value for this later.
lightning_nox_mod.F

In routine LIGHTNING:

  • Eliminate the shallow-cloud inhibititon trap for GEOS-FP, as we already do for GEOS-5 and MERRA

In routine GET_OTD_LIS_SCALE:

  • Now use updated values for ANN_AVG_FLASHRATE computed by Lee Murray (2013-11-07).
main.F
  • Rewrote USE statements for clarity
  • Added calls to routines from geosfp_read_mod.F
  • Split off the code that reads met fields into internal subroutines READ_INITIAL_MET_FIELDS and READ_MET_FIELDS, for clarity.
  • Renamed NN to NNN to avoid name confusion
mercury_mod.F

In routine CHEM_Hg0_Hg2:

  • In the block that computes LWC, changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
  • In the block that computes Hg0 exchange, changed code to: #if defined( MERRA ) || defined( GEOS_FP )
ocean_mercury_mod.F

Multiple instances:

  • Now use: #if defined( MERRA ) || defined( GEOS_FP )
planeflight_mod.F

In routine PLANEFLIGHT

  • Now use: #if defined( MERRA ) || defined( GEOS_FP )
strat_chem_mod.F90

Multiple instances:

  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
sulfate_mod.F

Multiple instances:

  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
tagged_ox_mod.F In routine GET_REGIONAL_POX:
  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
tpcore_bc_mod.F: Multiple instances:
  • Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )
vdiff_mod.F90 In routine VDIFFDR:
  • Changed code to: #if defined( MERRA ) || defined( GEOS_FP )
wetscav_mod.F In routines DO_WETDEP, DO_WASHOUT_ONLY
  • Changed code to: #if defined( MERRA ) || defined( GEOS_FP )

In routine MAKE_QQ:

  • Add #if block for GEOS-FP met
  • Refer to PFILSAN(I,J,L+1) and PFLLSAN(I,J,L+1), since these fields are defined on level edges

In routine RAINOUT:

  • Changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )

--Bob Y. (talk) 22:13, 11 August 2015 (UTC)