
#======================================================================
# Clear coupler log files for comparison tests
#======================================================================

unsetenv CPLLOG_INIT
unsetenv CPLLOG_BRCH
unsetenv CPLLOG_REST
setenv DETECT_MEMORY_LEAK
# if comparing with baseline also compare memory highwater mark from baseline
# and throughput
if ($?COMPARE_BASELINE ) then
  setenv COMPARE_MEMORY
  setenv COMPARE_THROUGHPUT
endif

#--- clone the main case to create ref1 cases
set CASER0  = ${CASEROOT}
set CASERR1 = ${CASEROOT}.ref1
set CASE0   = ${CASE}

cd $CCSMROOT/scripts
rm -r -f ${CASERR1}; ./create_clone -case ${CASERR1} -clone ${CASER0} 

cd $CASERR1
./xmlchange -file env_build.xml -id EXEROOT        -val ${EXEROOT}
./xmlchange -file env_build.xml -id BUILD_COMPLETE -val TRUE
./cesm_setup

#---- determine run lengths needed below 
cd $CASER0
source ./Tools/ccsm_getenv || exit -1

@ stopn0 = ${STOP_N}
set start0 = $RUN_STARTDATE

@ stopn1 = ${STOP_N}
@ restn1 = ${stopn1} / 2 + 1
set start1 = ${RUN_STARTDATE}

@ stopn3 = ${STOP_N} - ${restn1}
@ restn3 = ${stopn3} / 2 + 1
@ histn  = ${stopn3}

@ stopn4 = ${stopn3} - ${restn3}

if (${stopn4} < 1) then
  echo "ERROR in ${0}:  stop_n too short" >>& $TESTSTATUS_LOG
  echo "TFAIL ${CASEBASEID} " >&! $TESTSTATUS_OUT
  exit -1
endif

#======================================================================
# do an initial ref1 case run, with restart,
#   by cloning the case and running there
#======================================================================

cd ${CASERR1}
source ./Tools/ccsm_getenv || exit -1
echo "ref1: doing a ${stopn1} ${STOP_OPTION} initial startup from ${start1}" >>& $TESTSTATUS_LOG 

#--- setup ref1 case 
./xmlchange -file env_run.xml -id CONTINUE_RUN  -val FALSE
./xmlchange -file env_run.xml -id STOP_N        -val ${stopn1}
./xmlchange -file env_run.xml -id REST_OPTION   -val ${STOP_OPTION}
./xmlchange -file env_run.xml -id REST_N        -val ${restn1}
./xmlchange -file env_run.xml -id HIST_OPTION   -val ${STOP_OPTION}
./xmlchange -file env_run.xml -id HIST_N        -val ${histn}

#--- run ref1 case
./$CASE.run

gunzip ${DOUT_S_ROOT}/cpl/logs/cpl.log*.gz
set CplLogFile = `ls -1t ${DOUT_S_ROOT}/cpl/logs/cpl.log* | head -1`
setenv CPLLOG_INIT $CplLogFile
setenv BASEGEN_FILE01 $CplLogFile

set DOUTSR1 = ${DOUT_S_ROOT}
set basestatus = "FAIL "
if ( $?CPLLOG_INIT ) then
  echo "Checking successful completion of init cpl log file" >>& $TESTSTATUS_LOG
  set pass = `grep "SUCCESSFUL TERM" $CPLLOG_INIT | wc -l`
  if ( $pass != 0 ) then
    set basestatus = "PASS "
    echo "$basestatus ${CASEBASEID}.1 " >>& $TESTSTATUS_LOG
  else
    set basestatus = "FAIL "
    echo "$basestatus ${CASEBASEID}.1 " >>& $TESTSTATUS_LOG
    echo "$basestatus ${CASEBASEID} " >&! $TESTSTATUS_OUT
    exit -5
  endif
endif

#======================================================================
# do a branch run from ref1 restart
#======================================================================

cd $CASER0
source ./Tools/ccsm_getenv
set refdate3   = `ls -1dt ${DOUTSR1}/rest/*-00000* | head -1 | sed "s/-00000.*//" | sed "s/^.*rest\///" `
echo "doing a ${stopn3} ${STOP_OPTION} branch startup from ref1 ${refdate3}" >>& $TESTSTATUS_LOG 

cp -f env_run.xml env_run.xml.base # save the original settings

./xmlchange -file env_run.xml -id RUN_TYPE      -val branch
./xmlchange -file env_run.xml -id RUN_REFCASE   -val $CASE0.ref1
./xmlchange -file env_run.xml -id RUN_REFDATE   -val ${refdate3}
./xmlchange -file env_run.xml -id GET_REFCASE   -val FALSE
./xmlchange -file env_run.xml -id CONTINUE_RUN  -val FALSE
./xmlchange -file env_run.xml -id STOP_N        -val ${stopn3}
./xmlchange -file env_run.xml -id REST_OPTION   -val ${STOP_OPTION}
./xmlchange -file env_run.xml -id REST_N        -val ${restn3}
./xmlchange -file env_run.xml -id HIST_OPTION   -val never

mkdir -p $RUNDIR
ln -s ${DOUTSR1}/rest/${refdate3}-00000/*${refdate3}* $RUNDIR/.
cp    ${DOUTSR1}/rest/${refdate3}-00000/*rpointer*    $RUNDIR/.
./$CASE.run

gunzip ${DOUT_S_ROOT}/cpl/logs/cpl.log*.gz
set CplLogFile = `ls -1t ${DOUT_S_ROOT}/cpl/logs/cpl.log* | head -1`
setenv CPLLOG_BRCH    $CplLogFile
setenv BASEGEN_FILE03 $CplLogFile

set basestatus = "FAIL "
if ( $?CPLLOG_BRCH ) then
  echo "Checking successful completion of brch cpl log file" >>& $TESTSTATUS_LOG
  set pass = `grep "SUCCESSFUL TERM" $CPLLOG_BRCH | wc -l`
  if ( $pass != 0 ) then
    set basestatus = "PASS "
    echo "$basestatus ${CASEBASEID}.3 " >>& $TESTSTATUS_LOG
  else
    set basestatus = "FAIL "
    echo "$basestatus ${CASEBASEID}.3 " >>& $TESTSTATUS_LOG
    echo "$basestatus ${CASEBASEID} "   >&! $TESTSTATUS_OUT
  endif
endif

#======================================================================
# do a true restart continue run
#======================================================================

cd $CASEROOT
echo "doing a {stopn4} ${STOP_OPTION} continue restart test" >>& $TESTSTATUS_LOG 

./xmlchange -file env_run.xml -id CONTINUE_RUN -val TRUE
./xmlchange -file env_run.xml -id STOP_N       -val ${stopn4}
./xmlchange -file env_run.xml -id REST_OPTION  -val never
./xmlchange -file env_run.xml -id DOUT_S       -val FALSE
./xmlchange -file env_run.xml -id HIST_OPTION  -val ${STOP_OPTION}
./xmlchange -file env_run.xml -id HIST_N       -val ${histn}

./$CASE.run

gunzip $RUNDIR/cpl.log*.gz
set CplLogFile = `ls -1t $RUNDIR/cpl.log* | head -1`
setenv CPLLOG_REST $CplLogFile
setenv BASEGEN_FILE04 $CplLogFile

# restore to original settings
cp -f env_run.xml      env_run.xml.run
cp -f env_run.xml.base env_run.xml

#======================================================================
# runs complete, compare initial run and restart run
#======================================================================
setenv CPLLOG_GENCMP $CPLLOG_REST 
echo "Initial Test log is $CPLLOG_INIT" >>& $TESTSTATUS_LOG 
echo "Branch  Test log is $CPLLOG_BRCH" >>& $TESTSTATUS_LOG 
echo "Restart Test log is $CPLLOG_REST" >>& $TESTSTATUS_LOG 

#======================================================================
# Check case validation first
#======================================================================

set basestatus = "UNDEF"

if ( $?CPLLOG_INIT ) then
  echo "Checking successful completion in init cpl log file" >>& $TESTSTATUS_LOG
  set pass = `grep "SUCCESSFUL TERM" $CPLLOG_INIT | wc -l`
  if ( $pass != 0 ) then
    set basestatus = "PASS "
  else
    set basestatus = "FAIL "
  endif
  if ( $?CPLLOG_REST ) then
    echo "Comparing initial log file with second log file" >>& $TESTSTATUS_LOG
    $CASETOOLS/check_exactrestart.pl $CPLLOG_INIT $CPLLOG_REST >>& $TESTSTATUS_LOG
    set pass = `tail -1 $TESTSTATUS_LOG | grep PASS | wc -l`
    if ( $pass != 0 ) then
      set basestatus = "PASS "
    else
      set basestatus = "FAIL "
    endif
  else
    echo "ERROR in ${0}:  restart coupler log file NOT set" >>& $TESTSTATUS_LOG
    set basestatus = "ERROR"
  endif
else
  echo "ERROR in ${0}:  initial coupler log file NOT set" >>& $TESTSTATUS_LOG
  set basestatus = "ERROR"
endif

echo "$basestatus ${CASEBASEID} " >&! $TESTSTATUS_OUT

