source: CONFIG/IPSLCM/IPSLCM5/branches/IPSLCM5_WORK/EXP00/COMP/lmdz.driver @ 744

Last change on this file since 744 was 744, checked in by mafoipsl, 15 years ago

Delete all Bands files in PARAM directories. Add in lmdz.driver everything concerning Bands. Add in lmdz.card LMDZ_NbPeriod_adjust parameter.

File size: 7.5 KB
Line 
1#!/bin/ksh
2#-----------------------------------------------------------------
3function ATM_Initialize
4{
5    IGCM_debug_PushStack "ATM_Initialize"
6
7    RESOL_ATM=$( echo $RESOL | awk "-Fx" '{print $2}' | awk "-F-" '{print $1}')
8
9    [ -f ${SUBMIT_DIR}/../.resol ] && eval $(grep RESOL_ATM_3D ${SUBMIT_DIR}/../.resol) || RESOL_ATM_3D=96x95x19
10
11    RESOL_ATM_Z=$( echo ${RESOL_ATM_3D} | awk "-Fx" '{print $3}' )
12
13    ##-- Calendar type for LMDZ
14    case ${config_UserChoices_CalendarType} in
15        leap|gregorian)
16            CalendarTypeForLmdz=earth_366d;;
17        noleap)
18            CalendarTypeForLmdz=earth_365d;;
19        360d)
20            CalendarTypeForLmdz=earth_360d;;
21        *)
22            CalendarTypeForLmdz=earth_360d
23    esac
24
25    ##--Frequency purpose ....
26    ##--  Initialisation  ....
27    OK_instan=n
28    OK_journe=n
29    OK_mensuel=n
30    ok_hf=n
31
32    case ${config_UserChoices_PeriodLength} in
33        1Y|1y|1M|1m) OK_mensuel=y ;;
34        5D|5d|1D|1d) OK_journe=y ;;
35    esac
36
37    for frequency in ${config_ATM_WriteFrequency} ; do
38        case ${frequency} in
39            5D|5d|1D|1d) OK_journe=y ;;
40        esac
41        case ${frequency} in
42            HF|hf) ok_hf=y ;;
43        esac
44    done
45
46    ##--Variables used by LMDZ in physiq.def --
47    PAT_INST=$(        grep -v ^# ${SUBMIT_DIR}/PARAM/physiq.def_L${RESOL_ATM_Z}  | grep 'OK_instan='   )
48    PAT_JOUR=$(        grep -v ^# ${SUBMIT_DIR}/PARAM/physiq.def_L${RESOL_ATM_Z}  | grep 'OK_journe='   )
49    PAT_MOIS=$(        grep -v ^# ${SUBMIT_DIR}/PARAM/physiq.def_L${RESOL_ATM_Z}  | grep 'OK_mensuel='  )
50    PAT_HFRE=$(        grep -v ^# ${SUBMIT_DIR}/PARAM/physiq.def_L${RESOL_ATM_Z}  | grep 'ok_hf='       )
51    PAT_ecrit_mth=$(   grep -v ^# ${SUBMIT_DIR}/PARAM/physiq.def_L${RESOL_ATM_Z}  | grep 'ecrit_mth='   )
52    PAT_ecrit_ISCCP=$( grep -v ^# ${SUBMIT_DIR}/PARAM/physiq.def_L${RESOL_ATM_Z}  | grep 'ecrit_ISCCP=' )
53    ##--Variables used by LMDZ in gcm.def --
54    PAT_iphysiq=$(   grep -v ^# ${SUBMIT_DIR}/PARAM/gcm.def_${RESOL_ATM_3D} | grep iphysiq  )
55    PAT_iperiod=$(   grep -v ^# ${SUBMIT_DIR}/PARAM/gcm.def_${RESOL_ATM_3D} | grep iperiod  )
56    PAT_day_step=$(  grep -v ^# ${SUBMIT_DIR}/PARAM/gcm.def_${RESOL_ATM_3D} | grep day_step )
57
58    ## Read LMDZ_NbPeriod_adjust option in ${compname}.card
59    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices LMDZ_NbPeriod_adjust
60    eval LMDZ_NbPeriod_adjust=\${${compname}_UserChoices_LMDZ_NbPeriod_adjust} > /dev/null 2>&1
61   
62    ## algo : CumulPeriod=1 ; LMDZ_adjust=y ; save Bands file on file server ;
63    ##        For CumulPeriod=2 to LMDZ_NbPeriod_adjust ; Fetch Bands file from server (CumulPeriod-1) ; LMDZ_adjust=y ; save Bands file on file server ;
64    ##        For CumulPeriod > LMDZ_NbPeriod_adjust ; LMDZ_adjust=n ; Fetch Bands file from server (CumulPeriod=LMDZ_NbPeriod_adjust) ; Use Bands ;
65
66    ##-- This could be define in lmdz.card, inside section [UserChoices]
67    ##-- Otherwise we get the value in *.def
68    iperiod=$( echo ${PAT_iperiod} | awk -F= '{print $2}' )
69    iphysiq=$( echo ${PAT_iphysiq} | awk -F= '{print $2}' )
70    # day_step : number of steps per day (multiple of iperiod)
71    #(( day_step = 48 * iphysiq ))
72    day_step=$( echo ${PAT_day_step} | awk -F= '{print $2}' )
73
74    IGCM_debug_PopStack "ATM_Initialize"
75}
76
77#-----------------------------------------------------------------
78function ATM_Update
79{
80    IGCM_debug_PushStack "ATM_Update"
81
82    LMDZ_ecrit_mth=${PeriodLengthInDays}.
83    LMDZ_ecrit_ISCCP=${PeriodLengthInDays}.
84    LMDZ_periodav=${PeriodLengthInDays}.
85
86    ##-- Remise ou non a zero de la date initiale de LMDZ pour le fichier run.def
87    if [ ${CumulPeriod} -eq 1 ] ; then
88        RAZ_DATE=1
89    else
90        RAZ_DATE=0
91    fi
92
93    LMDZ_adjust=n
94    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && LMDZ_adjust=y
95
96    RefPeriod=${LMDZ_NbPeriod_adjust}
97    [ ${CumulPeriod} -le ${LMDZ_NbPeriod_adjust} ] && (( RefPeriod = ${CumulPeriod} - 1 ))
98
99    [ ${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
100
101
102    ## Mise en forme du fichier physiq.def
103    sed -e "s/${PAT_INST}/OK_instan=${OK_instan}/"                 \
104        -e "s/${PAT_JOUR}/OK_journe=${OK_journe}/"                 \
105        -e "s/${PAT_MOIS}/OK_mensuel=${OK_mensuel}/"               \
106        -e "s/${PAT_HFRE}/ok_hf=${ok_hf}/"                         \
107        -e "s/${PAT_ecrit_mth}/ecrit_mth=${LMDZ_ecrit_mth}/"       \
108        -e "s/${PAT_ecrit_ISCCP}/ecrit_ISCCP=${LMDZ_ecrit_ISCCP}/" \
109        physiq.def > physiq.def.tmp
110    IGCM_sys_Mv physiq.def.tmp physiq.def
111
112    ## Mise en forme du fichier gcm.def
113    sed -e "s/${PAT_day_step}/day_step=${day_step}/"    \
114        -e "s/${PAT_iperiod}/iperiod=${iperiod}/"       \
115        -e "s/${PAT_iphysiq}/iphysiq=${iphysiq}/"       \
116        gcm.def > gcm.def.tmp
117    IGCM_sys_Mv gcm.def.tmp gcm.def
118
119    ## Mise en forme du fichier run.def
120    sed -e "s/_dayref_/${InitDay}/"                    \
121        -e "s/_anneeref_/${InitYear}/"                 \
122        -e "s/_calend_/${CalendarTypeForLmdz}/"        \
123        -e "s/_nday_/${PeriodLengthInDays}/"           \
124        -e "s/_raz_date_/${RAZ_DATE}/"                 \
125        -e "s/_periodav_/${LMDZ_periodav}/"            \
126        -e "s/_adjust_/${LMDZ_adjust}/"                \
127        run.def > run.def.tmp
128    IGCM_sys_Mv run.def.tmp run.def
129
130    ## Read ByPass_hgardfou_teta option in ${compname}.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
131    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_teta
132    eval ByPass_hgardfou_teta=\${${compname}_UserChoices_ByPass_hgardfou_teta} > /dev/null 2>&1
133    if [ ${ByPass_hgardfou_teta} = y ] ; then
134        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
135        IGCM_sys_Mv gcm.def.tmp gcm.def
136        echo
137        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
138        echo
139        cat gcm.def
140        ByPass_hgardfou_teta=n
141        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
142    fi
143
144    ## Read ByPass_hgardfou_mats option in ${compname}.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
145    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_mats
146    eval ByPass_hgardfou_mats=\${${compname}_UserChoices_ByPass_hgardfou_mats} > /dev/null 2>&1
147    if [ ${ByPass_hgardfou_mats} = y ] ; then
148        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
149        IGCM_sys_Mv gcm.def.tmp gcm.def
150        echo
151        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
152        echo
153        cat gcm.def
154        ByPass_hgardfou_mats=n
155        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
156    fi
157
158    if ( ${FirstInitialize} ) ; then
159
160        if ( [ "${config_Restarts_OverRule}" = "n" ] && [ "${config_ATM_Restart}" = "n" ] ); then
161            if [ ${DRYRUN} -le 2 ] ; then
162                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
163                if [ ${DRYRUN} -le 1 ] ; then
164                    ./create_etat0_limit.e
165                fi
166            else
167                echo "EXECUTION of ./create_etat0_limit.e simulated"
168                echo "EXECUTION of ./create_etat0_limit.e simulated for DRYRUN = " $DRYRUN >> stack
169            fi
170        fi
171
172    fi
173
174    IGCM_debug_PopStack "ATM_Update"
175}
176
177#-----------------------------------
178function ATM_Finalize
179{
180    IGCM_debug_PushStack "ATM_Finalize"
181
182    [ ${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}
183
184    echo FINALIZE ATM !
185
186    IGCM_debug_PopStack "ATM_Finalize"
187}
Note: See TracBrowser for help on using the repository browser.