source: CONFIG/UNIFORM/v6/LMDZOR_v6/GENERAL/DRIVER/orchidee.driver @ 2333

Last change on this file since 2333 was 2333, checked in by jgipsl, 10 years ago

Update to use IGCM_comp_modifyDefFile instead of local functions LMDZ_sed/LMDZ_sed_default/ORCHIDEE_sed.

Now this configuration must be used with libIGCM trunk rev 1073 or more recent.

File size: 8.4 KB
Line 
1#!/bin/ksh
2
3#D- Driver du script pour ORCHIDEE
4
5function ORCHIDEE_sed
6{
7    IGCM_debug_PushStack "ORCHIDEE_sed"
8   
9    sed -e "s/^${1}\ *=.*/${1}= ${2}/" \
10        orchidee.def > orchidee.def.tmp
11    RET=$?
12    echo "ORCHIDEE_sed : ${1} ${2}"
13    \mv orchidee.def.tmp orchidee.def
14   
15    IGCM_debug_PopStack "ORCHIDEE_sed"
16    return $RET
17}
18
19function ORCHIDEE_sed_xml
20{
21# Usage : ORCHIDEE_sed_xml xml_file output_file attribute value
22#         In file xml_file modify at the line containing id="output_file" the attribute "attribute=xxx" into "attribute=value"
23   
24    # Test if the fichier exist
25    if [ ! -f ${1} ] ; then
26        echo "WARNING : ${1} file does not exist. Following will not be done : ORCHIDEE_sed : ${1} ${2} ${3} ${4}"
27        IGCM_debug_PopStack "ORCHIDEE_sed_xml"
28        return
29    fi
30    sed -e "/id=\"${2}\"/s/\(${3}=\"\)[^\"]*\(\"\)/\1${4}\2/" ${1} > ${1}.tmp
31    RET=$?
32    echo "ORCHIDEE_sed : ${1} ${2} ${3} ${4}"
33    \mv ${1}.tmp ${1}
34
35    return $RET
36}
37
38#-----------------------------------------------------------------
39function SRF_Initialize
40{
41    IGCM_debug_PushStack "SRF_Initialize"
42
43    RESOL_SRF=ALL
44
45    for frequency in ${config_SRF_WriteFrequency} ; do
46        case ${frequency} in
47            HF|hf) SRF_ok_hf=y ;;
48        esac
49    done
50
51    ##- Define variable DefSuffix set in orchidee.card
52    ##  This variable is used in orchidee.card to choose
53    ##  parameter file(orchidee.def_DefSuffix).
54    if [ ! X${orchidee_UserChoices_DefSuffix} = X ] ; then
55        DefSuffix=${orchidee_UserChoices_DefSuffix}
56    else
57        DefSuffix=Choi
58    fi
59
60    IGCM_debug_PopStack "SRF_Initialize"
61}
62
63#-----------------------------------------------------------------
64function SRF_Update
65{
66    IGCM_debug_PushStack "SRF_Update"
67
68    # Activate STOMATE if the compontent SBG=stomate is set in config.card
69    if [ X${config_ListOfComponents_SBG} = Xstomate ] ; then
70        IGCM_comp_modifyDefFile blocker orchidee.def STOMATE_OK_STOMATE y
71    else
72        IGCM_comp_modifyDefFile blocker orchidee.def STOMATE_OK_STOMATE n
73    fi
74
75    typeset SECHIBA_WRITE_STEP
76
77    if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
78        ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .FALSE.
79        ORCHIDEE_sed_xml file_def_orchidee.xml sechiba2 enabled .FALSE.
80        ORCHIDEE_sed XIOS_ORCHIDEE_OK y
81    fi   
82
83    SRF_WriteFrequency=$( echo ${config_SRF_WriteFrequency} | sed -e 's/\([0-9]*[yYmMdDs]\).*/\1/' ) 
84    case ${SRF_WriteFrequency} in
85        *Y|*y) 
86            WriteInYears=$( echo ${SRF_WriteFrequency} | awk -F '[yY]' '{print $1}' )
87            PeriodLengthInYears=$( echo ${config_UserChoices_PeriodLength} | awk -F '[yY]' '{print $1}' )
88            (( SECHIBA_WRITE_STEP = PeriodLengthInDays * WriteInYears / PeriodLengthInYears * 86400 )) 
89            if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
90                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .TRUE.
91                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 output_freq ${WriteInYears}y
92                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 name sechiba_history
93            fi
94            ;;
95        1M)
96            if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
97                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .TRUE.
98                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 output_freq 1mo
99                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 name sechiba_history
100            fi
101            case ${config_UserChoices_PeriodLength} in
102            *Y|*y)
103                SECHIBA_WRITE_STEP=-1.
104                ;;
105            *M|*m)
106                SECHIBA_WRITE_STEP=-1.
107                ;;
108            *)
109                (( SECHIBA_WRITE_STEP = $( IGCM_date_DaysInMonth $year $month ) * 86400 ))
110                ;;
111            esac
112            ;;
113        *M|*m) 
114            WriteInMonths=$( echo ${SRF_WriteFrequency} | awk -F '[mM]' '{print $1}' )
115            if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
116                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .TRUE.
117                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 output_freq ${WriteInMonths}mo
118                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 name sechiba_history
119            fi
120            case ${config_UserChoices_PeriodLength} in
121            *Y|*y)
122                PeriodLengthInYears=$( echo ${config_UserChoices_PeriodLength} | awk -F '[yY]' '{print $1}' )
123                (( SECHIBA_WRITE_STEP = PeriodLengthInDays * 86400 / PeriodLengthInYears / 12  ))
124                ;;
125            *M|*m)
126                PeriodLengthInMonths=$( echo ${config_UserChoices_PeriodLength} | awk -F '[mM]' '{print $1}' )
127                (( SECHIBA_WRITE_STEP = PeriodLengthInDays * WriteInMonths  * 86400 / PeriodLengthInMonths  ))
128                ;;
129            *)
130                (( SECHIBA_WRITE_STEP = $( IGCM_date_DaysInMonth $year $month ) * 86400 ))
131                if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
132                    ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .TRUE.
133                    ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 output_freq ${SECHIBA_WRITE_STEP}s
134                    ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 name sechiba_history
135                fi
136                ;;
137            esac
138            ;;
139        5D|5d) 
140            if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
141                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .TRUE.
142                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 output_freq 5d
143                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 name sechiba_history
144            fi
145            (( SECHIBA_WRITE_STEP = 5 * 86400 )) 
146            ;;
147        1D|1d) 
148            if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
149                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .TRUE.
150                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 output_freq 1d
151                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 name sechiba_history
152            fi
153            (( SECHIBA_WRITE_STEP = 86400 )) 
154            ;;
155        *s)
156            WriteInSeconds=$( echo ${SRF_WriteFrequency} | awk -F '[s]' '{print $1}' )
157            if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
158                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 enabled .TRUE.
159                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 output_freq ${WriteInSeconds}s
160                ORCHIDEE_sed_xml file_def_orchidee.xml sechiba1 name sechiba_history
161            fi
162            (( SECHIBA_WRITE_STEP = WriteInSeconds )) ;;
163        *) 
164            IGCM_debug_Exit "SRF_Update " ${SRF_WriteFrequency} " invalid WriteFrequency : choose in 1Y, 1M, 5D, 1D." 
165            IGCM_debug_Verif_Exit ;;
166    esac
167
168#Use of XIOS ouputs only
169
170    if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
171        (( SECHIBA_WRITE_STEP = 0 ))
172    fi
173    IGCM_comp_modifyDefFile nonblocker orchidee.def WRITE_STEP ${SECHIBA_WRITE_STEP}
174    IGCM_comp_modifyDefFile nonblocker orchidee.def SECHIBA_HISTLEVEL ${orchidee_UserChoices_sechiba_LEVEL}
175
176    # Outputs HF in HISTFILE2 if required
177    if [ X${SRF_ok_hf} = Xy ] ; then
178        IGCM_comp_modifyDefFile nonblocker orchidee.def SECHIBA_HISTFILE2 y
179        if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
180            ORCHIDEE_sed_xml file_def_orchidee.xml sechiba2 enabled .TRUE.
181            ORCHIDEE_sed_xml file_def_orchidee.xml sechiba2 output_freq 10800s
182            ORCHIDEE_sed_xml file_def_orchidee.xml sechiba2 name sechiba_out_2
183        fi
184    else
185        IGCM_comp_modifyDefFile nonblocker orchidee.def SECHIBA_HISTFILE2 n
186    fi
187    IGCM_comp_modifyDefFile nonblocker orchidee.def SECHIBA_HISTLEVEL2 1
188    IGCM_comp_modifyDefFile nonblocker orchidee.def WRITE_STEP2 10800.0
189
190    if ( [ ${CumulPeriod} -ne 1 ] || [ "${config_SRF_Restart}" != "n" ] ) ; then
191        IGCM_comp_modifyDefFile blocker orchidee.def SECHIBA_restart_in sechiba_rest_in.nc
192    else
193        IGCM_comp_modifyDefFile blocker orchidee.def SECHIBA_restart_in NONE
194    fi
195
196# Modify in orchidee.def VEGET_UPDATE and LAND_COVER_CHANGE if they are set in orchidee.card section UserChoices
197    if [ ! X${orchidee_UserChoices_VEGET_UPDATE} = X ] ; then
198        IGCM_comp_modifyDefFile blocker orchidee.def VEGET_UPDATE   ${orchidee_UserChoices_VEGET_UPDATE}
199    else
200        IGCM_comp_modifyDefFile blocker orchidee.def VEGET_UPDATE 0Y
201    fi
202    if [ ! X${orchidee_UserChoices_LAND_COVER_CHANGE} = X ] ; then
203        IGCM_comp_modifyDefFile blocker orchidee.def LAND_COVER_CHANGE ${orchidee_UserChoices_LAND_COVER_CHANGE}
204    else
205        IGCM_comp_modifyDefFile blocker orchidee.def LAND_COVER_CHANGE n
206    fi
207
208    #IGCM_sys_Cp ${RUN_DIR}/orchidee.def ${RUN_DIR}/run.def
209    #IGCM_sys_Put_Out ${RUN_DIR}/run.def ${R_SAVE}/${PREFIX}_run.def
210
211
212    if [ X${orchidee_UserChoices_XIOS} = Xy ] ; then
213    # Add include of orchidee context in iodef.xml
214    # In iodef.xml add on next line after "COMPONENT CONTEXT"
215    #  <context id="orchidee" src="./context_orchidee.xml"/>
216        echo '<context id="orchidee" src="./context_orchidee.xml"/>' > add.tmp
217        cp iodef.xml iodef.xml.tmp
218        sed -e "/COMPONENT CONTEXT/r add.tmp" \
219            iodef.xml.tmp > iodef.xml
220        rm iodef.xml.tmp add.tmp
221    fi
222
223    IGCM_debug_PopStack "SRF_Update"
224}
225
226#-----------------------------------------------------------------
227function SRF_Finalize
228{
229    IGCM_debug_PushStack "SRF_Finalize"
230
231    #IGCM_sys_Put_Out ${RUN_DIR}/used_run.def ${R_SAVE}/${PREFIX}_used_run.def
232
233    echo FINALIZE SRF !!!
234
235    IGCM_debug_PopStack "SRF_Finalize"
236}
Note: See TracBrowser for help on using the repository browser.