source: CONFIG/IPSLCM/IPSLCM5-2/historical/COMP/lmdz.driver @ 1535

Last change on this file since 1535 was 1535, checked in by jgipsl, 13 years ago

Modifications in working configuration :

Modifications in lmdz.card and lmdz.driver

  • GHG forcing files should now be copied in files with standard names such as CO2.txt, CH4.txt, N2O.txt, CFC11.txt and CFC12.txt. Now the

lmdz.driver will update the GHG parameters in physiq.def as soon as one
of theses files are added in lmdz.card.

  • removed CO2_1765_2005.txt from Chistorical/COMP/lmdz.card, the file is not used in this experience

Modifications in pisces.driver and pisces.card

  • add option CARBON_CYCLE=y to be set in pisces.card section UserChoices? for experience Chistorical and CpiControl?. With this option, co2 will

be read from co2.log file as before.

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