Difference between revisions of "MERRA-2 implementation details"
Line 1: | Line 1: | ||
[[Image:Page is under construction.jpg]] | [[Image: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 === | ||
+ | |||
+ | {| border=1 cellspacing=0 cellpadding=5 | ||
+ | |- bgcolor="#CCCCCC" | ||
+ | !width="175px"|File | ||
+ | !width="800px"|Modifications made | ||
+ | |- | ||
+ | |Makefile_header.mk | ||
+ | | | ||
+ | *If <tt>MET=merra2</tt> or <tt>MET=merra-2</tt> (case-insensitive), then the MERRA2 C-preprocessor switch will be activated (i.e. <tt>-DMERRA2</tt>< will be added to the Makefile variable <tt>USER_DEFS</tt>). | ||
+ | |||
+ | |} | ||
+ | |||
+ | --[[User:Bmy|Bob Y.]] ([[User talk:Bmy|talk]]) 20:33, 11 August 2015 (UTC) | ||
+ | |||
+ | === Headers directory === | ||
+ | |||
+ | The following modifications for [[MERRA2]] were made in the <tt>Headers/</tt> directory: | ||
+ | |||
+ | {| border=1 cellspacing=0 cellpadding=5 | ||
+ | |- bgcolor="#CCCCCC" | ||
+ | !width="175px"|File | ||
+ | !width="800px"|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 | ||
+ | | | ||
+ | *This module was introduced to facilitate the [[Grid-Independent GEOS-Chem]] development. | ||
+ | *<tt>gigc_input_opt_mod.F90</tt> now collects the various logical switches, file paths, and related variables from <tt>logical_mod.F</tt>, <tt>directory_mod.F</tt>, <tt>unix_cmds_mod.F</tt>, and <tt>linoz_mod.F</tt>. | ||
+ | |- | ||
+ | |gigc_state_met_mod.F90 | ||
+ | | | ||
+ | *This module was introduced to facilitate the [[Grid-Independent GEOS-Chem]] development. | ||
+ | *<tt>gigc_state_met_mod.F90</tt> now holds all of the met field arrays that were formerly in <tt>GeosCore/dao_mod.F</tt>. | ||
+ | *We now allocate all met field arrays in routine <tt>Init_GIGC_State_Met</tt> | ||
+ | |||
+ | |} | ||
+ | |||
+ | --[[User:Bmy|Bob Y.]] 13:52, 7 November 2013 (EST) | ||
+ | |||
+ | === GeosUtil directory === | ||
+ | |||
+ | The following modifications for GEOS-FP were made in the <tt>GeosUtil/</tt> directory: | ||
+ | |||
+ | {| border=1 cellspacing=0 cellpadding=5 | ||
+ | |- bgcolor="#CCCCCC" | ||
+ | !width="175px"|File | ||
+ | !width="800px"|Modifications made | ||
+ | |- | ||
+ | |bpch2_mod.F | ||
+ | | | ||
+ | In routine GET_MODELNAME: | ||
+ | *Add <tt>GEOS5_47L</tt> and <tt>GEOSFP</tt> modelnames to the <tt>#if</tt> block | ||
+ | In routine GET_NAME_EXT: | ||
+ | *Return grid name <tt>geos5</tt> for GEOS-FP fields | ||
+ | In routine GET_RES_EXT: | ||
+ | *Return resolution string <tt>025x03125</tt> for 0.25° x 0.3125° grids | ||
+ | |- | ||
+ | |grid_mod.F | ||
+ | | | ||
+ | In routine COMPUTE_GRID: | ||
+ | *Overwrite YMID at poles for 0.25° x 0.3125° grids (+/- 89.3975) | ||
+ | *Define YMID_R_W for 0.25° x 0.3125° nested grids | ||
+ | In routine INIT_GRID: | ||
+ | *Define IIIPAR=1152 and JJJPAR=721 for 0.25° x 0.3125° global grid | ||
+ | |- | ||
+ | |pressure_mod.F | ||
+ | | | ||
+ | In routines GET_PEDGE and GET_PEDGE_FULLGRID: | ||
+ | *Compute PEDGE for GEOS-FP in the same way as for GEOS-5 and MERRA | ||
+ | In routine INIT_PRESSURE: | ||
+ | *Initialize Ap and Bp for GEOS-FP in the same way as for GEOS-5 and MERRA | ||
+ | |- | ||
+ | |time_mod.F | ||
+ | | | ||
+ | In routine GET_A1_TIME: | ||
+ | *Compute the <tt>DATE</tt> array for GEOS-FP the same way as is done for MERRA. | ||
+ | |- | ||
+ | |transfer_mod.F | ||
+ | | | ||
+ | In several routines: | ||
+ | *Changed code to <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |} | ||
+ | |||
+ | --[[User:Bmy|Bob Y.]] 13:55, 7 November 2013 (EST) | ||
+ | |||
+ | === GeosCore directory === | ||
+ | |||
+ | The following modifications for GEOS-FP were made in the <tt>GeosCore/</tt> directory: | ||
+ | |||
+ | {| border=1 cellspacing=0 cellpadding=5 | ||
+ | |- bgcolor="#CCCCCC" | ||
+ | !width="175px"|File | ||
+ | !width="800px"|Modifications made | ||
+ | |- | ||
+ | |calcrate.F | ||
+ | |Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |carbon_mod.F | ||
+ | |Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |cldice_HbrHOBr_mod.F | ||
+ | |Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |convection_mod.F | ||
+ | | | ||
+ | In routine DO_CONVECTION: | ||
+ | *Changed code to: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | *For GEOS-FP, PFICU and PFLCU fields are defined on level edges. Pass the top edge value at each level (stored in local arrays T_PFICU and T_PFLCU) to DO_MERRA_CONVECTION. | ||
+ | *Add T_PFICU and T_PFLCU arrays to the PRIVATE statement of the OpenMP loop. | ||
+ | |- | ||
+ | |dao_mod.F | ||
+ | | | ||
+ | In routine COPY_I6_FIELDS: | ||
+ | *Renamed this routine to COPY_I3_I6_FIELDS | ||
+ | *Added #if block for GEOS-FP met | ||
+ | In routines IS_ICE, IS_LAND, IS_NEAR, IS_WATER: | ||
+ | *Now use: <tt>#elif defined( GEOS_4 ) || defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | In routine INTERP: | ||
+ | *Add #if block for GEOS-FP | ||
+ | |- | ||
+ | |depo_mercury_mod.F | ||
+ | | | ||
+ | In routine ADD_Hg2_SNOWPACK | ||
+ | *Changed code to: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |diag3.F | ||
+ | | | ||
+ | *Add SCALE_I3 counter for instantaneous met fields | ||
+ | *Modify ND66 diagnostic to divide by proper # of A3 increments (i.e. every 3 hours) | ||
+ | **With the exception of T, SPHU, which are I3 fields | ||
+ | *Modify ND67 diagnostic to divide by proper # of A1 increments (i.e. every hour) | ||
+ | **With the exception of CLDTOPS, which is an A3 field | ||
+ | |- | ||
+ | |dust_mod.F | ||
+ | | | ||
+ | In routine SRC_DUST_DEAD: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |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_j.F | ||
+ | | | ||
+ | *Do cloud overlapping for GEOS-FP in the same way as for GEOS-5 and MERRA. | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |gamap_mod.F | ||
+ | | | ||
+ | In routine INIT_TRACERINFO: | ||
+ | *Changed code to: <tt>#elif defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |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: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |global_hno3_mod.F | ||
+ | | | ||
+ | In routine GET_GLOBAL_HNO3: | ||
+ | *Now use:<br><tt>#if defined( GEOS_3 ) || defined( GEOS_4 ) || defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |global_o3_mod.F | ||
+ | | | ||
+ | In routine GET_GLOBAL_O3 | ||
+ | *Now use:: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |initialize.F | ||
+ | | | ||
+ | *Restructure USE statements for clarity | ||
+ | *Now also reset the counter for I3 timesteps by calling routine <tt>SET_CT_I3( RESET=.TRUE. )</tt> | ||
+ | |- | ||
+ | |input_mod.F | ||
+ | | | ||
+ | In routine READ_SIMULATION_MENU: | ||
+ | *Read value for GEOS_FP_DIR from <tt>input.geos</tt> file and save into <tt>Input_Opt</tt> | ||
+ | *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: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | In routines SOILEMIS: | ||
+ | *Changed code to: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | *Extend #if statement for variable SOIL_EMIS_FAC to get the code to compile w/o error.<br>'''''(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 <tt>ANN_AVG_FLASHRATE</tt> computed by Lee Murray (2013-11-07). | ||
+ | |- | ||
+ | |Makefile | ||
+ | | | ||
+ | *Added dependencies for new routines | ||
+ | *Added the following targets | ||
+ | **libnc: Compiles the code in the NcdfUtil directory and creates the <tt>libNcUtils.a</tt> library | ||
+ | **ncdfcheck: Compiles a program that will test the integrity of the netCDF library installation. | ||
+ | |- | ||
+ | |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 | ||
+ | |- | ||
+ | |megan_mod.F | ||
+ | | | ||
+ | At top of module | ||
+ | *For MERRA and GEOS-FP met: define DAY_DIM parameter = 24 for hourly temperature data | ||
+ | *For all other met data: define DAY_DIM parameter = 8 for 3-hourly temperature data | ||
+ | In routine INIT_MEGAN: | ||
+ | *For MERRA and GEOS-FP met: define G4AHEAD = 003000 | ||
+ | *Now call GEOS57_READ_A1 (from geosfp_read_mod.F90) to read surface temperature data | ||
+ | |- | ||
+ | |mercury_mod.F | ||
+ | | | ||
+ | In routine CHEM_Hg0_Hg2: | ||
+ | *In the block that computes LWC, changed code to: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | *In the block that computes Hg0 exchange, changed code to: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |nei2005_anthro_mod.F | ||
+ | | | ||
+ | In routines EMISS_NEI2005_ANTHRO and EMISS_NEI_ANTHRO_05x0666: | ||
+ | *Changed code to: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |ocean_mercury_mod.F | ||
+ | | | ||
+ | Multiple instances: | ||
+ | *Now use: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |planeflight_mod.F | ||
+ | | | ||
+ | In routine PLANEFLIGHT | ||
+ | *Now use: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |strat_chem_mod.F90 | ||
+ | | | ||
+ | Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |sulfate_mod.F | ||
+ | | | ||
+ | Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |tagged_ox_mod.F | ||
+ | | | ||
+ | Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |tpcore_bc_mod.F: | ||
+ | | | ||
+ | Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |tropopause_mod.F: | ||
+ | | | ||
+ | Multiple instances: | ||
+ | *Now use: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |vdiff_mod.F90 | ||
+ | | | ||
+ | In routine VDIFFDR: | ||
+ | *Changed code to: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |- | ||
+ | |wetscav_mod.F | ||
+ | | | ||
+ | In routines DO_WETDEP, DO_WASHOUT_ONLY | ||
+ | *Changed code to: <tt>#if defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | 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: <tt>#if defined( GEOS_5 ) || defined( MERRA ) || defined( GEOS_FP )</tt> | ||
+ | |||
+ | |} | ||
+ | |||
+ | --[[User:Bmy|Bob Y.]] 14:23, 7 November 2013 (EST) | ||
+ | |||
+ | === GeosApm directory === | ||
+ | |||
+ | The following modifications for GEOS-FP were made in the <tt>GeosTomas/</tt> directory: | ||
+ | |||
+ | {| border=1 cellspacing=0 cellpadding=5 | ||
+ | |- bgcolor="#CCCCCC" | ||
+ | !width="175px"|File | ||
+ | !width="800px"|Modifications made | ||
+ | |- | ||
+ | |Makefile | ||
+ | | | ||
+ | *Added dependencies for geos57_read_mod.F | ||
+ | *Removed references to obsolete GEIA biogenic emissions | ||
+ | |- | ||
+ | |carbon_mod.F | ||
+ | | | ||
+ | *Synchronized with GeosCore/carbon_mod.F | ||
+ | |- | ||
+ | |dao_mod.F | ||
+ | | | ||
+ | *Synchronized with GeosCore/dao_mod.F | ||
+ | |- | ||
+ | |dust_mod.F | ||
+ | | | ||
+ | *Synchronized with GeosCore/dust_mod.F | ||
+ | |- | ||
+ | |dust_dead_mod.F | ||
+ | | | ||
+ | *Synchronized with GeosCore/dust_dead_mod.F | ||
+ | |- | ||
+ | |main.F | ||
+ | | | ||
+ | *Synchronized with GeosCore/main.F | ||
+ | |- | ||
+ | |sulfate_mod.F | ||
+ | | | ||
+ | *Synchronized with GeosCore/sulfate_mod.F | ||
+ | |- | ||
+ | |wetscav_mod.F | ||
+ | | | ||
+ | *Synchronized with GeosCore/wetscav_mod.F | ||
+ | *NOTE: Needs validation by APM team | ||
+ | |} | ||
+ | |||
+ | --[[User:Bmy|Bob Y.]] 13:49, 9 February 2012 (EST) | ||
+ | |||
+ | === NcdfUtil directory === | ||
+ | |||
+ | We have added the <tt>NcdfUtil/</tt> directory, which contains routines for netCDF file I/O. These routines are based on the NcdfUtilities package by Bob Yantosca. These are built when you compile GEOS-Chem with the <tt>NETCDF=yes</tt> Makefile option. | ||
+ | |||
+ | {| border=1 cellspacing=0 cellpadding=5 | ||
+ | |- bgcolor="#CCCCCC" | ||
+ | !width="175px"|File | ||
+ | !width="800px"|Description | ||
+ | |- | ||
+ | |Makefile | ||
+ | |GNU Makefile used to build the NcdfUtil code. | ||
+ | |- | ||
+ | |TestNcdfUtil.F90 | ||
+ | |Test program to verify that the netCDF libraries were built properly. (This is executed only when you issue a <tt>make ncdfcheck</tt> command.) | ||
+ | |- | ||
+ | |m_do_err_out.F90 | ||
+ | |Routine to print out netCDF error messages. | ||
+ | |- | ||
+ | |m_netcdf_io_checks.F90 | ||
+ | |Routines to check whether a netCDF file contains a specified variable or dimension. | ||
+ | |- | ||
+ | |m_netcdf_io_close.F90 | ||
+ | |Routines to close a netCDF file. | ||
+ | |- | ||
+ | |m_netcdf_io_create.F90 | ||
+ | |Routines used to open a netCDF file for output and to synchronize a netCDF file. | ||
+ | |- | ||
+ | |m_netcdf_io_define.F90 | ||
+ | |Routines to define netCDF variables and attributes. Use this when writing data to a netCDF file. | ||
+ | |- | ||
+ | |m_netcdf_io_get_dimlen.F90 | ||
+ | |Routines to return dimension information from a netCDF file. | ||
+ | |- | ||
+ | |m_netcdf_io_handle_err.F90 | ||
+ | |Routines for netCDF I/O error handling. | ||
+ | |- | ||
+ | |m_netcdf_io_open.F90 | ||
+ | |Routines for opening a netCDF file for reading or for writing. | ||
+ | |- | ||
+ | |m_netcdf_io_read.F90 | ||
+ | |Routines for reading variables (of INTEGER, REAL*4, REAL*8, and CHARACTER types) from a netCDF file. | ||
+ | |- | ||
+ | |m_netcdf_io_readattr.F90 | ||
+ | |Routines for reading global and variable attributes (of INTEGER, REAL*4, REAL*8, and CHARACTER types) from a netCDF file. | ||
+ | |- | ||
+ | |m_netcdf_io_write.F90 | ||
+ | |Routines for writing data to a netCDF file | ||
+ | |} | ||
+ | |||
+ | --[[User:Bmy|Bob Y.]] 10:34, 3 February 2012 (EST) | ||
+ | |||
+ | === NcdfUtil/perl subdirectory === | ||
+ | |||
+ | In this directory, we have added scripts for automatically generating Fortran code with the proper calls from the NcdfUtilities package. We anticipate that this will be a convenience for GEOS-Chem users, as it will relieve some of the drudgery of writing these calls by hand. | ||
+ | |||
+ | {| border=1 cellspacing=0 cellpadding=5 | ||
+ | |- bgcolor="#CCCCCC" | ||
+ | !width="175px"|File | ||
+ | !width="800px"|Description | ||
+ | |- | ||
+ | |StrTrim.pm | ||
+ | |Perl module used by the <tt>ncCode*</tt> scripts. Contains routines for stripping withe space from strings. | ||
+ | |- | ||
+ | |ncCodeDef | ||
+ | |Perl script that generates Fortran code to open a netCDF file and define the various dimensions, variables, and attributes. | ||
+ | |- | ||
+ | |ncCodeWrite | ||
+ | |Perl script that will generate Fortran code to write data to a netCDF file. | ||
+ | |- | ||
+ | |ncCodeRead | ||
+ | |Perl script that will generate Fortran code to read data from a netCDF file. | ||
+ | |- | ||
+ | |nc_definitions.rc | ||
+ | |Generic input file used by the <tt>ncCode*</tt> scripts. You can edit this. | ||
+ | |- | ||
+ | |definitions_cn.rc | ||
+ | |Customized version of <tt>nc_definitions.rc</tt> that will generate Fortran code for reading [[List of GEOS-FP met fields#Constant_fields|GEOS-FP CN data]]. | ||
+ | |- | ||
+ | |definitions_a1.rc | ||
+ | |Customized version of <tt>nc_definitions.rc</tt> that will generate Fortran code for reading [[List of GEOS-FP met fields#A1 fields|GEOS-FP A1 data]]. | ||
+ | |- | ||
+ | |definitions_a3cld.rc | ||
+ | |Customized version of <tt>nc_definitions.rc</tt> that will generate Fortran code for reading [[List of GEOS-FP met fields#A3cld fields|GEOS-FP A3cld data]]. | ||
+ | |- | ||
+ | |definitions_a3dyn.rc | ||
+ | |Customized version of <tt>nc_definitions.rc</tt> that will generate Fortran code for reading [[List of GEOS-FP met fields#A3dyn fields|GEOS-FP A3dyn data]]. | ||
+ | |- | ||
+ | |definitions_a3mstc.rc | ||
+ | |Customized version of <tt>nc_definitions.rc</tt> that will generate Fortran code for reading [[List of GEOS-FP met fields#A3mstC fields|GEOS-FP A3mstC data]]. | ||
+ | |- | ||
+ | |definitions_a3mste.rc | ||
+ | |Customized version of <tt>nc_definitions.rc</tt> that will generate Fortran code for reading [[List of GEOS-FP met fields#A3mstE fields|GEOS-FP A3mstE data]]. | ||
+ | |- | ||
+ | |definitions_i3.rc | ||
+ | |Customized version of <tt>nc_definitions.rc</tt> that will generate Fortran code for reading [[List of GEOS-FP met fields#I3 fields|GEOS-FP I3 data]]. | ||
+ | |} | ||
+ | |||
+ | --[[User:Bmy|Bob Y.]] 15:49, 12 May 2014 (EDT) |
Revision as of 20:33, 11 August 2015
File:Page is under construction.jpg
Contents
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 |
|
--Bob Y. (talk) 20:33, 11 August 2015 (UTC)
Headers directory
The following modifications for MERRA2 were made in the Headers/ directory:
File | Modifications made |
---|---|
CMN_SIZE_mod.F |
|
gigc_input_opt_mod.F90 |
|
gigc_state_met_mod.F90 |
|
--Bob Y. 13:52, 7 November 2013 (EST)
GeosUtil directory
The following modifications for GEOS-FP were made in the GeosUtil/ directory:
File | Modifications made |
---|---|
bpch2_mod.F |
In routine GET_MODELNAME:
In routine GET_NAME_EXT:
In routine GET_RES_EXT:
|
grid_mod.F |
In routine COMPUTE_GRID:
In routine INIT_GRID:
|
pressure_mod.F |
In routines GET_PEDGE and GET_PEDGE_FULLGRID:
In routine INIT_PRESSURE:
|
time_mod.F |
In routine GET_A1_TIME:
|
transfer_mod.F |
In several routines:
|
--Bob Y. 13:55, 7 November 2013 (EST)
GeosCore directory
The following modifications for GEOS-FP were made in the GeosCore/ directory:
File | Modifications made |
---|---|
calcrate.F | Multiple instances:
|
carbon_mod.F | Multiple instances:
|
cldice_HbrHOBr_mod.F | Multiple instances:
|
convection_mod.F |
In routine DO_CONVECTION:
|
dao_mod.F |
In routine COPY_I6_FIELDS:
In routines IS_ICE, IS_LAND, IS_NEAR, IS_WATER:
In routine INTERP:
|
depo_mercury_mod.F |
In routine ADD_Hg2_SNOWPACK
|
diag3.F |
|
dust_mod.F |
In routine SRC_DUST_DEAD:
|
dust_dead_mod.F |
In routine DST_MBL:
|
fast_j.F |
|
gamap_mod.F |
In routine INIT_TRACERINFO:
|
geosfp_read_mod.F90 |
|
global_ch4_mod.F |
In routines WETLAND_EMIS and READ_COPROD:
|
global_hno3_mod.F |
In routine GET_GLOBAL_HNO3:
|
global_o3_mod.F |
In routine GET_GLOBAL_O3
|
initialize.F |
|
input_mod.F |
In routine READ_SIMULATION_MENU:
In routine READ_CONVECTION_MENU:
In routine READ_EMISSIONS_MENU:
In routine VALIDATE_DIRECTORIES:
|
land_mercury_mod.F |
In routines LAND_MERCURY_FLUX:
In routines SOILEMIS:
|
lightning_nox_mod.F |
In routine LIGHTNING:
In routine GET_OTD_LIS_SCALE:
|
Makefile |
|
main.F |
|
megan_mod.F |
At top of module
In routine INIT_MEGAN:
|
mercury_mod.F |
In routine CHEM_Hg0_Hg2:
|
nei2005_anthro_mod.F |
In routines EMISS_NEI2005_ANTHRO and EMISS_NEI_ANTHRO_05x0666:
|
ocean_mercury_mod.F |
Multiple instances:
|
planeflight_mod.F |
In routine PLANEFLIGHT
|
strat_chem_mod.F90 |
Multiple instances:
|
sulfate_mod.F |
Multiple instances:
|
tagged_ox_mod.F |
Multiple instances:
|
tpcore_bc_mod.F: |
Multiple instances:
|
tropopause_mod.F: |
Multiple instances:
|
vdiff_mod.F90 |
In routine VDIFFDR:
|
wetscav_mod.F |
In routines DO_WETDEP, DO_WASHOUT_ONLY
In routine MAKE_QQ:
In routine RAINOUT:
|
--Bob Y. 14:23, 7 November 2013 (EST)
GeosApm directory
The following modifications for GEOS-FP were made in the GeosTomas/ directory:
File | Modifications made |
---|---|
Makefile |
|
carbon_mod.F |
|
dao_mod.F |
|
dust_mod.F |
|
dust_dead_mod.F |
|
main.F |
|
sulfate_mod.F |
|
wetscav_mod.F |
|
--Bob Y. 13:49, 9 February 2012 (EST)
NcdfUtil directory
We have added the NcdfUtil/ directory, which contains routines for netCDF file I/O. These routines are based on the NcdfUtilities package by Bob Yantosca. These are built when you compile GEOS-Chem with the NETCDF=yes Makefile option.
File | Description |
---|---|
Makefile | GNU Makefile used to build the NcdfUtil code. |
TestNcdfUtil.F90 | Test program to verify that the netCDF libraries were built properly. (This is executed only when you issue a make ncdfcheck command.) |
m_do_err_out.F90 | Routine to print out netCDF error messages. |
m_netcdf_io_checks.F90 | Routines to check whether a netCDF file contains a specified variable or dimension. |
m_netcdf_io_close.F90 | Routines to close a netCDF file. |
m_netcdf_io_create.F90 | Routines used to open a netCDF file for output and to synchronize a netCDF file. |
m_netcdf_io_define.F90 | Routines to define netCDF variables and attributes. Use this when writing data to a netCDF file. |
m_netcdf_io_get_dimlen.F90 | Routines to return dimension information from a netCDF file. |
m_netcdf_io_handle_err.F90 | Routines for netCDF I/O error handling. |
m_netcdf_io_open.F90 | Routines for opening a netCDF file for reading or for writing. |
m_netcdf_io_read.F90 | Routines for reading variables (of INTEGER, REAL*4, REAL*8, and CHARACTER types) from a netCDF file. |
m_netcdf_io_readattr.F90 | Routines for reading global and variable attributes (of INTEGER, REAL*4, REAL*8, and CHARACTER types) from a netCDF file. |
m_netcdf_io_write.F90 | Routines for writing data to a netCDF file |
--Bob Y. 10:34, 3 February 2012 (EST)
NcdfUtil/perl subdirectory
In this directory, we have added scripts for automatically generating Fortran code with the proper calls from the NcdfUtilities package. We anticipate that this will be a convenience for GEOS-Chem users, as it will relieve some of the drudgery of writing these calls by hand.
File | Description |
---|---|
StrTrim.pm | Perl module used by the ncCode* scripts. Contains routines for stripping withe space from strings. |
ncCodeDef | Perl script that generates Fortran code to open a netCDF file and define the various dimensions, variables, and attributes. |
ncCodeWrite | Perl script that will generate Fortran code to write data to a netCDF file. |
ncCodeRead | Perl script that will generate Fortran code to read data from a netCDF file. |
nc_definitions.rc | Generic input file used by the ncCode* scripts. You can edit this. |
definitions_cn.rc | Customized version of nc_definitions.rc that will generate Fortran code for reading GEOS-FP CN data. |
definitions_a1.rc | Customized version of nc_definitions.rc that will generate Fortran code for reading GEOS-FP A1 data. |
definitions_a3cld.rc | Customized version of nc_definitions.rc that will generate Fortran code for reading GEOS-FP A3cld data. |
definitions_a3dyn.rc | Customized version of nc_definitions.rc that will generate Fortran code for reading GEOS-FP A3dyn data. |
definitions_a3mstc.rc | Customized version of nc_definitions.rc that will generate Fortran code for reading GEOS-FP A3mstC data. |
definitions_a3mste.rc | Customized version of nc_definitions.rc that will generate Fortran code for reading GEOS-FP A3mstE data. |
definitions_i3.rc | Customized version of nc_definitions.rc that will generate Fortran code for reading GEOS-FP I3 data. |
--Bob Y. 15:49, 12 May 2014 (EDT)