source: CONFIG/IPSLCM/IPSLCM5A/CpiControl/COMP/lmdz.driver @ 1284

Last change on this file since 1284 was 1235, checked in by mmaipsl, 14 years ago

Suppress fossil fuel file reading in CpiControl? run (fossil emission is then always 0.).

File size: 12.2 KB
Line 
1#!/bin/ksh
2#-----------------------------------------------------------------
3function LMDZ_sed
4{
5    IGCM_debug_PushStack "LMDZ_sed"
6
7    sed -e "s/^${2}\ *=.*/${2}= ${3}/" ${1} > ${1}.tmp
8    RET=$?
9    echo "LMDZ_sed : ${1} ${2} ${3}"
10    \mv ${1}.tmp ${1}
11
12    IGCM_debug_PopStack "LMDZ_sed"
13    return $RET
14}
15
16function ATM_Initialize
17{
18    IGCM_debug_PushStack "ATM_Initialize"
19
20    RESOL_ATM=$( echo $RESOL | awk "-Fx" '{print $2}' | awk "-F-" '{print $1}')
21
22    [ -f ${SUBMIT_DIR}/../.resol ] && eval $(grep RESOL_ATM_3D ${SUBMIT_DIR}/../.resol) || RESOL_ATM_3D=96x95x19
23
24    RESOL_ATM_Z=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $3}' )
25
26    ##-- Calendar type for LMDZ
27    case ${config_UserChoices_CalendarType} in
28        leap|gregorian)
29            CalendarTypeForLmdz=earth_366d;;
30        noleap)
31            CalendarTypeForLmdz=earth_365d;;
32        360d)
33            CalendarTypeForLmdz=earth_360d;;
34        *)
35            CalendarTypeForLmdz=earth_360d
36    esac
37
38    ##--Frequency purpose ....
39    ##--  Initialisation  ....
40    OK_instan=n
41    OK_journe=n
42    OK_mensuel=n
43    ok_hf=n
44
45    case ${config_UserChoices_PeriodLength} in
46        1Y|1y|1M|1m) OK_mensuel=y ;;
47        5D|5d|1D|1d) OK_journe=y ;;
48    esac
49
50    for frequency in ${config_ATM_WriteFrequency} ; do
51        case ${frequency} in
52            5D|5d|1D|1d) OK_journe=y ;;
53        esac
54        case ${frequency} in
55            HF|hf) ok_hf=y ;;
56        esac
57    done
58
59    ## Read LMDZ_NbPeriod_adjust option in lmdz.card
60    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_NbPeriod_adjust
61    LMDZ_NbPeriod_adjust=${lmdz_UserChoices_LMDZ_NbPeriod_adjust}
62
63    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
64        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_Bands_file_name
65        LMDZ_Bands_file_name=${lmdz_UserChoices_LMDZ_Bands_file_name}
66    fi
67
68    ##  Read LMDZ_Freq_aero and LMDZ_Length_aero in lmdz.card
69    LMDZ_Freq_aero=${lmdz_UserChoices_LMDZ_Freq_aero}
70    LMDZ_Length_aero=${lmdz_UserChoices_LMDZ_Length_aero}
71
72    ##  Read LMDZ_COSP_monthly  LMDZ_COSP_daily and LMDZ_COSP_hf in lmdz.card
73    LMDZ_COSP_OK=${lmdz_UserChoices_LMDZ_COSP_OK}
74    LMDZ_COSP_monthly=${lmdz_UserChoices_LMDZ_COSP_monthly}
75    LMDZ_COSP_daily=${lmdz_UserChoices_LMDZ_COSP_daily}
76    LMDZ_COSP_hf=${lmdz_UserChoices_LMDZ_COSP_hf}
77
78    ##  Read LMDZ_NMC_monthly  LMDZ_NMC_daily and LMDZ_NMC_hf in lmdz.card
79    LMDZ_NMC_monthly=${lmdz_UserChoices_LMDZ_NMC_monthly}
80    LMDZ_NMC_daily=${lmdz_UserChoices_LMDZ_NMC_daily}
81    LMDZ_NMC_hf=${lmdz_UserChoices_LMDZ_NMC_hf}
82
83    IGCM_debug_PopStack "ATM_Initialize"
84}
85
86#-----------------------------------------------------------------
87function ATM_Update
88{
89    IGCM_debug_PushStack "ATM_Update"
90
91    typeset CO2SBG CO2MBG CO2LU CO2_ppm CO2_ppm_prec fCO2_ff
92    typeset PreviousLinelog LastPeriodDateBegin LastPeriodDateEnd LastDatesPeriod LastPREFIX
93
94    case ${config_UserChoices_PeriodLength} in
95        *Y|*y) 
96               LMDZ_ecrit_mth=30.
97               LMDZ_ecrit_ISCCP=30.
98               LMDZ_periodav=30.
99               if [ "${config_UserChoices_CalendarType}" != "360d" ] ; then
100                  echo Change calendartype in config.card. PeriodLength=1Y allowed only for CalendarType=360d
101                  exit
102               fi
103               ;;
104        *)
105               LMDZ_ecrit_mth=${PeriodLengthInDays}.
106               LMDZ_ecrit_ISCCP=${PeriodLengthInDays}.
107               LMDZ_periodav=${PeriodLengthInDays}.
108               ;;
109    esac
110
111    ##-- Remise ou non a zero de la date initiale de LMDZ pour le fichier run.def
112    if [ ${CumulPeriod} -eq 1 ] ; then
113        RAZ_DATE=1
114    else
115        RAZ_DATE=0
116    fi
117
118    ## algo : For CumulPeriod=1 ;
119    ##        IF NbPeriod_Adjust = 0, Get Bands file directly from server, store it with _0 suffix
120    ##        ELSE LMDZ_adjust=y ; save Bands file on file server ;
121    ##        For CumulPeriod=2 to LMDZ_NbPeriod_adjust ; Get Bands file from server (CumulPeriod-1) ; LMDZ_adjust=y ; save Bands file on file server ;
122    ##        For CumulPeriod > LMDZ_NbPeriod_adjust ; LMDZ_adjust=n ; Get Bands file from server (CumulPeriod=LMDZ_NbPeriod_adjust 0 to force it) ; Use Bands ;
123
124    if [ ${CumulPeriod} -eq 1 ] ; then
125        if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
126            IGCM_sys_Get ${LMDZ_Bands_file_name} Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat ; IGCM_sys_Chmod u+w Bands_${RESOL_ATM_3D}_${NUM_PROC_ATM}prc.dat
127            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
128            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"
129        fi
130    fi
131
132    LMDZ_adjust=n
133    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
134
135    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
136    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
137
138    [ ${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 )
139
140     ##-- GHG forcing for the current year
141
142    if ( ${FirstInitialize} ) ; then
143       
144        fCO2_ff=0
145        CO2SRF=0
146        CO2LU=0
147        CO2MBG=0
148        CO2_ppm=${lmdz_UserChoices_co2_init}
149        CO2_ppm_prec=${lmdz_UserChoices_co2_init}
150       
151        IGCM_sys_Cp ${SUBMIT_DIR}/co2.log.init ${SUBMIT_DIR}/co2.log
152        IGCM_sys_Chmod u+w ${SUBMIT_DIR}/co2.log
153
154        echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SRF} ${CO2LU}" |   \
155             gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
156                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
157
158    else
159
160#       For Control, no fossil fuel emission :
161        fCO2_ff=0
162        echo "Fossil Fuel for control run  :" ${fCO2_ff}
163
164        # Get Previous line in co2.log
165        PreviousLinelog=$( tail -1 ${SUBMIT_DIR}/co2.log )
166
167        # Get Previous period output PREFIX
168        LastPeriodDateBegin=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $2}' )
169        LastPeriodDateEnd=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $3}' )
170        eval LastDatesPeriod=${LastPeriodDateBegin}_${LastPeriodDateEnd} > /dev/null 2>&1
171        # Prefix for save files of this period
172        eval LastPREFIX=${config_UserChoices_JobName}_${LastDatesPeriod}  > /dev/null 2>&1
173
174        # Ocean
175       
176        IGCM_sys_TestFileArchive ${R_OUT_OCE}/Debug/${LastPREFIX}_ocean.output
177        if [ $? = 0 ] ; then
178
179            if [ $DRYRUN -gt 1 ]; then
180                IGCM_sys_Cp ${R_OUT_OCE}/Debug/${LastPREFIX}_ocean.output ./
181            else
182                IGCM_sys_Get ${R_OUT_OCE}/Debug/${LastPREFIX}_ocean.output ./
183            fi
184            IGCM_comp_PrepareDeletedFiles ./${LastPREFIX}_ocean.output
185            CO2MBG=$( ${SUBMIT_DIR}/COMP/lmdz_analyse_pisces_out.awk ${LastPREFIX}_ocean.output )
186            CO2MBG=$( echo ${CO2MBG} | sed -e "s/ *//" )
187        else
188            echo "Error : file ${R_OUT_OCE}/Debug/${LastPREFIX}_ocean.output not found."
189            exit 1
190        fi
191
192        # Surface
193        IGCM_sys_TestFileArchive ${R_OUT_SRF}/Debug/${LastPREFIX}_out_orchidee_0000
194        if [ $? = 0 ] ; then
195            if [ $DRYRUN -gt 1 ]; then
196                IGCM_sys_Cp ${R_OUT_SRF}/Debug/${LastPREFIX}_out_orchidee_0000 ./
197            else
198                IGCM_sys_Get ${R_OUT_SRF}/Debug/${LastPREFIX}_out_orchidee_0000 ./
199            fi
200            IGCM_comp_PrepareDeletedFiles ./${LastPREFIX}_out_orchidee_0000
201            set +A CO2SBG -- $( ${SUBMIT_DIR}/COMP/lmdz_analyse_stomate_out.awk ${LastPREFIX}_out_orchidee_0000 )
202        else
203            echo "Error : file ${R_OUT_OCE}/Debug/${LastPREFIX}_ocean.output not found."
204            exit 1
205        fi
206        CO2SRF=$( echo ${CO2SBG[0]} | sed -e "s/ *//" )
207        CO2LU=$( echo ${CO2SBG[1]} | sed -e "s/ *//" )
208
209        # Previous CO2
210        CO2_ppm_prec=$( echo "${PreviousLinelog[*]}" | gawk -F '|' '{gsub(" ",""); print $4}' )
211
212        # Formula
213        CO2_ppm=$( echo "${CO2_ppm_prec} + (${fCO2_ff} + ${CO2MBG} + ${CO2SRF} + ${CO2LU}) / 2.12" | bc -l )
214
215        # Save CO2 values in ExeCpuLog variable contents 5 fields
216        echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${CO2_ppm} ${CO2_ppm_prec} ${fCO2_ff} ${CO2MBG} ${CO2SRF} ${CO2LU}" |   \
217             gawk '{printf("  %11d | %15s | %15s | %22.15g | %20.15g | %11.8g | %11.8g | %12.8g | %12.8g \n", \
218                              $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/co2.log
219
220    fi
221
222    ## physiq.def parameters modified from initial physiq_L${RESOL_ATM_Z}
223    LMDZ_sed physiq.def OK_instan   ${OK_instan}
224    LMDZ_sed physiq.def OK_journe   ${OK_journe}
225    LMDZ_sed physiq.def OK_mensuel  ${OK_mensuel}
226    LMDZ_sed physiq.def ok_hf       ${ok_hf}
227    LMDZ_sed physiq.def ecrit_mth   ${LMDZ_ecrit_mth}
228    LMDZ_sed physiq.def ecrit_ISCCP ${LMDZ_ecrit_ISCCP}
229    LMDZ_sed physiq.def ok_cosp     ${LMDZ_COSP_OK}
230    LMDZ_sed physiq.def ok_mensuelCOSP  ${LMDZ_COSP_monthly}
231    LMDZ_sed physiq.def ok_journeCOSP   ${LMDZ_COSP_daily}
232    LMDZ_sed physiq.def ok_hfCOSP   ${LMDZ_COSP_hf}
233    LMDZ_sed physiq.def ok_histNMC  "${LMDZ_NMC_monthly}, ${LMDZ_NMC_daily}, ${LMDZ_NMC_hf}"
234#   For Control, we won't modify ATM CO2 :
235#    LMDZ_sed physiq.def co2_ppm     ${CO2_ppm}
236
237    ## gcm.def parameters : no change since gcm.def_${RESOL_ATM_3D} is used and already modified
238
239    ## run.def parameters
240    LMDZ_sed run.def dayref   ${InitDay}
241    LMDZ_sed run.def anneeref ${InitYear}
242    LMDZ_sed run.def calend   ${CalendarTypeForLmdz}
243    LMDZ_sed run.def nday     ${PeriodLengthInDays}
244    LMDZ_sed run.def raz_date ${RAZ_DATE}
245    LMDZ_sed run.def periodav ${LMDZ_periodav}
246    LMDZ_sed run.def adjust   ${LMDZ_adjust}
247
248    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
249    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta
250    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
251    if [ ${ByPass_hgardfou_teta} = y ] ; then
252        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
253        IGCM_sys_Mv gcm.def.tmp gcm.def
254        echo
255        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
256        echo
257        cat gcm.def
258        ByPass_hgardfou_teta=n
259        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
260    fi
261
262    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
263    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats
264    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
265    if [ ${ByPass_hgardfou_mats} = y ] ; then
266        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
267        IGCM_sys_Mv gcm.def.tmp gcm.def
268        echo
269        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
270        echo
271        cat gcm.def
272        ByPass_hgardfou_mats=n
273        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
274    fi
275
276    if ( ${FirstInitialize} ) ; then
277
278        if ( [ "${config_Restarts_OverRule}" = "n" ] && [ "${config_ATM_Restart}" = "n" ] ); then
279            if [ ${DRYRUN} -le 2 ] ; then
280                ##-- suppression of ozone file construction --
281                cp physiq.def physiq.def.save
282                LMDZ_sed physiq.def read_climoz 0
283                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
284                if [ ${DRYRUN} -le 1 ] ; then
285                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
286                    IGCM_sys_Put_Out start.nc    ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_start.nc
287                    IGCM_sys_Put_Out startphy.nc ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_startphy.nc
288                fi
289                IGCM_sys_Mv physiq.def.save physiq.def
290            else
291                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated"
292                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated for DRYRUN = " $DRYRUN >> stack
293            fi
294        fi
295
296    fi
297
298    IGCM_debug_PopStack "ATM_Update"
299}
300
301#-----------------------------------
302function ATM_Finalize
303{
304    IGCM_debug_PushStack "ATM_Finalize"
305
306    [ ${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}
307
308    echo FINALIZE ATM !
309
310    IGCM_debug_PopStack "ATM_Finalize"
311}
Note: See TracBrowser for help on using the repository browser.