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