source: branches/ORCHIDEE_EXT/ORCHIDEE_OL/TESTSTOMATE/COMP/sechiba.driver @ 382

Last change on this file since 382 was 382, checked in by didier.solyga, 13 years ago

Merge the revisions 373 + 376 to 389 from the trunk in the externalized version

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1#!/bin/ksh
2
3#D- Driver du script pour SECHIBA
4
5function SECHIBA_sed
6{
7    IGCM_debug_PushStack "SECHIBA_sed"
8   
9    sed -e "s/^${1}\ *=.*/${1}= ${2}/" \
10        sechiba.def > sechiba.def.tmp
11    RET=$?
12    echo "SECHIBA_sed : ${1} ${2}"
13    \mv sechiba.def.tmp sechiba.def
14   
15    IGCM_debug_PopStack "SECHIBA_sed"
16    return $RET
17}
18
19function DRIVER_sed
20{
21    IGCM_debug_PushStack "DRIVER_sed"
22   
23    sed -e "s/^${1}\ *=.*/${1}= ${2}/" \
24        driver.def > driver.def.tmp
25    RET=$?
26    echo "DRIVER_sed : ${1} ${2}"
27    \mv driver.def.tmp driver.def
28   
29    IGCM_debug_PopStack "DRIVER_sed"
30    return $RET
31}
32
33#-----------------------------------------------------------------
34function SRF_Initialize
35{
36    IGCM_debug_PushStack "SRF_Initialize"
37
38    echo "ORCHIDEE Tag : " ${config_UserChoices_TagName}
39
40    NUM_PROC=1
41#D- Number of processors used for lmdz and oasis coupler computed from PBS variable
42    if [ X"${BATCH_NUM_PROC_TOT}" != X ] ; then
43        NUM_PROC=${BATCH_NUM_PROC_TOT}
44    fi
45    echo BATCH_NUM_PROC_TOT=${BATCH_NUM_PROC_TOT}
46    echo NUM_PROC=${NUM_PROC}
47
48    if ( [ X${BATCH_NUM_PROC_TOT} != X ] && [ "${BATCH_NUM_PROC_TOT}" -gt 1 ] ) ; then
49        MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND}
50    fi
51
52    RESOL_SRF=ALL
53   
54    typeset frequency
55    for frequency in ${config_SRF_WriteFrequency} ; do
56        case ${frequency} in
57            HF|hf) SRF_ok_hf=y ;;
58        esac
59    done
60
61    if [ X${sechiba_UserChoices_LAND_USE} = Xy ] ; then
62      sed -e 's&#List=\(.*\)PFTmap\(.*\)year_p1\(.*\)&List=\1PFTmap\2year_p1\3&' ${SUBMIT_DIR}/COMP/sechiba.card > sechiba.card.tmp
63      IGCM_sys_Mv sechiba.card.tmp ${SUBMIT_DIR}/COMP/sechiba.card
64    fi
65
66    if [ X${sechiba_UserChoices_IMPOSE_VEG} = Xy ] ; then
67      sed -e 's&\(List.*=\)*\([[:space:]]*(*\).*PFTmap.*\${year}.*.nc,.*)&\1\2)&' ${SUBMIT_DIR}/COMP/sechiba.card > sechiba.card.tmp
68      IGCM_sys_Mv sechiba.card.tmp ${SUBMIT_DIR}/COMP/sechiba.card
69    fi
70
71    IGCM_debug_PopStack "SRF_Initialize"
72}
73
74#-----------------------------------------------------------------
75# Optionnal function executed at the beginning of the main loop,
76# after IGCM_config_PeriodStart see libIGCM/AA_job.
77# It may be used to set special variables used in forward lists
78function SRF_PeriodStart
79{
80    IGCM_debug_PushStack "SRF_PeriodStart"
81    IGCM_debug_PopStack "SRF_PeriodStart"
82}
83
84#-----------------------------------------------------------------
85function SRF_Update
86{
87    IGCM_debug_PushStack "SRF_Update"
88
89    typeset SECHIBA_WRITE_STEP
90
91    # Get WriteFrenquecies from config.card for SECHIBA
92    SRF_WriteFrequency=$( echo ${config_SRF_WriteFrequency} | sed -e 's/\([0-9]*[yYmMdDs]\).*/\1/' ) 
93    case ${SRF_WriteFrequency} in
94        *Y|*y) 
95            WriteInYears=$( echo ${SRF_WriteFrequency} | awk -F '[yY]' '{print $1}' )
96            PeriodLengthInYears=$( echo ${config_UserChoices_PeriodLength} | awk -F '[yY]' '{print $1}' )
97            (( SECHIBA_WRITE_STEP = PeriodLengthInDays * WriteInYears / PeriodLengthInYears * 86400 )) ;;
98        1M)
99            case ${config_UserChoices_PeriodLength} in
100            *Y|*y)
101                SECHIBA_WRITE_STEP=-1.
102                ;;
103            *M|*m)
104                SECHIBA_WRITE_STEP=-1.
105                ;;
106            *)
107                (( SECHIBA_WRITE_STEP = $( IGCM_date_DaysInMonth $year $month ) * 86400 ))
108                ;;
109            esac
110            ;;
111        *M|*m) 
112            WriteInMonths=$( echo ${SRF_WriteFrequency} | awk -F '[mM]' '{print $1}' )
113            case ${config_UserChoices_PeriodLength} in
114            *Y|*y)
115                PeriodLengthInYears=$( echo ${config_UserChoices_PeriodLength} | awk -F '[yY]' '{print $1}' )
116                (( SECHIBA_WRITE_STEP = PeriodLengthInDays * 86400 / PeriodLengthInYears / 12 ))
117                ;;
118            *M|*m)
119                PeriodLengthInMonths=$( echo ${config_UserChoices_PeriodLength} | awk -F '[mM]' '{print $1}' )
120                (( SECHIBA_WRITE_STEP = PeriodLengthInDays * WriteInMonths  * 86400 / PeriodLengthInMonths  ))
121                ;;
122            *)
123                (( SECHIBA_WRITE_STEP = $( IGCM_date_DaysInMonth $year $month ) * 86400 ))
124                ;;
125            esac
126            ;;
127        5D|5d) 
128            (( SECHIBA_WRITE_STEP = 5 * 86400 )) ;;
129        1D|1d) 
130            (( SECHIBA_WRITE_STEP = 86400 )) ;;
131        *s)
132            WriteInSeconds=$( echo ${SRF_WriteFrequency} | awk -F '[s]' '{print $1}' )
133            (( SECHIBA_WRITE_STEP = WriteInSeconds )) ;;
134        *) 
135            IGCM_debug_Exit "SRF_Update " ${SRF_WriteFrequency} " invalid WriteFrequency : choose in 1Y, 1M, 5D, 1D." 
136            IGCM_debug_Verif_Exit ;;
137    esac
138    SECHIBA_sed WRITE_STEP ${SECHIBA_WRITE_STEP}
139
140    if [ X${sechiba_UserChoices_IMPOSE_VEG} = Xn ] ; then
141        if [ X${sechiba_UserChoices_LAND_USE} = Xy ] ; then
142            SECHIBA_sed VEGET_UPDATE ${sechiba_UserChoices_VEGET_UPDATE}
143
144            ##MM : cutting PFTmaps of ORCHIDEE : for first year without restart, we must use this year map
145            ##     WARNING : the next year map must be avaible and the december month, then this device will
146            ##               only work with PeriodLength scrictly less than 1Y.
147            # If you want to come back to old BIG LAND USE file
148            # (to run on multipple years, just one time with LAND USE activated),
149            # you must
150            # comment all next 8 lines and check correct parameters in sechiba.def file
151            # for your LAND USE specific file.
152            SECHIBA_sed VEGET_REINIT y
153            if ( [ ${CumulPeriod} -eq 1 ] && [ "${config_SRF_Restart}" = "n" ] ) ; then
154                SECHIBA_sed VEGET_YEAR 1
155            else
156                SECHIBA_sed VEGET_YEAR 0
157                IGCM_sys_Mv -f PFTmap_IPCC_${year_p1}.nc PFTmap.nc
158            fi
159        elif [ X${sechiba_UserChoices_OLD_VEGET} = Xy ] ; then
160            SECHIBA_sed LAND_USE n
161        fi
162    else
163        SECHIBA_sed IMPOSE_VEG y
164    fi
165
166    if ( [ ${CumulPeriod} -eq 1 ] && [ "${config_SRF_Restart}" = "n" ] ) ; then
167        echo "Error in teststomate !"
168        echo "You must use some old restarts with this job." 
169        echo "We will stop here."
170        IGCM_debug_Exit "YOU MUST USE SOME OLD RESTARTS WITH THE JOB TESTSTOMATE." 
171        IGCM_debug_Verif_Exit
172    else
173        SECHIBA_sed SECHIBA_restart_in sechiba_rest_in.nc
174    fi
175    FileToBeDeleted[${#FileToBeDeleted[@]}]=sechiba.def
176
177    DRIVER_sed TIME_LENGTH ${PeriodLengthInDays}D
178#    DRIVER_sed TIME_SKIP ${OldSimulationLengthInDays}D
179    FileToBeDeleted[${#FileToBeDeleted[@]}]=driver.def
180
181    IGCM_debug_PopStack "SRF_Update"
182}
183
184#-----------------------------------------------------------------
185function SRF_Finalize
186{
187    IGCM_debug_PushStack "SRF_Finalize"
188
189    echo FINALIZE SRF !!!
190
191    IGCM_debug_PopStack "SRF_Finalize"
192}
Note: See TracBrowser for help on using the repository browser.