source: CONFIG/UNIFORM/v5/LMDZORINCA_v5/GENERAL/DRIVER/lmdz.driver @ 1779

Last change on this file since 1779 was 1779, checked in by jgipsl, 12 years ago

Modification to be able to run LMDZ4 with the same run.def as LMDZ5. In LMDZ4 config_inca=none is needed when running without inca. In LMDZ5, type_trac=lmdz is sufficient.
NB! LMDZ4 is not possible to use with INCA or REPROBUS.

File size: 20.3 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    sed -e "s/^${2}\ *=.*/${2}= ${3}/" ${1} > ${1}.tmp
10    RET=$?
11    echo "LMDZ_sed : ${1} ${2} ${3}"
12    \mv ${1}.tmp ${1}
13
14    IGCM_debug_PopStack "LMDZ_sed"
15    return $RET
16}
17function LMDZ_sed_default
18{
19# Usage : LMDZ_sed_default filedef var_name
20#         In file filedef modify the line  "var_name=xxx DEFAULT= myvalue"
21#         into "var_name=myvalue"
22    IGCM_debug_PushStack "LMDZ_sed_default"
23
24    DefValue=$( grep ${2} ${1}  | awk -F"DEFAULT.=*" '{print $2}')
25
26    LMDZ_sed  ${1} ${2} $DefValue
27    IGCM_debug_PopStack "LMDZ_sed_default"
28    return $RET
29}
30
31
32function ATM_Initialize
33{
34    IGCM_debug_PushStack "ATM_Initialize"
35
36    RESOL_ATM=$( echo $RESOL | awk "-Fx" '{print $2}' | awk "-F-" '{print $1}')
37
38    [ -f ${SUBMIT_DIR}/../.resol ] && eval $(grep RESOL_ATM_3D ${SUBMIT_DIR}/../.resol) || RESOL_ATM_3D=96x95x19
39
40    RESOL_ATM_Z=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $3}' )
41
42    ##-- Calendar type for LMDZ
43    case ${config_UserChoices_CalendarType} in
44        leap|gregorian)
45            CalendarTypeForLmdz=earth_366d;;
46        noleap)
47            CalendarTypeForLmdz=earth_365d;;
48        360d)
49            CalendarTypeForLmdz=earth_360d;;
50        *)
51            CalendarTypeForLmdz=earth_360d
52    esac
53
54    ##- LMDZ physics version
55    ##  Read LMDZ_Physics option in lmdz.card, if not present take default value AP (old physics)
56    if [ ! X${lmdz_UserChoices_LMDZ_Physics} = X ] ; then
57        LMDZ_Physics=${lmdz_UserChoices_LMDZ_Physics}
58    else
59        LMDZ_Physics=AP
60    fi
61    echo LMDZ physics version : ${LMDZ_Physics}
62
63    ##- Create_etat0_limit version
64    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices CREATE
65    CREATE=${lmdz_UserChoices_CREATE}
66    echo create_etat0_limit version : ${CREATE}
67
68    ## - LMDZ choice of config.def file
69    ##   ConfType must be set in lmdz.card
70    ConfType=${lmdz_UserChoices_ConfType}
71
72    ##- LMDZ output level, to be set in lmdz.card
73    if [ X${lmdz_UserChoices_OutLevel} = X ] ; then
74        # OutLevel is not set. Take default value low.
75        OutLevel=low
76    else
77        OutLevel=${lmdz_UserChoices_OutLevel}
78    fi
79
80    ##-- Output frequency purpose ....
81    ##--  Initialisation  ....
82    ok_mensuel=n
83    ok_journe=n
84    ok_hf=n
85    ok_hf3h=n
86    ok_hf3hm=n
87    ok_stn=n
88
89    case ${config_UserChoices_PeriodLength} in
90        1Y|1y|1M|1m) ok_mensuel=y ;;
91        5D|5d|1D|1d) ok_journe=y ;;
92    esac
93
94    for frequency in ${config_ATM_WriteFrequency} ; do
95        case ${frequency} in
96            1M|1m) ok_mensuel=y ;;
97        esac
98        case ${frequency} in
99            5D|5d|1D|1d) ok_journe=y ;;
100        esac
101        case ${frequency} in
102            HF|hf) ok_hf=y ;;
103        esac
104        case ${frequency} in
105            HF3h|hf3h) ok_hf3h=y ;;
106        esac
107        case ${frequency} in
108            HF3hm|hf3hm) ok_hf3hm=y ;;
109        esac
110        case ${frequency} in
111            STN|stn) ok_stn=y ;;
112        esac
113    done
114
115    ## Read LMDZ_NbPeriod_adjust option in lmdz.card
116    if [ X"${lmdz_UserChoices_LMDZ_NbPeriod_adjust}" = X"" ] ; then
117        # The variable is not in lmdz.card, set default value
118        LMDZ_NbPeriod_adjust=0
119    else       
120        LMDZ_NbPeriod_adjust=${lmdz_UserChoices_LMDZ_NbPeriod_adjust}
121    fi
122
123    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
124        LMDZ_Bands_file_name=${lmdz_UserChoices_LMDZ_Bands_file_name}
125    fi
126
127    ##  Read LMDZ_Freq_aero and LMDZ_Length_aero in lmdz.card
128    LMDZ_Freq_aero=${lmdz_UserChoices_LMDZ_Freq_aero}
129    LMDZ_Length_aero=${lmdz_UserChoices_LMDZ_Length_aero}
130
131    ##  Read LMDZ_COSP_monthly  LMDZ_COSP_daily and LMDZ_COSP_hf in lmdz.card
132    LMDZ_COSP_OK=${lmdz_UserChoices_LMDZ_COSP_OK}
133    LMDZ_COSP_monthly=${lmdz_UserChoices_LMDZ_COSP_monthly}
134    LMDZ_COSP_daily=${lmdz_UserChoices_LMDZ_COSP_daily}
135    LMDZ_COSP_hf=${lmdz_UserChoices_LMDZ_COSP_hf}
136
137    ##  Read LMDZ_NMC_monthly  LMDZ_NMC_daily and LMDZ_NMC_hf in lmdz.card
138    LMDZ_NMC_monthly=${lmdz_UserChoices_LMDZ_NMC_monthly}
139    LMDZ_NMC_daily=${lmdz_UserChoices_LMDZ_NMC_daily}
140    LMDZ_NMC_hf=${lmdz_UserChoices_LMDZ_NMC_hf}
141
142    IGCM_debug_PopStack "ATM_Initialize"
143}
144
145#-----------------------------------------------------------------
146function ATM_Update
147{
148    IGCM_debug_PushStack "ATM_Update"
149
150
151    case ${config_UserChoices_PeriodLength} in
152        *Y|*y) 
153               LMDZ_ecrit_ISCCP=30.
154               LMDZ_periodav=30.
155               if [ "${config_UserChoices_CalendarType}" != "360d" ] ; then
156                  echo Do not consider following warning if your running create_etat0_limit :
157                  echo WARNING !!! For lmdz : calendartype in config.card. PeriodLength=1Y allowed only for CalendarType=360d
158               fi
159               ;;
160        *)
161               LMDZ_ecrit_ISCCP=${PeriodLengthInDays}.
162               LMDZ_periodav=${PeriodLengthInDays}.
163               ;;
164    esac
165 
166    ##-- Remise ou non a zero de la date initiale de LMDZ pour le fichier run.def
167    if [ ${CumulPeriod} -eq 1 ] ; then
168        RAZ_DATE=1
169    else
170        RAZ_DATE=0
171    fi
172
173    ## algo : For CumulPeriod=1 ;
174    ##        IF NbPeriod_Adjust = 0, Get Bands file directly from server, store it with _0 suffix
175    ##        ELSE LMDZ_adjust=y ; save Bands file on file server ;
176    ##        For CumulPeriod=2 to LMDZ_NbPeriod_adjust ; Get Bands file from server (CumulPeriod-1) ; LMDZ_adjust=y ; save Bands file on file server ;
177    ##        For CumulPeriod > LMDZ_NbPeriod_adjust ; LMDZ_adjust=n ; Get Bands file from server (CumulPeriod=LMDZ_NbPeriod_adjust 0 to force it) ; Use Bands ;
178
179    if [ ${CumulPeriod} -eq 1 ] ; then
180        if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
181            if [ ! X${LMDZ_Bands_file_name} = X ] ; then
182                IGCM_sys_Get ${LMDZ_Bands_file_name} Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat
183                IGCM_sys_Put_Out Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ${R_OUT_ATM_D}/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_0
184                IGCM_sys_Chmod u+w Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat
185                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"
186            fi
187        fi
188    fi
189
190    LMDZ_adjust=n
191    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
192
193    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
194    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
195
196    [ ${CumulPeriod} -gt 1 ] && ( IGCM_sys_Get ${R_OUT_ATM_D}/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_${RefPeriod} Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ; IGCM_sys_Chmod u+w Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat )
197
198    ##-- GHG forcing :
199    ##   If forcing file exist in run directory, read values for the current year and modify config.def
200    if [ -f SOLARANDVOLCANOES.txt ] ; then
201        IPCC_SOLAR=`grep Annee_${year} SOLARANDVOLCANOES.txt | awk -F= '{print $2}'`
202        LMDZ_sed config.def solaire     ${IPCC_SOLAR}
203    else
204        LMDZ_sed_default config.def solaire
205    fi
206    if [ -f CO2.txt ] ; then
207        IPCC_CO2=`grep Annee_${year} CO2.txt | awk -F= '{print $2}'`
208        LMDZ_sed config.def co2_ppm     ${IPCC_CO2}
209    else
210        LMDZ_sed_default config.def co2_ppm
211    fi
212
213
214    if [ -f CH4.txt ] ; then
215        IPCC_CH4=`grep Annee_${year} CH4.txt | awk -F= '{print $2}'`
216        LMDZ_sed config.def CH4_ppb     ${IPCC_CH4}
217    else
218        LMDZ_sed_default config.def CH4_ppb
219    fi
220    if [ -f N2O.txt ] ; then
221        IPCC_N2O=`grep Annee_${year} N2O.txt | awk -F= '{print $2}'`
222        LMDZ_sed config.def N2O_ppb     ${IPCC_N2O}
223    else
224        LMDZ_sed_default config.def N2O_ppb
225    fi
226    if [ -f CFC11.txt ] ; then
227        IPCC_CFC11=`grep Annee_${year} CFC11.txt | awk -F= '{print $2}'`
228        LMDZ_sed config.def CFC11_ppt   ${IPCC_CFC11}
229    else
230        LMDZ_sed_default config.def CFC11_ppt
231    fi
232    if [ -f CFC12.txt ] ; then
233        IPCC_CFC12=`grep Annee_${year} CFC12.txt | awk -F= '{print $2}'`
234        LMDZ_sed config.def CFC12_ppt   ${IPCC_CFC12}
235    else
236        LMDZ_sed_default config.def CFC12_ppt
237    fi
238
239    # Add special treatement for CARBON CYCLE
240    if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
241
242        typeset InitPeriodCo2 InitDateBeginCo2 InitDateEndCo2
243        typeset CO2SBG CO2MBG CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
244        typeset PathCO2log
245        typeset PreviousLinelog LastPeriodDateBegin LastPeriodDateEnd LastDatesPeriod LastPREFIX
246
247        if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"n" ] ) ; then
248        ##--Initialization of fluxes to an undefined value at the first run
249            UndefinedValueCo2=-9999
250            InitPeriodCo2=0
251            InitDateBeginCo2=${UndefinedValueCo2}
252            InitYearCo2=$(( ${year} - 1 )) 
253            InitDateEndCo2=${InitYearCo2}1231
254            fCO2_ff=${UndefinedValueCo2} 
255            CO2SBG=${UndefinedValueCo2}
256            CO2LU=${UndefinedValueCo2}
257            CO2MBG=${UndefinedValueCo2}
258            CO2_ppm_prec=${UndefinedValueCo2}
259        # Get the initial value of atmosp. pco2
260            CO2_ppm=${lmdz_UserChoices_co2_init}
261           
262            IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
263            IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
264           
265        # Save CO2 values in ExeCpuLog variable contents 5 fields
266            echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
267                gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
268                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
269           
270        # Get the path where the log file co2.log is
271            PathCO2log=${SUBMIT_DIR} 
272        # Get Previous line in co2.log
273            PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
274           
275        else
276           
277        # NEW parameter in config.card (even for Overule all restarts, you must modify the line after this comment ):
278        # !! NEW for Carbone cycle !! Path where to find old co2.log file for restart CO2.
279        #SubmitRestartPath=
280            if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"y" ] ) ; then
281                IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ATM SubmitRestartPath
282                PathCO2log=${config_ATM_SubmitRestartPath}
283                Date_r=$( IGCM_date_ConvertFormatToGregorian ${config_ATM_RestartDate} )
284                PreviousLinelog=$( grep ${Date_r} ${PathCO2log}/co2.log )
285               
286                IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
287                IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
288               
289            # Save Last Line of control in new co2.log file
290                InitPeriodCo2=0   
291                InitDateBeginCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $2}' )
292                InitDateEndCo2=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $3}' )
293                fCO2_ff=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $6}' )
294                CO2SBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $8}' )
295                CO2LU=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $9}' )
296                CO2MBG=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $7}' )
297                CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $5}' )
298                CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
299               
300                echo "${InitPeriodCo2} ${InitDateBeginCo2} ${InitDateEndCo2} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
301                    gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
302                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
303            else
304           # Get restart line in co2.log
305                PathCO2log=${SUBMIT_DIR}
306                PreviousLinelog=$( tail -1 ${PathCO2log}/co2.log )
307           # Get the value of atmosp. pco2 in co2.log
308                CO2_ppm=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
309            fi
310           
311        fi
312
313        if [ ${lmdz_UserChoices_CARBON_CYCLE} = historical ] ; then
314            # Modify co2_ppm in config.def only for historical run
315            # If not historical run, keep co2_ppm value set earlier by LMDZ_sed
316            LMDZ_sed config.def co2_ppm     ${CO2_ppm}
317        fi
318    fi
319    # end CARBON_CYCLE
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    histfh3h   histhf3hm   histstn
331    LMDZ_sed output.def phys_out_filekeys       "${ok_mensuel} ${ok_journe}   ${ok_hf}  ${ok_hf3h} ${ok_hf3hm} ${ok_stn}"
332    LMDZ_sed output.def ecrit_ISCCP ${LMDZ_ecrit_ISCCP}
333    LMDZ_sed output.def ok_cosp     ${LMDZ_COSP_OK}
334    LMDZ_sed output.def ok_mensuelCOSP  ${LMDZ_COSP_monthly}
335    LMDZ_sed output.def ok_journeCOSP   ${LMDZ_COSP_daily}
336    LMDZ_sed output.def ok_hfCOSP   ${LMDZ_COSP_hf}
337    LMDZ_sed output.def ok_histNMC  "${LMDZ_NMC_monthly}, ${LMDZ_NMC_daily}, ${LMDZ_NMC_hf}"
338
339    ## gcm.def parameters :
340    # Modification only for new physics
341    if [ X${LMDZ_Physics} = X"NPv3.1" ] ; then
342        LMDZ_sed gcm.def iphysiq     5
343    else
344        LMDZ_sed_default gcm.def iphysiq
345    fi
346
347
348    ## run.def parameters
349    LMDZ_sed run.def dayref   ${InitDay}
350    LMDZ_sed run.def anneeref ${InitYear}
351    LMDZ_sed run.def calend   ${CalendarTypeForLmdz}
352    LMDZ_sed run.def nday     ${PeriodLengthInDays}
353    LMDZ_sed run.def raz_date ${RAZ_DATE}
354    LMDZ_sed run.def periodav ${LMDZ_periodav}
355    LMDZ_sed run.def adjust   ${LMDZ_adjust}
356
357
358    ## Determine from the variable ListOfComponents in config.card coupling to external models
359    ## and set corresponding parameters in run.def
360    echo ListOfComponents now running : ${config_ListOfComponents[*]}
361
362    if [ X${config_ListOfComponents_SRF} = Xorchidee ] ; then
363        echo "Activate ORCHIDEE, set VEGET=y in run.def"
364        LMDZ_sed run.def VEGET y
365    else
366        echo "No ORCHIDEE, set VEGET=n in run.def"
367        LMDZ_sed run.def VEGET n
368    fi
369
370    if [ X${config_ListOfComponents_CPL} = Xoasis ] ; then
371        echo "Activate coupling to ocean, set type_ocean=couple in run.def"
372        LMDZ_sed run.def type_ocean couple
373    else
374        echo "LMDZ is running in forced mode without ocean model, set type_ocean=force in run.def"
375        LMDZ_sed run.def type_ocean force
376    fi
377
378    if [ X${config_ListOfComponents_CHM} = Xinca ] ; then
379        echo "Activate coupling to INCA, set type_trac=inca in run.def"
380        LMDZ_sed run.def type_trac inca
381    elif [ X${config_ListOfComponents_CHM} = Xreprobus ] ; then
382        echo "Activate coupling to REPROBUS, set type_trac=repr in run.def"
383        LMDZ_sed run.def type_trac repr
384        LMDZ_sed run.def config_inca none
385    else
386        echo "No coupling to chemistry model, set type_trac=lmdz in run.def"
387        LMDZ_sed run.def type_trac lmdz
388        LMDZ_sed run.def config_inca none
389    fi
390
391
392    # config.def : If running with Reprobus, desactivate ok_ade, ok_aie and read_climoz
393    if [ X${config_ListOfComponents_CHM} = Xreprobus ] || [ X${config_ListOfComponents_CHM} = Xinca ] ; then
394        LMDZ_sed config.def ok_ade n
395        LMDZ_sed config.def ok_aie n
396        LMDZ_sed config.def read_climoz 0
397    else
398        LMDZ_sed config.def ok_ade y
399        LMDZ_sed config.def ok_aie y
400        LMDZ_sed config.def read_climoz 2
401    fi
402
403    # guide.def : Activate nudging if ok_guide=y set in lmdz.card
404    if [ ! X${lmdz_UserChoices_ok_guide} = X ] ; then
405        LMDZ_sed guide.def ok_guide  ${lmdz_UserChoices_ok_guide}
406    else
407        LMDZ_sed guide.def ok_guide n
408    fi
409
410    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
411    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
412    if [ X"${ByPass_hgardfou_teta}" = X"y" ] ; then
413        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
414        IGCM_sys_Mv gcm.def.tmp gcm.def
415        echo
416        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
417        echo
418        cat gcm.def
419        ByPass_hgardfou_teta=n
420        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
421    fi
422
423    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
424    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
425    if [ X"${ByPass_hgardfou_mats}" = X"y" ] ; then
426        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
427        IGCM_sys_Mv gcm.def.tmp gcm.def
428        echo
429        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
430        echo
431        cat gcm.def
432        ByPass_hgardfou_mats=n
433        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
434    fi
435
436    if ( ${FirstInitialize} ) ; then
437        if [ -f start.nc ] && [ -f startphy.nc ] ; then
438            # The restart files already exist. They have been copied from a previous run or from a CREATE job
439            echo "Restart files for LMDZ have been copied from a previous run"
440        elif [ -f create_etat0_limit* ] || [ -f ce0l* ] && [ ! -f lmdz.x ] ; then
441            # Do nothing because it is the program for creating restart files that is running and not LMDZ
442            echo "create_etat0_limit.e will create initial start files"
443        else
444            # Restart files have to be created
445            echo "Run create_etat0_limit.e to create restart files start.nc and startphy.nc for LMDZ"
446            if [ ${DRYRUN} -le 2 ] ; then
447                ##-- suppression of ozone file construction --
448                cp config.def config.def.save
449                LMDZ_sed config.def read_climoz 0
450                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
451                if [ ${DRYRUN} -le 1 ] ; then
452                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
453                    IGCM_sys_Put_Out start.nc    ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_start.nc
454                    IGCM_sys_Put_Out startphy.nc ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_startphy.nc
455                fi
456                IGCM_sys_Mv config.def.save config.def
457            else
458                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated"
459                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated for DRYRUN = " $DRYRUN >> stack
460            fi
461        fi
462    fi
463
464    IGCM_debug_PopStack "ATM_Update"
465}
466
467#-----------------------------------
468function ATM_Finalize
469{
470    IGCM_debug_PushStack "ATM_Finalize"
471
472    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && IGCM_sys_Put_Out Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ${R_OUT_ATM_D}/${config_UserChoices_JobName}_Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat_${CumulPeriod}
473
474
475    # Add special treatement for CARBON CYCLE
476    if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
477        typeset CO2SBG_3V CO2SBG CO2MBG CO2SRF CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
478
479        # Fossil fuel emission
480        if [ ${lmdz_UserChoices_CARBON_CYCLE} = control ] ; then
481            # For Control, no fossil fuel emission :
482            fCO2_ff=0
483            echo "Fossil Fuel for control run  :" ${fCO2_ff}
484        else
485            # For historical, get the fossile fuel file :
486            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 )
487            echo "Fossil Fuel for historical run  :" ${fCO2_ff}
488        fi
489
490        # Get the value of ocean carbon flux
491        CO2MBG=$( ${SUBMIT_DIR}/COMP/lmdz_analyse_pisces_out.awk ocean.output )
492        CO2MBG=$( echo ${CO2MBG} | sed -e "s/ *//" )
493        echo "Ocean carbon flux  :" ${CO2MBG}
494
495        # Get the value of land fluxes
496        set +A CO2SBG_3V -- $( ${SUBMIT_DIR}/COMP/lmdz_analyse_stomate_out.awk out_orchidee_0000 )
497        CO2SRF=$( echo ${CO2SBG_3V[0]} | sed -e "s/ *//" )
498        CO2LU=$( echo ${CO2SBG_3V[1]} | sed -e "s/ *//" )
499        CO2SBG=$( echo ${CO2SBG_3V[2]} | sed -e "s/ *//" )
500        echo "Land carbon flux (NEP)         :" ${CO2SRF}
501        echo "LU flux          (FLUC)        :" ${CO2LU}
502        echo "Total Land carbon flux (NBP)   :" ${CO2SBG}
503
504        # Previous CO2
505        CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
506        echo "Previous CO2  :" ${CO2_ppm_prec}
507
508        # Formula
509        CO2_ppm=$( echo "${CO2_ppm_prec} + (${fCO2_ff} + ${CO2MBG} + ${CO2SBG}) / 2.12" | bc -l )
510        echo "New CO2  :" ${CO2_ppm}
511
512        # Save CO2 values in ExeCpuLog variable contents 5 fields
513        echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SBG} ${CO2LU}" |   \
514            gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
515                           $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
516
517    fi
518
519    echo FINALIZE ATM !
520
521    IGCM_debug_PopStack "ATM_Finalize"
522}
Note: See TracBrowser for help on using the repository browser.