source: CMIP5/historicalNat/historicalNat2/COMP/lmdz.driver @ 1680

Last change on this file since 1680 was 1158, checked in by mmaipsl, 14 years ago

Add Solar and Volcano forcing file from historical experiment to piControl natural.

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