Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

The purpose of this page is to document best-practices for generating initial conditions (finidat) for the land model. This page was created because I could not readily find a comprehensive best-practices page for generating/spinning up initial conditions for new grids. If anyone knows where to find these, please replace this page with a link or supplement the content here.

Overview

When setting up the land model for a new grid, we have three choices for initialization:

  1. Start from arbitrary initial conditions (cold-start). This will start the land model very far out of equilibrium, but gets the model up and running as quickly as possible. In no way acceptable for science applications.

  2. Start from an existing initial condition remapped to the target grid. This is also a quick way to get up and running, and may be sufficient for many purposes, but is not acceptable for published science experiments with E3SM because the initial condition may still be out of balance on the new grid.

  3. Spin up a new initial condition using established best-practices. This page will attempt to document these “best-practices”.

The best procedure for spinning up a new initial condition likely depends on the targeted application. For simple atmosphere/land-only configurations (F cases), a relatively simple procedure may be used. However, for fully coupled simulations, a more complicated procedure is recommended (paste email from Peter Thornton here).

Case study: Arctic RRM initial condition for F-cases

As a case study, I am documenting my recent experiences trying to get a spun-up initial condition suitable for use with atmosphere/land-only F-case simulations on a new Arctic RRM. Figures shown will all come from these attempts.

For this application, the recommendation I received was to run a land-only I-case for at least 10 years to make sure the model is spun up. The I-case (in this example, ICRUELM) is configured to run with the land model as the only active component, with a data atmosphere. A simple I-case can be created with the following (note that I am using bash for all of the shell command examples):

#!/bin/bash
# Create case and move to case directory
cd ${e3sm_root}/cime/scripts
./create_newcase --case ${case_name} --res ${res} --compset ${compset} \
    --machine ${machine} --compiler ${compiler} \
    --pecount ${pecount} --project ${project} --walltime 01:30:00
cd ${case_name}

where obviously you’ll need to set e3sm_root, case_name, res, compset, machine, compiler, pecount, and project appropriately. In order to be most applicable to the target application, the beginning and end year to use for the data atmosphere needs to be specified. Since I am targeting a F2010 configuration (approximate 2010 conditions), we configure the case to cycle through years 2006-2015. This is done by setting the following in a case directory:

# Configure data atmosphere for period around 2010 to prepare initial condition
# for F2010 conditions. Note that ICRUELM compset will use evolving data
# atmosphere so that land model can respond to fast changes in the atmosphere,
# even though a F2010 compset uses climatological SST and sea ice extent.
./xmlchange DATM_MODE=CLMCRUNCEPv7
./xmlchange DATM_CLMNCEP_YR_START=2006,DATM_CLMNCEP_YR_END=2015

Note that this sets the range of years to use for the atmosphere boundary condition. The simulation is configured to cycle through these years, so for example, a 20 year simulation would run through this date range twice.

If running on a new grid that has not been added to ELM and CIME, we will also need to set the path to the land surface dataset we want to use for this case:

# Edit ELM namelist to specify our fsurdat file for 2010 conditions
cat <<EOF >> user_nl_elm
fsurdat = '/global/cfs/cdirs/e3sm/inputdata/lnd/clm2/surfdata_map/surfdata_arcticx4v1pg2_simyr2010_c210805.nc'
EOF

I may have mistakenly assumed that this should be from a “coldstart”, because after 50 years the land model is still not fully spun up, as we will see below. In hindsight, a better practice would have been to start with an equilibrium land initial condition remapped to our target grid. In this case, we would want to specify a path to this remapped initial condition using the finidat namelist variable in the above code to append to user_nl_elm. In any event, we also want to set the run duration and number of resubmits here. For the initial test, I ran 10 years with restarts every year (this grid is quite large):

./xmlchange STOP_OPTION=nmonths,STOP_N=12,RESUBMIT=9

With these options, we can submit once for each 10 year chunk, and then go back and check our spin-up state. Looking a few select fields, after 50 years we have the following (these are all land-only area-weighted global means):

While total water storage (TWS) appears to be at least approaching an equilibrium value, it is still increasing over the last decade of the simulation. This appears to be typical for column integrated quantities. The heat content (HCSOI) shows a similar story:

However, a more alarming example is the surface water depth (H2OSFC):

After 50 years, this quantity is still increasing at a linear rate.

Remapping an existing initial condition

With the apparent slow spin-up of the land model from a cold-start, even for an I-case, it makes sense to try to get a jump-start on spin-up by starting with an existing spun-up initial condition, and remapping to our target grid, and then performing a (hopefully shorter) additional adjustment/spin-up period on the new grid. ELM provides a tool for remapping initial conditions, as it is apparently not as straightforward a process as remapping data for the other components, I think because the land model restart files describe only a subset of the grid and in some specialized format (someone who knows more about this should comment here, I’m still surprised we need a special tool to do this). That remap tool is in:

components/elm/tools/clm4_5/interpinic

Other than some simple Makefile and source code fixes to build on cori (upcoming in a PR), the tool is easy to build and run. The following was sufficient to create a remapped initial condition from a 1000 year pre-industrial control simulation at ne30:

#!/bin/bash

# Source our configuration file to set paths/variables
source config.sh

# First, build initial condition interpolator
rm env_mach_specific.xml
${e3sm_root}/cime/tools/configure --machine ${machine} || exit 1
source .env_mach_specific.sh || exit 1
cd ${e3sm_root}/components/elm/tools/clm4_5/interpinic/src
USER_FC=${fortran_compiler} LIB_NETCDF="`nc-config --libdir`" INC_NETCDF="`nf-config --includedir`" make VERBOSE=2

# Next, run using a well-spun-up initial condition
source_inic_file=/global/cscratch1/sd/bhillma/e3sm/cases/v2rc3.piControl.ne30pg2_EC30to60E2r2/archive/rest/1001-01-01-00000/20210528.v2rc3c.piControl.ne30pg2_EC30to60E2r2.chrysalis.elm.r.1001-01-01-00000.nc
target_inic_file=~/codes/e3sm/cases/add-arcticx4v1-rrm.arcticx4v1pg2_oARRM60to10.ICRUELM.spinup1/run/add-arcticx4v1-rrm.arcticx4v1pg2_oARRM60to10.ICRUELM.spinup1.elm.r.0091-01-01-00000.nc
output_inic_file=${output_root}/${lnd_grid_name}.elm.r.1001-01-01-00000.nc
cp ${target_inic_file} ${output_inic_file}
cd ${e3sm_root}/components/elm/tools/clm4_5/interpinic
./interpinic -i ${source_inic_file} -o ${output_inic_file}

  • No labels