source: CONFIG/UNIFORM/v6/LMDZOR_v6/GENERAL/DRIVER/lmdz.driver @ 2321

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

Add error check if the year is not in forcing file for solar activity and GHG parameters.

LMDZOR_v6 : change default resolution to 96x95x39

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