#! /usr/bin/env bash #PBS -N Aq3p0km_LW #PBS -l ncpus=8 #PBS -l walltime=08:00:00 #PBS -q science@columbia2 #PBS -V # Columbia specific calls: . /usr/share/modules/init/bash #-----------------------------------------------------------------------------# # - Load PC parameters # # - Determine stop iteration for this period # #-----------------------------------------------------------------------------# runDir=/nobackup/enderton/Aq3p0km_LW varlist="npcpl npocn exp matscript outDir figOutDir scrDir cplmonitor \ ocnmonitor period iitO iitA fitO fitA nitC nitO nitA nitOonly \ pChkptFreq taveFreq cpl_taveFreq dumpFreq monitorFreq plotFreq \ exC exO exA exOOnly cplDir ocnDir atmDir dtA dtO dtC \ LocalScratch MakePlots PeriodicCoupling ocnForcingRoot gWeight" cd $runDir source pc.vars sitO=$(($iitO+$nitO)) sitA=$(($iitA+$nitA)) iitO0=`$scrDir/add0upto10c $iitO` iitA0=`$scrDir/add0upto10c $iitA` sitO0=`$scrDir/add0upto10c $sitO` sitA0=`$scrDir/add0upto10c $sitA` rm -f $cplmonitor echo "Coupled period!" > $cplmonitor echo "Actual start time, of script: "`date` >> $cplmonitor echo "Simulation directory: "$runDir >> $cplmonitor echo "Period: "$period >> $cplmonitor echo "Period START iteration:" >> $cplmonitor echo " Ocean "$iitO >> $cplmonitor echo " Atmosphere "$iitA >> $cplmonitor echo "Period STOP iteration:" >> $cplmonitor echo " Ocean "$sitO >> $cplmonitor echo " Atmosphere "$sitA >> $cplmonitor echo "Overall FINAL iteration:" >> $cplmonitor echo " Ocean "$fitO >> $cplmonitor echo " Atmosphere "$fitA >> $cplmonitor #-----------------------------------------------------------------------------# # - Set coupled data file, and cpl_taveFreq in the ocean data.cpl file # # - Set ocean and atmosphere data files # #-----------------------------------------------------------------------------# . $scrDir/setdatacpl $runDir/$cplDir $runDir/$ocnDir $nitC $cpl_taveFreq . $scrDir/setdata $runDir/$ocnDir $iitO $nitO $pChkptFreq \ $taveFreq $dumpFreq $monitorFreq . $scrDir/setdata $runDir/$atmDir $iitA $nitA $pChkptFreq \ $taveFreq $dumpFreq $monitorFreq #-----------------------------------------------------------------------------# # Move pickup files to ocean rank, copy atmospheric pickup files forward # #-----------------------------------------------------------------------------# oldper=$((period-1)) rm $runDir/rank_*/pickup* if [ $PeriodicCoupling -eq 0 ]; then cp $outDir/Cpl$oldper/Ocn/pickup.$iitO0.* $ocnDir/. for tile in `seq 6`; do tile30=`$scrDir/add0upto3c $tile` cp $outDir/Cpl$oldper/Atm/pickup*$iitA0.$tile30* \ $runDir/rank_$((tile+1))/. done fi if [ $PeriodicCoupling -eq 1 ]; then cp $outDir/Ocn$oldper/pickup.$iitO0.* $ocnDir/. oldA=`$scrDir/add0upto10c $(($iitA-(8*$nitOonly)))` oldO=`$scrDir/add0upto10c $(($iitO-$nitOonly))` for tile in `seq 6`; do for suffix in meta data; do tile30=`$scrDir/add0upto3c $tile` cp $outDir/Cpl$oldper/Atm/pickup.$oldA.$tile30.001.$suffix \ $runDir/rank_$((tile+1))/pickup.$iitA0.$tile30.001.$suffix cp $outDir/Cpl$oldper/Atm/pickup_cpl.$oldA.$tile30.001.$suffix \ $runDir/rank_$((tile+1))/pickup_cpl.$iitA0.$tile30.001.$suffix cp $outDir/Cpl$oldper/Atm/pickup_ic.$oldA.$tile30.001.$suffix \ $runDir/rank_$((tile+1))/pickup_ic.$iitA0.$tile30.001.$suffix cp $outDir/Cpl$oldper/Atm/pickup_land.$oldA.$tile30.001.$suffix \ $runDir/rank_$((tile+1))/pickup_land.$iitA0.$tile30.001.$suffix cp $outDir/Cpl$oldper/Ocn/pickup_cpl.$oldO.$tile30.001.$suffix \ $runDir/rank_1/pickup_cpl.$iitO0.$tile30.001.$suffix done done fi # Prepare run directories. for rank in `seq 7`; do if [ $rank -ge 3 ]; then rm rank_$rank/data* rank_$rank/eedata rank_$rank/*.bin cp rank_2/data* rank_$rank/. cp rank_2/eedata rank_$rank/. cp rank_2/*.bin rank_$rank/. fi done echo "Beginning model execution..." >> $cplmonitor mpirun -np 1 ./executables/mitgcmuv.c32.C1 \ : 1 ./executables/mitgcmuv.c32.O1 \ : 6 ./executables/mitgcmuv.c32.A6 status=$? echo "Ended with status: "$status >> $cplmonitor #-----------------------------------------------------------------------------# # Move old data (just copy pickups) # #-----------------------------------------------------------------------------# . $scrDir/moveDataCpl $runDir $outDir $period $iitO0 \ $sitO0 $iitA0 $sitA0 $cplmonitor rm rank_*/pickup* #-----------------------------------------------------------------------------# # Check for pickups # #-----------------------------------------------------------------------------# pickO=$outDir/Cpl$period/Ocn/pickup.$sitO0.001.001.data pickA=$outDir/Cpl$period/Atm/pickup.$sitA0.001.001.data if [ -f $pickO ]; then echo "Ocn pickup present: "$pickO >> $cplmonitor else echo "No Ocn pickup: "$pickO >> $cplmonitor; exit; fi if [ -f $pickA ]; then echo "Atm pickup present: "$pickA >> $cplmonitor else echo "No Atm pickup: "$pickA >> $cplmonitor; exit; fi #-----------------------------------------------------------------------------# # Reset periodic coupling parameters # #-----------------------------------------------------------------------------# source pc.vars iitO=$sitO iitA=$sitA if [ $PeriodicCoupling -eq 0 ]; then period=$(($period+1)); fi rm -f pc.vars for i in $varlist; do echo $i'='`eval echo '$'$i` >> pc.vars.temp; done mv pc.vars.temp pc.vars #-----------------------------------------------------------------------------# # Resubmit coupled model # #-----------------------------------------------------------------------------# if [ $iitO -ge $fitO ]; then echo "New iitO exceeds fitO; All done!" >> $cplmonitor; exit; fi if [ $iitA -ge $fitA ]; then echo "New iitA exceeds fitA; All done!" >> $cplmonitor; exit; fi if [ $PeriodicCoupling -eq 0 ]; then qsub runCpl; fi if [ $PeriodicCoupling -eq 1 ]; then qsub runOcn; fi