#!/bin/ksh #D- Driver du script pour SECHIBA function SECHIBA_sed { IGCM_debug_PushStack "SECHIBA_sed" sed -e "s/^${1}\ *=.*/${1}= ${2}/" \ sechiba.def > sechiba.def.tmp RET=$? echo "SECHIBA_sed : ${1} ${2}" \mv sechiba.def.tmp sechiba.def IGCM_debug_PopStack "SECHIBA_sed" return $RET } function DRIVER_sed { IGCM_debug_PushStack "DRIVER_sed" sed -e "s/^${1}\ *=.*/${1}= ${2}/" \ driver.def > driver.def.tmp RET=$? echo "DRIVER_sed : ${1} ${2}" \mv driver.def.tmp driver.def IGCM_debug_PopStack "DRIVER_sed" return $RET } #----------------------------------------------------------------- function SRF_Initialize { IGCM_debug_PushStack "SRF_Initialize" echo "ORCHIDEE Tag : " ${config_UserChoices_TagName} NUM_PROC=1 #D- Number of processors used for lmdz and oasis coupler computed from PBS variable if [ X"${BATCH_NUM_PROC_TOT}" != X ] ; then NUM_PROC=${BATCH_NUM_PROC_TOT} fi echo BATCH_NUM_PROC_TOT=${BATCH_NUM_PROC_TOT} echo NUM_PROC=${NUM_PROC} if ( [ X${BATCH_NUM_PROC_TOT} != X ] && [ "${BATCH_NUM_PROC_TOT}" -gt 1 ] ) ; then MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND} fi RESOL_SRF=ALL typeset frequency for frequency in ${config_SRF_WriteFrequency} ; do case ${frequency} in HF|hf) SRF_ok_hf=y ;; esac done if [ X${sechiba_UserChoices_LAND_USE} = Xy ] ; then sed -e 's&#List=\(.*\)PFTmap\(.*\)year_p1\(.*\)&List=\1PFTmap\2year_p1\3&' ${SUBMIT_DIR}/COMP/sechiba.card > sechiba.card.tmp IGCM_sys_Mv sechiba.card.tmp ${SUBMIT_DIR}/COMP/sechiba.card fi if [ X${sechiba_UserChoices_IMPOSE_VEG} = Xy ] ; then sed -e 's&\(List.*=\)*\([[:space:]]*(*\).*PFTmap.*\${year}.*.nc,.*)&\1\2)&' ${SUBMIT_DIR}/COMP/sechiba.card > sechiba.card.tmp IGCM_sys_Mv sechiba.card.tmp ${SUBMIT_DIR}/COMP/sechiba.card fi IGCM_debug_PopStack "SRF_Initialize" } #----------------------------------------------------------------- # Optionnal function executed at the beginning of the main loop, # after IGCM_config_PeriodStart see libIGCM/AA_job. # It may be used to set special variables used in forward lists function SRF_PeriodStart { IGCM_debug_PushStack "SRF_PeriodStart" IGCM_debug_PopStack "SRF_PeriodStart" } #----------------------------------------------------------------- function SRF_Update { IGCM_debug_PushStack "SRF_Update" typeset SECHIBA_WRITE_STEP # Get WriteFrenquecies from config.card for SECHIBA SRF_WriteFrequency=$( echo ${config_SRF_WriteFrequency} | sed -e 's/\([0-9]*[yYmMdDs]\).*/\1/' ) case ${SRF_WriteFrequency} in *Y|*y) WriteInYears=$( echo ${SRF_WriteFrequency} | awk -F '[yY]' '{print $1}' ) PeriodLengthInYears=$( echo ${config_UserChoices_PeriodLength} | awk -F '[yY]' '{print $1}' ) (( SECHIBA_WRITE_STEP = PeriodLengthInDays * WriteInYears / PeriodLengthInYears * 86400 )) ;; 1M) case ${config_UserChoices_PeriodLength} in *Y|*y) SECHIBA_WRITE_STEP=-1. ;; *M|*m) SECHIBA_WRITE_STEP=-1. ;; *) (( SECHIBA_WRITE_STEP = $( IGCM_date_DaysInMonth $year $month ) * 86400 )) ;; esac ;; *M|*m) WriteInMonths=$( echo ${SRF_WriteFrequency} | awk -F '[mM]' '{print $1}' ) case ${config_UserChoices_PeriodLength} in *Y|*y) PeriodLengthInYears=$( echo ${config_UserChoices_PeriodLength} | awk -F '[yY]' '{print $1}' ) (( SECHIBA_WRITE_STEP = PeriodLengthInDays * 86400 / PeriodLengthInYears / 12 )) ;; *M|*m) PeriodLengthInMonths=$( echo ${config_UserChoices_PeriodLength} | awk -F '[mM]' '{print $1}' ) (( SECHIBA_WRITE_STEP = PeriodLengthInDays * WriteInMonths * 86400 / PeriodLengthInMonths )) ;; *) (( SECHIBA_WRITE_STEP = $( IGCM_date_DaysInMonth $year $month ) * 86400 )) ;; esac ;; 5D|5d) (( SECHIBA_WRITE_STEP = 5 * 86400 )) ;; 1D|1d) (( SECHIBA_WRITE_STEP = 86400 )) ;; *s) WriteInSeconds=$( echo ${SRF_WriteFrequency} | awk -F '[s]' '{print $1}' ) (( SECHIBA_WRITE_STEP = WriteInSeconds )) ;; *) IGCM_debug_Exit "SRF_Update " ${SRF_WriteFrequency} " invalid WriteFrequency : choose in 1Y, 1M, 5D, 1D." IGCM_debug_Verif_Exit ;; esac SECHIBA_sed WRITE_STEP ${SECHIBA_WRITE_STEP} if [ X${sechiba_UserChoices_IMPOSE_VEG} = Xn ] ; then if [ X${sechiba_UserChoices_LAND_USE} = Xy ] ; then SECHIBA_sed VEGET_UPDATE ${sechiba_UserChoices_VEGET_UPDATE} ##MM : cutting PFTmaps of ORCHIDEE : for first year without restart, we must use this year map ## WARNING : the next year map must be avaible and the december month, then this device will ## only work with PeriodLength scrictly less than 1Y. # If you want to come back to old BIG LAND USE file # (to run on multipple years, just one time with LAND USE activated), # you must # comment all next 8 lines and check correct parameters in sechiba.def file # for your LAND USE specific file. SECHIBA_sed VEGET_REINIT y if ( [ ${CumulPeriod} -eq 1 ] && [ "${config_SRF_Restart}" = "n" ] ) ; then SECHIBA_sed VEGET_YEAR 1 else SECHIBA_sed VEGET_YEAR 0 IGCM_sys_Mv -f PFTmap_IPCC_${year_p1}.nc PFTmap.nc fi elif [ X${sechiba_UserChoices_OLD_VEGET} = Xy ] ; then SECHIBA_sed LAND_USE n fi else SECHIBA_sed IMPOSE_VEG y fi if ( [ ${CumulPeriod} -eq 1 ] && [ "${config_SRF_Restart}" = "n" ] ) ; then echo "Error in teststomate !" echo "You must use some old restarts with this job." echo "We will stop here." IGCM_debug_Exit "YOU MUST USE SOME OLD RESTARTS WITH THE JOB TESTSTOMATE." IGCM_debug_Verif_Exit else SECHIBA_sed SECHIBA_restart_in sechiba_rest_in.nc fi FileToBeDeleted[${#FileToBeDeleted[@]}]=sechiba.def DRIVER_sed TIME_LENGTH ${PeriodLengthInDays}D # DRIVER_sed TIME_SKIP ${OldSimulationLengthInDays}D FileToBeDeleted[${#FileToBeDeleted[@]}]=driver.def IGCM_debug_PopStack "SRF_Update" } #----------------------------------------------------------------- function SRF_Finalize { IGCM_debug_PushStack "SRF_Finalize" echo FINALIZE SRF !!! IGCM_debug_PopStack "SRF_Finalize" }