source: CONFIG/UNIFORM/v6/IPSLCM6CHT/GENERAL/DRIVER/lmdz.driver @ 2480

Last change on this file since 2480 was 2480, checked in by jgipsl, 9 years ago

Correction for experiments with ce0l.

In lmdz.driver : use_filtre_fft is forced to be =n for the case ce0l. This is a temporary esay way to do. In more recent versions of LMDZ, ce0l is independent of this parameter. This parameter do not impact ce0l, it only stops the model for the dyn3d case.

File size: 33.1 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    if [ X${lmdz_UserChoices_XIOS}  = Xy ] ; then
341    # Default init : files are desactivated
342        IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth enabled .FALSE.
343        IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday enabled .FALSE.
344        IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf enabled .FALSE.
345#       IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h enabled .FALSE.
346#       IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm enabled .FALSE.
347        IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn enabled .FALSE.
348        IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC enabled .FALSE.
349        IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC enabled .FALSE.
350        IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC enabled .FALSE.
351
352    # Default output level : 5
353        IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth output_level 5
354        IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday output_level 5
355        IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf output_level 5
356#       IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h output_level 5
357#       IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm output_level 5
358        IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn output_level 5
359        IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC output_level 5
360        IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC output_level 5
361        IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC output_level 5
362     # Filling of XML files
363        if [ X${ok_mensuel} = Xy ] ; then
364            IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth enabled .TRUE.
365            IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth output_freq 1mo
366            IGCM_comp_modifyXmlFile force file_def_histmth_lmdz.xml histmth name histmth
367        fi
368        if [ X${ok_journe} = Xy ] ; then       
369            IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday enabled .TRUE.
370            IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday output_freq 1d
371            IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday name histday
372            if [ X${OutLevel} = Xlow ] || [ X${OutLevel} = Xmedium ] ; then
373                IGCM_comp_modifyXmlFile force file_def_histday_lmdz.xml histday output_level 2
374            fi
375        fi
376        if [ X${ok_hf} = Xy ] ; then
377            IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf enabled .TRUE.
378            IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf output_freq 6h
379            IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf name histhf
380            if [ X${OutLevel} = Xlow ] ; then
381                IGCM_comp_modifyXmlFile force file_def_histhf_lmdz.xml histhf output_level 2
382            fi
383        fi     
384#       if [ X${ok_hf3h} = Xy ] ; then
385#           IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h enabled .TRUE.
386#           IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h output_freq 3h
387#           IGCM_comp_modifyXmlFile force file_def_histhf3h_lmdz.xml histhf3h name histhf3h
388#       fi     
389#       if [ X${ok_hf3hm} = Xy ] ; then
390#           IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm enabled .TRUE.
391#           IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm output_freq 3h
392#           IGCM_comp_modifyXmlFile force file_def_histhf3hm_lmdz.xml histhf3hm name histhf3hm
393#       fi
394        if [ X${ok_stn} = Xy ] ; then
395            IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn enabled .TRUE.
396            IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn output_freq 1800s
397            IGCM_comp_modifyXmlFile force file_def_histstn_lmdz.xml histstn name histstn
398        fi
399        if [ X${LMDZ_NMC_monthly} = Xy ] ; then
400            IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC enabled .TRUE.
401            IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC output_freq 1mo
402            IGCM_comp_modifyXmlFile force file_def_histmthNMC_lmdz.xml histmthNMC name histmthNMC
403        fi
404        if [ X${LMDZ_NMC_daily} = Xy ] ; then
405            IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC enabled .TRUE.
406            IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC output_freq 1d
407            IGCM_comp_modifyXmlFile force file_def_histdayNMC_lmdz.xml histdayNMC name histdayNMC
408        fi
409        if [ X${LMDZ_NMC_hf} = Xy ] ; then
410            IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC enabled .TRUE.
411            IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC output_freq 6h
412            IGCM_comp_modifyXmlFile force file_def_histhfNMC_lmdz.xml histhfNMC name histhfNMC
413        fi
414    fi
415
416    ## gcm.def parameters :
417    # Modification of variable iphysiq depending on the physics
418    if [ X${LMDZ_Physics} = X"AP" ] ; then
419        if [ ${RESOL_ATM_3D} = 96x95x39 ]; then
420            value=10
421        elif [ ${RESOL_ATM_3D} = 144x142x39 ]; then
422            value=15
423        else
424            IGCM_debug_Print 1 "LMDZ_Physics=${LMDZ_Physics} has not been tested for the current resolution RESOL_ATM_3D=${RESOL_ATM_3D}. "
425            IGCM_debug_Print 1 "iphysiq must be defined for the current combination of resolution and phyiscs package"
426            IGCM_debug_Exit "You need to add a special case in lmdz.driver to handle the above combination."
427        fi
428    elif [ X${LMDZ_Physics} = X"NPv3.1" ] ; then
429        if  [ ${RESOL_ATM_3D} = 96x95x39 ] ; then
430            value=5
431        elif [ ${RESOL_ATM_3D} = 144x142x39 ] ; then
432            value=5
433        else
434            IGCM_debug_Print 1 "LMDZ_Physics=${LMDZ_Physics} has not been tested for the current resolution RESOL_ATM_3D=${RESOL_ATM_3D}. "
435            IGCM_debug_Print 1 "iphysiq must be defined for the current combination of resolution and phyiscs package"
436            IGCM_debug_Exit "You need to add a special case in lmdz.driver to handle the above combination."
437        fi
438    elif [ X${LMDZ_Physics} = X"NPv3.2" ] ; then
439        if [ ${RESOL_ATM_3D} = 96x95x39 ] ; then
440            value=5
441        elif [ ${RESOL_ATM_3D} = 144x142x39 ] ; then
442            value=5
443        elif [ ${RESOL_ATM_3D} = 128x118x39 ] ; then
444            value=15
445        else
446            IGCM_debug_Print 1 "LMDZ_Physics=${LMDZ_Physics} has not been tested for the current resolution RESOL_ATM_3D=${RESOL_ATM_3D}. "
447            IGCM_debug_Print 1 "iphysiq must be defined for the current combination of resolution and phyiscs package"
448            IGCM_debug_Exit "You need to add a special case in lmdz.driver to handle the above combination."
449        fi
450    else
451        # Take default value set in gcm.def
452        value=DEFAULT
453    fi
454    IGCM_comp_modifyDefFile nonblocker gcm.def iphysiq $value
455   
456
457    ## run.def parameters
458    IGCM_comp_modifyDefFile blocker run.def dayref   ${InitDay}
459    IGCM_comp_modifyDefFile blocker run.def nday     ${PeriodLengthInDays}
460    IGCM_comp_modifyDefFile blocker run.def raz_date ${RAZ_DATE}
461    IGCM_comp_modifyDefFile blocker run.def periodav ${LMDZ_periodav}
462    IGCM_comp_modifyDefFile nonblocker run.def adjust   ${LMDZ_adjust}
463
464    # Set anneeref different for gcm and ce0l
465    # Variable calend is different for a run with create_etat0_limit and the gcm
466    # Test if executable create_etat0_limit is present and lmdz.x is not present
467    if [ -f create_etat0_limit* ] || [ -f ce0l* ] && [ ! -f lmdz.x ] ; then
468        # for case ce0l : always take current year
469        IGCM_comp_modifyDefFile blocker run.def anneeref ${year}
470        IGCM_comp_modifyDefFile blocker run.def calend   ${CalendarTypeForCreate}
471
472        # Temporary, set use_filtre_fft=n because we now use dyn3d for ce0l version where fft is not implemented.
473        # In more recent versions of LMDZ, this will not be needed.
474        IGCM_comp_modifyDefFile force   run.def use_filtre_fft n
475    else
476        # for case gcm : take first year of simulation
477        IGCM_comp_modifyDefFile blocker run.def anneeref ${InitYear}
478        IGCM_comp_modifyDefFile blocker run.def calend   ${CalendarTypeForLmdz}
479    fi
480
481    # Activate creation of file grilles_gcm.nc only at first period
482    if [ ${CumulPeriod} -eq 1 ] ; then
483        IGCM_comp_modifyDefFile nonblocker run.def grilles_gcm_netcdf y
484    else
485        IGCM_comp_modifyDefFile nonblocker run.def grilles_gcm_netcdf n
486    fi
487
488    ## Determine from the variable ListOfComponents in config.card coupling to external models
489    ## and set corresponding parameters in run.def
490    echo ListOfComponents now running : ${config_ListOfComponents[*]}
491
492    if [ X${config_ListOfComponents_SRF} = Xorchidee ] ; then
493        echo "Activate ORCHIDEE, set VEGET=y in run.def"
494        IGCM_comp_modifyDefFile blocker run.def VEGET y
495    else
496        echo "No ORCHIDEE, set VEGET=n in run.def"
497        IGCM_comp_modifyDefFile blocker run.def VEGET n
498    fi
499
500    if [ X${config_ListOfComponents_CPL} = Xoasis ] ; then
501        echo "Activate coupling to ocean, set type_ocean=couple in run.def"
502        IGCM_comp_modifyDefFile blocker run.def type_ocean couple
503    else
504        echo "LMDZ is running in forced mode without ocean model, set type_ocean=force in run.def"
505        IGCM_comp_modifyDefFile blocker run.def type_ocean force
506    fi
507
508    if [ X${config_ListOfComponents_CHM} = Xinca ] ; then
509        echo "Activate coupling to INCA, set type_trac=inca in run.def"
510        IGCM_comp_modifyDefFile blocker run.def type_trac inca
511    elif [ X${config_ListOfComponents_CHM} = Xreprobus ] ; then
512        echo "Activate coupling to REPROBUS, set type_trac=repr in run.def"
513        IGCM_comp_modifyDefFile blocker run.def type_trac repr
514        IGCM_comp_modifyDefFile blocker run.def config_inca none
515    else
516        echo "No coupling to chemistry model, set type_trac=lmdz in run.def"
517        IGCM_comp_modifyDefFile blocker run.def type_trac lmdz
518        IGCM_comp_modifyDefFile blocker run.def config_inca none
519    fi
520
521
522    # config.def : Activate direct radiative effect if ok_ade=y
523    if [ ! X${lmdz_UserChoices_ok_ade} = X ]; then
524        IGCM_comp_modifyDefFile nonblocker config.def ok_ade ${lmdz_UserChoices_ok_ade}
525    else
526        IGCM_comp_modifyDefFile nonblocker config.def ok_ade n
527    fi 
528
529    # config.def : Activate indirect radiative effect if ok_aie=y
530    if [ ! X${lmdz_UserChoices_ok_aie} = X ]; then
531        IGCM_comp_modifyDefFile nonblocker config.def ok_aie ${lmdz_UserChoices_ok_aie}
532    else
533        IGCM_comp_modifyDefFile nonblocker config.def ok_aie n
534    fi 
535
536    # config.def : Activate online aerosol coupled model if aerosol_couple=y
537    if [ ! X${lmdz_UserChoices_aerosol_couple} = X ]; then
538        IGCM_comp_modifyDefFile nonblocker config.def aerosol_couple ${lmdz_UserChoices_aerosol_couple}
539    else
540        IGCM_comp_modifyDefFile nonblocker config.def aerosol_couple n
541    fi 
542
543    # config.def : Activate reading of ozone in climatology if read_climoz=2
544    if [ ! X${lmdz_UserChoices_read_climoz} = X ]; then
545        IGCM_comp_modifyDefFile nonblocker config.def read_climoz ${lmdz_UserChoices_read_climoz}
546    else
547        IGCM_comp_modifyDefFile nonblocker config.def read_climoz 0     
548    fi 
549
550    # config.def : Choose aerosol use in radiative effect
551    #  type of coupled aerosol =1 (default) =2 => bc  only =3 => pom only =4 => seasalt only
552    # =5 => dust only =6 => all aerosol   
553    if [ ! X${lmdz_UserChoices_flag_aerosol} = X ]; then
554        IGCM_comp_modifyDefFile nonblocker config.def flag_aerosol ${lmdz_UserChoices_flag_aerosol}
555    else
556        IGCM_comp_modifyDefFile nonblocker config.def flag_aerosol 0
557    fi 
558
559    # config.def : Activate calcul of Cloud droplet number concentration if ok_cdnc=y
560    if [ ! X${lmdz_UserChoices_ok_cdnc} = X ]; then
561        IGCM_comp_modifyDefFile nonblocker config.def ok_cdnc ${lmdz_UserChoices_ok_cdnc}
562    else
563        IGCM_comp_modifyDefFile nonblocker config.def ok_cdnc n
564    fi 
565
566    # guide.def : Activate nudging if ok_guide=y set in lmdz.card
567    if [ ! X${lmdz_UserChoices_ok_guide} = X ] ; then
568        IGCM_comp_modifyDefFile nonblocker guide.def ok_guide  ${lmdz_UserChoices_ok_guide}
569    else
570        IGCM_comp_modifyDefFile nonblocker guide.def ok_guide n
571    fi
572
573    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
574    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
575    if [ X"${ByPass_hgardfou_teta}" = X"y" ] ; then
576        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
577        IGCM_sys_Mv gcm.def.tmp gcm.def
578        echo
579        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
580        echo
581        cat gcm.def
582        ByPass_hgardfou_teta=n
583        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
584    fi
585
586    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
587    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
588    if [ X"${ByPass_hgardfou_mats}" = X"y" ] ; then
589        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
590        IGCM_sys_Mv gcm.def.tmp gcm.def
591        echo
592        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
593        echo
594        cat gcm.def
595        ByPass_hgardfou_mats=n
596        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
597    fi
598
599    if [ X${lmdz_UserChoices_XIOS}  = Xy ] ; then
600    # Add include of LMDZ context in iodef.xml
601    # In iodef.xml add on next line after "COMPONENT CONTEXT"
602    #  <context id="LMDZ" src="./context_lmdz.xml"/>
603        echo '<context id="LMDZ" src="./context_lmdz.xml"/>' > add.tmp
604        cp iodef.xml iodef.xml.tmp
605        sed -e "/COMPONENT CONTEXT/r add.tmp" \
606            iodef.xml.tmp > iodef.xml
607        rm iodef.xml.tmp add.tmp
608
609        # Set ok_all_xml=y in run.def
610        IGCM_comp_modifyDefFile nonblocker run.def ok_all_xml y
611    else
612        # Deactivate ok_all_xml in run.def
613        IGCM_comp_modifyDefFile nonblocker run.def ok_all_xml n
614    fi
615   
616    IGCM_debug_PopStack "ATM_Update"
617}
618
619#-----------------------------------
620function ATM_Finalize
621{
622    IGCM_debug_PushStack "ATM_Finalize"
623
624    # If the file exist, copy Bands_ file to PARAM/ in submit directory. This file will be used for the simulation.
625    # Copy also the same file into ATM/Restart at ARCHIVE directory for backup.
626    if [ -f Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ] ; then
627      if [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] ; then
628        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}
629        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}
630      elif [ ${CumulPeriod} -eq 1 ] && [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
631        # Special case : first period and no adjust => Save bands file with suffix _0
632        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
633        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
634      fi
635    fi
636
637    # Add special treatement for CARBON CYCLE
638    if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
639        ATM_Carbon_Finalize
640    fi
641
642    echo FINALIZE ATM !
643
644    IGCM_debug_PopStack "ATM_Finalize"
645}
646
647
648
649function ATM_Carbon_Update
650{
651    # This fuction will be called only if CARBON_CYCLE is set to control or historical in lmdz.card
652
653    IGCM_debug_PushStack "ATM_Carbon_Update"
654
655    typeset InitPeriodCo2 InitDateBeginCo2 InitDateEndCo2
656    typeset CO2SBG CO2MBG CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
657    typeset PathCO2log
658    typeset PreviousLinelog LastPeriodDateBegin LastPeriodDateEnd LastDatesPeriod LastPREFIX
659   
660    if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"n" ] ) ; then
661        ##--Initialization of fluxes to an undefined value at the first run
662        UndefinedValueCo2=-9999
663        InitPeriodCo2=0
664        InitDateBeginCo2=${UndefinedValueCo2}
665        InitYearCo2=$(( ${year} - 1 )) 
666        InitDateEndCo2=${InitYearCo2}1231
667        fCO2_ff=${UndefinedValueCo2} 
668        CO2SBG=${UndefinedValueCo2}
669        CO2LU=${UndefinedValueCo2}
670        CO2MBG=${UndefinedValueCo2}
671        CO2_ppm_prec=${UndefinedValueCo2}
672        # Get the initial value of atmosp. pco2
673        CO2_ppm=${lmdz_UserChoices_co2_init}
674       
675        IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
676        IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
677       
678        # Save CO2 values in ExeCpuLog variable contents 5 fields
679        echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
680            gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
681                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
682       
683        # Get the path where the log file co2.log is
684        PathCO2log=${SUBMIT_DIR} 
685        # Get Previous line in co2.log
686        PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
687       
688    else
689       
690        # NEW parameter in config.card (even for Overule all restarts, you must modify the line after this comment ):
691        # !! NEW for Carbone cycle !! Path where to find old co2.log file for restart CO2.
692        #SubmitRestartPath=
693        if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"y" ] ) ; then
694            IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ATM SubmitRestartPath
695            PathCO2log=${config_ATM_SubmitRestartPath}
696            Date_r=$( IGCM_date_ConvertFormatToGregorian ${config_ATM_RestartDate} )
697            PreviousLinelog=$( grep ${Date_r} ${PathCO2log}/co2.log )
698           
699            IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
700            IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
701           
702            # Save Last Line of control in new co2.log file
703            InitPeriodCo2=0   
704            InitDateBeginCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $2}' )
705            InitDateEndCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $3}' )
706            fCO2_ff=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $6}' )
707            CO2SBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $8}' )
708            CO2LU=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $9}' )
709            CO2MBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $7}' )
710            CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $5}' )
711            CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
712           
713            echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
714                gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
715                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
716        else
717           # Get restart line in co2.log
718            PathCO2log=${SUBMIT_DIR}
719            PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
720           # Get the value of atmosp. pco2 in co2.log
721            CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
722        fi
723       
724    fi
725   
726    if [ ${lmdz_UserChoices_CARBON_CYCLE} = historical ] ; then
727            # Modify co2_ppm in config.def only for historical run
728            # If not historical run, keep co2_ppm value set earlier by IGCM_comp_modifyDefFile
729        IGCM_comp_modifyDefFile nonblocker config.def co2_ppm     ${CO2_ppm}
730    fi
731    IGCM_debug_PopStack "ATM_Carbon_Update"
732}
733
734
735function ATM_Carbon_Finalize
736{
737    # This fuction will be called only if CARBON_CYCLE is set to control or historical in lmdz.card
738
739    IGCM_debug_PushStack "ATM_Carbon_Finalize"
740
741    typeset CO2SBG_3V CO2SBG CO2MBG CO2SRF CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
742   
743        # Fossil fuel emission
744    if [ ${lmdz_UserChoices_CARBON_CYCLE} = control ] ; then
745            # For Control, no fossil fuel emission :
746        fCO2_ff=0
747        echo "Fossil Fuel for control run  :" ${fCO2_ff}
748    else
749            # For historical, get the fossile fuel file :
750        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 )
751        echo "Fossil Fuel for historical run  :" ${fCO2_ff}
752    fi
753   
754        # Get the value of ocean carbon flux
755    CO2MBG=$( ${SUBMIT_DIR}/COMP/lmdz_analyse_pisces_out.awk ocean.output )
756    CO2MBG=$( echo ${CO2MBG} | sed -e "s/ *//" )
757    echo "Ocean carbon flux  :" ${CO2MBG}
758   
759        # Get the value of land fluxes
760    set +A CO2SBG_3V -- $( ${SUBMIT_DIR}/COMP/lmdz_analyse_stomate_out.awk out_orchidee_0000 )
761    CO2SRF=$( echo ${CO2SBG_3V[0]} | sed -e "s/ *//" )
762    CO2LU=$( echo ${CO2SBG_3V[1]} | sed -e "s/ *//" )
763    CO2SBG=$( echo ${CO2SBG_3V[2]} | sed -e "s/ *//" )
764    echo "Land carbon flux (NEP)         :" ${CO2SRF}
765    echo "LU flux          (FLUC)        :" ${CO2LU}
766    echo "Total Land carbon flux (NBP)   :" ${CO2SBG}
767   
768        # Previous CO2
769    CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
770    echo "Previous CO2  :" ${CO2_ppm_prec}
771   
772        # Formula
773    CO2_ppm=$( echo "${CO2_ppm_prec} + (${fCO2_ff} + ${CO2MBG} + ${CO2SBG}) / 2.12" | bc -l )
774    echo "New CO2  :" ${CO2_ppm}
775   
776        # Save CO2 values in ExeCpuLog variable contents 5 fields
777    echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
778        gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
779                           $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
780   
781    IGCM_debug_PopStack "ATM_Carbon_Finalize"
782}
Note: See TracBrowser for help on using the repository browser.