#====================================================================== # Clear coupler log files for comparison tests #====================================================================== unsetenv CPLLOG_INIT unsetenv CPLLOG_HYBR 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 and ref2 cases set CASER0 = ${CASEROOT} set CASERR1 = ${CASEROOT}.ref1 set CASERR2 = ${CASEROOT}.ref2 set CASE0 = ${CASE} cd $CCSMROOT/scripts rm -r -f ${CASERR1}; ./create_clone -case ${CASERR1} -clone ${CASER0} rm -r -f ${CASERR2}; ./create_clone -case ${CASERR2} -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 cd $CASERR2 ./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} / 6 @ 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}" @ stopn3 = ${stopn2} - ${restn2} @ restn3 = ${stopn3} / 2 + 1 @ stopn4 = ${stopn3} - ${restn3} if (${stopn4} < 1 || ${stopn1} < 1) then echo "ERROR in ${0}: run length 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 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 hybrid ref2 case run # by cloning the main case and running with ref1 restarts #====================================================================== cd ${CASERR2} source ./Tools/ccsm_getenv # 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 gunzip ${DOUT_S_ROOT}/cpl/logs/cpl.log*.gz set CplLogFile = `ls -1t ${DOUT_S_ROOT}/cpl/logs/cpl.log* | head -1` setenv CPLLOG_HYBR $CplLogFile setenv BASEGEN_FILE02 $CplLogFile set cplhist_hybr = `ls -1t ${DOUT_S_ROOT}/cpl/hist/*.cpl.hi.*.nc | head -1` mv ${cplhist_hybr} ${cplhist_hybr}.base set cplhist_hybr = ${cplhist_hybr}.base set DOUTSR2 = ${DOUT_S_ROOT} set basestatus = "FAIL " if ( $?CPLLOG_HYBR ) then echo "Checking successful completion of hybr cpl log file" >>& $TESTSTATUS_LOG set pass = `grep "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 branch run from ref2 restart #====================================================================== cd $CASER0 source ./Tools/ccsm_getenv set refdate3 = `ls -1dt ${DOUTSR2}/rest/*-00000* | head -1 | sed "s/-00000.*//" | sed "s/^.*rest\///" ` echo "doing a ${stopn3} ${STOP_OPTION} branch startup from ref2 ${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.ref2 ./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 ${DOUTSR2}/rest/${refdate3}-00000/*${refdate3}* $RUNDIR/. cp ${DOUTSR2}/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 set cplhist_rest = `ls -1t $RUNDIR/*.cpl.hi.*.nc | head -1` # 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 "Branch Test log is $CPLLOG_BRCH" >>& $TESTSTATUS_LOG echo "Restart Test log is $CPLLOG_REST" >>& $TESTSTATUS_LOG echo "Hybrid Test hist is $cplhist_hybr" >>& $TESTSTATUS_LOG echo "Restart Test hist is $cplhist_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_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 if ($basestatus == "PASS") then if ( $?cplhist_hybr ) then if ( $?cplhist_rest ) then echo "Comparing initial hist file with second hist file" >>& $TESTSTATUS_LOG cd $RUNDIR $CASETOOLS/hist_compare.csh $cplhist_hybr $cplhist_rest >>& $TESTSTATUS_LOG cd $CASEROOT 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 hist file NOT set" >>& $TESTSTATUS_LOG set basestatus = "ERROR" endif else echo "ERROR in ${0}: initial coupler hist file NOT set" >>& $TESTSTATUS_LOG set basestatus = "ERROR" endif endif echo "$basestatus ${CASEBASEID} " >&! $TESTSTATUS_OUT