source: CONFIG/IPSLCM/IPSLCM5B/historical/COMP/lmdz.driver @ 1220

Last change on this file since 1220 was 1220, checked in by lfairhead, 12 years ago

Modifications needed to take advantage of the split in physiq.def in LMDZ.
The old physiq.def is split in 2: a shorter physiq.def that only includes
parameters and constants needed by the parametrizations and a config.def that
includes information related to the configuration one wishes to run (e.g. orbital
parameters, gaz constants, aerosols, etc...). The output.def is also taken into account

Warning: work in progress. Probably still needs some testing. Tested on brodie for the moment

File size: 10.4 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 LMDZPhysics option in lmdz.card
63     IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_Physics
64     LMDZ_Physics=${lmdz_UserChoices_LMDZ_Physics}
65
66    ## Read LMDZ_NbPeriod_adjust option in lmdz.card
67    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_NbPeriod_adjust
68    LMDZ_NbPeriod_adjust=${lmdz_UserChoices_LMDZ_NbPeriod_adjust}
69
70    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
71        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_Bands_file_name
72        LMDZ_Bands_file_name=${lmdz_UserChoices_LMDZ_Bands_file_name}
73    fi
74
75    ##  Read LMDZ_Freq_aero and LMDZ_Length_aero in lmdz.card
76    LMDZ_Freq_aero=${lmdz_UserChoices_LMDZ_Freq_aero}
77    LMDZ_Length_aero=${lmdz_UserChoices_LMDZ_Length_aero}
78
79    ##  Read LMDZ_COSP_monthly  LMDZ_COSP_daily and LMDZ_COSP_hf in lmdz.card
80    LMDZ_COSP_OK=${lmdz_UserChoices_LMDZ_COSP_OK}
81    LMDZ_COSP_monthly=${lmdz_UserChoices_LMDZ_COSP_monthly}
82    LMDZ_COSP_daily=${lmdz_UserChoices_LMDZ_COSP_daily}
83    LMDZ_COSP_hf=${lmdz_UserChoices_LMDZ_COSP_hf}
84
85    ##  Read LMDZ_NMC_monthly  LMDZ_NMC_daily and LMDZ_NMC_hf in lmdz.card
86    LMDZ_NMC_monthly=${lmdz_UserChoices_LMDZ_NMC_monthly}
87    LMDZ_NMC_daily=${lmdz_UserChoices_LMDZ_NMC_daily}
88    LMDZ_NMC_hf=${lmdz_UserChoices_LMDZ_NMC_hf}
89
90    IGCM_debug_PopStack "ATM_Initialize"
91}
92
93#-----------------------------------------------------------------
94function ATM_Update
95{
96    IGCM_debug_PushStack "ATM_Update"
97
98    case ${config_UserChoices_PeriodLength} in
99        *Y|*y) 
100               LMDZ_ecrit_mth=30.
101               LMDZ_ecrit_ISCCP=30.
102               LMDZ_periodav=30.
103               if [ "${config_UserChoices_CalendarType}" != "360d" ] ; then
104                  echo Change calendartype in config.card. PeriodLength=1Y allowed only for CalendarType=360d
105                  exit
106               fi
107               ;;
108        *)
109               LMDZ_ecrit_mth=${PeriodLengthInDays}.
110               LMDZ_ecrit_ISCCP=${PeriodLengthInDays}.
111               LMDZ_periodav=${PeriodLengthInDays}.
112               ;;
113    esac
114
115    ##-- Remise ou non a zero de la date initiale de LMDZ pour le fichier run.def
116    if [ ${CumulPeriod} -eq 1 ] ; then
117        RAZ_DATE=1
118    else
119        RAZ_DATE=0
120    fi
121
122    ## To have more variables in output files for aerosols. Parameters are set in lmdz.card
123    #if [ ${CumulPeriod}%${LMDZ_Freq_aero} -le ${LMDZ_Length_aero} ]; then
124    #   if [ ${CumulPeriod}%${LMDZ_Freq_aero} -ne 0 ]; then
125    #      lev_histmth=4
126    #   else
127    #      lev_histmth=2   
128    #   fi
129    #else
130    #   lev_histmth=2
131    #fi   
132
133    ## algo : For CumulPeriod=1 ;
134    ##        IF NbPeriod_Adjust = 0, Get Bands file directly from server, store it with _0 suffix
135    ##        ELSE LMDZ_adjust=y ; save Bands file on file server ;
136    ##        For CumulPeriod=2 to LMDZ_NbPeriod_adjust ; Get Bands file from server (CumulPeriod-1) ; LMDZ_adjust=y ; save Bands file on file server ;
137    ##        For CumulPeriod > LMDZ_NbPeriod_adjust ; LMDZ_adjust=n ; Get Bands file from server (CumulPeriod=LMDZ_NbPeriod_adjust 0 to force it) ; Use Bands ;
138
139    if [ ${CumulPeriod} -eq 1 ] ; then
140        if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
141            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
142            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
143            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"
144        fi
145    fi
146
147    LMDZ_adjust=n
148    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
149
150    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
151    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
152
153    [ ${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 )
154
155    ##-- GHG forcing for the current year
156    IPCC_SOLAR=`grep Annee_${year} SOLARANDVOLCANOES_1610_2008.txt | awk -F= '{print $2}'`
157    IPCC_CO2=`grep Annee_${year} CO2_1765_2005.txt | awk -F= '{print $2}'`
158    IPCC_CH4=`grep Annee_${year} CH4_1765_2005.txt | awk -F= '{print $2}'`
159    IPCC_N2O=`grep Annee_${year} N2O_1765_2005.txt | awk -F= '{print $2}'`
160    IPCC_CFC11=`grep Annee_${year} CFC11_1765_2005.txt | awk -F= '{print $2}'`
161    IPCC_CFC12=`grep Annee_${year} CFC12_1765_2005.txt | awk -F= '{print $2}'`
162
163    ##-- For historical daily cosp must be output during 1979-2005 period
164    [ ${year} -ge 1979 ] && LMDZ_COSP_daily=y
165
166    ## physiq.def parameters modified from initial physiq_L${RESOL_ATM_Z}
167    LMDZ_sed physiq.def OK_instan   ${OK_instan}
168    LMDZ_sed physiq.def OK_journe   ${OK_journe}
169    LMDZ_sed physiq.def OK_mensuel  ${OK_mensuel}
170    #LMDZ_sed physiq.def lev_histmth ${lev_histmth}
171    LMDZ_sed physiq.def ok_hf       ${ok_hf}
172    LMDZ_sed physiq.def ecrit_mth   ${LMDZ_ecrit_mth}
173    LMDZ_sed physiq.def ecrit_ISCCP ${LMDZ_ecrit_ISCCP}
174    LMDZ_sed physiq.def ok_cosp     ${LMDZ_COSP_OK}
175    LMDZ_sed physiq.def ok_mensuelCOSP  ${LMDZ_COSP_monthly}
176    LMDZ_sed physiq.def ok_journeCOSP   ${LMDZ_COSP_daily}
177    LMDZ_sed physiq.def ok_hfCOSP   ${LMDZ_COSP_hf}
178    LMDZ_sed physiq.def ok_histNMC  "${LMDZ_NMC_monthly}, ${LMDZ_NMC_daily}, ${LMDZ_NMC_hf}"
179    LMDZ_sed physiq.def solaire     ${IPCC_SOLAR}
180    LMDZ_sed physiq.def co2_ppm     ${IPCC_CO2}
181    LMDZ_sed physiq.def CH4_ppb     ${IPCC_CH4}
182    LMDZ_sed physiq.def N2O_ppb     ${IPCC_N2O}
183    LMDZ_sed physiq.def CFC11_ppt   ${IPCC_CFC11}
184    LMDZ_sed physiq.def CFC12_ppt   ${IPCC_CFC12}
185
186    ## gcm.def parameters : no change since gcm.def_${RESOL_ATM_3D} is used and already modified
187
188    ## run.def parameters
189    LMDZ_sed run.def dayref   ${InitDay}
190    LMDZ_sed run.def anneeref ${InitYear}
191    LMDZ_sed run.def calend   ${CalendarTypeForLmdz}
192    LMDZ_sed run.def nday     ${PeriodLengthInDays}
193    LMDZ_sed run.def raz_date ${RAZ_DATE}
194    LMDZ_sed run.def periodav ${LMDZ_periodav}
195    LMDZ_sed run.def adjust   ${LMDZ_adjust}
196
197    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
198    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta
199    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
200    if [ ${ByPass_hgardfou_teta} = y ] ; then
201        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
202        IGCM_sys_Mv gcm.def.tmp gcm.def
203        echo
204        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
205        echo
206        cat gcm.def
207        ByPass_hgardfou_teta=n
208        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
209    fi
210
211    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
212    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats
213    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
214    if [ ${ByPass_hgardfou_mats} = y ] ; then
215        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
216        IGCM_sys_Mv gcm.def.tmp gcm.def
217        echo
218        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
219        echo
220        cat gcm.def
221        ByPass_hgardfou_mats=n
222        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
223    fi
224
225    if ( ${FirstInitialize} ) ; then
226
227        if ( [ "${config_Restarts_OverRule}" = "n" ] && [ "${config_ATM_Restart}" = "n" ] ); then
228            if [ ${DRYRUN} -le 2 ] ; then
229                ##-- suppression of ozone file construction --
230                cp physiq.def physiq.def.save
231                LMDZ_sed physiq.def read_climoz 0
232                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
233                if [ ${DRYRUN} -le 1 ] ; then
234                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
235                    IGCM_sys_Put_Out start.nc    ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_start.nc
236                    IGCM_sys_Put_Out startphy.nc ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_startphy.nc
237                fi
238                IGCM_sys_Mv physiq.def.save physiq.def
239            else
240                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated"
241                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated for DRYRUN = " $DRYRUN >> stack
242            fi
243        fi
244
245    fi
246
247    IGCM_debug_PopStack "ATM_Update"
248}
249
250#-----------------------------------
251function ATM_Finalize
252{
253    IGCM_debug_PushStack "ATM_Finalize"
254
255    [ ${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}
256
257    echo FINALIZE ATM !
258
259    IGCM_debug_PopStack "ATM_Finalize"
260}
Note: See TracBrowser for help on using the repository browser.