-
Notifications
You must be signed in to change notification settings - Fork 1
Offline ELM Inputs for Regional Simulations
Note that this will inform ELM regional users, ELM+ATS users, and Watershed Workflow development.
NOTE: An exact list of data input files (both names and variables), is totally dependent on: (1) COMPSET, i.e. component set, (2) resolution, (3) specifically required options. Those are pre-defined in a sets of xml files under 4 or 6 (if MOSART on) sub-directories of E3SM source package:
$E3SM_SRC_ROOT/cime_config/
$E3SM_SRC_ROOT/component/elm/bld/
$E3SM_SRC_ROOT/component/elm/cime_config/
$E3SM_SRC_ROOT/data_comp/datm/cime_config/
(optional with MOSART on)
$E3SM_SRC_ROOT/component/mosart/bld/
$E3SM_SRC_ROOT/component/mosart/cime_config/
The screenshot of following shows mainly 3 data subdirectories: atm/ for atmosphere component; lnd/clm2 for ELM component; and share/ for domain (or mesh) files and specifically including /domain.clm/ for ELM domain file,
AS shown below, domain file normally is under share/domain, in which a subdirectory domain.clm specifically for land component, i.e. ELM (formerly CLM). A global half-degree domain file, domain.lnd.360x720_cruncep.c20190221.nc is highlighted. Usually this domain can be used for ALL components in ELM, but DATM may have its own domain file, as highlighted under atm/datm7/domain.T62.050609_smallvillelA.nc, which used by atm_forcing.datm7.Qian.T62* datasets.
Again ELM data needs are depending upon COMPSET, resolution, and specific options switched on. In most cases the needed data are located in the highlighted subdirectories under lnd/clm2, as shown below. Those not highlighted may be required for some cases or specific options.
As mentioned above, so-called OFFLINE ELM is actually forcing data, i.e. DATM, driven land model. The DATM data sets are very complicated, as structured as the following screenshoot. The highlighted are minimum required in most cases. NOTE: for actual meteorological forcings, e.g. atm_forcing.datm7.*/ or 1x1pt_* or 42_FLUXNETSITES, ONLY one set is required.
Also NOTED in above screenshot, a specifically highlighted atm/datm7/atm_forcing.datm7.GSWP3.0.5d.v2.c180716_Oakharbor-Grid/ forcing dataset, is for testing ELM-ATS single-column case at Portage River outlet, OH. And the data format is in so-called coupler-bypassed, under cpl_bypass_full/, which are used with a COMPSET of ICB*, one of SDATM (i.e. stubbed ATM component). As implied by name, it will bypass E3SM coupler and thus other non-LAND components including DATM.
And by default, atm/datm7/atm_forcing.datm7.GSWP3.0.5d.v2.c180716/ forcing dataset is structured as highlighted in the following:
AS briefed above, all categories of data are required for offline ELM, of which many are in content of global, in most cases. Model setup or configuration would find all required and later can automatically download from data servers for your case's input data directory (which MUST be provided).
TIP: After an ELM case setup, under case directory there is a directory CaseDocs/, in which there are 2-3 txt files: *_in. ALL data files including full path are there.
Fortunately, for a user-defined ELM case, such as point, transect, or regional simulations, not all data are critical to a successful application. These critical ones in general are user modifiable and may not have to follow the data file structure shown above, although requiring specfic data formats.
And these data formats, almost in NetCDF format, can be obtained from global data sets, as described below.
A typical (structured) domain file in its NetCDF header:
netcdf domain.lnd.360x720_cruncep.c20190221 {
dimensions:
nv = 4 ;
ni = 720 ;
nj = 360 ;
variables:
double xc(nj, ni) ;
xc:long_name = "longitude of grid cell center" ;
xc:units = "degrees_east" ;
xc:bounds = "xv" ;
double yc(nj, ni) ;
yc:long_name = "latitude of grid cell center" ;
yc:units = "degrees_north" ;
yc:bounds = "yv" ;
double xv(nj, ni, nv) ;
xv:long_name = "longitude of grid cell vertices" ;
xv:units = "degrees_east" ;
double yv(nj, ni, nv) ;
yv:long_name = "latitude of grid cell vertices" ;
yv:units = "degrees_north" ;
int mask(nj, ni) ;
mask:long_name = "land domain mask" ;
mask:coordinate = "xc yc" ;
mask:note = "unitless" ;
mask:comment = "0=ocean and 1=land, 0 indicates that cell is not active" ;
double frac(nj, ni) ;
frac:long_name = "fraction of grid cell that is active" ;
frac:coordinate = "xc yc" ;
frac:units = "unitless" ;
frac:filter1 = "error if frac> 1.0+eps or frac < 0.0-eps; eps = 0.1000000E-11" ;
frac:filter2 = "limit frac to [fminval,fmaxval]; fminval= 0.1000000E-02 fmaxval= 1.000000" ;
double area(nj, ni) ;
area:long_name = "area of grid cell in radians squared" ;
area:coordinate = "xc yc" ;
area:units = "radians2" ;
// global attributes:
:Conventions = "NCAR-CSM:CF-1.0" ;
:title = "CCSM domain data:" ;
:user_comment = "Standard CCSM3.1/4.0 domain specification file created from CLM inputdata files:" ;
:source = "from CLM fraction and griddata files" ;
:history = "\n",
"04/09/10 15:31:15 slevis:be1105en.ucar.ed" ;
:mkdatadomain_version = "$HeadURL: https://svn-ccsm-models.cgd.ucar.edu/clm2/branch_tags/ccsm4_0_rel_tags/ccsm4_0_rel_03_clm3_7_10/models/lnd/clm/tools/mkdatadomain/addglobal.F90 $" ;
:SVN_url = "$HeadURL: https://svn-ccsm-models.cgd.ucar.edu/clm2/branch_tags/ccsm4_0_rel_tags/ccsm4_0_rel_03_clm3_7_10/models/lnd/clm/tools/mkdatadomain/addglobal.F90 $" ;
:mkdatadomain_version_Id = "$Id: addglobal.F90 13984 2009-01-20 05:54:15Z erik $" ;
:source_code = "$Id: addglobal.F90 13984 2009-01-20 05:54:15Z erik $" ;
:Land_Grid_Dataset = "griddata_0360x0720.nc" ;
:Land_Fraction_Dataset = "fracdata_0360x0720_ORCHIDEE.nc" ;
}
NOTE that area unit is in square of radians. In many cases, this property will be checked to compare with a same one in surfdata in which unit is in square of kilometers. Different values would crash ELM model simulation.
This land domain file can be in unstructured format, like the following. NOTE it must be nj to be assigned as 1.
netcdf domain.lnd.110x1pt_US-GC_TransTEMPEST_c20230901 {
dimensions:
ni = 110 ;
nj = 1 ;
nv = 4 ;
variables:
double area(nj, ni) ;
area:long_name = "area of grid cell in radians squared" ;
area:coordinates = "xc yc" ;
area:units = "radian2" ;
area:cell_methods = "nj: mean" ;
double frac(nj, ni) ;
frac:long_name = "fraction of grid cell that is active" ;
frac:coordinates = "xc yc" ;
frac:note = "unitless" ;
frac:filter1 = "error if frac> 1.0+eps or frac < 0.0-eps; eps = 0.1000000E-11" ;
frac:filter2 = "limit frac to [fminval,fmaxval]; fminval= 0.1000000E-02 fmaxval= 1.000000" ;
frac:cell_methods = "nj: mean" ;
int mask(nj, ni) ;
mask:long_name = "domain mask" ;
mask:note = "unitless" ;
mask:coordinates = "xc yc" ;
mask:comment = "0 value indicates cell is not active" ;
mask:cell_methods = "nj: mean" ;
double xc(nj, ni) ;
xc:long_name = "longitude of grid cell center" ;
xc:units = "degrees_east" ;
xc:bounds = "xv" ;
xc:cell_methods = "nj: mean" ;
double xv(nj, ni, nv) ;
xv:long_name = "longitude of grid cell verticies" ;
xv:units = "degrees_east" ;
xv:cell_methods = "nj: mean" ;
double yc(nj, ni) ;
yc:long_name = "latitude of grid cell center" ;
yc:units = "degrees_north" ;
yc:bounds = "yv" ;
yc:cell_methods = "nj: mean" ;
double yv(nj, ni, nv) ;
yv:long_name = "latitude of grid cell verticies" ;
yv:units = "degrees_north" ;
yv:cell_methods = "nj: mean" ;
// global attributes:
:title = "CESM domain data:" ;
:Conventions = "CF-1.0" ;
:source_code = "SVN $Id: gen_domain.F90 65202 2014-11-06 21:07:45Z [email protected] $" ;
:SVN_url = " $URL: https://svn-ccsm-models.cgd.ucar.edu/tools/mapping/gen_domain/trunk/src/gen_domain.F90 $" ;
:Compiler_Optimized = "TRUE" ;
:hostname = "cori07" ;
:history = "created by bhillma, 2019-04-17 10:21:30" ;
:source = "/project/projectdirs/acme/bhillma/grids/ne512np4/mapping_files/map_oRRS15to5_to_360x720cru_tempest.190409.nc" ;
:map_domain_a = "/project/projectdirs/acme/inputdata/ocn/mpas-o/oRRS15to5/ocean.RRS.15-5km_scrip_151209.nc" ;
:map_domain_b = "/project/projectdirs/acme/inputdata/lnd/clm2/mappingdata/grids/SCRIPgrid_360x720_nomask_c120830.nc" ;
:map_grid_file_ocn = "/project/projectdirs/acme/inputdata/ocn/mpas-o/oRRS15to5/ocean.RRS.15-5km_scrip_151209.nc" ;
:map_grid_file_atm = "/project/projectdirs/acme/inputdata/lnd/clm2/mappingdata/grids/SCRIPgrid_360x720_nomask_c120830.nc" ;
}
For regional ELM application, locally varied rising atmospheric CO2 and changing meteorological forcings are of more concerned, rather than other atmospheric factors.
(1) Atmospheric CO2 Atmospheric CO2 data is of time series (mid-year) only, i.e. not spatially varied. But it's possible to produce a site or region specific data series, if data source is available. The NetCDF data header is like:
netcdf fco2_datm_1765-2050_GCREW {
dimensions:
lon = 1 ;
lat = 1 ;
nv = 4 ;
time = 336 ;
variables:
double lon(lon) ;
double lat(lat) ;
double lonc(lat, lon) ;
lonc:units = "degrees E" ;
double latc(lat, lon) ;
latc:units = "degrees N" ;
int nv(nv) ;
double lonv(lat, lon, nv) ;
double latv(lat, lon, nv) ;
double mask(lat, lon) ;
double frac(lat, lon) ;
double area(lat, lon) ;
double time(time) ;
time:units = "days since 1765-01-01" ;
time:calendar = "noleap" ;
float CO2(time, lat, lon) ;
CO2:units = "ppmv" ;
CO2:long_name = "CO2 concentration" ;
CO2:coordinate = "latc lonc" ;
int date(time) ;
date:long_name = "current date as yyyymmdd" ;
date:calendar = "noleap" ;
}
(2) Meteorological Data The meteorological variables are spatially varied and at sub-daily scale, including:
TBOT - near-surface air temperature (K). 'BOT' means the bottom level of atmospheric columns.
QBOT (RH) - near-surface specific air humidity (or relative humidity).
PRECTmms - precipitation in unit of mm per second.
FSDS - total incident shortwave solar radiation. It may further be provided as two variables: FSDSdir, FSDSdif, i.e. direct and diffused radiation.
FLDS - total incdident longwave radiation. This variable can be optional, i.e. can be estimated from others if not provided.
PSRF - near-surface air pressure.
WIND - mean wind speed. It may further include two (vertical and horizontal) or more direction.
-
The NetCDF files generally are in one file per year-month for all grids, and timing is in unit of 'days since UTC 0 of that year-month'.
-
FSDS, i.e. shortwave solar radiation is in one file, PRECTmms in another single file, and the rest in one file all together, one of reasons may be due to estimating FLDS if needed.
-
These variables are organized in a pre-defined file structures. Please querry E3SM package under directory: $E3SM_SOURCE_ROOT/components/data_comps/datm/cime_config/namelist_definition_datm.xml, for details.
-
FOR a specially organized forcing data,
cpl_bypass, each variable is in one single file for all time. All grids are divided into zones along N-S strip, in which grids are in 1d order. A single ascii file,zone_mappings.txtis available for model to look up gridded data by one-to-one referenced latitude/longitude with zone number and grid order number. For file size and I/O effeciency, the data are packed. An example (TBOT) NetCDF header is as:
netcdf GSWP3_daymet4_TBOT_1980-2014_z01 {
dimensions:
DTIME = 102200 ;
n = 1 ;
variables:
double DTIME(DTIME) ;
DTIME:long_name = "Day of Year" ;
DTIME:units = "Days since 1980-01-01 00:00" ;
float LONGXY(n) ;
float LATIXY(n) ;
short TBOT(n, DTIME) ;
TBOT:add_offset = 262.5f ;
TBOT:scale_factor = 0.005874634f ;
// global attributes:
:history = "Thu May 20 21:55:11 2021: /usr/local/nco/bin/ncks --no_abc -O -d n,6151,6151 .//./GSWP3_daymet4_TBOT_1980-2014_z02.nc .//subset/./GSWP3_daymet4_TBOT_1980-2014_z02.nc" ;
:NCO = "netCDF Operators version 4.8.0 (Homepage = http://nco.sf.net, Code = http://github.com/nco/nco)" ;
}
ELM requires at least one set of land surface properties, namely called surface data. Some of these surface properties are timely varing, namely called landuse time series data (LULC), which is used in post-1850 simulations and may be optional. They are usually under $INPUTDATA_ROOT/lnd/clm2/surfdata_map/.
(1) Constant but spatially-varied surface properties, i.e. surface data
ELM surface data includes about 100 properties, depending upon: ELM version, options (e.g. crop module, variable soil thickness, ...), etc.
Typical NetCDF header is like:
netcdf surfdata_360x720cru_simyr1850_c180216 {
dimensions:
lsmlon = 720 ;
lsmlat = 360 ;
numurbl = 3 ;
nlevurb = 5 ;
numrad = 2 ;
nchar = 256 ;
nlevsoi = 10 ;
time = UNLIMITED ; // (12 currently)
lsmpft = 17 ;
natpft = 17 ;
variables:
int mxsoil_color ;
mxsoil_color:long_name = "maximum numbers of soil colors" ;
mxsoil_color:units = "unitless" ;
int mxsoil_order ;
mxsoil_order:long_name = "maximum numbers of soil order" ;
mxsoil_order:units = "unitless" ;
int SOIL_COLOR(lsmlat, lsmlon) ;
SOIL_COLOR:long_name = "soil color" ;
SOIL_COLOR:units = "unitless" ;
int SOIL_ORDER(lsmlat, lsmlon) ;
SOIL_ORDER:long_name = "soil order" ;
SOIL_ORDER:units = "unitless" ;
double PCT_SAND(nlevsoi, lsmlat, lsmlon) ;
PCT_SAND:long_name = "percent sand" ;
PCT_SAND:units = "unitless" ;
double PCT_CLAY(nlevsoi, lsmlat, lsmlon) ;
PCT_CLAY:long_name = "percent clay" ;
PCT_CLAY:units = "unitless" ;
double ORGANIC(nlevsoi, lsmlat, lsmlon) ;
ORGANIC:long_name = "organic matter density at soil levels" ;
ORGANIC:units = "kg/m3 (assumed carbon content 0.58 gC per gOM)" ;
double FMAX(lsmlat, lsmlon) ;
FMAX:long_name = "maximum fractional saturated area" ;
FMAX:units = "unitless" ;
int natpft(natpft) ;
natpft:long_name = "indices of natural PFTs" ;
natpft:units = "index" ;
double LANDFRAC_PFT(lsmlat, lsmlon) ;
LANDFRAC_PFT:long_name = "land fraction from pft dataset" ;
LANDFRAC_PFT:units = "unitless" ;
int PFTDATA_MASK(lsmlat, lsmlon) ;
PFTDATA_MASK:long_name = "land mask from pft dataset, indicative of real/fake points" ;
PFTDATA_MASK:units = "unitless" ;
double PCT_NATVEG(lsmlat, lsmlon) ;
PCT_NATVEG:long_name = "total percent natural vegetation landunit" ;
PCT_NATVEG:units = "unitless" ;
double PCT_CROP(lsmlat, lsmlon) ;
PCT_CROP:long_name = "total percent crop landunit" ;
PCT_CROP:units = "unitless" ;
double PCT_NAT_PFT(natpft, lsmlat, lsmlon) ;
PCT_NAT_PFT:long_name = "percent plant functional type on the natural veg landunit (% of landunit)" ;
PCT_NAT_PFT:units = "unitless" ;
double MONTHLY_LAI(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_LAI:long_name = "monthly leaf area index" ;
MONTHLY_LAI:units = "unitless" ;
double MONTHLY_SAI(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_SAI:long_name = "monthly stem area index" ;
MONTHLY_SAI:units = "unitless" ;
double MONTHLY_HEIGHT_TOP(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_HEIGHT_TOP:long_name = "monthly height top" ;
MONTHLY_HEIGHT_TOP:units = "meters" ;
double MONTHLY_HEIGHT_BOT(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_HEIGHT_BOT:long_name = "monthly height bottom" ;
MONTHLY_HEIGHT_BOT:units = "meters" ;
int time(time) ;
time:long_name = "Calendar month" ;
time:units = "month" ;
double AREA(lsmlat, lsmlon) ;
AREA:long_name = "area" ;
AREA:units = "km^2" ;
double LONGXY(lsmlat, lsmlon) ;
LONGXY:long_name = "longitude" ;
LONGXY:units = "degrees east" ;
double LATIXY(lsmlat, lsmlon) ;
LATIXY:long_name = "latitude" ;
LATIXY:units = "degrees north" ;
double EF1_BTR(lsmlat, lsmlon) ;
EF1_BTR:long_name = "EF btr (isoprene)" ;
EF1_BTR:units = "unitless" ;
double EF1_FET(lsmlat, lsmlon) ;
EF1_FET:long_name = "EF fet (isoprene)" ;
EF1_FET:units = "unitless" ;
double EF1_FDT(lsmlat, lsmlon) ;
EF1_FDT:long_name = "EF fdt (isoprene)" ;
EF1_FDT:units = "unitless" ;
double EF1_SHR(lsmlat, lsmlon) ;
EF1_SHR:long_name = "EF shr (isoprene)" ;
EF1_SHR:units = "unitless" ;
double EF1_GRS(lsmlat, lsmlon) ;
EF1_GRS:long_name = "EF grs (isoprene)" ;
EF1_GRS:units = "unitless" ;
double EF1_CRP(lsmlat, lsmlon) ;
EF1_CRP:long_name = "EF crp (isoprene)" ;
EF1_CRP:units = "unitless" ;
double CANYON_HWR(numurbl, lsmlat, lsmlon) ;
CANYON_HWR:long_name = "canyon height to width ratio" ;
CANYON_HWR:units = "unitless" ;
double EM_IMPROAD(numurbl, lsmlat, lsmlon) ;
EM_IMPROAD:long_name = "emissivity of impervious road" ;
EM_IMPROAD:units = "unitless" ;
double EM_PERROAD(numurbl, lsmlat, lsmlon) ;
EM_PERROAD:long_name = "emissivity of pervious road" ;
EM_PERROAD:units = "unitless" ;
double EM_ROOF(numurbl, lsmlat, lsmlon) ;
EM_ROOF:long_name = "emissivity of roof" ;
EM_ROOF:units = "unitless" ;
double EM_WALL(numurbl, lsmlat, lsmlon) ;
EM_WALL:long_name = "emissivity of wall" ;
EM_WALL:units = "unitless" ;
double HT_ROOF(numurbl, lsmlat, lsmlon) ;
HT_ROOF:long_name = "height of roof" ;
HT_ROOF:units = "meters" ;
double THICK_ROOF(numurbl, lsmlat, lsmlon) ;
THICK_ROOF:long_name = "thickness of roof" ;
THICK_ROOF:units = "meters" ;
double THICK_WALL(numurbl, lsmlat, lsmlon) ;
THICK_WALL:long_name = "thickness of wall" ;
THICK_WALL:units = "meters" ;
double T_BUILDING_MAX(numurbl, lsmlat, lsmlon) ;
T_BUILDING_MAX:long_name = "maximum interior building temperature" ;
T_BUILDING_MAX:units = "K" ;
double T_BUILDING_MIN(numurbl, lsmlat, lsmlon) ;
T_BUILDING_MIN:long_name = "minimum interior building temperature" ;
T_BUILDING_MIN:units = "K" ;
double WIND_HGT_CANYON(numurbl, lsmlat, lsmlon) ;
WIND_HGT_CANYON:long_name = "height of wind in canyon" ;
WIND_HGT_CANYON:units = "meters" ;
double WTLUNIT_ROOF(numurbl, lsmlat, lsmlon) ;
WTLUNIT_ROOF:long_name = "fraction of roof" ;
WTLUNIT_ROOF:units = "unitless" ;
double WTROAD_PERV(numurbl, lsmlat, lsmlon) ;
WTROAD_PERV:long_name = "fraction of pervious road" ;
WTROAD_PERV:units = "unitless" ;
double ALB_IMPROAD_DIR(numrad, numurbl, lsmlat, lsmlon) ;
ALB_IMPROAD_DIR:long_name = "direct albedo of impervious road" ;
ALB_IMPROAD_DIR:units = "unitless" ;
double ALB_IMPROAD_DIF(numrad, numurbl, lsmlat, lsmlon) ;
ALB_IMPROAD_DIF:long_name = "diffuse albedo of impervious road" ;
ALB_IMPROAD_DIF:units = "unitless" ;
double ALB_PERROAD_DIR(numrad, numurbl, lsmlat, lsmlon) ;
ALB_PERROAD_DIR:long_name = "direct albedo of pervious road" ;
ALB_PERROAD_DIR:units = "unitless" ;
double ALB_PERROAD_DIF(numrad, numurbl, lsmlat, lsmlon) ;
ALB_PERROAD_DIF:long_name = "diffuse albedo of pervious road" ;
ALB_PERROAD_DIF:units = "unitless" ;
double ALB_ROOF_DIR(numrad, numurbl, lsmlat, lsmlon) ;
ALB_ROOF_DIR:long_name = "direct albedo of roof" ;
ALB_ROOF_DIR:units = "unitless" ;
double ALB_ROOF_DIF(numrad, numurbl, lsmlat, lsmlon) ;
ALB_ROOF_DIF:long_name = "diffuse albedo of roof" ;
ALB_ROOF_DIF:units = "unitless" ;
double ALB_WALL_DIR(numrad, numurbl, lsmlat, lsmlon) ;
ALB_WALL_DIR:long_name = "direct albedo of wall" ;
ALB_WALL_DIR:units = "unitless" ;
double ALB_WALL_DIF(numrad, numurbl, lsmlat, lsmlon) ;
ALB_WALL_DIF:long_name = "diffuse albedo of wall" ;
ALB_WALL_DIF:units = "unitless" ;
double TK_ROOF(nlevurb, numurbl, lsmlat, lsmlon) ;
TK_ROOF:long_name = "thermal conductivity of roof" ;
TK_ROOF:units = "W/m*K" ;
double TK_WALL(nlevurb, numurbl, lsmlat, lsmlon) ;
TK_WALL:long_name = "thermal conductivity of wall" ;
TK_WALL:units = "W/m*K" ;
double TK_IMPROAD(nlevurb, numurbl, lsmlat, lsmlon) ;
TK_IMPROAD:long_name = "thermal conductivity of impervious road" ;
TK_IMPROAD:units = "W/m*K" ;
double CV_ROOF(nlevurb, numurbl, lsmlat, lsmlon) ;
CV_ROOF:long_name = "volumetric heat capacity of roof" ;
CV_ROOF:units = "J/m^3*K" ;
double CV_WALL(nlevurb, numurbl, lsmlat, lsmlon) ;
CV_WALL:long_name = "volumetric heat capacity of wall" ;
CV_WALL:units = "J/m^3*K" ;
double CV_IMPROAD(nlevurb, numurbl, lsmlat, lsmlon) ;
CV_IMPROAD:long_name = "volumetric heat capacity of impervious road" ;
CV_IMPROAD:units = "J/m^3*K" ;
int NLEV_IMPROAD(numurbl, lsmlat, lsmlon) ;
NLEV_IMPROAD:long_name = "number of impervious road layers" ;
NLEV_IMPROAD:units = "unitless" ;
double peatf(lsmlat, lsmlon) ;
peatf:long_name = "peatland fraction" ;
peatf:units = "unitless" ;
int abm(lsmlat, lsmlon) ;
abm:long_name = "agricultural fire peak month" ;
abm:units = "unitless" ;
double gdp(lsmlat, lsmlon) ;
gdp:long_name = "gdp" ;
gdp:units = "unitless" ;
double SLOPE(lsmlat, lsmlon) ;
SLOPE:long_name = "mean topographic slope" ;
SLOPE:units = "degrees" ;
double STD_ELEV(lsmlat, lsmlon) ;
STD_ELEV:long_name = "standard deviation of elevation" ;
STD_ELEV:units = "m" ;
double binfl(lsmlat, lsmlon) ;
binfl:long_name = "VIC b parameter for the Variable Infiltration Capacity Curve" ;
binfl:units = "unitless" ;
double Ws(lsmlat, lsmlon) ;
Ws:long_name = "VIC Ws parameter for the ARNO Curve" ;
Ws:units = "unitless" ;
double Dsmax(lsmlat, lsmlon) ;
Dsmax:long_name = "VIC Dsmax parameter for the ARNO curve" ;
Dsmax:units = "mm/day" ;
double Ds(lsmlat, lsmlon) ;
Ds:long_name = "VIC Ds parameter for the ARNO curve" ;
Ds:units = "unitless" ;
double LAKEDEPTH(lsmlat, lsmlon) ;
LAKEDEPTH:long_name = "lake depth" ;
LAKEDEPTH:units = "m" ;
double F0(lsmlat, lsmlon) ;
F0:long_name = "maximum gridcell fractional inundated area" ;
F0:units = "unitless" ;
double P3(lsmlat, lsmlon) ;
P3:long_name = "coefficient for qflx_surf_lag for finundated" ;
P3:units = "s/mm" ;
double ZWT0(lsmlat, lsmlon) ;
ZWT0:long_name = "decay factor for finundated" ;
ZWT0:units = "m" ;
double PCT_WETLAND(lsmlat, lsmlon) ;
PCT_WETLAND:long_name = "percent wetland" ;
PCT_WETLAND:units = "unitless" ;
double PCT_LAKE(lsmlat, lsmlon) ;
PCT_LAKE:long_name = "percent lake" ;
PCT_LAKE:units = "unitless" ;
double PCT_GLACIER(lsmlat, lsmlon) ;
PCT_GLACIER:long_name = "percent glacier" ;
PCT_GLACIER:units = "unitless" ;
double TOPO(lsmlat, lsmlon) ;
TOPO:long_name = "mean elevation on land" ;
TOPO:units = "m" ;
double PCT_URBAN(numurbl, lsmlat, lsmlon) ;
PCT_URBAN:long_name = "percent urban for each density type" ;
PCT_URBAN:units = "unitless" ;
int URBAN_REGION_ID(lsmlat, lsmlon) ;
URBAN_REGION_ID:long_name = "urban region ID" ;
URBAN_REGION_ID:units = "unitless" ;
double APATITE_P(lsmlat, lsmlon) ;
APATITE_P:long_name = "Apatite Phosphorus" ;
APATITE_P:units = "gP/m2" ;
double LABILE_P(lsmlat, lsmlon) ;
LABILE_P:long_name = "Labile Inorganic Phosphorus" ;
LABILE_P:units = "gP/m2" ;
double OCCLUDED_P(lsmlat, lsmlon) ;
OCCLUDED_P:long_name = "Occluded Phosphorus" ;
OCCLUDED_P:units = "gP/m2" ;
double SECONDARY_P(lsmlat, lsmlon) ;
SECONDARY_P:long_name = "Secondary Mineral Phosphorus" ;
SECONDARY_P:units = "gP/m2" ;
// global attributes:
:Conventions = "NCAR-CSM" ;
:History_Log = "created on: 02-16-18 09:43:30" ;
:Logname = "shix" ;
:Host = "edison10" ;
:Source = "Community Land Model: CLM4" ;
:Version = "$HeadURL: https://svn-ccsm-models.cgd.ucar.edu/clm2/trunk_tags/clm4_5_1_r085/models/lnd/clm/tools/clm4_5/mksurfdata_map/src/mkfileMod.F90 $" ;
:Revision_Id = "$Id: mkfileMod.F90 47951 2013-06-12 11:13:58Z sacks $" ;
:Compiler_Optimized = "TRUE" ;
:no_inlandwet = "TRUE" ;
:nglcec = 0 ;
:Input_grid_dataset = "map_0.5x0.5_MODIS_to_360x720_nomask_aave_da_c120830.nc" ;
:Input_gridtype = "global" ;
:VOC_EF_raw_data_file_name = "mksrf_vocef_0.5x0.5_simyr2000.c110531.nc" ;
:Inland_lake_raw_data_file_name = "mksrf_LakePnDepth_3x3min_simyr2004_c111116.nc" ;
:Inland_wetland_raw_data_file_name = "mksrf_lanwat.050425.nc" ;
:Glacier_raw_data_file_name = "mksrf_glacier_3x3min_simyr2000.c120926.nc" ;
:Urban_Topography_raw_data_file_name = "mksrf_topo.10min.c080912.nc" ;
:Land_Topography_raw_data_file_name = "topodata_10min_USGS_071205.nc" ;
:Urban_raw_data_file_name = "mksrf_urban_0.05x0.05_simyr2000.c120621.nc" ;
:Lai_raw_data_file_name = "mksrf_lai_global_c090506.nc" ;
:agfirepkmon_raw_data_file_name = "mksrf_abm_0.5x0.5_AVHRR_simyr2000.c130201.nc" ;
:gdp_raw_data_file_name = "mksrf_gdp_0.5x0.5_AVHRR_simyr2000.c130228.nc" ;
:peatland_raw_data_file_name = "mksrf_peatf_0.5x0.5_AVHRR_simyr2000.c130228.nc" ;
:topography_stats_raw_data_file_name = "mksrf_topostats_1km-merge-10min_HYDRO1K-merge-nomask_simyr2000.c130402.nc" ;
:vic_raw_data_file_name = "mksrf_vic_0.9x1.25_GRDC_simyr2000.c130307.nc" ;
:ch4_params_raw_data_file_name = "mksrf_ch4inversion_360x720_cruncep_simyr2000.c130322.nc" ;
:map_pft_file_name = "map_0.5x0.5_MODIS_to_360x720_nomask_aave_da_c120830.nc" ;
:map_lakwat_file = "map_3x3min_MODIS_to_360x720_nomask_aave_da_c120830.nc" ;
:map_wetlnd_file = "map_0.5x0.5_AVHRR_to_360x720_nomask_aave_da_c120830.nc" ;
:map_glacier_file = "map_3x3min_GLOBE-Gardner_to_360x720_nomask_aave_da_c121128.nc" ;
:map_soil_texture_file = "map_5x5min_IGBP-GSDP_to_360x720_nomask_aave_da_c120830.nc" ;
:map_soil_color_file = "map_0.5x0.5_MODIS_to_360x720_nomask_aave_da_c120830.nc" ;
:map_soil_order_file = "map_0.5x0.5_MODIS_to_360x720_nomask_aave_da_c120830.nc" ;
:map_soil_organic_file = "map_5x5min_ISRIC-WISE_to_360x720_nomask_aave_da_c120830.nc" ;
:map_urban_file = "map_3x3min_LandScan2004_to_360x720_nomask_aave_da_c121017.nc" ;
:map_fmax_file = "map_3x3min_USGS_to_360x720_nomask_aave_da_c121128.nc" ;
:map_VOC_EF_file = "map_0.5x0.5_AVHRR_to_360x720_nomask_aave_da_c120830.nc" ;
:map_harvest_file = "map_0.5x0.5_MODIS_to_360x720_nomask_aave_da_c120830.nc" ;
:map_lai_sai_file = "map_0.5x0.5_MODIS_to_360x720_nomask_aave_da_c120830.nc" ;
:map_urban_topography_file = "map_10x10min_nomask_to_360x720_nomask_aave_da_c120830.nc" ;
:map_land_topography_file = "map_10x10min_nomask_to_360x720_nomask_aave_da_c120830.nc" ;
:map_agfirepkmon_file = "map_0.5x0.5_AVHRR_to_360x720_nomask_aave_da_c120830.nc" ;
:map_gdp_file = "map_0.5x0.5_AVHRR_to_360x720_nomask_aave_da_c120830.nc" ;
:map_peatland_file = "map_0.5x0.5_AVHRR_to_360x720_nomask_aave_da_c120830.nc" ;
:map_topography_stats_file = "map_1km-merge-10min_HYDRO1K-merge-nomask_to_360x720_nomask_aave_da_c130403.nc" ;
:map_vic_file = "map_0.9x1.25_GRDC_to_360x720_nomask_aave_da_c130309.nc" ;
:map_ch4_params_file = "map_360x720_cruncep_to_360x720_nomask_aave_da_c130326.nc" ;
:Soil_texture_raw_data_file_name = "mksrf_soitex.10level.c010119.nc" ;
:Soil_color_raw_data_file_name = "mksrf_soilcol_global_c090324.nc" ;
:Soil_order_raw_data_file_name = "mksrf_soilord_global_c150313.nc" ;
:Fmax_raw_data_file_name = "mksrf_fmax_3x3min_USGS_c120911.nc" ;
:Organic_matter_raw_data_file_name = "mksrf_organic_10level_5x5min_ISRIC-WISE-NCSCD_nlev7_c120830.nc" ;
:Vegetation_type_raw_data_filename = "AA_mksrf_landuse_rc_1850_06062017.nc" ;
}
NOTE that default surface data are in structured format, i.e. in grid mesh of (,lsmlat, lsmlon), which can be in unstructured of (, gridcell). The unstructured format is of more useful for multiple grids or non-regular grid system.
It's not very convenient to list all POSSIBLE surface properties, due to model and data versions, ELM configuration options, etc. BUT for regional simulations eqivalent to ATS watershed scale, the following properties may be impactful to applications.
TOPO - grid mean elevation
SLOPE - grid mean slope
STD_ELEV - grid standard deviation of elevation
PCT_NATVEG - percentage of naturally vegetated land unit
PCT_CROP - percentage of cropped land unit
PCT_URBAN - percentage of 3-class-density urban land unit
PCT_LAKE - percentage of (deep-water) lake land unit
PCT_WETLAND - percentage of (shallow-water) wetland land unit
PCT_GLACIER - percentage of glacier land unit
PCT_NAT_PFT - percentage of PFTs, summed to 100%, included in PCT_NATVEG
aveDTB - grid-averaged soil depth to bedrock (optional)
PCT_SAND - 10-layered soil sand percentage
PCT_CLAY - 10-layered soil clay percentage
ORGANIC - 10-layered soil organic matter density
F0 - maximum grid fraction of inundated area
FMAX - maximum grid fraction of saturated area
-
By default, there are 17 PFTs in naturally vegetated land unit (PCT_NATVEG), and 2 last ones are called 'generic crop', while the 1st pft is called 'bared' (i.e. not vegetated at all).
-
By default, there are 7 crop pfts, named as CFTs. They are appended following 17 naturally-vegetated PFTs, and PAIRed of rainfed and irrigated CFTs. When this case is on, ELM crop module must be turned on, and surface properties must include:
double PCT_CFT(cft, lsmlat, lsmlon) ;
PCT_CFT:long_name = "percent crop functional type on the crop landunit (% of landunit)" ;
PCT_CFT:units = "unitless" ;
int cft(cft) ;
cft:long_name = "indices of CFTs" ;
cft:units = "index" ;
- A large number of surface properties are for URBAN land unit. There are 3 classes of urban densities, each includes
Within URBAN land unit, surface energy processes are the main concern. BUT, for hydrology, PERVIOUS ROAD patch is included.
double WTROAD_PERV(numurbl, lsmlat, lsmlon) ;
WTROAD_PERV:long_name = "fraction of pervious road" ;
WTROAD_PERV:units = "unitless" ;
(2) LULC surface properties
LULC surface data currrent only have a few yearly changing properties, such as:
double PCT_NAT_PFT(time, natpft, lsmlat, lsmlon) ;
PCT_NAT_PFT:long_name = "percent plant functional type on the natural veg landunit (% of landunit)" ;
PCT_NAT_PFT:units = "unitless" ;
double HARVEST_VH1(time, lsmlat, lsmlon) ;
HARVEST_VH1:long_name = "harvest from primary forest" ;
HARVEST_VH1:units = "unitless" ;
double HARVEST_VH2(time, lsmlat, lsmlon) ;
HARVEST_VH2:long_name = "harvest from primary non-forest" ;
HARVEST_VH2:units = "unitless" ;
double HARVEST_SH1(time, lsmlat, lsmlon) ;
HARVEST_SH1:long_name = "harvest from secondary mature-forest" ;
HARVEST_SH1:units = "unitless" ;
double HARVEST_SH2(time, lsmlat, lsmlon) ;
HARVEST_SH2:long_name = "harvest from secondary young-forest" ;
HARVEST_SH2:units = "unitless" ;
double HARVEST_SH3(time, lsmlat, lsmlon) ;
HARVEST_SH3:long_name = "harvest from secondary non-forest" ;
HARVEST_SH3:units = "unitless" ;
double GRAZING(time, lsmlat, lsmlon) ;
GRAZING:long_name = "grazing of herbacous pfts" ;
GRAZING:units = "unitless" ;
As an example of ELM model version or module options, crop included LULC also optionally have:
float FERTNITRO_CFT(time, cft, lsmlat, lsmlon) ;
FERTNITRO_CFT:long_name = "nitrogen fertilizer for each crop" ;
FERTNITRO_CFT:units = "gN/m2/yr" ;
Usually user won't change those files.
(1)Satellite Mode (SP)
*A few canopy properties are optionally required, when SP mode is on, i.e. so-called 'Satellite Mode'. These properties are year-round monthly data. Other than in surface data, LAI for each PFTs can be input as stream dataset under: lnd/clm2/lai_stream
NOTE that when SP is on, ELM bgc will be totally off, that is to say, only energy and water processes will be implemented, but with photosynthesis still on.
double MONTHLY_LAI(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_LAI:long_name = "monthly leaf area index" ;
MONTHLY_LAI:units = "unitless" ;
double MONTHLY_SAI(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_SAI:long_name = "monthly stem area index" ;
MONTHLY_SAI:units = "unitless" ;
double MONTHLY_HEIGHT_TOP(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_HEIGHT_TOP:long_name = "monthly height top" ;
MONTHLY_HEIGHT_TOP:units = "meters" ;
double MONTHLY_HEIGHT_BOT(time, lsmpft, lsmlat, lsmlon) ;
MONTHLY_HEIGHT_BOT:long_name = "monthly height bottom" ;
MONTHLY_HEIGHT_BOT:units = "meters" ;
(2)fire module By default, ELM fire module is on. It can be turned off.
When fire module is on, the following data sets are required:
- population density
$INPUTDATA_ROOT/lnd/clm2/firedata/elmforc.ssp5_hdm_0.5x0.5_simyr1850-2100_c190109.nc
- lightning frequency
$INPUTDATA_ROOT/atm/datm7/NASA_LIS/clmforc.Li_2012_climo1995-2011.T62.lnfm_Total_c140423.nc
(3)River Routing Module on (MOSART)
Updated @ 2025-07-02