source: CONFIG/IPSLCM/IPSLCM5A/1pctCO2/COMP/lmdz.driver @ 1097

Last change on this file since 1097 was 1097, checked in by aclsce, 14 years ago

Added 1pctCO2 CMIP5 configuration.
Modified levels for some outputs of LMDZ to diminish the CMIP5 storage.

File size: 9.8 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) 
56                ok_hf=y
57                OK_instan=y
58                ;;
59        esac
60    done
61
62    ## Read LMDZ_NbPeriod_adjust option in lmdz.card
63    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_NbPeriod_adjust
64    eval LMDZ_NbPeriod_adjust=\${lmdz_UserChoices_LMDZ_NbPeriod_adjust} > /dev/null 2>&1
65
66    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
67        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_Bands_file_name
68        eval LMDZ_Bands_file_name=\${lmdz_UserChoices_LMDZ_Bands_file_name} > /dev/null 2>&1
69    fi
70
71    ##  Read LMDZ_Freq_aero and LMDZ_Length_aero in lmdz.card
72    eval LMDZ_Freq_aero=\${lmdz_UserChoices_LMDZ_Freq_aero} > /dev/null 2>&1
73    eval LMDZ_Length_aero=\${lmdz_UserChoices_LMDZ_Length_aero} > /dev/null 2>&1
74
75    ##  Read LMDZ_COSP_monthly  LMDZ_COSP_daily and LMDZ_COSP_hf in lmdz.card
76    eval LMDZ_COSP_OK=\${lmdz_UserChoices_LMDZ_COSP_OK} > /dev/null 2>&1
77    eval LMDZ_COSP_monthly=\${lmdz_UserChoices_LMDZ_COSP_monthly} > /dev/null 2>&1
78    eval LMDZ_COSP_daily=\${lmdz_UserChoices_LMDZ_COSP_daily} > /dev/null 2>&1
79    eval LMDZ_COSP_hf=\${lmdz_UserChoices_LMDZ_COSP_hf} > /dev/null 2>&1
80
81    ##  Read LMDZ_NMC_monthly  LMDZ_NMC_daily and LMDZ_NMC_hf in lmdz.card
82    eval LMDZ_NMC_monthly=\${lmdz_UserChoices_LMDZ_NMC_monthly} > /dev/null 2>&1
83    eval LMDZ_NMC_daily=\${lmdz_UserChoices_LMDZ_NMC_daily} > /dev/null 2>&1
84    eval LMDZ_NMC_hf=\${lmdz_UserChoices_LMDZ_NMC_hf} > /dev/null 2>&1
85
86    IGCM_debug_PopStack "ATM_Initialize"
87}
88
89#-----------------------------------------------------------------
90function ATM_Update
91{
92    IGCM_debug_PushStack "ATM_Update"
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    ## To have more variables in output files for aerosols. Parameters are set in lmdz.card
119    #if [ ${CumulPeriod}%${LMDZ_Freq_aero} -le ${LMDZ_Length_aero} ]; then
120    #   if [ ${CumulPeriod}%${LMDZ_Freq_aero} -ne 0 ]; then
121    #      lev_histmth=4
122    #   else
123    #      lev_histmth=2   
124    #   fi
125    #else
126    #   lev_histmth=2
127    #fi   
128
129    ## algo : For CumulPeriod=1 ;
130    ##        IF NbPeriod_Adjust = 0, Get Bands file directly from server, store it with _0 suffix
131    ##        ELSE LMDZ_adjust=y ; save Bands file on file server ;
132    ##        For CumulPeriod=2 to LMDZ_NbPeriod_adjust ; Get Bands file from server (CumulPeriod-1) ; LMDZ_adjust=y ; save Bands file on file server ;
133    ##        For CumulPeriod > LMDZ_NbPeriod_adjust ; LMDZ_adjust=n ; Get Bands file from server (CumulPeriod=LMDZ_NbPeriod_adjust 0 to force it) ; Use Bands ;
134
135    if [ ${CumulPeriod} -eq 1 ] ; then
136        if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
137            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
138            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
139            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"
140        fi
141    fi
142
143    LMDZ_adjust=n
144    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
145
146    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
147    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
148
149    [ ${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 )
150
151   ## CO2 forcing for the current year
152    IPCC_CO2=`grep Annee_${year} CMIP_CO2_1850_2050.txt | awk -F= '{print $2}'`
153    echo IPCC_CO2=${IPCC_CO2}
154
155    ## physiq.def parameters modified from initial physiq_L${RESOL_ATM_Z}
156    LMDZ_sed physiq.def OK_instan   ${OK_instan}
157    LMDZ_sed physiq.def OK_journe   ${OK_journe}
158    LMDZ_sed physiq.def OK_mensuel  ${OK_mensuel}
159    #LMDZ_sed physiq.def lev_histmth ${lev_histmth}
160    LMDZ_sed physiq.def ok_hf       ${ok_hf}
161    LMDZ_sed physiq.def ecrit_mth   ${LMDZ_ecrit_mth}
162    LMDZ_sed physiq.def ecrit_ISCCP ${LMDZ_ecrit_ISCCP}
163    LMDZ_sed physiq.def ok_cosp     ${LMDZ_COSP_OK}
164    LMDZ_sed physiq.def ok_mensuelCOSP  ${LMDZ_COSP_monthly}
165    LMDZ_sed physiq.def ok_journeCOSP   ${LMDZ_COSP_daily}
166    LMDZ_sed physiq.def ok_hfCOSP   ${LMDZ_COSP_hf}
167    LMDZ_sed physiq.def ok_histNMC  "${LMDZ_NMC_monthly}, ${LMDZ_NMC_daily}, ${LMDZ_NMC_hf}"
168    LMDZ_sed physiq.def co2_ppm     ${IPCC_CO2}
169
170
171    ## gcm.def parameters : no change since gcm.def_${RESOL_ATM_3D} is used and already modified
172
173    ## run.def parameters
174    LMDZ_sed run.def dayref   ${InitDay}
175    LMDZ_sed run.def anneeref ${InitYear}
176    LMDZ_sed run.def calend   ${CalendarTypeForLmdz}
177    LMDZ_sed run.def nday     ${PeriodLengthInDays}
178    LMDZ_sed run.def raz_date ${RAZ_DATE}
179    LMDZ_sed run.def periodav ${LMDZ_periodav}
180    LMDZ_sed run.def adjust   ${LMDZ_adjust}
181
182    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
183    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta
184    eval ByPass_hgardfou_teta=\${lmdz_UserChoices_ByPass_hgardfou_teta} > /dev/null 2>&1
185    if [ ${ByPass_hgardfou_teta} = y ] ; then
186        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
187        IGCM_sys_Mv gcm.def.tmp gcm.def
188        echo
189        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
190        echo
191        cat gcm.def
192        ByPass_hgardfou_teta=n
193        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
194    fi
195
196    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
197    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats
198    eval ByPass_hgardfou_mats=\${lmdz_UserChoices_ByPass_hgardfou_mats} > /dev/null 2>&1
199    if [ ${ByPass_hgardfou_mats} = y ] ; then
200        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
201        IGCM_sys_Mv gcm.def.tmp gcm.def
202        echo
203        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
204        echo
205        cat gcm.def
206        ByPass_hgardfou_mats=n
207        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
208    fi
209
210    if ( ${FirstInitialize} ) ; then
211
212        if ( [ "${config_Restarts_OverRule}" = "n" ] && [ "${config_ATM_Restart}" = "n" ] ); then
213            if [ ${DRYRUN} -le 2 ] ; then
214                ##-- suppression of ozone file construction --
215                cp physiq.def physiq.def.save
216                LMDZ_sed physiq.def read_climoz 0
217                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
218                if [ ${DRYRUN} -le 1 ] ; then
219                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
220                    IGCM_sys_Put_Out start.nc    ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_start.nc
221                    IGCM_sys_Put_Out startphy.nc ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_startphy.nc
222                fi
223                IGCM_sys_Mv physiq.def.save physiq.def
224            else
225                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated"
226                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated for DRYRUN = " $DRYRUN >> stack
227            fi
228        fi
229
230    fi
231
232    IGCM_debug_PopStack "ATM_Update"
233}
234
235#-----------------------------------
236function ATM_Finalize
237{
238    IGCM_debug_PushStack "ATM_Finalize"
239
240    [ ${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}
241
242    echo FINALIZE ATM !
243
244    IGCM_debug_PopStack "ATM_Finalize"
245}
Note: See TracBrowser for help on using the repository browser.