ELM on cades‐baseline: environments, building, and running - ORNL-Ecosystem-Projects/Documentations GitHub Wiki

ELM on ORNL CADES-baseline: environments, building, and running

UPDATED: 2025-07-02 for the most recent E3SM master with modified machine settings

NOTE: this is for CCSI users, with an account associated with Project CLI185 only.

System Docs: https://docs.cades.olcf.ornl.gov/baseline_user_guide/baseline_user_guide.html

I. Environments

I-1. project-wide disk spaces

ONE project home space, with VERY LIMITED disk space, and NOT regularly purged. SO PLEASE DON'T PUT anything large there.

     /ccsopen/proj/cli185

This is for group accessible tools, e.g.

(1) PETSc, ALQUIMIA, etc. for PFLOTRAN users;

    /ccsopen/proj/cli185/petsc-3.x-noopt
    /ccsopen/proj/cli185/alquimia-pflotran/v2021/alquimia
    /ccsopen/proj/cli185/alquimia-pflotran/v2021/pflotran

(2) ATS tools and executables (excluding sources and builds) modulized.

/ccsopen/proj/cli185/ats-dev/

TWO project user accessible spaces, BUT not writable by other than creator. THIS implies that creator must do house-cleaning from time to time.

     /gpfs/wolf2/cades/cli185/proj-shared
     /gpfs/wolf2/cades/cli185/scratch/$USER

ONE all user accessible spaces, BUT not writable by other than creator.

    /gpfs/wolf2/cades/cli185/world-shared

LOGIN node: baseline.ccs.ornl.gov

i.e. access by baseline.ccs.ornl.gov

Note: ...../proj-shared, ...../world-shared, and ......./scratch are for what they are supposed to.

I-2. ENV suggestions

(1) It's suggested to edit your own .bashrc, when first time login.

(2) Suggested .bashrc for ELM currently as following,

# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific environment
if ! [ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ](/ORNL-Ecosystem-Projects/Documentations/wiki/-"$PATH"-=~-"$HOME/.local/bin:$HOME/bin:"-)
then
    PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

#############  NOTE: the following are built using mpi wrappers for E3SM land model  #########

module purge

export MYPROJ_HOME=/ccsopen/proj/cli185
export MYPROJ_SHARED=/gpfs/wolf2/cades/cli185/proj-shared
export MYWORLD_SHARED=/gpfs/wolf2/cades/cli185/world-shared
export MYPROJ_SCRATCH=/gpfs/wolf2/cades/cli185/scratch

echo "MYPROJ_HOME: $MYPROJ_HOME"
echo "MYPROJ_SHARED: $MYPROJ_SHARED"
echo "MYWORLD_SHARED: $MYWORLD_SHARED"
echo "MYPROJ_SCRATCH: $MYPROJ_SCRATCH"

# the following 2 modules are gcc-8.5.0 based
module load python/3.11-anaconda3
module load cmake/3.26.3

# above module load  will actually load gcc/12.2.0 and openmpi/4.0.4
module load gcc/12.2.0
module load openmpi/4.0.4
export OPENMPI_DIR=${OLCF_OPENMPI_ROOT}

module load openblas/0.3.23
export BLASLAPACK_LIBDIR=${OLCF_OPENBLAS_ROOT}/lib

# (optional) NCO tool package
module load nco

# libs for ELM and PFLOTRAN
module load hdf5/1.14.3
module load netcdf-c/4.9.2-h5f
module load netcdf-fortran/4.6.1-h5f
module load netcdf-cxx/4.2
module load parallel-netcdf/1.12.3
export HDF5_PATH=${OLCF_HDF5_ROOT}
export NETCDF_C_PATH=${OLCF_NETCDF_C_ROOT}
export NETCDF_FORTRAN_PATH=${OLCF_NETCDF_FORTRAN_ROOT}
export NETCDF_CXX_PATH=${OLCF_NETCDF_CXX_ROOT}
export PNETCDF_PATH=${OLCF_PARALLEL_NETCDF_ROOT}

export PETSC_DIR=$MYPROJ_HOME/petsc-3.x-noopt
export ALQUIMIA_PATH=$MYPROJ_HOME/alquimia-pflotran/v2021/alquimia

# D.R. compiled perl5 with Lib2XML, which required by ELM namelist build
export PATH=/ccsopen/home/zdr/opt/perl/bin:$PATH



I-3. E3SM codes & Input data

for CADES-baselibe machine settings

There is specific branch for our system, https://github.com/E3SM-Project/E3SM.git, branch fmyuan/ornl-cades-baseline-machine-settings trunk E3SM for cades-baseline

for example, if you'd like model to be in your proj-shared directory like:

cd /gpfs/wolf2/cades/cli185/proj-shared/$USER/models/
git clone https://github.com/E3SM-Project/E3SM.git

cd E3SM
git cherry-pick c17b050504ac88ea7ef9a333cfff347a108ee4d1
(this will 'cades-baseline' machine settings)

E3SM external submodule initiate and update

There are a bunch of external models as E3SM's submodules, which must be updated after git clone source codes above.

git submodule init
git submodule update -f --recursive

VERY likely, the updating will have troubles when you first time to do so.

The suggested methods to solve this issue is to set up a ssh authorization key in your github.com account, and then copy its public key to your cades-baseline home. It's little bit inconvenient. Alternatively, simply edit the file under 'E3SM/.git/config', replacing all '[email protected]:' to 'https://github.com/', or using the following perl command:

cd .git
perl -pi -e 's/com:/com\//g' ./.git/config
perl -pi -e 's/git@/https:\/\//g' ./.gitconfig

E3SM input data on CADES-baseline

/gpfs/wolf2/cades/cli185/world-shared/e3sm/inputdata/

We try to keep a minimal but full copy of E3SM inputdata in this folder.

Additionally, for site-level or project-specific purpose, the following site-specific input data may be used.
/gpfs/wolf2/cades/cli185/proj-shared/pt-e3sm-inputdata

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

II. CASE 1: single-point user-defined datm-clm (3 Examples).

-----------------------------------------------------------------

NOTE: For ELM CUSTOMIZED configuration with options of CPL_BYPASS & User-defined PFT

NOTE: For this example and other to work, it is needed to clone pt-e3sm-inputdata repository