Setup a CESM 1.0.x benchmark run on a generic system
This is a
cookbook to setup a CESM 1.0 benchmark run on a generic (Linux) system. This page is
still work in progress, but will give already an idea what has to be done.
See also porting CESM in the CESM user's guide:
http://www.cesm.ucar.edu/models/cesm1.0/cesm/cesm_doc/c2161.html
System requirements
- Compilers known to work: intel 10.1, pgi 7.2, 8.0, 9.0, (pathscale 3.2)
- MPI implementations known to work: openmpi 1.4, 1.5, mvapich2 1.4, 1.5
Compile NETCDF (Requirement)
- Install NETCDF
make install
Download CESM source code
Adapt configuration files
- Meaning of filenames
Filename | Purpose |
env_machopts.* | Set environment: Can be used to set paths to compiler, MPI library, NETCDF library |
Macros.* | Set compiler name and paths to MPI library, NETCDF library. Set compiler options |
mkbatch.* | Setting for queuing system |
where * corresponds to a machine.
- As starting point take configuration files of a machine that is close to your environment. For example have a look at brutus_io, brutus_im, brutus_po or brutus_pm where i=intel, p=pgi, o=openmpi, m=mvapich2
- Add to
config_machines.xml
a configuration tag for your machine (your_machine) - only the important lines are listed below
<machine MACH="your_machine"
DESC="Test System"
EXEROOT="/scratch/$CCSMUSER/$CASE"
OBJROOT="$EXEROOT"
INCROOT="$EXEROOT/lib/include"
DIN_LOC_ROOT_CSMDATA="/scratch/cesm1/inputdata"
DIN_LOC_ROOT_CLMQIAN="/scratch/cesm1/inputdata/atm/datm7/atm_forcing.datm7.Qian.T62.c080727"
BATCHQUERY="qstat -f"
BATCHSUBMIT="qsub"
GMAKE_J="4"
MAX_TASKS_PER_NODE="4"
MPISERIAL_SUPPORT="FALSE" />
please set the following variables:
EXEROOT= # working directory, final location of binary and output files
DIN_LOC_ROOT_CSMDATA= # input data, date will be downloaded on the fly
DIN_LOC_ROOT_CLMQIAN= # input data, data will be downloaded on the fly
MAX_TASKS_PER_NODE= # define cores per node
Compile and setup simulation
- Change to
scripts
directory
cd cesm1_0_2
cd scripts
- Change into case directory
cd $CASE
- In general, CESM is hardwired to generate monthly average data. In principle this can be turned of but needs a lot of code changes. Therefore it's not considered here. The following two cases are suggested instead:
- Configure case
./configure -case
- Build/Compile the model
./$CASE.$MACH.build
Run the model
- Run the model, for example with LSF queuing system
bsub < $CASE.$MACH.run
- To start without a queuing system just execute:
./$CASE.$MACH.run
Change the layout
- To change the layout you don't have to recreate the case (but you can if you wish).
- Change into case directory and re-define layout
cd $CASE
NTASKS=64
./xmlchange -file env_mach_pes.xml -id NTASKS_ATM -val $NTASKS
./xmlchange -file env_mach_pes.xml -id NTASKS_LND -val $NTASKS
./xmlchange -file env_mach_pes.xml -id NTASKS_ICE -val $NTASKS
./xmlchange -file env_mach_pes.xml -id NTASKS_OCN -val $NTASKS
./xmlchange -file env_mach_pes.xml -id NTASKS_CPL -val $NTASKS
./xmlchange -file env_mach_pes.xml -id NTASKS_GLC -val $NTASKS
./xmlchange -file env_mach_pes.xml -id TOTALPES -val $NTASKS
- Clean the case and re-configure it
./configure -cleanmach
./configure -case
- Build/Compile the model
./$CASE.$MACH.build
Change the resolution
- Recommended resolutions are T31_gx3v7 (~3°), 1.9x2.5_gx1v6 (2°), 0.9x1.25_gx1v6 (1°)
- To change the resolution create a new case !
Produce a summary
- Create performance matrix for CASE 1 and CASE 2. Fill in Model Throughput in simulated_years/day
- CASE 1: Run a short simulation with producing almost no output (I/O)
resolution / layout (NTASKS) | 16 | 32 | 64 | 128 | 256 | 512 | 1024 (a) |
T31_gx3v7 | | | | | -- | -- | -- |
1.9x2.5_gx1v6 | -- | | | | | | -- |
0.9x1.25_gx1v6 | -- | -- | | | | | |
- CASE 2: Run a larger simulation with producing monthly (better daily? - CKECK THIS) output data
resolution / layout (NTASKS) | 16 | 32 | 64 | 128 | 256 | 512 | 1024 (a) |
T31_gx3v7 | | | | | -- | -- | -- |
1.9x2.5_gx1v6 | -- | | | | | | -- |
0.9x1.25_gx1v6 | -- | -- | | | | | |
(a) optional