Overview
MERRA2 is the newest reanalysis meteorological data product from NASA/GMAO. Overall, the structure of MERRA2 is very similar to the GMAO "forward processing" data product, which we refer to as GEOS-FP. Therefore, within GEOS-Chem we can (for the most part) treat MERRA2 in the same way as we do for the GEOS_FP.
Comparing MERRA2 to other GMAO met data products
The table below compares many features of MERRA2 with other GMAO met data products:
Feature
|
MERRA2
|
GEOS-FP
|
MERRA
|
GEOS-5
|
Native vertical grid
|
|
|
- 0.5° lat x 0.667° lon
- 1° lat x 1.25° lon
- 1.25° x 1.25° lon
|
|
Native horizontal grid
|
|
|
|
|
Time-invariant fields
|
- FRLAKE
- FRLAND
- FRLANDIC(E)
- FROCEAN
- PHIS
|
|
|
|
Time archiving: surface fields
|
|
|
|
|
Time archiving: 3D fields
|
- A3 (3-hr time averaged)
- I3 (3-hr instantaneous)
|
- Same as MERRA2
- Same as MERRA2
|
- A3 (3-hr time average)
- I6 (6-hour instantaneous)
|
- A6 (6-hr time average) and
- I6 (6-hr instantaneous)
|
Timestamps
|
|
|
|
|
Precipitation fields
|
- DQRCU, DQRLSAN,
- PFICU, PFILSAN,
- PFLCU, PFLLSAN,
- REEVAPCN, REEVAPLSAN
|
|
|
- DQIDTMST
- DQLDTMST
- DQVDTMST
- MOISTQ = DQIDTMST + DQLDTMST + DQVDTMST
|
Temperature
|
- T [K]
- I3 (3-hr instantaneous)
|
- Same as MERRA2
- Same as MERRA2
|
- Same as MERRA2
- A3 (6-hr time average)
|
- Same as MERRA2
- A6 (6-hr time average)
|
Relative humidity
|
- RH [1]
- A3 (3-hr time average)
|
- Same as MERRA2
- Same as MERRA2
|
- Same as MERRA2
- I3 (6-hr instantaneous)
|
- Same as MERRA2
- A6 (6-hr time-averaged)
|
Specific humidity
|
- QV [kg kg-1]
- I3 (3-hr instantaneous)
|
- Same as MERRA2
- Same as MERRA2
|
- Same as MERRA2
- A3 (3-hr time average)
|
- Same as MERRA2
- A6 (6-hr time-averaged)
|
Vertical pressure velocity
|
- OMEGA [Pa s-1]
- A3 (3-hr time average)
|
- Same as MERRA2
- Same as MERRA2
|
- Same as MERRA2
- I6 (6-hr instantaneous)
|
- Same as MERRA2
- A6 (6-hr time-averaged)
|
Ertel potential vorticity
|
- PV [K m2 kg-1 s-1]
- A1 (1-hr time average)
|
- Same as MERRA2
- Same as MERRA2
|
- Same as MERRA2
- I6 (6-hr instantaneous)
|
- Same as MERRA2
- A6 (3-hr time-average)
|
Snow mass
|
|
- Same as MERRA2
- Same as MERRA2
- Same as MERRA2
|
- Same as MERRA2
- Same as MERRA2
- Same as MERRA2
|
- SNOMAS [m]
- A3 (3-hr time average)
|
Sea level pressure
|
- SLP [Pa]
- A1 (1-hr time average)
- Converted to hPa when read from disk
|
|
|
- SLP [hPa]
- I6 (3-hr instantaneous)
|
Surface pressure
|
- PS [Pa]
- I3 (3-hr instantaneous)
- Converted to hPa when read from disk
|
- PS [hPa]
- I3 (3-hr instantaneous)
|
- PS [hPa]
- I6 (6-hr instantaneous)
|
- PS [hPa]
- I6 (3-hr instantaneous)
|
Tropopause pressure
|
- TROPPT [Pa]
- A1 (1-hr time average)
- Converted to hPa when read from disk
|
- TROPPT [hPa]
- Same as MERRA2
|
- TROPPT [hPa]
- Same as MERRA2
|
- TROPP [hPa]
- A3 (3-hr time average)
|
GEOS-Chem convection routine
|
- DO_MERRA_CONVECTION
(in convection_mod.F)
|
|
|
- NFCLDMX
(in convection_mod.F)
|
GEOS-Chem wet deposition routine
|
- WETDEP_MERRA
(wetscav_mod.F)
|
|
|
|
GEOS-Chem transport routine
|
- TPCORE_FVDAS
(tpcore_fvdas_mod.F90)
|
|
|
|
File format read by GEOS-Chem
|
|
|
|
|
--Bob Y. (talk) 16:41, 17 August 2015 (UTC)
Timeline for integration into GEOS-Chem
As of this writing, we have we have modified GEOS-Chem (as described below) so that it can be driven by the new NASA/GMAO MERRA2 reanalysis data product. These source code updates are currently being validated in GEOS-Chem v11-01c.
Currently, several of the GEOS-Chem specialty simulations are already compatible with MERRA2. These include:
- CO2 simulation
- CH4 simulation
- Hg simulation
- POPs simulation
- Rn-Pb-Be simulation
- Tagged O3 simulation
Making the various full-chemistry simulations (i.e. those using the benchmark, UCX, SOA, and tropchem chemistry mechanisms) compatible with MERRA2 will be a longer process. These simulations use emissions (e.g. lightning, dust) that have scale factors that must be tuned specifically for each met field product. In or
For more information about MERRA2, please see these resources:
--Bob Y. (talk) 14:54, 18 August 2015 (UTC)
Required coding changes in GEOS-Chem
As noted in the section above, the similarities between MERRA2 and GEOS-FP (especially of the vertical grids) means that in most cases we can just treat MERRA2 in the same way as for GEOS-FP. 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 ) || defined( GEOS_FP )
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 MERRA2:
Top-level directory
The following modifications for MERRA2 were made in the root GEOS-Chem 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) 18:28, 12 August 2015 (UTC)
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) 18:28, 12 August 2015 (UTC)
GeosUtil directory
The following modifications for MERRA2 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 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 routine INIT_TRANSFER:
- Set L_COPY = 36 for MERRA2
- Changed code to #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
In several routines:
- Changed code to #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
--Bob Y. (talk) 20:33, 12 August 2015 (UTC)
GeosCore directory
The following modifications for MERRA2 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 )
In routine DO_MERRA_CONVECTION:
- Changed code to #if defined( GEOS_FP ) || defined( MERRA2 ) where we set PFICU and PFLCU
|
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 )
|
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 )
|
diag3.F
|
Multiple instances:
- Changed code to: #if defined( GEOS_FP ) || defined( MERRA2 ), etc.
|
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 )
|
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:
- Now read value for Input_Opt%MERRA2_DIR from input.geos
- Also set Input_Opt%RES_DIR accordingly for 0.5° x 0.625° nested grids
- Set LUNZIP=.FALSE. for MERRA2 met
In routine READ_CONVECTION_MENU:
- Change #if statement to allow non-local PBL mixing for MERRA2 met data
In routine VALIDATE_DIRECTORIES:
- Error check MERRA2_DIR for start & end date
|
land_mercury_mod.F
|
In routines LAND_MERCURY_FLUX:
- Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
In routines SOILEMIS:
- Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
- Extend #if statement for variable SOIL_EMIS_FAC to get the code to compile w/o error.
- Team Hg will need to supply an updated value later on.
|
main.F
|
In main.F:
- Changed code to if defined( GEOS_FP ) || defined( MERRA2 ) where we define N_DYN_STEPS
- Changed code to if defined( GEOS_FP ) || defined( MERRA2 ) where we define Input_Opt%USE_O3_FROM_MET
In included routine READ_INITIAL_MET_FIELDS:
- Added calls to routines from merra2_read_mod.F90
In included routine READ_MET_FIELDS:
- Added calls to routines from merra2_read_mod.F90
|
mercury_mod.F
|
In routine CHEMMERCURY:
- Add placeholder K_RED_JNO2 parameter for the 0.5° x 0.625° nested grids.
- For now use the same value as for the 0.5° x 0.666° grid.
- Team Hg will need to supply an updated value later on.
- Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
- Changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
merra2_read_mod.F90
|
- Added this module w/ routines to read GEOS-FP met data (in netCDF format)
|
ocean_mercury_mod.F
|
Multiple instances:
- Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
planeflight_mod.F
|
In routine PLANEFLIGHT
- Now use: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
strat_chem_mod.F90
|
Multiple instances:
- Now use: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
In routine DO_SYNOZ:
- Add placeholder values for 0.5° x 0.625° grids
|
sulfate_mod.F
|
In routine CHEM_SO2:
- Changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
In routine INIT_SULFATE:
- Changed code to: #if !defined( GEOS_5 ) && !defined( MERRA ) && !defined( GEOS_FP ) && !defined( MERRA2 )
In routine SRCSFC30 (TOMAS-only):
- Added a placeholder value for TSCALE for the 0.5° x 0.625° grids
|
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:
- Added MERRA2 placeholder values for I1_BC_CH, I2_BC_CH, J1_BC_CH, J2_BC_CH
- Added MERRA2 placeholder values for I1_BC_EU, I2_BC_EU, J1_BC_EU, J2_BC_EU
- Added MERRA2 placeholder values for I1_BC_NA, I2_BC_NA, J1_BC_NA, J2_BC_NA
|
vdiff_mod.F90
|
In routine VDIFFDR:
- Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
wetscav_mod.F
|
In routine DO_WETDEP:
- Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
In routine DO_WASHOUT_ONLY::
- Changed code to: #if defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
In routine MAKE_QQ:
- Changed code to: #defined( GEOS_FP ) || defined( MERRA2 )
In routine RAINOUT:
- Changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
--Bob Y. (talk) 18:29, 12 August 2015 (UTC)
HEMCO/Core directory
The following modifications for MERRA2 were made in the HEMCO/Core directory:
File
|
Modifications made
|
hco_chartools_mod.F90
|
At the top of the module:
- Extend the #ifdef statement to add the parameter DEF_MET = 'merra2'
- Extend the #ifdef statement to add the parameter DEF_RES = '05x0625'
|
hco_interp_mod.F90
|
In routine MODLEV_INTERPOLATE:
- Changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
--Bob Y. (talk) 18:28, 12 August 2015 (UTC)
HEMCO/Extensions directory
The following modifications for MERRA2 were made in the HEMCO/Extensions directory:
File
|
Modifications made
|
hcox_ch4wetland_mod.F90
|
In routine WETLAND_EMIS:
- Changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
hcox_dustdead_mod.F
|
In routine HCOX_DUSTDEAD_GETTUN:
- Add placeholder values of FLX_MSS_FDG_FCT = -999 for the MERRA2 2° x 2.5° and 4° x 5° grids.
- We will add the correct values once we can run simulations with at least a year of met data.
|
hcox_lightnox_mod.F
|
In routine GET_OTD_LIS_SCALE:
- Add placeholder values of ANN_AVG_FLASHRATE for the MERRA2 0.5° x 0.625° grids.
- Add placeholder values of BETA for the MERRA2 2° x 2.5° and 4° x 5° grids.
- We will add the correct values once we can run simulations with at least a year of met data.
|
hcox_megan_mod.F
|
In routine GET_GAMMA_SM:
- Changed code to: #if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP ) || defined( MERRA2 )
|
hcox_tomas_dustdead_mod.F
|
In routine HCOX_TOMAS_DUSTDEAD_GETTUN:
- Add placeholder values of FLX_MSS_FDG_FCT = -999 for the MERRA2 2° x 2.5° and 4° x 5° grids.
- We will add the correct values once we can run simulations with at least a year of met data.
|
--Bob Y. (talk) 18:53, 12 August 2015 (UTC)