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

Last change on this file since 6875 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
RevLine 
[396]1#!/bin/ksh
2#-----------------------------------------------------------------
[894]3function LMDZ_sed
4{
5    IGCM_debug_PushStack "LMDZ_sed"
6
[911]7    sed -e "s/^${2}\ *=.*/${2}= ${3}/" ${1} > ${1}.tmp
[894]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
[396]16function ATM_Initialize
17{
18    IGCM_debug_PushStack "ATM_Initialize"
19
[671]20    RESOL_ATM=$( echo $RESOL | awk "-Fx" '{print $2}' | awk "-F-" '{print $1}')
[396]21
[659]22    [ -f ${SUBMIT_DIR}/../.resol ] && eval $(grep RESOL_ATM_3D ${SUBMIT_DIR}/../.resol) || RESOL_ATM_3D=96x95x19
[396]23
[659]24    RESOL_ATM_Z=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $3}' )
[649]25
[697]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
[396]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
[902]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
[396]62
[815]63    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
[902]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
[815]66    fi
67
[912]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
[1001]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
[1003]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
[396]83    IGCM_debug_PopStack "ATM_Initialize"
84}
85
86#-----------------------------------------------------------------
87function ATM_Update
88{
89    IGCM_debug_PushStack "ATM_Update"
90
[749]91    case ${config_UserChoices_PeriodLength} in
92        *Y|*y) 
93               LMDZ_ecrit_mth=30.
94               LMDZ_ecrit_ISCCP=30.
95               LMDZ_periodav=30.
[755]96               if [ "${config_UserChoices_CalendarType}" != "360d" ] ; then
[749]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
[396]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
[918]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
[912]122    else
[918]123       lev_histmth=2
124    fi   
[912]125
[815]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
[902]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
[815]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
[743]140    LMDZ_adjust=n
141    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
142
[815]143    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
144    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
[743]145
[902]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 )
[743]147
[1158]148    ##-- GHG forcing for the current year
149    IPCC_SOLAR=`grep Annee_${year} SOLARANDVOLCANOES_1610_2008.txt | awk -F= '{print $2}'`
150
[911]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}
[912]155    LMDZ_sed physiq.def lev_histmth ${lev_histmth}
[911]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}
[1001]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}
[1012]163    LMDZ_sed physiq.def ok_histNMC  "${LMDZ_NMC_monthly}, ${LMDZ_NMC_daily}, ${LMDZ_NMC_hf}"
[1158]164    LMDZ_sed physiq.def solaire     ${IPCC_SOLAR}
[396]165
[911]166    ## gcm.def parameters : no change since gcm.def_${RESOL_ATM_3D} is used and already modified
[396]167
[911]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}
[396]176
[902]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
[396]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
[902]188        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
[396]189    fi
190
[902]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
[396]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
[902]202        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
[396]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
[894]209                ##-- suppression of ozone file construction --
210                cp physiq.def physiq.def.save
211                LMDZ_sed physiq.def read_climoz 0
[396]212                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
213                if [ ${DRYRUN} -le 1 ] ; then
[908]214                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
[894]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
[396]217                fi
[894]218                IGCM_sys_Mv physiq.def.save physiq.def
[396]219            else
[908]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
[396]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
[743]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}
[396]236
237    echo FINALIZE ATM !
238
239    IGCM_debug_PopStack "ATM_Finalize"
240}
Note: See TracBrowser for help on using the repository browser.