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

Last change on this file since 1220 was 1220, checked in by lfairhead, 14 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
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
[988]55            HF|hf) 
56                ok_hf=y
57                OK_instan=y
58                ;;
[396]59        esac
60    done
61
[1220]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
[902]66    ## Read LMDZ_NbPeriod_adjust option in lmdz.card
67    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_NbPeriod_adjust
[1172]68    LMDZ_NbPeriod_adjust=${lmdz_UserChoices_LMDZ_NbPeriod_adjust}
[396]69
[815]70    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
[902]71        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_Bands_file_name
[1172]72        LMDZ_Bands_file_name=${lmdz_UserChoices_LMDZ_Bands_file_name}
[815]73    fi
74
[912]75    ##  Read LMDZ_Freq_aero and LMDZ_Length_aero in lmdz.card
[1172]76    LMDZ_Freq_aero=${lmdz_UserChoices_LMDZ_Freq_aero}
77    LMDZ_Length_aero=${lmdz_UserChoices_LMDZ_Length_aero}
[912]78
[1001]79    ##  Read LMDZ_COSP_monthly  LMDZ_COSP_daily and LMDZ_COSP_hf in lmdz.card
[1172]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}
[1001]84
[1003]85    ##  Read LMDZ_NMC_monthly  LMDZ_NMC_daily and LMDZ_NMC_hf in lmdz.card
[1172]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}
[1003]89
[396]90    IGCM_debug_PopStack "ATM_Initialize"
91}
92
93#-----------------------------------------------------------------
94function ATM_Update
95{
96    IGCM_debug_PushStack "ATM_Update"
97
[749]98    case ${config_UserChoices_PeriodLength} in
99        *Y|*y) 
100               LMDZ_ecrit_mth=30.
101               LMDZ_ecrit_ISCCP=30.
102               LMDZ_periodav=30.
[755]103               if [ "${config_UserChoices_CalendarType}" != "360d" ] ; then
[749]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
[396]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
[918]122    ## To have more variables in output files for aerosols. Parameters are set in lmdz.card
[988]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   
[912]132
[815]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
[902]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
[815]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
[743]147    LMDZ_adjust=n
148    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
149
[815]150    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
151    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
[743]152
[902]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 )
[743]154
[988]155    ##-- GHG forcing for the current year
[1083]156    IPCC_SOLAR=`grep Annee_${year} SOLARANDVOLCANOES_1610_2008.txt | awk -F= '{print $2}'`
[988]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
[1172]163    ##-- For historical daily cosp must be output during 1979-2005 period
164    [ ${year} -ge 1979 ] && LMDZ_COSP_daily=y
165
[911]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}
[988]170    #LMDZ_sed physiq.def lev_histmth ${lev_histmth}
[911]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}
[1001]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}
[1012]178    LMDZ_sed physiq.def ok_histNMC  "${LMDZ_NMC_monthly}, ${LMDZ_NMC_daily}, ${LMDZ_NMC_hf}"
[1026]179    LMDZ_sed physiq.def solaire     ${IPCC_SOLAR}
[988]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}
[396]185
[911]186    ## gcm.def parameters : no change since gcm.def_${RESOL_ATM_3D} is used and already modified
[396]187
[911]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}
[396]196
[902]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
[1172]199    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
[396]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
[902]208        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
[396]209    fi
210
[902]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
[1172]213    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
[396]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
[902]222        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
[396]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
[894]229                ##-- suppression of ozone file construction --
230                cp physiq.def physiq.def.save
231                LMDZ_sed physiq.def read_climoz 0
[396]232                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
233                if [ ${DRYRUN} -le 1 ] ; then
[908]234                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
[894]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
[396]237                fi
[894]238                IGCM_sys_Mv physiq.def.save physiq.def
[396]239            else
[908]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
[396]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
[743]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}
[396]256
257    echo FINALIZE ATM !
258
259    IGCM_debug_PopStack "ATM_Finalize"
260}
Note: See TracBrowser for help on using the repository browser.