MERRA-2 implementation details: Difference between revisions

From Geos-chem
Jump to navigation Jump to search
Line 62: Line 62:
*I3 (3-hr instantaneous)
*I3 (3-hr instantaneous)
|
|
*T [K]
*Same as MERRA2
*I3 (3-hr instantaneous)
*Same as MERRA2
|
|
*T [K]
*Same as MERRA2
*A3 (6-hr time average)
*A3 (6-hr time average)
|
|
*T [K]
*Same as MERRA2
*A6 (6-hr time average)
*A6 (6-hr time average)



Revision as of 16:21, 17 August 2015

File:Page is under construction.jpg

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.

Comparison between MERRA-2, GEOS-FP, MERRA, and GEOS-5

Feature MERRA2 GEOS-FP MERRA GEOS-5
Native vertical grid 0.5° lat x 0.625° lon 0.25° lat x 0.3125° lon 0.5° lat x 0.667° lon
1° lat x 1.25° lon
1.25° x 1.25° lon
0.5° lat x 0.667° lon
Native horizontal grid 72 hybrid levels Same grid as MERRA2 Same grid as MERRA2 Same grid as MERRA2
Time-invariant fields
  • FRLAKE
  • FRLAND
  • FRLANDIC(E)
  • FROCEAN
  • PHIS
Same fields as MERRA2 Same fields as MERRA2 Same fields as MERRA2
Precipitation fields
  • DQRCU, DQRLSAN,
  • PFICU, PFILSAN,
  • PFLCU, PFLLSAN,
  • REEVAPCN, REEVAPLSAN
Same fields as MERRA2 Same fields as MERRA2
  • 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)
  • 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)
  • 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)
Tropopause pressure
  • TROPPT (Pa)
  • A1 (1-hr time average)
  • TROPPT (hPa)
  • Same as MERRA2
  • TROPPT (hPa)
  • Same as MERRA2
  • TROPP (hPa)
  • A3 (3-hr time average)


Wet deposition algorithm 72 hybrid levels Identical to MERRA2 Identical to MERRA2 Identical to MERRA2



The following aspects of [[MERRA2] are identical to the older GEOS-FP operational data product.

  1. The MERRA2 vertical grid (72 hybrid levels) is identical to that of both MERRA and GEOS-5.2.0.
  2. By and large, the same data fields that were in the MERRA product are also contained in GEOS-FP:
    • GEOS-FP provides the same time-invariant fields (FRLAKE, FRLAND, FRLANDIC, FROCEAN, PHIS) as MERRA
    • The same correction that was applied to the MERRA SNOMAS (snow mass) field has also been applied to the GEOS-FP SNOMAS field.
    • GEOS-FP contains the same precipitation fields (DQRCU, DQRLSAN, PFICU, PFILSAN, PFLCU, PFLLSAN, REEVAPCN, REEVAPLSAN) as MERRA. This means that we can use the MERRA wet deposition algorithms with the GEOS-FP data.
  3. The GEOS-FP time archiving is identical to that of MERRA ...
    • ... with one exception: GEOS-FP instantaneous data is archived every 3 hours, as opposed to 6 hours in MERRA.

--Bob Y. 09:46, 21 August 2013 (EDT)

Key differences between GEOS-

The following aspects of GEOS-FP differ from the MERRA operational data product:

  1. All GEOS-FP data are placed on a horizontal grid of 0.25° x 0.3125°.
    • MERRA data fields are placed on three different horizontal grids (0.5° x 0.666°, 1° x 1.25° and 1.25° x 1.25°).
  2. All GEOS-FP data are placed on the 72-level hybrid grid.
    • Some MERRA fields were only available on a 42-level pressure grid (thus requiring interpolation).
  3. The following data GEOS-FP data fields differ from the corresponding MERRA fields:
    • RH is now a 3-hour time-averaged field, as opposed to a 6-hour instantaneous field in MERRA.
    • QV and T are now instantaneous 3-hour fields, as opposed to 3-hour time-averaged fields in MERRA.
    • The 3-D precipitation fields now make the (e.g. DQIDTMST, DQVDTMST, DQLDTMST, etc.) obsolete. We no longer archive these.
  4. We have chosen to save the processed GEOS-FP data in netCDF format, as opposed to GEOS-Chem binary format.

--Bob Y. 09:47, 21 August 2013 (EDT)

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)

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