source: CONFIG/UNIFORM/v6/IPSLCM6/GENERAL/DRIVER/lmdz.driver @ 2343

Last change on this file since 2343 was 2343, checked in by aclsce, 10 years ago

Modifed to have same handling of XIOS xml files as in LMDZOR configuration.

File size: 31.2 KB
Line 
1#!/bin/ksh
2#-----------------------------------------------------------------
3function ATM_Initialize
4{
5    IGCM_debug_PushStack "ATM_Initialize"
6
7    RESOL_ATM=$( echo $RESOL | awk "-Fx" '{print $2}' | awk "-F-" '{print $1}')
8
9    [ -f ${SUBMIT_DIR}/../.resol ] && eval $(grep RESOL_ATM_3D ${SUBMIT_DIR}/../.resol) || RESOL_ATM_3D=96x95x39
10
11    RESOL_ATM_Z=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $3}' )
12    RESOL_ATM_X=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $1}' )
13    RESOL_ATM_Y=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $2}' )
14    RESOL_ATM_XY="${RESOL_ATM_X}x${RESOL_ATM_Y}"
15
16    ##-- Calendar type for LMDZ and create_etat0_limit
17    case ${config_UserChoices_CalendarType} in
18        leap|gregorian)
19            CalendarTypeForLmdz=earth_366d
20            CalendarTypeForCreate=gregorian;;
21        noleap)
22            CalendarTypeForLmdz=earth_365d
23            CalendarTypeForCreate=${CalendarTypeForLmdz};;
24        360d)
25            CalendarTypeForLmdz=earth_360d
26            CalendarTypeForCreate=${CalendarTypeForLmdz};;
27        *)
28            CalendarTypeForLmdz=earth_360d
29            CalendarTypeForCreate=${CalendarTypeForLmdz}
30    esac
31
32    ##- LMDZ physics version
33    ##  Read LMDZ_Physics option in lmdz.card, if not present take default value AP (old physics)
34    if [ ! X${lmdz_UserChoices_LMDZ_Physics} = X ] ; then
35        LMDZ_Physics=${lmdz_UserChoices_LMDZ_Physics}
36    else
37        LMDZ_Physics=AP
38    fi
39    echo LMDZ physics version : ${LMDZ_Physics}
40
41    ##- Create_etat0_limit version
42    ##  Define variable CREATE only if it is set in lmdz.card section UserChoices.
43    ##  This variable is only used in lmdz.card to choose input files.
44    if [ ! X${lmdz_UserChoices_CREATE} = X ] ; then
45        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices CREATE
46        CREATE=${lmdz_UserChoices_CREATE}
47        echo create_etat0_limit version : ${CREATE}
48    fi
49
50
51    ## - LMDZ choice of config.def file
52    ##   ConfType must be set in lmdz.card
53    ConfType=${lmdz_UserChoices_ConfType}
54
55    ##- LMDZ output level, to be set in lmdz.card
56    if [ X${lmdz_UserChoices_OutLevel} = X ] ; then
57        # OutLevel is not set. Take default value low.
58        OutLevel=low
59    else
60        OutLevel=${lmdz_UserChoices_OutLevel}
61    fi
62
63    ##-- Output frequency purpose ....
64    ##--  Initialisation  ....
65    ok_mensuel=n
66    ok_journe=n
67    ok_hf=n
68    ok_hf3h=n
69    ok_hf3hm=n
70    ok_stn=n
71
72    case ${config_UserChoices_PeriodLength} in
73        1Y|1y|1M|1m) ok_mensuel=y ;;
74        5D|5d|1D|1d) ok_journe=y ;;
75    esac
76
77    for frequency in ${config_ATM_WriteFrequency} ; do
78        case ${frequency} in
79            1M|1m) ok_mensuel=y ;;
80        esac
81        case ${frequency} in
82            5D|5d|1D|1d) ok_journe=y ;;
83        esac
84        case ${frequency} in
85            HF|hf) ok_hf=y ;;
86        esac
87        case ${frequency} in
88            HF3h|hf3h) ok_hf3h=y ;;
89        esac
90        case ${frequency} in
91            HF3hm|hf3hm) ok_hf3hm=y ;;
92        esac
93        case ${frequency} in
94            STN|stn) ok_stn=y ;;
95        esac
96    done
97
98    ## Read LMDZ_NbPeriod_adjust option in lmdz.card
99    if [ X"${lmdz_UserChoices_LMDZ_NbPeriod_adjust}" = X"" ] ; then
100        # The variable is not in lmdz.card, set default value
101        LMDZ_NbPeriod_adjust=0
102    else       
103        LMDZ_NbPeriod_adjust=${lmdz_UserChoices_LMDZ_NbPeriod_adjust}
104    fi
105
106    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
107        LMDZ_Bands_file_name=${lmdz_UserChoices_LMDZ_Bands_file_name}
108    fi
109
110
111    ##  Read LMDZ_COSP_OK in lmdz.card
112    if [ ! X${lmdz_UserChoices_LMDZ_COSP_OK} = X ] ; then
113        LMDZ_COSP_OK=${lmdz_UserChoices_LMDZ_COSP_OK}
114    else
115        LMDZ_COSP_OK=n
116    fi
117    ##  Read LMDZ_COSP_monthly in lmdz.card
118    if [ ! X${lmdz_UserChoices_LMDZ_COSP_monthly} = X ] ; then
119        LMDZ_COSP_monthly=${lmdz_UserChoices_LMDZ_COSP_monthly}
120    else
121        LMDZ_COSP_monthly=n
122    fi
123    ##  Read LMDZ_COSP_daily in lmdz.card
124    if [ ! X${lmdz_UserChoices_LMDZ_COSP_daily} = X ] ; then
125        LMDZ_COSP_daily=${lmdz_UserChoices_LMDZ_COSP_daily}
126    else
127        LMDZ_COSP_daily=n
128    fi
129    ##  Read LMDZ_COSP_hf in lmdz.card
130    if [ ! X${lmdz_UserChoices_LMDZ_COSP_hf} = X ] ; then
131        LMDZ_COSP_hf=${lmdz_UserChoices_LMDZ_COSP_hf}
132    else
133        LMDZ_COSP_hf=n
134    fi
135
136    ##  Read LMDZ_NMC_monthly in lmdz.card
137    if [ ! X${lmdz_UserChoices_LMDZ_NMC_monthly} = X ] ; then
138        LMDZ_NMC_monthly=${lmdz_UserChoices_LMDZ_NMC_monthly}
139    else
140        LMDZ_NMC_monthly=n
141    fi
142
143    ## Read LMDZ_NMC_daily in lmdz.card
144    if [ ! X${lmdz_UserChoices_LMDZ_NMC_daily} = X ] ; then
145        LMDZ_NMC_daily=${lmdz_UserChoices_LMDZ_NMC_daily}
146    else
147        LMDZ_NMC_daily=n
148    fi
149   
150    ## Read LMDZ_NMC_hf in lmdz.card
151    if [ ! X${lmdz_UserChoices_LMDZ_NMC_hf} = X ] ; then
152        LMDZ_NMC_hf=${lmdz_UserChoices_LMDZ_NMC_hf}
153    else
154        LMDZ_NMC_hf=n
155    fi
156
157
158    IGCM_debug_PopStack "ATM_Initialize"
159}
160
161#-----------------------------------------------------------------
162function ATM_Update
163{
164    IGCM_debug_PushStack "ATM_Update"
165
166
167    case ${config_UserChoices_PeriodLength} in
168        *Y|*y) 
169               LMDZ_ecrit_ISCCP=30.
170               LMDZ_periodav=30.
171               if [ "${config_UserChoices_CalendarType}" != "360d" ] ; then
172                  echo Do not consider following warning if your running create_etat0_limit :
173                  echo WARNING !!! For lmdz : calendartype in config.card. PeriodLength=1Y allowed only for CalendarType=360d
174               fi
175               ;;
176        *)
177               LMDZ_ecrit_ISCCP=${PeriodLengthInDays}.
178               LMDZ_periodav=${PeriodLengthInDays}.
179               ;;
180    esac
181 
182    ##-- Remise ou non a zero de la date initiale de LMDZ pour le fichier run.def
183    if [ ${CumulPeriod} -eq 1 ] ; then
184        RAZ_DATE=1
185    else
186        RAZ_DATE=0
187    fi
188
189    ## Algorithme for special treatment for Bands_xxx file
190    ## For CumulPeriod=1 ;
191    ##        IF NbPeriod_Adjust = 0 ; set LMDZ_adjust=n
192    ##                                IF LMDZ_Bands_file_name was given in lmdz.card THEN Get Bands file directly from server. Store it later with _0 suffix.
193    ##                                IF no LMDZ_Bands_file_name was given, start without Bands file. Store it later with _0 suffix.
194    ##        ELSE set LMDZ_adjust=y ; start without Bands file ; Store it later in PARAM/ directory in submit directory with suffix _1 ;
195    ##
196    ## For CumulPeriod=2 to LMDZ_NbPeriod_adjust ;
197    ##       Get Bands file from PARAM/ in submit directory (CumulPeriod-1) ; set LMDZ_adjust=y ; Store Bands file in PARAM/ ;
198    ##
199    ## For CumulPeriod > LMDZ_NbPeriod_adjust ; LMDZ_adjust=n ; Get Bands file from PARAM/ ; Do not store ;
200
201    if [ ${CumulPeriod} -eq 1 ] ; then
202        if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
203            if [ ! X${LMDZ_Bands_file_name} = X ] ; then
204                IGCM_sys_Get ${LMDZ_Bands_file_name} Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat
205                IGCM_sys_Chmod u+w Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat
206                IGCM_debug_Print 1 "Bands file forced to ${LMDZ_Bands_file_name} and stored in ${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_0"
207            fi
208        fi
209    fi
210
211    LMDZ_adjust=n
212    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
213
214    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
215    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
216
217    # Get Bands file from PARAM directory if file exist
218    if ( [ ${CumulPeriod} -gt 1 ] && [ -f ${SUBMIT_DIR}/PARAM/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_${RefPeriod} ] ) ; then
219        IGCM_sys_Cp ${SUBMIT_DIR}/PARAM/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_${RefPeriod} Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat
220        IGCM_sys_Chmod u+w Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat
221    fi
222
223    ##-- GHG forcing :
224    ##   If forcing file exist in run directory, read values for the current year
225    ##   and set in config.def. If not use the default value set in config.def
226
227    # Read value for solaire from file SOLARANDVOLCANOES.txt. If file not existing, take DEFAULT value from file.
228    if [ -f SOLARANDVOLCANOES.txt ] ; then
229        value=`grep Annee_${year} SOLARANDVOLCANOES.txt | awk -F= '{print $2}'`
230        if [ X"${value}" = X ] ; then
231            # The grep returned empty variable, stop execution
232            IGCM_debug_Exit "The file SOLARANDVOLCANOES.txt do not contain the current year."
233            IGCM_debug_Verif_Exit
234        fi
235    else
236        value=DEFAULT
237    fi
238    IGCM_comp_modifyDefFile nonblocker config.def solaire $value
239
240
241    # Read value for co2_ppm from file CO2.txt. If file not existing, take DEFAULT value from file.
242    if [ -f CO2.txt ] ; then
243        value=`grep Annee_${year} CO2.txt | awk -F= '{print $2}'`
244        if [ X"${value}" = X ] ; then
245            # The grep returned empty variable, stop execution
246            IGCM_debug_Exit "The file CO2.txt do not contain the current year."
247            IGCM_debug_Verif_Exit
248        fi
249    else
250        value=DEFAULT
251    fi
252    IGCM_comp_modifyDefFile nonblocker config.def co2_ppm $value
253
254
255    # Read value for CH4_ppb from file CH4.txt. If file not existing, take DEFAULT value from file.
256    if [ -f CH4.txt ] ; then
257        value=`grep Annee_${year} CH4.txt | awk -F= '{print $2}'`
258        if [ X"${value}" = X ] ; then
259            # The grep returned empty variable, stop execution
260            IGCM_debug_Exit "The file CH4.txt do not contain the current year."
261            IGCM_debug_Verif_Exit
262        fi
263    else
264        value=DEFAULT
265    fi
266    IGCM_comp_modifyDefFile nonblocker config.def CH4_ppb $value
267
268
269    # Read value for N2O_ppb from file N2O.txt. If file not existing, take DEFAULT value from file.
270    if [ -f N2O.txt ] ; then
271        value=`grep Annee_${year} N2O.txt | awk -F= '{print $2}'`
272        if [ X"${value}" = X ] ; then
273            # The grep returned empty variable, stop execution
274            IGCM_debug_Exit "The file N2O.txt do not contain the current year."
275            IGCM_debug_Verif_Exit
276        fi
277    else
278        value=DEFAULT
279    fi
280    IGCM_comp_modifyDefFile nonblocker config.def N2O_ppb $value
281
282    # Read value for CFC11_ppt from file CFC11.txt. If file not existing, take DEFAULT value from file.
283    if [ -f CFC11.txt ] ; then
284        value=`grep Annee_${year} CFC11.txt | awk -F= '{print $2}'`
285        if [ X"${value}" = X ] ; then
286            # The grep returned empty variable, stop execution
287            IGCM_debug_Exit "The file CFC11.txt do not contain the current year."
288            IGCM_debug_Verif_Exit
289        fi
290    else
291        value=DEFAULT
292    fi
293    IGCM_comp_modifyDefFile nonblocker config.def CFC11_ppt $value
294
295
296    # Read value for CFC12_ppt from file CFC12.txt. If file not existing, take DEFAULT value from file.
297    if [ -f CFC12.txt ] ; then
298        value=`grep Annee_${year} CFC12.txt | awk -F= '{print $2}'`
299        if [ X"${value}" = X ] ; then
300            # The grep returned empty variable, stop execution
301            IGCM_debug_Exit "The file CFC12.txt do not contain the current year."
302            IGCM_debug_Verif_Exit
303        fi
304    else
305        value=DEFAULT
306    fi
307    IGCM_comp_modifyDefFile nonblocker config.def CFC12_ppt $value
308
309
310    ## Coupling Time Step : Take value of FreqCoupling set in oasis.card or if it is not set, take default value 86400
311    LMDZ_t_coupl=${oasis_UserChoices_FreqCoupling:-86400}
312    IGCM_debug_Print 3 "LMDZ_t_coupl "   ${LMDZ_t_coupl}
313    IGCM_comp_modifyDefFile nonblocker config.def t_coupl   ${LMDZ_t_coupl} 
314
315    ##-- Add special treatement for CARBON CYCLE
316    if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
317        ATM_Carbon_Update
318    fi
319
320
321    ##-- Set LMDZ_COSP_daily1979=y in section UserChoices in lmdz.card to activate
322    ##   COSP daily output for years 1979 and later (mandatory for historical CMIP5 run).
323    if ([ X"${lmdz_UserChoices_LMDZ_COSP_daily1979}" = X"y" ] &&  [ ${year} -ge 1979 ]) ; then
324        LMDZ_COSP_daily=y
325    fi
326
327
328    ## output.def parameters
329    #  columns in phys_output_filekeys refer to the filenames given in phys_out_filenames in output.def : 
330    #                                            histmth       histday        histhf    histhf3h   histhf3hm   histstn
331    IGCM_comp_modifyDefFile nonblocker output.def phys_out_filekeys "${ok_mensuel} ${ok_journe}   ${ok_hf}  ${ok_hf3h} ${ok_hf3hm} ${ok_stn}"
332    IGCM_comp_modifyDefFile nonblocker output.def ecrit_ISCCP ${LMDZ_ecrit_ISCCP}
333    IGCM_comp_modifyDefFile nonblocker output.def ok_cosp     ${LMDZ_COSP_OK}
334    IGCM_comp_modifyDefFile nonblocker output.def ok_mensuelCOSP  ${LMDZ_COSP_monthly}
335    IGCM_comp_modifyDefFile nonblocker output.def ok_journeCOSP   ${LMDZ_COSP_daily}
336    IGCM_comp_modifyDefFile nonblocker output.def ok_hfCOSP   ${LMDZ_COSP_hf}
337    IGCM_comp_modifyDefFile nonblocker output.def ok_histNMC  "${LMDZ_NMC_monthly} ${LMDZ_NMC_daily} ${LMDZ_NMC_hf}"
338
339    # XIOS XML definition
340    # Default init : files are desactivated
341        IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth enabled .FALSE.
342        IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday enabled .FALSE.
343        IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf enabled .FALSE.
344#       IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h enabled .FALSE.
345#       IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm enabled .FALSE.
346        IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn enabled .FALSE.
347        IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC enabled .FALSE.
348        IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC enabled .FALSE.
349        IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC enabled .FALSE.
350        if [ X${lmdz_UserChoices_XIOS}  = Xy ] ; then
351    # Default output level : 5
352            IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth output_level 5
353            IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday output_level 5
354            IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf output_level 5
355#           IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h output_level 5
356#           IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm output_level 5
357            IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn output_level 5
358            IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC output_level 5
359            IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC output_level 5
360            IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC output_level 5
361     # Filling of XML files
362        if [ X${ok_mensuel} = Xy ] ; then
363            IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth enabled .TRUE.
364            IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth output_freq 1mo
365            IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth name histmth
366        fi
367        if [ X${ok_journe} = Xy ] ; then       
368            IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday enabled .TRUE.
369            IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday output_freq 1d
370            IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday name histday
371            if [ X${OutLevel} = Xlow ] || [ X${OutLevel} = Xmedium ] ; then
372                IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday output_level 2
373            fi
374        fi
375        if [ X${ok_hf} = Xy ] ; then
376            IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf enabled .TRUE.
377            IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf output_freq 6h
378            IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf name histhf
379            if [ X${OutLevel} = Xlow ] ; then
380                IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf output_level 2
381            fi
382        fi     
383#       if [ X${ok_hf3h} = Xy ] ; then
384#           IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h enabled .TRUE.
385#           IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h output_freq 3h
386#           IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h name histhf3h
387#       fi     
388#       if [ X${ok_hf3hm} = Xy ] ; then
389#           IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm enabled .TRUE.
390#           IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm output_freq 3h
391#           IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm name histhf3hm
392#       fi
393        if [ X${ok_stn} = Xy ] ; then
394            IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn enabled .TRUE.
395            IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn output_freq 1800s
396            IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn name histstn
397        fi
398        if [ X${LMDZ_NMC_monthly} = Xy ] ; then
399            IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC enabled .TRUE.
400            IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC output_freq 1mo
401            IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC name histmthNMC
402        fi
403        if [ X${LMDZ_NMC_daily} = Xy ] ; then
404            IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC enabled .TRUE.
405            IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC output_freq 1d
406            IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC name histdayNMC
407        fi
408        if [ X${LMDZ_NMC_hf} = Xy ] ; then
409            IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC enabled .TRUE.
410            IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC output_freq 6h
411            IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC name histhfNMC
412        fi
413    fi
414
415    ## gcm.def parameters :
416    # Modification of variable iphysiq depending on the physics
417    if [ X${LMDZ_Physics} = X"AP" ] ; then
418        value=10
419    else
420        value=DEFAULT
421    fi
422    IGCM_comp_modifyDefFile nonblocker gcm.def iphysiq $value
423
424
425    ## run.def parameters
426    IGCM_comp_modifyDefFile blocker run.def dayref   ${InitDay}
427    IGCM_comp_modifyDefFile blocker run.def nday     ${PeriodLengthInDays}
428    IGCM_comp_modifyDefFile blocker run.def raz_date ${RAZ_DATE}
429    IGCM_comp_modifyDefFile blocker run.def periodav ${LMDZ_periodav}
430    IGCM_comp_modifyDefFile nonblocker run.def adjust   ${LMDZ_adjust}
431
432    # Set anneeref different for gcm and ce0l
433    # Variable calend is different for a run with create_etat0_limit and the gcm
434    # Test if executable create_etat0_limit is present and lmdz.x is not present
435    if [ -f create_etat0_limit* ] || [ -f ce0l* ] && [ ! -f lmdz.x ] ; then
436        # for case ce0l : always take current year
437        IGCM_comp_modifyDefFile blocker run.def anneeref ${year}
438        IGCM_comp_modifyDefFile blocker run.def calend   ${CalendarTypeForCreate}
439    else
440        # for case gcm : take first year of simulation
441        IGCM_comp_modifyDefFile blocker run.def anneeref ${InitYear}
442        IGCM_comp_modifyDefFile blocker run.def calend   ${CalendarTypeForLmdz}
443    fi
444
445    # Activate creation of file grilles_gcm.nc only at first period
446    if [ ${CumulPeriod} -eq 1 ] ; then
447        IGCM_comp_modifyDefFile nonblocker run.def grilles_gcm_netcdf y
448    else
449        IGCM_comp_modifyDefFile nonblocker run.def grilles_gcm_netcdf n
450    fi
451
452    ## Determine from the variable ListOfComponents in config.card coupling to external models
453    ## and set corresponding parameters in run.def
454    echo ListOfComponents now running : ${config_ListOfComponents[*]}
455
456    if [ X${config_ListOfComponents_SRF} = Xorchidee ] ; then
457        echo "Activate ORCHIDEE, set VEGET=y in run.def"
458        IGCM_comp_modifyDefFile blocker run.def VEGET y
459    else
460        echo "No ORCHIDEE, set VEGET=n in run.def"
461        IGCM_comp_modifyDefFile blocker run.def VEGET n
462    fi
463
464    if [ X${config_ListOfComponents_CPL} = Xoasis ] ; then
465        echo "Activate coupling to ocean, set type_ocean=couple in run.def"
466        IGCM_comp_modifyDefFile blocker run.def type_ocean couple
467    else
468        echo "LMDZ is running in forced mode without ocean model, set type_ocean=force in run.def"
469        IGCM_comp_modifyDefFile blocker run.def type_ocean force
470    fi
471
472    if [ X${config_ListOfComponents_CHM} = Xinca ] ; then
473        echo "Activate coupling to INCA, set type_trac=inca in run.def"
474        IGCM_comp_modifyDefFile blocker run.def type_trac inca
475    elif [ X${config_ListOfComponents_CHM} = Xreprobus ] ; then
476        echo "Activate coupling to REPROBUS, set type_trac=repr in run.def"
477        IGCM_comp_modifyDefFile blocker run.def type_trac repr
478        IGCM_comp_modifyDefFile blocker run.def config_inca none
479    else
480        echo "No coupling to chemistry model, set type_trac=lmdz in run.def"
481        IGCM_comp_modifyDefFile blocker run.def type_trac lmdz
482        IGCM_comp_modifyDefFile blocker run.def config_inca none
483    fi
484
485
486    # config.def : Activate direct radiative effect if ok_ade=y
487    if [ ! X${lmdz_UserChoices_ok_ade} = X ]; then
488        IGCM_comp_modifyDefFile nonblocker config.def ok_ade ${lmdz_UserChoices_ok_ade}
489    else
490        IGCM_comp_modifyDefFile nonblocker config.def ok_ade n
491    fi 
492
493    # config.def : Activate indirect radiative effect if ok_aie=y
494    if [ ! X${lmdz_UserChoices_ok_aie} = X ]; then
495        IGCM_comp_modifyDefFile nonblocker config.def ok_aie ${lmdz_UserChoices_ok_aie}
496    else
497        IGCM_comp_modifyDefFile nonblocker config.def ok_aie n
498    fi 
499
500    # config.def : Activate online aerosol coupled model if aerosol_couple=y
501    if [ ! X${lmdz_UserChoices_aerosol_couple} = X ]; then
502        IGCM_comp_modifyDefFile nonblocker config.def aerosol_couple ${lmdz_UserChoices_aerosol_couple}
503    else
504        IGCM_comp_modifyDefFile nonblocker config.def aerosol_couple n
505    fi 
506
507    # config.def : Activate reading of ozone in climatology if read_climoz=2
508    if [ ! X${lmdz_UserChoices_read_climoz} = X ]; then
509        IGCM_comp_modifyDefFile nonblocker config.def read_climoz ${lmdz_UserChoices_read_climoz}
510    else
511        IGCM_comp_modifyDefFile nonblocker config.def read_climoz 0     
512    fi 
513
514    # config.def : Choose aerosol use in radiative effect
515    #  type of coupled aerosol =1 (default) =2 => bc  only =3 => pom only =4 => seasalt only
516    # =5 => dust only =6 => all aerosol   
517    if [ ! X${lmdz_UserChoices_flag_aerosol} = X ]; then
518        IGCM_comp_modifyDefFile nonblocker config.def flag_aerosol ${lmdz_UserChoices_flag_aerosol}
519    else
520        IGCM_comp_modifyDefFile nonblocker config.def flag_aerosol 0
521    fi 
522
523    # config.def : Activate calcul of Cloud droplet number concentration if ok_cdnc=y
524    if [ ! X${lmdz_UserChoices_ok_cdnc} = X ]; then
525        IGCM_comp_modifyDefFile nonblocker config.def ok_cdnc ${lmdz_UserChoices_ok_cdnc}
526    else
527        IGCM_comp_modifyDefFile nonblocker config.def ok_cdnc n
528    fi 
529
530    # guide.def : Activate nudging if ok_guide=y set in lmdz.card
531    if [ ! X${lmdz_UserChoices_ok_guide} = X ] ; then
532        IGCM_comp_modifyDefFile nonblocker guide.def ok_guide  ${lmdz_UserChoices_ok_guide}
533    else
534        IGCM_comp_modifyDefFile nonblocker guide.def ok_guide n
535    fi
536
537    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
538    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
539    if [ X"${ByPass_hgardfou_teta}" = X"y" ] ; then
540        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
541        IGCM_sys_Mv gcm.def.tmp gcm.def
542        echo
543        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
544        echo
545        cat gcm.def
546        ByPass_hgardfou_teta=n
547        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
548    fi
549
550    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
551    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
552    if [ X"${ByPass_hgardfou_mats}" = X"y" ] ; then
553        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
554        IGCM_sys_Mv gcm.def.tmp gcm.def
555        echo
556        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
557        echo
558        cat gcm.def
559        ByPass_hgardfou_mats=n
560        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
561    fi
562
563    if [ X${lmdz_UserChoices_XIOS}  = Xy ] ; then
564    # Add include of LMDZ context in iodef.xml
565    # In iodef.xml add on next line after "COMPONENT CONTEXT"
566    #  <context id="LMDZ" src="./context_lmdz.xml"/>
567        echo '<context id="LMDZ" src="./context_lmdz.xml"/>' > add.tmp
568        cp iodef.xml iodef.xml.tmp
569        sed -e "/COMPONENT CONTEXT/r add.tmp" \
570            iodef.xml.tmp > iodef.xml
571        rm iodef.xml.tmp add.tmp
572    fi
573   
574    IGCM_debug_PopStack "ATM_Update"
575}
576
577#-----------------------------------
578function ATM_Finalize
579{
580    IGCM_debug_PushStack "ATM_Finalize"
581
582    # If the file exist, copy Bands_ file to PARAM/ in submit directory. This file will be used for the simulation.
583    # Copy also the same file into ATM/Restart at ARCHIVE directory for backup.
584    if [ -f Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ] ; then
585      if [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] ; then
586        IGCM_sys_Cp Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ${SUBMIT_DIR}/PARAM/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_${CumulPeriod}
587        IGCM_sys_Put_Out Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ${R_OUT_ATM_R}/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_${CumulPeriod}
588      elif [ ${CumulPeriod} -eq 1 ] && [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
589        # Special case : first period and no adjust => Save bands file with suffix _0
590        IGCM_sys_Cp Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ${SUBMIT_DIR}/PARAM/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_0
591        IGCM_sys_Put_Out Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ${R_OUT_ATM_R}/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_0
592      fi
593    fi
594
595    # Add special treatement for CARBON CYCLE
596    if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
597        ATM_Carbon_Finalize
598    fi
599
600    echo FINALIZE ATM !
601
602    IGCM_debug_PopStack "ATM_Finalize"
603}
604
605
606
607function ATM_Carbon_Update
608{
609    # This fuction will be called only if CARBON_CYCLE is set to control or historical in lmdz.card
610
611    IGCM_debug_PushStack "ATM_Carbon_Update"
612
613    typeset InitPeriodCo2 InitDateBeginCo2 InitDateEndCo2
614    typeset CO2SBG CO2MBG CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
615    typeset PathCO2log
616    typeset PreviousLinelog LastPeriodDateBegin LastPeriodDateEnd LastDatesPeriod LastPREFIX
617   
618    if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"n" ] ) ; then
619        ##--Initialization of fluxes to an undefined value at the first run
620        UndefinedValueCo2=-9999
621        InitPeriodCo2=0
622        InitDateBeginCo2=${UndefinedValueCo2}
623        InitYearCo2=$(( ${year} - 1 )) 
624        InitDateEndCo2=${InitYearCo2}1231
625        fCO2_ff=${UndefinedValueCo2} 
626        CO2SBG=${UndefinedValueCo2}
627        CO2LU=${UndefinedValueCo2}
628        CO2MBG=${UndefinedValueCo2}
629        CO2_ppm_prec=${UndefinedValueCo2}
630        # Get the initial value of atmosp. pco2
631        CO2_ppm=${lmdz_UserChoices_co2_init}
632       
633        IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
634        IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
635       
636        # Save CO2 values in ExeCpuLog variable contents 5 fields
637        echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
638            gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
639                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
640       
641        # Get the path where the log file co2.log is
642        PathCO2log=${SUBMIT_DIR} 
643        # Get Previous line in co2.log
644        PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
645       
646    else
647       
648        # NEW parameter in config.card (even for Overule all restarts, you must modify the line after this comment ):
649        # !! NEW for Carbone cycle !! Path where to find old co2.log file for restart CO2.
650        #SubmitRestartPath=
651        if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"y" ] ) ; then
652            IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ATM SubmitRestartPath
653            PathCO2log=${config_ATM_SubmitRestartPath}
654            Date_r=$( IGCM_date_ConvertFormatToGregorian ${config_ATM_RestartDate} )
655            PreviousLinelog=$( grep ${Date_r} ${PathCO2log}/co2.log )
656           
657            IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
658            IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
659           
660            # Save Last Line of control in new co2.log file
661            InitPeriodCo2=0   
662            InitDateBeginCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $2}' )
663            InitDateEndCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $3}' )
664            fCO2_ff=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $6}' )
665            CO2SBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $8}' )
666            CO2LU=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $9}' )
667            CO2MBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $7}' )
668            CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $5}' )
669            CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
670           
671            echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
672                gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
673                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
674        else
675           # Get restart line in co2.log
676            PathCO2log=${SUBMIT_DIR}
677            PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
678           # Get the value of atmosp. pco2 in co2.log
679            CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
680        fi
681       
682    fi
683   
684    if [ ${lmdz_UserChoices_CARBON_CYCLE} = historical ] ; then
685            # Modify co2_ppm in config.def only for historical run
686            # If not historical run, keep co2_ppm value set earlier by IGCM_comp_modifyDefFile
687        IGCM_comp_modifyDefFile nonblocker config.def co2_ppm     ${CO2_ppm}
688    fi
689    IGCM_debug_PopStack "ATM_Carbon_Update"
690}
691
692
693function ATM_Carbon_Finalize
694{
695    # This fuction will be called only if CARBON_CYCLE is set to control or historical in lmdz.card
696
697    IGCM_debug_PushStack "ATM_Carbon_Finalize"
698
699    typeset CO2SBG_3V CO2SBG CO2MBG CO2SRF CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
700   
701        # Fossil fuel emission
702    if [ ${lmdz_UserChoices_CARBON_CYCLE} = control ] ; then
703            # For Control, no fossil fuel emission :
704        fCO2_ff=0
705        echo "Fossil Fuel for control run  :" ${fCO2_ff}
706    else
707            # For historical, get the fossile fuel file :
708        fCO2_ff=$( gawk "{if (match(\$0,\"${year}\ *${month}\")) {print \$3}}" ${SUBMIT_DIR}/PARAM/CMIP5_gridcar_CO2_emissions_fossil_fuel_Andres_1751-2007_monthly_SC.txt )
709        echo "Fossil Fuel for historical run  :" ${fCO2_ff}
710    fi
711   
712        # Get the value of ocean carbon flux
713    CO2MBG=$( ${SUBMIT_DIR}/COMP/lmdz_analyse_pisces_out.awk ocean.output )
714    CO2MBG=$( echo ${CO2MBG} | sed -e "s/ *//" )
715    echo "Ocean carbon flux  :" ${CO2MBG}
716   
717        # Get the value of land fluxes
718    set +A CO2SBG_3V -- $( ${SUBMIT_DIR}/COMP/lmdz_analyse_stomate_out.awk out_orchidee_0000 )
719    CO2SRF=$( echo ${CO2SBG_3V[0]} | sed -e "s/ *//" )
720    CO2LU=$( echo ${CO2SBG_3V[1]} | sed -e "s/ *//" )
721    CO2SBG=$( echo ${CO2SBG_3V[2]} | sed -e "s/ *//" )
722    echo "Land carbon flux (NEP)         :" ${CO2SRF}
723    echo "LU flux          (FLUC)        :" ${CO2LU}
724    echo "Total Land carbon flux (NBP)   :" ${CO2SBG}
725   
726        # Previous CO2
727    CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
728    echo "Previous CO2  :" ${CO2_ppm_prec}
729   
730        # Formula
731    CO2_ppm=$( echo "${CO2_ppm_prec} + (${fCO2_ff} + ${CO2MBG} + ${CO2SBG}) / 2.12" | bc -l )
732    echo "New CO2  :" ${CO2_ppm}
733   
734        # Save CO2 values in ExeCpuLog variable contents 5 fields
735    echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
736        gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
737                           $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
738   
739    IGCM_debug_PopStack "ATM_Carbon_Finalize"
740}
Note: See TracBrowser for help on using the repository browser.