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

unsetenv CPLLOG_INIT
unsetenv CPLLOG_HYBR
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 and ref2 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 DOUT_S_SAVE_ALL_ON_DISK=FALSE
./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} / 4
@ restn1 = ${stopn1}
set start1 = ${RUN_STARTDATE}

@ stopn2 = ${STOP_N} - ${stopn1}
@ restn2 = ${stopn2} / 2 + 1
@ histn  = ${stopn2}
set sy = `echo $start1 | cut -f 1 -d "-"`
set sc = `echo $start1 | cut -f 2- -d "-"`
@ sy = $sy + 2
set sy2 = `$CCSMROOT/scripts/ccsm_utils/Tools/year_string.sh $sy`
set start2 = "${sy2}-${sc}"

@ stopn4 = ${stopn2} - ${restn2}

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 RUN_STARTDATE -val ${start1}
./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 never

#--- force cam namelist to write out initial file at end of run
if (-e user_nl_cam) then
  set cnt = `grep inithist user_nl_cam | wc -l`
  if ($cnt == 0) then
     echo "inithist = 'ENDOFRUN'" >> user_nl_cam
  endif
endif

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

set DOUT_S_ROOT_LOCKED=`echo $DOUT_S_ROOT | sed 's/archive/archive.locked/'`
echo "DOUT_S_ROOT $DOUT_S_ROOT"
echo "DOUT_S_ROOT_LOCKED $DOUT_S_ROOT_LOCKED"
gunzip ${DOUT_S_ROOT_LOCKED}/cpl/logs/cpl.log*.gz
set CplLogFile = `ls -1t ${DOUT_S_ROOT_LOCKED}/cpl/logs/cpl.log* | head -1`
echo "CplLogFile $CplLogFile"
setenv CPLLOG_INIT $CplLogFile
setenv BASEGEN_FILE01 $CplLogFile

set DOUTSR1 = ${DOUT_S_ROOT_LOCKED}

set basestatus = "FAIL "
if ( $?CPLLOG_INIT ) then
  echo "Checking successful completion of init cpl log file" >>& $TESTSTATUS_LOG
  set pass = `zgrep "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 hybrid case run
#   by cloning the main case and running with ref1 restarts
#======================================================================

cd ${CASER0}
source ./Tools/ccsm_getenv
./xmlchange DOUT_S_SAVE_ALL_ON_DISK=FALSE
# Set startdate to start2, set ref date based on ref1 restart
set refdate2   = `ls -1dt ${DOUTSR1}/rest/*-00000* | head -1 | sed "s/-00000.*//" | sed "s/^.*rest\///" `
echo "ref2: doing a ${stopn2} ${STOP_OPTION} hybrid startup from $start2 using ref1 ${refdate2}" >>& $TESTSTATUS_LOG 

#--- setup ref2 case 
./xmlchange -file env_run.xml -id RUN_TYPE      -val hybrid
./xmlchange -file env_run.xml -id RUN_STARTDATE -val ${start2}
./xmlchange -file env_run.xml -id RUN_REFCASE   -val $CASE0.ref1
./xmlchange -file env_run.xml -id RUN_REFDATE   -val ${refdate2}
./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 ${stopn2}
./xmlchange -file env_run.xml -id REST_OPTION   -val ${STOP_OPTION}
./xmlchange -file env_run.xml -id REST_N        -val ${restn2}
./xmlchange -file env_run.xml -id HIST_OPTION   -val ${STOP_OPTION}
./xmlchange -file env_run.xml -id HIST_N        -val ${histn}

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

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

set DOUT_S_ROOT_LOCKED=`echo $DOUT_S_ROOT | sed 's/archive/archive.locked/'`
echo "DOUT_S_ROOT $DOUT_S_ROOT"
echo "DOUT_S_ROOT_LOCKED $DOUT_S_ROOT_LOCKED"
gunzip ${DOUT_S_ROOT_LOCKED}/cpl/logs/cpl.log*.gz

set CplLogFile = `ls -1t ${DOUT_S_ROOT_LOCKED}/cpl/logs/cpl.log* | head -1`
echo "CplLogFile $CplLogFile"
setenv CPLLOG_HYBR $CplLogFile
setenv BASEGEN_FILE02 $CplLogFile

set basestatus = "FAIL "
if ( $?CPLLOG_HYBR ) then
  echo "Checking successful completion of hybr cpl log file" >>& $TESTSTATUS_LOG
  set pass = `zgrep "SUCCESSFUL TERM" $CPLLOG_HYBR | wc -l`
  if ( $pass != 0 ) then
    set basestatus = "PASS "
    echo "$basestatus ${CASEBASEID}.2 " >>& $TESTSTATUS_LOG
  else
    set basestatus = "FAIL "
    echo "$basestatus ${CASEBASEID}.2 " >>& $TESTSTATUS_LOG
    echo "$basestatus ${CASEBASEID} " >&! $TESTSTATUS_OUT
    exit -5
  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`
echo "CplLogFile $CplLogFile"
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 hybrid run and restart run
#======================================================================
setenv CPLLOG_GENCMP $CPLLOG_REST 
echo "Initial Test log is $CPLLOG_INIT" >>& $TESTSTATUS_LOG 
echo "Hybrid  Test log is $CPLLOG_HYBR" >>& $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 = `zgrep "SUCCESSFUL TERM" $CPLLOG_INIT | wc -l`
  if ( $pass != 0 ) then
    set basestatus = "PASS "
  else
    set basestatus = "FAIL "
  endif

  if ( $?CPLLOG_HYBR ) then
    if ( $?CPLLOG_REST ) then
      echo "Comparing initial log file with second log file" >>& $TESTSTATUS_LOG
      $CASETOOLS/check_exactrestart.pl $CPLLOG_HYBR $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}:  hybrid 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

