#!/bin/bash
# ------------------------------------------------------------------
# Author: arhines@fas.harvard.edu
# Adapted by: mjfu@g.harvard.edu, kara_hartig@g.harvard.edu, kirstinkoepnick@g.harvard.edu (thanks Kirstin!!)
# Title: create_new_build_21ka.sh
# Description: creates a CESM case, configures it, and builds it.
#              Finally, a brief test spin-up is submitted and run.
# ------------------------------------------------------------------
USAGE="Usage: $0 CASE"
OPTIONS="res [default:f19_f19], compset [default:F_2000], ncores [default:144] in that order" #ncores is a multiple of 36 
NOTES="Hint : Cheyenne now has 36 processors per node, better to pick multiples of 36" #kara: 144
# --- Options processing -------------------------------------------
if [ $# == 0 ] ; then
    echo $USAGE
    echo $OPTIONS
    echo $NOTES
    exit 1;
fi
CASE=$1
# Accept arguments with defaults:
RES=${2:-"f09_g17"} # 1 degree
COMPSET=${3:-"1850_CAM60_CLM50%SP_CICE_POP2_RTM_SGLC_SWAV"} 
echo RES:$RES
echo COMPSET:$COMPSET


SCRIPTDIR=$PWD
CESMROOT=/glade/work/asalazar/derecho_cesm2
cd $CESMROOT/cime/scripts/ #cime = coupler
CASEROOT="${HOME}/EPS231/ICEAGE/cesm_caseroot/${CASE}" #where it is compiling model
OUTPUT="/glade/derecho/scratch/asalazar/${CASE}" # best to use scratch
RUNDIR="${OUTPUT}/run"
echo $CASEROOT

# Account (e.g. uhar0009)
export PROJECT=$PBS_ACCOUNT #sets the account (which grant to charge it to) to change go to the bashrc file

# Create case
./create_newcase --case ${CASEROOT} --res ${RES} --compset ${COMPSET} --project ${PROJECT} --run-unsupported --driver mct || exit -1

cd $CASEROOT

# Move custom modifications (user_nl_*, source mods) to CASEROOT
cp -a $SCRIPTDIR/$0 $CASEROOT # make a copy in the caseroot
cp -a $SCRIPTDIR/user_nl_* $CASEROOT

# Modify tasks/cores: env_mach_pes.xml
# cam
./xmlchange NTASKS_ATM=-8
./xmlchange NTHRDS_ATM=1
./xmlchange ROOTPE_ATM=0
# cpl
./xmlchange NTASKS_CPL=-8
./xmlchange NTHRDS_CPL=1
./xmlchange ROOTPE_CPL=0
#cism
./xmlchange NTASKS_GLC=64
./xmlchange NTHRDS_GLC=1
./xmlchange ROOTPE_GLC=0
# cice
./xmlchange NTASKS_ICE=192
./xmlchange NTHRDS_ICE=1
./xmlchange ROOTPE_ICE=64
# clm
./xmlchange NTASKS_LND=768
./xmlchange NTHRDS_LND=1
./xmlchange ROOTPE_LND=256
# pop
./xmlchange NTASKS_OCN=256
./xmlchange NTHRDS_OCN=1
./xmlchange ROOTPE_OCN=-8
# mosart
./xmlchange NTASKS_ROF=64
./xmlchange NTHRDS_ROF=1
./xmlchange ROOTPE_ROF=0
# wav
./xmlchange NTASKS_WAV=64
./xmlchange NTHRDS_WAV=1
./xmlchange ROOTPE_WAV=0

# Move custom modifications (user_nl_*, source mods) to CASEROOT
# Copy source modifications
cp -a /glade/u/home/jiangzhu/cesm/cases/b.e21.B1850CAM5CLM50SP.f09_g17.21ka.01/SourceMods/* $CASEROOT/SourceMods/

./case.setup

# Modify tasks/cores: env_mach_pes.xml

# Set up case run scripts

# Modify build: env_build.xml #where building the run
./xmlchange EXEROOT=$OUTPUT/bld
#./xmlchange DEBUG=TRUE

./xmlchange CAM_CONFIG_OPTS='-phys cam5'
./xmlchange CLM_CONFIG_OPTS='-phys clm5_0'
./xmlchange CICE_CONFIG_OPTS=' -phys cice5 '

# Build executables
# Make any changes to env_build.xml or SourceMods/ BEFORE this step
# To completely rebuild, first run the following:
# ./case.build --clean-all
qcmd -- ./case.build
echo 

# storage:
./xmlchange RUNDIR=$RUNDIR
./xmlchange DOUT_S=TRUE # Reorganizes the files into nice folders
./xmlchange DOUT_S_ROOT=$OUTPUT

# Docs for env_*.xml files:
# http://www.cesm.ucar.edu/models/cesm1.2/cesm/doc/modelnl/

# storage:
./xmlchange RUNDIR=$RUNDIR
./xmlchange DOUT_S=TRUE # Reorganizes the files into nice folders
./xmlchange DOUT_S_ROOT=$OUTPUT

# duration of run:
./xmlchange STOP_OPTION=nyears #units of run time
./xmlchange STOP_N=1 #how long you want to run your model for 
./xmlchange GET_REFCASE=TRUE # should be TRUE (default) if REFCASE not already in EXEROOT
./xmlchange RESUBMIT=0 # total times submitted = RESUBMIT+1
./xmlchange --subgroup case.run JOB_WALLCLOCK_TIME=12:00:00 #if running test or something decrease runtime per submission

# continuation or new run?
./xmlchange CONTINUE_RUN=FALSE #fresh run (=FALSE) or end of previous run (=TRUE and change RESUBMIT value)

# If wanting to change CO2 concentration
./xmlchange --id CCSM_CO2_PPMV --val 190.0 
# # change to LGM domain files.. 

./xmlchange --id ATM_DOMAIN_PATH --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka"
./xmlchange --id LND_DOMAIN_PATH --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka"
./xmlchange --id OCN_DOMAIN_PATH --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka"
./xmlchange --id ICE_DOMAIN_PATH --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka"
./xmlchange --id ATM_DOMAIN_FILE --val "domain.lnd.fv09_gx1v7_21ka.200623.nc"
./xmlchange --id LND_DOMAIN_FILE --val "domain.lnd.fv09_gx1v7_21ka.200623.nc"
./xmlchange --id OCN_DOMAIN_FILE --val "domain.ocn.fv09_gx1v7_21ka.200623.nc"
./xmlchange --id ICE_DOMAIN_FILE --val "domain.ocn.fv09_gx1v7_21ka.200623.nc"

# LGM mapping files
./xmlchange --id ATM2OCN_FMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_fv09_TO_gx1v7_21ka_aave.200623.nc"
./xmlchange --id ATM2OCN_SMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_fv09_TO_gx1v7_21ka_blin.200623.nc"
./xmlchange --id ATM2OCN_VMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_fv09_TO_gx1v7_21ka_patc.200623.nc"
./xmlchange --id OCN2ATM_FMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_gx1v7_21ka_TO_fv09_aave.200623.nc"
./xmlchange --id OCN2ATM_SMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_gx1v7_21ka_TO_fv09_aave.200623.nc"
./xmlchange --id ROF2OCN_FMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_r05_nomask_TO_gx1v7_21ka_aave.200623.nc"
./xmlchange --id ROF2OCN_LIQ_RMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_r05_TO_gx1v7_21ka_merged_200623.nc"
./xmlchange --id ROF2OCN_ICE_RMAPNAME --val "/glade/work/jiangzhu/data/inputdata/cesm2_21ka/map_r05_TO_gx1v7_21ka_nnsm_200623.nc"

./xmlchange --id CAM_NML_USE_CASE --val "1850-2005_cam5"
./xmlchange --id CLM_NML_USE_CASE --val "1850_control"
#./xmlchange CLM_NAMELIST_OPTS=“use_init_interp=.true. init_interp_method=‘general’” # hack for POP from Andrea

# Set hybrid
HYBPATH="/glade/work/jiangzhu/data/restart"
HYBCASE="b.e21.B1850CAM5CLM50SP.f09_g17.21ka.01"
HYBDATE="0501-01-01"

./xmlchange --file env_run.xml --id RUN_TYPE --val "hybrid"
./xmlchange --id RUN_REFDIR --val "/glade/work/jiangzhu/data/restart/b.e21.B1850CAM5CLM50SP.f09_g17.21ka.01/"
./xmlchange --file env_run.xml --id RUN_REFCASE --val $HYBCASE
./xmlchange --file env_run.xml --id RUN_REFDATE --val $HYBDATE
#./xmlchange --file env_run.xml --id RUN_STARTDATE --val 0001-01-01

# Link restart files...
cp -a ${HYBPATH}/${HYBCASE}/* ${RUNDIR}/

# List any changes made to namelist files or source code
grep -Ev '^\s*$|^\s*!' user_nl_*
ls -l -h -R SourceMods/*/*


# to submit the job upon build.
printf "To submit job, issue:\n"
printf "cd ${CASEROOT}\n"
printf "./case.submit\n"

