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
RevLine 
[396]1#!/bin/ksh
2#-----------------------------------------------------------------
[894]3function LMDZ_sed
4{
[1690]5# Usage : LMDZ_sed filedef var_name myvalue
6#         In file filedef modify the line containing var_name=xxx into var_name=myvalue
[894]7    IGCM_debug_PushStack "LMDZ_sed"
8
[911]9    sed -e "s/^${2}\ *=.*/${2}= ${3}/" ${1} > ${1}.tmp
[894]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}
[1690]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"
[894]23
[1690]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
[396]32function ATM_Initialize
33{
34    IGCM_debug_PushStack "ATM_Initialize"
35
[671]36    RESOL_ATM=$( echo $RESOL | awk "-Fx" '{print $2}' | awk "-F-" '{print $1}')
[396]37
[659]38    [ -f ${SUBMIT_DIR}/../.resol ] && eval $(grep RESOL_ATM_3D ${SUBMIT_DIR}/../.resol) || RESOL_ATM_3D=96x95x19
[396]39
[659]40    RESOL_ATM_Z=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $3}' )
[649]41
[697]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
[1541]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
[1643]63    ##- Create_etat0_limit version
[1689]64    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices CREATE
[1643]65    CREATE=${lmdz_UserChoices_CREATE}
66    echo create_etat0_limit version : ${CREATE}
67
[1550]68    ## - LMDZ choice of config.def file
69    ##   ConfType must be set in lmdz.card
70    ConfType=${lmdz_UserChoices_ConfType}
[1541]71
[1550]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
[1539]80    ##-- Output frequency purpose ....
[396]81    ##--  Initialisation  ....
[1539]82    ok_mensuel=n
83    ok_journe=n
[396]84    ok_hf=n
[1539]85    ok_hf3h=n
86    ok_hf3hm=n
87    ok_stn=n
[396]88
89    case ${config_UserChoices_PeriodLength} in
[1539]90        1Y|1y|1M|1m) ok_mensuel=y ;;
91        5D|5d|1D|1d) ok_journe=y ;;
[396]92    esac
93
94    for frequency in ${config_ATM_WriteFrequency} ; do
95        case ${frequency} in
[1539]96            1M|1m) ok_mensuel=y ;;
[396]97        esac
98        case ${frequency} in
[1539]99            5D|5d|1D|1d) ok_journe=y ;;
100        esac
101        case ${frequency} in
[396]102            HF|hf) ok_hf=y ;;
103        esac
[1539]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
[396]113    done
114
[902]115    ## Read LMDZ_NbPeriod_adjust option in lmdz.card
[1688]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
[396]122
[815]123    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
[1688]124        LMDZ_Bands_file_name=${lmdz_UserChoices_LMDZ_Bands_file_name}
[815]125    fi
126
[912]127    ##  Read LMDZ_Freq_aero and LMDZ_Length_aero in lmdz.card
[1172]128    LMDZ_Freq_aero=${lmdz_UserChoices_LMDZ_Freq_aero}
129    LMDZ_Length_aero=${lmdz_UserChoices_LMDZ_Length_aero}
[912]130
[1000]131    ##  Read LMDZ_COSP_monthly  LMDZ_COSP_daily and LMDZ_COSP_hf in lmdz.card
[1172]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}
[1000]136
[1003]137    ##  Read LMDZ_NMC_monthly  LMDZ_NMC_daily and LMDZ_NMC_hf in lmdz.card
[1172]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}
[1000]141
[396]142    IGCM_debug_PopStack "ATM_Initialize"
143}
144
145#-----------------------------------------------------------------
146function ATM_Update
147{
148    IGCM_debug_PushStack "ATM_Update"
149
[1537]150
[749]151    case ${config_UserChoices_PeriodLength} in
152        *Y|*y) 
153               LMDZ_ecrit_ISCCP=30.
154               LMDZ_periodav=30.
[755]155               if [ "${config_UserChoices_CalendarType}" != "360d" ] ; then
[1649]156                  echo Do not consider following warning if your running create_etat0_limit :
[1650]157                  echo WARNING !!! For lmdz : calendartype in config.card. PeriodLength=1Y allowed only for CalendarType=360d
[1649]158               fi
[749]159               ;;
160        *)
161               LMDZ_ecrit_ISCCP=${PeriodLengthInDays}.
162               LMDZ_periodav=${PeriodLengthInDays}.
163               ;;
164    esac
[1546]165 
[396]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
[815]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
[1778]181            if [ ! X${LMDZ_Bands_file_name} = X ] ; then
[1688]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
[815]187        fi
188    fi
189
[743]190    LMDZ_adjust=n
191    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
192
[815]193    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
194    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
[743]195
[902]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 )
[743]197
[1535]198    ##-- GHG forcing :
[1546]199    ##   If forcing file exist in run directory, read values for the current year and modify config.def
[1535]200    if [ -f SOLARANDVOLCANOES.txt ] ; then
201        IPCC_SOLAR=`grep Annee_${year} SOLARANDVOLCANOES.txt | awk -F= '{print $2}'`
[1546]202        LMDZ_sed config.def solaire     ${IPCC_SOLAR}
[1690]203    else
204        LMDZ_sed_default config.def solaire
[1535]205    fi
206    if [ -f CO2.txt ] ; then
207        IPCC_CO2=`grep Annee_${year} CO2.txt | awk -F= '{print $2}'`
[1546]208        LMDZ_sed config.def co2_ppm     ${IPCC_CO2}
[1690]209    else
210        LMDZ_sed_default config.def co2_ppm
[1535]211    fi
[1690]212
213
[1535]214    if [ -f CH4.txt ] ; then
215        IPCC_CH4=`grep Annee_${year} CH4.txt | awk -F= '{print $2}'`
[1546]216        LMDZ_sed config.def CH4_ppb     ${IPCC_CH4}
[1690]217    else
218        LMDZ_sed_default config.def CH4_ppb
[1535]219    fi
220    if [ -f N2O.txt ] ; then
221        IPCC_N2O=`grep Annee_${year} N2O.txt | awk -F= '{print $2}'`
[1546]222        LMDZ_sed config.def N2O_ppb     ${IPCC_N2O}
[1690]223    else
224        LMDZ_sed_default config.def N2O_ppb
[1535]225    fi
226    if [ -f CFC11.txt ] ; then
227        IPCC_CFC11=`grep Annee_${year} CFC11.txt | awk -F= '{print $2}'`
[1546]228        LMDZ_sed config.def CFC11_ppt   ${IPCC_CFC11}
[1690]229    else
230        LMDZ_sed_default config.def CFC11_ppt
[1535]231    fi
232    if [ -f CFC12.txt ] ; then
233        IPCC_CFC12=`grep Annee_${year} CFC12.txt | awk -F= '{print $2}'`
[1546]234        LMDZ_sed config.def CFC12_ppt   ${IPCC_CFC12}
[1690]235    else
236        LMDZ_sed_default config.def CFC12_ppt
[1535]237    fi
238
[1537]239    # Add special treatement for CARBON CYCLE
[1546]240    if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
[1537]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
[1778]247        if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"n" ] ) ; then
[1537]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=
[1778]280            if ( ${FirstInitialize} && [ X"${config_ATM_Restart}" = X"y" ] ) ; then
[1537]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
[1546]314            # Modify co2_ppm in config.def only for historical run
[1690]315            # If not historical run, keep co2_ppm value set earlier by LMDZ_sed
[1546]316            LMDZ_sed config.def co2_ppm     ${CO2_ppm}
[1537]317        fi
318    fi
319    # end CARBON_CYCLE
320
[1538]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
[1537]326
[1538]327
[1540]328    ## output.def parameters
[1546]329    #  columns in phys_output_filekeys refer to the filenames given in phys_out_filenames in output.def : 
[1539]330    #                                            histmth       histday        histhf    histfh3h   histhf3hm   histstn
[1546]331    LMDZ_sed output.def phys_out_filekeys       "${ok_mensuel} ${ok_journe}   ${ok_hf}  ${ok_hf3h} ${ok_hf3hm} ${ok_stn}"
[1540]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}"
[396]338
[1544]339    ## gcm.def parameters :
340    # Modification only for new physics
[1750]341    if [ X${LMDZ_Physics} = X"NPv3.1" ] ; then
[1544]342        LMDZ_sed gcm.def iphysiq     5
[1690]343    else
344        LMDZ_sed_default gcm.def iphysiq
[1544]345    fi
[396]346
[1544]347
[911]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}
[396]356
[1643]357
[1650]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"
[1666]380        LMDZ_sed run.def type_trac inca
[1650]381    elif [ X${config_ListOfComponents_CHM} = Xreprobus ] ; then
382        echo "Activate coupling to REPROBUS, set type_trac=repr in run.def"
[1666]383        LMDZ_sed run.def type_trac repr
[1779]384        LMDZ_sed run.def config_inca none
[1650]385    else
386        echo "No coupling to chemistry model, set type_trac=lmdz in run.def"
[1666]387        LMDZ_sed run.def type_trac lmdz
[1779]388        LMDZ_sed run.def config_inca none
[1650]389    fi
390
391
[1686]392    # config.def : If running with Reprobus, desactivate ok_ade, ok_aie and read_climoz
[1697]393    if [ X${config_ListOfComponents_CHM} = Xreprobus ] || [ X${config_ListOfComponents_CHM} = Xinca ] ; then
[1686]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
[1690]403    # guide.def : Activate nudging if ok_guide=y set in lmdz.card
[1643]404    if [ ! X${lmdz_UserChoices_ok_guide} = X ] ; then
405        LMDZ_sed guide.def ok_guide  ${lmdz_UserChoices_ok_guide}
[1690]406    else
407        LMDZ_sed guide.def ok_guide n
[1643]408    fi
409
[902]410    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
[1172]411    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
[1688]412    if [ X"${ByPass_hgardfou_teta}" = X"y" ] ; then
[396]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
[902]420        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
[396]421    fi
422
[902]423    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
[1172]424    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
[1688]425    if [ X"${ByPass_hgardfou_mats}" = X"y" ] ; then
[396]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
[902]433        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
[396]434    fi
435
436    if ( ${FirstInitialize} ) ; then
[1643]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"
[1778]440        elif [ -f create_etat0_limit* ] || [ -f ce0l* ] && [ ! -f lmdz.x ] ; then
[1649]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"
[1643]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"
[396]446            if [ ${DRYRUN} -le 2 ] ; then
[894]447                ##-- suppression of ozone file construction --
[1643]448                cp config.def config.def.save
449                LMDZ_sed config.def read_climoz 0
[396]450                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
451                if [ ${DRYRUN} -le 1 ] ; then
[908]452                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
[1643]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
[396]455                fi
[1643]456                IGCM_sys_Mv config.def.save config.def
[396]457            else
[908]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
[396]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
[743]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}
[396]473
[1537]474
475    # Add special treatement for CARBON CYCLE
[1546]476    if [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"control" ] || [ X"${lmdz_UserChoices_CARBON_CYCLE}" = X"historical" ] ; then
[1537]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
[396]519    echo FINALIZE ATM !
520
521    IGCM_debug_PopStack "ATM_Finalize"
522}
Note: See TracBrowser for help on using the repository browser.