source: CONFIG/IPSLCM/IPSLCM5/branches/IPSLCM5_WORK/EXPBIOS/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    ## Mise en forme du fichier physiq.def
102    sed -e "s/${PAT_INST}/OK_instan=${OK_instan}/"                 \
103        -e "s/${PAT_JOUR}/OK_journe=${OK_journe}/"                 \
104        -e "s/${PAT_MOIS}/OK_mensuel=${OK_mensuel}/"               \
105        -e "s/${PAT_HFRE}/ok_hf=${ok_hf}/"                         \
106        -e "s/${PAT_ecrit_mth}/ecrit_mth=${LMDZ_ecrit_mth}/"       \
107        -e "s/${PAT_ecrit_ISCCP}/ecrit_ISCCP=${LMDZ_ecrit_ISCCP}/" \
108        physiq.def > physiq.def.tmp
109    IGCM_sys_Mv physiq.def.tmp physiq.def
110
111    ## Mise en forme du fichier gcm.def
112    sed -e "s/${PAT_day_step}/day_step=${day_step}/"    \
113        -e "s/${PAT_iperiod}/iperiod=${iperiod}/"       \
114        -e "s/${PAT_iphysiq}/iphysiq=${iphysiq}/"       \
115        gcm.def > gcm.def.tmp
116    IGCM_sys_Mv gcm.def.tmp gcm.def
117
118    ## Mise en forme du fichier run.def
119    sed -e "s/_dayref_/${InitDay}/"                    \
120        -e "s/_anneeref_/${InitYear}/"                 \
121        -e "s/_calend_/${CalendarTypeForLmdz}/"        \
122        -e "s/_nday_/${PeriodLengthInDays}/"           \
123        -e "s/_raz_date_/${RAZ_DATE}/"                 \
124        -e "s/_periodav_/${LMDZ_periodav}/"            \
125        -e "s/_adjust_/${LMDZ_adjust}/"                \
126        run.def > run.def.tmp
127    IGCM_sys_Mv run.def.tmp run.def
128
129    ## Read ByPass_hgardfou_teta option in ${compname}.card --> divide teta* by 2 if [ $ByPass_hgardfou_teta = 1 ]
130    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_teta
131    eval ByPass_hgardfou_teta=\${${compname}_UserChoices_ByPass_hgardfou_teta} > /dev/null 2>&1
132    if [ ${ByPass_hgardfou_teta} = y ] ; then
133        awk '{ if ($0 ~ /^teta.*=/) {split($0,a,"=") ; print a[1]"="a[2]/2"."} else print $0}' gcm.def > gcm.def.tmp
134        IGCM_sys_Mv gcm.def.tmp gcm.def
135        echo
136        IGCM_debug_Print 1 "ByPass_hgardfou_teta : ^teta*/2 in gcm.def"
137        echo
138        cat gcm.def
139        ByPass_hgardfou_teta=n
140        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_teta "${ByPass_hgardfou_teta}"
141    fi
142
143    ## Read ByPass_hgardfou_mats option in ${compname}.card --> purmats=y 2 if [ $ByPass_hgardfou_mats = 1 ]
144    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_mats
145    eval ByPass_hgardfou_mats=\${${compname}_UserChoices_ByPass_hgardfou_mats} > /dev/null 2>&1
146    if [ ${ByPass_hgardfou_mats} = y ] ; then
147        sed -e "s/^purmats=.*/purmats=y/" gcm.def > gcm.def.tmp
148        IGCM_sys_Mv gcm.def.tmp gcm.def
149        echo
150        IGCM_debug_Print 1 "ByPass_hgardfou_mats : purmats=y in gcm.def"
151        echo
152        cat gcm.def
153        ByPass_hgardfou_mats=n
154        IGCM_card_WriteOption ${SUBMIT_DIR}/COMP/${compname}.card UserChoices ByPass_hgardfou_mats "${ByPass_hgardfou_mats}"
155    fi
156
157    if ( ${FirstInitialize} ) ; then
158
159        if ( [ "${config_Restarts_OverRule}" = "n" ] && [ "${config_ATM_Restart}" = "n" ] ); then
160            if [ ${DRYRUN} -le 2 ] ; then
161                IGCM_sys_Cp ${R_EXE}/create_etat0_limit.e ${RUN_DIR}/.
162                if [ ${DRYRUN} -le 1 ] ; then
163                    ./create_etat0_limit.e
164                fi
165            else
166                echo "EXECUTION of ./create_etat0_limit.e simulated"
167                echo "EXECUTION of ./create_etat0_limit.e simulated for DRYRUN = " $DRYRUN >> stack
168            fi
169        fi
170
171    fi
172
173    IGCM_debug_PopStack "ATM_Update"
174}
175
176#-----------------------------------
177function ATM_Finalize
178{
179    IGCM_debug_PushStack "ATM_Finalize"
180
181    [ ${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}
182
183    echo FINALIZE ATM !
184
185    IGCM_debug_PopStack "ATM_Finalize"
186}
Note: See TracBrowser for help on using the repository browser.