source: CONFIG/IPSLCM/IPSLCM5-2/piControl/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: 9.9 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    LMDZ_NbPeriod_adjust=${lmdz_UserChoices_LMDZ_NbPeriod_adjust}
62
63    if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
64        IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices LMDZ_Bands_file_name
65        LMDZ_Bands_file_name=${lmdz_UserChoices_LMDZ_Bands_file_name}
66    fi
67
68    ##  Read LMDZ_Freq_aero and LMDZ_Length_aero in lmdz.card
69    LMDZ_Freq_aero=${lmdz_UserChoices_LMDZ_Freq_aero}
70    LMDZ_Length_aero=${lmdz_UserChoices_LMDZ_Length_aero}
71
72    ##  Read LMDZ_COSP_monthly  LMDZ_COSP_daily and LMDZ_COSP_hf in lmdz.card
73    LMDZ_COSP_OK=${lmdz_UserChoices_LMDZ_COSP_OK}
74    LMDZ_COSP_monthly=${lmdz_UserChoices_LMDZ_COSP_monthly}
75    LMDZ_COSP_daily=${lmdz_UserChoices_LMDZ_COSP_daily}
76    LMDZ_COSP_hf=${lmdz_UserChoices_LMDZ_COSP_hf}
77
78    ##  Read LMDZ_NMC_monthly  LMDZ_NMC_daily and LMDZ_NMC_hf in lmdz.card
79    LMDZ_NMC_monthly=${lmdz_UserChoices_LMDZ_NMC_monthly}
80    LMDZ_NMC_daily=${lmdz_UserChoices_LMDZ_NMC_daily}
81    LMDZ_NMC_hf=${lmdz_UserChoices_LMDZ_NMC_hf}
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    ## algo : For CumulPeriod=1 ;
116    ##        IF NbPeriod_Adjust = 0, Get Bands file directly from server, store it with _0 suffix
117    ##        ELSE LMDZ_adjust=y ; save Bands file on file server ;
118    ##        For CumulPeriod=2 to LMDZ_NbPeriod_adjust ; Get Bands file from server (CumulPeriod-1) ; LMDZ_adjust=y ; save Bands file on file server ;
119    ##        For CumulPeriod > LMDZ_NbPeriod_adjust ; LMDZ_adjust=n ; Get Bands file from server (CumulPeriod=LMDZ_NbPeriod_adjust 0 to force it) ; Use Bands ;
120
121    if [ ${CumulPeriod} -eq 1 ] ; then
122        if [ ${LMDZ_NbPeriod_adjust} -eq 0 ] ; then
123            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
124            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
125            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"
126        fi
127    fi
128
129    LMDZ_adjust=n
130    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
131
132    RefPeriod=${LMDZ_NbPeriod_adjust} #0 to use a Bands file from Restart
133    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 )) 
134
135    [ ${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 )
136
137    ##-- GHG forcing :
138    ##   If forcing file exist in run directory, read values for the current year and modify physiq.def
139    if [ -f SOLARANDVOLCANOES.txt ] ; then
140        IPCC_SOLAR=`grep Annee_${year} SOLARANDVOLCANOES.txt | awk -F= '{print $2}'`
141        LMDZ_sed physiq.def solaire     ${IPCC_SOLAR}
142    fi
143    if [ -f CO2.txt ] ; then
144        IPCC_CO2=`grep Annee_${year} CO2.txt | awk -F= '{print $2}'`
145        LMDZ_sed physiq.def co2_ppm     ${IPCC_CO2}
146    fi
147    if [ -f CH4.txt ] ; then
148        IPCC_CH4=`grep Annee_${year} CH4.txt | awk -F= '{print $2}'`
149        LMDZ_sed physiq.def CH4_ppb     ${IPCC_CH4}
150    fi
151    if [ -f N2O.txt ] ; then
152        IPCC_N2O=`grep Annee_${year} N2O.txt | awk -F= '{print $2}'`
153        LMDZ_sed physiq.def N2O_ppb     ${IPCC_N2O}
154    fi
155    if [ -f CFC11.txt ] ; then
156        IPCC_CFC11=`grep Annee_${year} CFC11.txt | awk -F= '{print $2}'`
157        LMDZ_sed physiq.def CFC11_ppt   ${IPCC_CFC11}
158    fi
159    if [ -f CFC12.txt ] ; then
160        IPCC_CFC12=`grep Annee_${year} CFC12.txt | awk -F= '{print $2}'`
161        LMDZ_sed physiq.def CFC12_ppt   ${IPCC_CFC12}
162    fi
163
164    ## physiq.def parameters modified from initial physiq_L${RESOL_ATM_Z}
165    LMDZ_sed physiq.def OK_instan   ${OK_instan}
166    LMDZ_sed physiq.def OK_journe   ${OK_journe}
167    LMDZ_sed physiq.def OK_mensuel  ${OK_mensuel}
168    LMDZ_sed physiq.def ok_hf       ${ok_hf}
169    LMDZ_sed physiq.def ecrit_mth   ${LMDZ_ecrit_mth}
170    LMDZ_sed physiq.def ecrit_ISCCP ${LMDZ_ecrit_ISCCP}
171    LMDZ_sed physiq.def ok_cosp     ${LMDZ_COSP_OK}
172    LMDZ_sed physiq.def ok_mensuelCOSP  ${LMDZ_COSP_monthly}
173    LMDZ_sed physiq.def ok_journeCOSP   ${LMDZ_COSP_daily}
174    LMDZ_sed physiq.def ok_hfCOSP   ${LMDZ_COSP_hf}
175    LMDZ_sed physiq.def ok_histNMC  "${LMDZ_NMC_monthly}, ${LMDZ_NMC_daily}, ${LMDZ_NMC_hf}"
176
177    ## gcm.def parameters : no change since gcm.def_${RESOL_ATM_3D} is used and already modified
178
179    ## run.def parameters
180    LMDZ_sed run.def dayref   ${InitDay}
181    LMDZ_sed run.def anneeref ${InitYear}
182    LMDZ_sed run.def calend   ${CalendarTypeForLmdz}
183    LMDZ_sed run.def nday     ${PeriodLengthInDays}
184    LMDZ_sed run.def raz_date ${RAZ_DATE}
185    LMDZ_sed run.def periodav ${LMDZ_periodav}
186    LMDZ_sed run.def adjust   ${LMDZ_adjust}
187
188    ## Read ByPass_hgardfou_teta option in lmdz.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
189    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta
190    ByPass_hgardfou_teta=${lmdz_UserChoices_ByPass_hgardfou_teta}
191    if [ ${ByPass_hgardfou_teta} = y ] ; then
192        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
193        IGCM_sys_Mv gcm.def.tmp gcm.def
194        echo
195        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
196        echo
197        cat gcm.def
198        ByPass_hgardfou_teta=n
199        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
200    fi
201
202    ## Read ByPass_hgardfou_mats option in lmdz.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
203    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats
204    ByPass_hgardfou_mats=${lmdz_UserChoices_ByPass_hgardfou_mats}
205    if [ ${ByPass_hgardfou_mats} = y ] ; then
206        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
207        IGCM_sys_Mv gcm.def.tmp gcm.def
208        echo
209        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
210        echo
211        cat gcm.def
212        ByPass_hgardfou_mats=n
213        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/lmdz.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
214    fi
215
216    if ( ${FirstInitialize} ) ; then
217
218        if ( [ "${config_Restarts_OverRule}" = "n" ] && [ "${config_ATM_Restart}" = "n" ] ); then
219            if [ ${DRYRUN} -le 2 ] ; then
220                ##-- suppression of ozone file construction --
221                cp physiq.def physiq.def.save
222                LMDZ_sed physiq.def read_climoz 0
223                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
224                if [ ${DRYRUN} -le 1 ] ; then
225                    ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e
226                    IGCM_sys_Put_Out start.nc    ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_start.nc
227                    IGCM_sys_Put_Out startphy.nc ${R_OUT_ATM_R}/${config_UserChoices_JobName}_${PeriodDateBegin}_startphy.nc
228                fi
229                IGCM_sys_Mv physiq.def.save physiq.def
230            else
231                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated"
232                echo "EXECUTION of ${HOST_MPIRUN_COMMAND} -np 1 ./create_etat0_limit.e simulated for DRYRUN = " $DRYRUN >> stack
233            fi
234        fi
235
236    fi
237
238    IGCM_debug_PopStack "ATM_Update"
239}
240
241#-----------------------------------
242function ATM_Finalize
243{
244    IGCM_debug_PushStack "ATM_Finalize"
245
246    [ ${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}
247
248    echo FINALIZE ATM !
249
250    IGCM_debug_PopStack "ATM_Finalize"
251}
Note: See TracBrowser for help on using the repository browser.