clm5/tools/contrib/run_clm_historical
2024-05-09 15:14:01 +08:00

366 lines
13 KiB
Tcsh

#!/bin/csh
#########################################################################################
#
# - Execute this script to do a CLM historical simulation from 1850 - 2014. This
# script will complete all the changes required at year 1901 to deal with the
# fact that met forcing data does not go back to 1850.
#
# - Unmodified script will do the following.
# Part 1: Simulation 1: 1850 - 1870 (21 years) using repeated 1901-1920 forcing
# Part 2: Simulation 2: 1871 - 1900 (30 years) using repeated 1901-1920 forcing
# Part 3: Simulation 3+4+5+6: 1901-1988 (four 22 year) simulations using 1901-1988 forcing
# Part 4: Simulation 7: 1989-2004 (one 16 year) branch simulation w/daily output using 1989-2004 forcing
# Part 5: Simulation 8: 2005-2014 (one 10 year) branch simulation w/daily & subdaily output using 2005-2014 forcing
#
# - Script assumes that simulation can run at least 30 years within a 12 hour block on
# Cheyenne. To find the timing in an equivalent sample run, look in the timing
# directory and grep as follows > grep 'simulated_years/day' cesm_timing*
#
# - In the env_batch.xml file for the case.run group ensure the following: <entry id="JOB_WALLCLOCK_TIME" value="12:00:00">
# that way you can use up to 12:00 hours of wall-clock computer time per run block
#
# - This script assumes that env_mach_pes.xml has been setup and case.setup has already been run
#
# - This script makes use of user_nl_datm1901-1920 and user_nl_datm1901-2014
#
# - Before submitting script, make a copy of your modified or unmodified user_nl_clm file
# into "original_user_nl_clm". This should only contain namelist items that will not change throughout
# the run.
# Create a file called user_nl_clm_histdaily that contains the desired history output namelist items
# for the 1989-2004 simulation
# Create a file called user_nl_clm_histsubdaily that contains the desired history output namelist items
# for the 2005-2014 simulation
#
# - The atm data files start in 1901, so with :
# ALIGN year of 1901, (this is in units of RUN or simulation years)
# START year of 1901, (this is in units of FORCE'ing data years)
#
# RUN Year : 1850 ... 1860 1861 ... 1870 ... 1880 1881 ... 1890 ... 1900 1901 ... 2014
# FORCE Year : 1910 ... 1920 1901 ... 1910 ... 1920 1901 ... 1910 ... 1920 1901 ... 2014
#
# - The script could be broken up into several parts if you want to check the initial set of
# simulations.
#
# - Written by Andrew Slater - Late July, 2015; aslater@kryos.colorado.edu
# - Modified by Dave Lawrence, August, 2015
# - Updated with better check that run has also been archived to short term - Dave Lawrence
# October, 2015
# - Updated to adjust for the fact that the model is now slower - Keith Oleson December, 2016
# ./run_clm_historical.v5.csh ! > & run_historical.out &
# - Extend to 2014 and obtain daily & sub-daily output for end of run - Keith Oleson January, 2018
# ./run_clm_historical.v6.csh ! > & run_historical.out &
# - Modify history output for CMIP6 - Keith Oleson January, 2019
# ./run_clm_historical.v7.csh ! > & run_historical.out &
#########################################################################################
#########################################################################################
# PART 1
#########################################################################################
#
# This portion does the initial setup and the initial 21 year run (1850-1870)
#
#########################################################################################
# --- CASENAME is your case name
set CASENAME = 'clm50_release-clm5.0.15_2deg_GSWP3V1_hist'
# --- Set the user namelist file.
cp original_user_nl_clm user_nl_clm
# --- Ensure that the env_run.xml file has the correct content
# Since this particular run won't go for 51 years in 12 hours (as in v4 script), set it up for 21 years first
./xmlchange RUN_TYPE=startup
./xmlchange RUN_STARTDATE=1850-01-01
./xmlchange STOP_OPTION=nyears
./xmlchange STOP_N=21
./xmlchange CONTINUE_RUN=FALSE
./xmlchange RESUBMIT=0
./xmlchange DATM_CLMNCEP_YR_ALIGN=1901
./xmlchange DATM_CLMNCEP_YR_START=1901
./xmlchange DATM_CLMNCEP_YR_END=1920
# need to use user_nl_datm files to get years right
cp user_nl_datm1901-1920 user_nl_datm
# --- Check that you end up using the correct env_run.xml file
set nenvr = `ls -1 env_run*.xml | wc -l`
if ($nenvr > 1) then
echo 'There is more than one file of the type env_run*.xml'
echo 'There should only be one such file'
exit
endif
# --- If you have not already built the code, then do so now
#./case.clean_build
qcmd -- ./case.build
# --- Now submit the job and let it run
./case.submit
#########################################################################################
# PART 2
#########################################################################################
#
# This portion checks to see if the 1850-1870 portion of the run is done (or it waits
# 10 minutes before checking again).
#
# This will then start the run from 1871 (hence the CONTINUE_RUN=TRUE) and do one 30 year
# simulation
#
# The new values for env_run.xml are put in place
# Then submit the job
#
#########################################################################################
set WDIR = '/glade/scratch/'$USER'/'$CASENAME'/run/'
set DONE_RUNA = 0
set DONE_ARCHIVE = 0
set RESTART_FILE = $WDIR$CASENAME'.clm2.r.1871-01-01-00000.nc'
# --- Check if the first set of simulations have completed and the data archived (every ten minutes)
while ($DONE_RUNA == 0)
if (-e $RESTART_FILE) then
set DONE_RUNA = 1
echo '1850-1870 run is complete'
while ($DONE_ARCHIVE == 0)
set nh0 = `ls -l $WDIR/*clm?.h0.* | egrep -c '^-'`
echo $nh0
if ($nh0 == 1) then
set DONE_ARCHIVE = 1
echo 'Files have been archived'
else
sleep 600
date
endif
else
sleep 600
date
endif
end
# These are the proper settings to let this script continue the run through 1900
./xmlchange STOP_N=30
./xmlchange CONTINUE_RUN=TRUE
# --- Now submit the job and let it run
./case.submit
#########################################################################################
# PART 3
#########################################################################################
#
# This portion checks to see if the 1871-1900 portion of the run is done (or it waits
# 10 minutes before checking again). It then removes (or rather moves and renames) the
# datm files so that the model will use the full array of data from 1901-2014.
# This part runs with forcing data files that actually exist for 1901-2014
#
# This will start the run from 1901 (hence the CONTINUE_RUN=TRUE) and do four 22 year
# simulations: 1901 + 4*22 - 1 = 1988 (minus 1 because we do 1901)
#
# The new values for env_run.xml are put in place
# Then submit the job
#
#########################################################################################
set WDIR = '/glade/scratch/'$USER'/'$CASENAME'/run/'
set DDIR = $WDIR'restart_dump/'
set DONE_RUNA = 0
set DONE_ARCHIVE = 0
set RESTART_FILE = $WDIR$CASENAME'.clm2.r.1901-01-01-00000.nc'
# --- Check if the first set of simulations have completed and the data archived (every ten minutes)
while ($DONE_RUNA == 0)
if (-e $RESTART_FILE) then
set DONE_RUNA = 1
echo '1850-1900 run is complete'
while ($DONE_ARCHIVE == 0)
set nh0 = `ls -l $WDIR/*clm?.h0.* | egrep -c '^-'`
echo $nh0
if ($nh0 == 1) then
set DONE_ARCHIVE = 1
echo 'Files have been archived'
else
sleep 600
date
endif
else
sleep 600
date
endif
end
# --- If the first two sets of simulations are done, move the datm files and compress them
if (! -d $DDIR) then
mkdir $DDIR
endif
mv -i $WDIR$CASENAME.datm.rs1*.bin $DDIR
gzip $DDIR$CASENAME*.bin
# Since this particular run won't go for 55 years in 12 hours, do this in four 22 year chunks, thus
# we have to resubmit the job 3 times.
./xmlchange STOP_OPTION=nyears
./xmlchange STOP_N=22
./xmlchange DATM_CLMNCEP_YR_ALIGN=1901
./xmlchange DATM_CLMNCEP_YR_START=1901
./xmlchange DATM_CLMNCEP_YR_END=2014
./xmlchange CONTINUE_RUN=TRUE
./xmlchange RESUBMIT=3
# need to use user_nl_datm files to get years right
cp user_nl_datm1901-2014 user_nl_datm
# --- Check that you end up using the correct env_run.xml file
set nenvr = `ls -1 env_run*.xml | wc -l`
if ($nenvr > 1) then
echo 'There is more than one file of the type env_run*.xml'
echo 'There should only be one such file'
exit
endif
# --- Now submit the job and let it run
./case.submit
#########################################################################################
# PART 4
#########################################################################################
#
# This portion checks to see if the 1901-1988 part of the run is complete
# and then runs the model for 1989-2004 as a branch run to get daily output
#
#########################################################################################
set DONE_RUNA = 0
set DONE_ARCHIVE = 0
set RESTART_FILE = $WDIR$CASENAME'.clm2.r.1989-01-01-00000.nc'
# --- Check if the second set of simulations have completed and the data archived (every ten minutes)
while ($DONE_RUNA == 0)
if (-e $RESTART_FILE) then
set DONE_RUNA = 1
echo '1901-1989 run is complete'
while ($DONE_ARCHIVE == 0)
set nh0 = `ls -l $WDIR/*clm?.h0.* | egrep -c '^-'`
echo $nh0
if ($nh0 == 1) then
set DONE_ARCHIVE = 1
echo 'Files have been archived'
else
sleep 600
date
endif
else
sleep 600
date
endif
end
# --- Ensure that the env_run.xml file has the correct content
./xmlchange RUN_TYPE=branch
./xmlchange RUN_REFCASE={$CASENAME}
./xmlchange RUN_REFDATE=1989-01-01
./xmlchange STOP_OPTION=nyears
./xmlchange STOP_N=16
./xmlchange CONTINUE_RUN=FALSE
./xmlchange RESUBMIT=0
# --- Add in the daily output streams
# --- Reset the user namelist file.
cp original_user_nl_clm user_nl_clm
# --- Add in the daily history output items
cat user_nl_clm_histdaily >> user_nl_clm
# --- Now submit the job and let it run
./case.submit
#########################################################################################
# PART 5
#########################################################################################
#
# This portion checks to see if the 1989-2004 part of the run is complete
# and then runs the model for 2005-2014 as a branch run to get daily and subdaily output
#
#########################################################################################
set DONE_RUNA = 0
set DONE_ARCHIVE = 0
set RESTART_FILE = $WDIR$CASENAME'.clm2.r.2005-01-01-00000.nc'
# --- Check if the second set of simulations have completed and the data archived (every ten minutes)
while ($DONE_RUNA == 0)
if (-e $RESTART_FILE) then
set DONE_RUNA = 1
echo '1989-2004 run is complete'
while ($DONE_ARCHIVE == 0)
set nh0 = `ls -l $WDIR/*clm?.h0.* | egrep -c '^-'`
echo $nh0
if ($nh0 == 1) then
set DONE_ARCHIVE = 1
echo 'Files have been archived'
else
sleep 600
date
endif
else
sleep 600
date
endif
end
# --- Ensure that the env_run.xml file has the correct content
./xmlchange RUN_TYPE=branch
./xmlchange RUN_REFCASE={$CASENAME}
./xmlchange RUN_REFDATE=2005-01-01
./xmlchange STOP_OPTION=nyears
./xmlchange STOP_N=10
./xmlchange CONTINUE_RUN=FALSE
./xmlchange RESUBMIT=0
# --- Add in the subdaily output streams
# --- Reset the user namelist file.
cp original_user_nl_clm user_nl_clm
# --- Add in the daily history output items
cat user_nl_clm_histdaily >> user_nl_clm
# --- Add in the subdaily history output items
cat user_nl_clm_histsubdaily >> user_nl_clm
# --- Now submit the job and let it run
./case.submit
#########################################################################################
#
# This portion checks to see if the 2005-2014 part of the run is complete
# and ends the script
#
#########################################################################################
set DONE_RUNA = 0
set DONE_ARCHIVE = 0
set RESTART_FILE = $WDIR$CASENAME'.clm2.r.2015-01-01-00000.nc'
# --- Check if the second set of simulations have completed and the data archived (every ten minutes)
while ($DONE_RUNA == 0)
if (-e $RESTART_FILE) then
set DONE_RUNA = 1
echo '2005-2014 run is complete'
while ($DONE_ARCHIVE == 0)
set nh0 = `ls -l $WDIR/*clm?.h0.* | egrep -c '^-'`
echo $nh0
if ($nh0 == 1) then
set DONE_ARCHIVE = 1
echo 'Files have been archived'
else
sleep 600
date
endif
else
sleep 600
date
endif
end