Skip to content

ELM Example Case IV. One Single Step to Setup Build Run ELM, using OLMT

Fengming Yuan edited this page Jul 20, 2021 · 3 revisions

ELM Examples of Setting-up, Configuring, Building, and Running IV. OLMT usage

NOTE:

  • In these examples, there are 4 user-defined ENVs variables of directories: $E3SM_INPUTDATA, $E3SM_ROOT, $PROJECT_E3SM, for inputdata, e3sm model source codes, and root directory for cases and runs, respectively. USERS must have created these, and cloned both data and e3sm codes.

  • $E3SM_INPUTDATA is cloned repository of a few site-level full datasets to run offline ELM, from pt-e3sm-inputdata

  • Upon user's machine, $MACH_NAME is needed for E3SM. In these examples, 'mymac' for MacOS/linux, 'wsl' for Windows Subsystem for Linux, OR, 'cades' for a cluster in ORNL, may be directly used.

HERE we demonstrate OLMT, developed by Dr. Daniel Ricciuto at ORNL, usage on Setting-up/Building/Running point-mode ELM. The example is for NGEE-Artic Site - Kougarok Road Mileage 64 (K64), Seward Penisula, AK.

++++++++++++++++++++++++++++++++++++++++++++

OLMT cloning:

git clone https://github.com/dmricciuto/OLMT.git

For this example to work, please check out a branch:

git checkout Arctic-userpft

NOTE: OLMT essentially are a package of python scripts. Users don't need too much knowledge of python, but it would be very helpful if have. A simple command to get help is, e.g.:

python site_fullrun.py --help

++++++++++++++++++++++++++++++++++++++++++++

CASE IV: single-point user-defined satm-elm (CPL_BYPASS metdata_type of 'GSWP3), using OLMT.

Here it's an example bash script to run OLMT, similar to OLMT NGEE example, except for forcing data:

python ./site_fullrun.py \
      --site AK-K64G --sitegroup NGEEArctic --caseidprefix TestOMLT \
      --nyears_ad_spinup 200 --nyears_final_spinup 600 --tstep 1 \
      --machine $MACH_NAME --compiler gnu --mpilib mpich \
      --cpl_bypass --gswp3 \
      --model_root $E3SM_ROOT \
      --caseroot $PROJECT_E3SM/cases \
      --ccsm_input $E3SM_INPUTDATA \
      --runroot $PROJECT_E3SM/scratch \
      --spinup_vars \
      --nopointdata \
      --metdir $E3SM_INPUTDATA/atm/datm7/atm_forcing.datm7.GSWP3.0.5d.v2.c180716_kougarok-Grid/cpl_bypass_full \
      --domainfile $E3SM_INPUTDATA/share/domains/domain.clm/domain.lnd.1x1pt_kougarok-GRID_navy.nc \
      --surffile $E3SM_INPUTDATA/lnd/clm2/surfdata_map/surfdata_1x1pt_kougarok-GRID_simyr1850_c360x720_171002.nc \
      --landusefile $E3SM_INPUTDATA/lnd/clm2/surfdata_map/landuse.timeseries_1x1pt_kougarok-GRID_simyr1850-2015_c180423.nc

For ELM after commit CNP Budgetting, better to add the following to turn it off when using OLMT:

      --not_dobudgets \

** NOTE**: E3SM model is from: https://github.com/E3SM-Project/E3SM.git, one of 3 branches:

Additionally,

  • with -DCPL_BYPASS in makefile, need to git cherry-pick 60ee663282 to fix a bug. Otherwise, scripts will crash after ad_spinup (which actually successfully run).

  • with do_budgets = .true. (i.e. CNP Budgetting option is on), need to git cherry-pick d18a39ad66 to fix a bug.

HERE:

python ./site_fullrun.py \ # calls OLMT python script site_fullrun.py ( \ is line continue, FYI)

--site AK-K64G --sitegroup NGEEArctic --caseidprefix TestOMLT \ # setup a case for site 'AK-K64G' defined in sitegroup 'NGEEArctic' (checking how it defined in $E3SM_INPUTDATA/lnd/clm2/PTCLM/NGEEArctic_*.txt)

--nyears_ad_spinup 200 --nyears_final_spinup 600 --tstep 1 \ # to run ELM at accelerated_spinup stage for 200 yrs, then spinup for 600 years, and then transient (from 1985~) for 165 years (upon met. data), with timestep of 1 hour.

--machine $MACH_NAME --compiler gnu --mpilib mpich \ # machine settings: name, compiler name, mpi wrapper name.

--cpl_bypass --gswp3 \ # turning on option 'CPL_BYPASS' with met. forcing of GSWP3 (v2)

--model_root $E3SM_ROOT \ # where to find E3SM model

--caseroot $PROJECT_E3SM/cases \ # where to put case directories - will have 3 directories

--ccsm_input $E3SM_INPUTDATA \ # where to read input data, unless specified for user-defined ones.

--runroot $PROJECT_E3SM/scratch \ # where to put model build (and e3sm.exe) - will have bld/ and run/ under 3 directories

--spinup_vars \ # NOT output in default settings, but much less frequent and short lists of variables

--nopointdata \ # don't extract data from global datasets on-fly, rather using already prepared as following 4.

--metdir $E3SM_INPUTDATA/atm/datm7/atm_forcing.datm7.GSWP3.0.5d.v2.c180716_kougarok-Grid/cpl_bypass_full \ # CPL_BYPASS data directory

--domainfile $E3SM_INPUTDATA/share/domains/domain.clm/domain.lnd.1x1pt_kougarok-GRID_navy.nc \ # domain file (or mesh)

--surffile $E3SM_INPUTDATA/lnd/clm2/surfdata_map/surfdata_1x1pt_kougarok-GRID_simyr1850_c360x720_171002.nc \ # surface data

--landusefile $E3SM_INPUTDATA/lnd/clm2/surfdata_map/landuse.timeseries_1x1pt_kougarok-GRID_simyr1850-2015_c180423.nc # LULC file for transient period

*It uses point-extracted met. forcing from global half-degree datasets.

Clone this wiki locally