source: configs/testing/bash/create_runs.sh @ 629

Last change on this file since 629 was 629, checked in by dubos, 7 years ago

testing : added idealized Venus test case

  • Property svn:executable set to *
File size: 8.0 KB
Line 
1#!/bin/bash
2
3function create_exp() { # executable expname output_grid output_freq  - $* passed to rundef_$expname
4    EXEC=$1 ; shift
5    EXP=$1 ; shift
6    OUTPUT_GRID=$1 ; shift
7    OUTPUT_FREQ=$1 ; shift
8    EXPDIR=${EXP}_${EXEC}_$1
9    echo "Creating $EXPDIR"
10    rm -rf $EXPDIR
11    mkdir $EXPDIR
12    cd $EXPDIR
13    ln -sf $ROOT/build_${EXEC} build
14    ln -sf build/bin/icosa_gcm.exe gcm.exe
15    cp $ROOT/python/common.py post.py
16    echo "post_${EXP}()" >> post.py
17#    ln -sf $ROOT/python/post_${EXP}.py post.py
18    rundef_$EXP $* > tmp.def
19    sort tmp.def | cut -c 7- > run.def
20    rm -f tmp.def
21    xml_iodef > iodef.xml
22    xml_icosa > icosa.xml
23    xml_field_def > field_def.xml
24    xml_dcmip $EXP $OUTPUT_GRID $OUTPUT_FREQ > filedef_dcmip2016.xml
25    job_${EXP} ${EXEC} $* > job.sh
26    cd ..
27}
28
29function rundef_all() {
30    cat <<EOF
31100   #------------- Planet ---------------
32200   #------------- Dynamics  ------------
33300   #-------------- Mesh ----------------
34400   #------------ Numerics --------------
35500   #----------- Dissipation ------------
36600   #-------------- Physics -------------
37700   #---------------- Run ---------------
38800   #------------ Diagnostics -----------
39EOF
40}
41
42function setvar()
43{
44    while (($# > 1)) ; do
45        ii=${idx[$1]}
46        echo "$ii   $1=$2"
47        shift ; shift
48    done
49}
50function order()
51{
52    ii=$1 ; shift
53    for name in $* ; do
54        ((ii+=1))
55       idx[${name}]=$ii
56#       echo $name ${idx[${name}]}
57    done
58}
59
60#----------------------------- pre-defined resolutions ---------------------------
61
62function set_nbp_40() {
63    setvar dt 480 optim_it 500
64    split_${EXEC}_40
65}
66
67function set_nbp_80() {
68    setvar dt 240 optim_it 1000
69    split_${EXEC}_80
70}
71
72#-------------------------------- Williamson (1991) ------------------------------
73
74function rundef_W91() {
75    NBP=$1 ; TAU=$2
76    rundef_all
77    set_nbp_$NBP
78    setvar caldyn_conserv enstrophy caldyn_eta eta_lag boussinesq .TRUE. llm 1 radius 6.37122e6 g 9.80616
79    setvar nitergdiv 2 nitergrot 2 niterdivgrad 2 tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU
80    setvar write_period 86400 run_length 2592000 etat0 williamson91.6
81}
82
83function job_W91() {
84    job_$1_$2 W91_$1
85}
86
87#-------------------------------- Jablonowsky & Williamson (2006) ------------------------------
88
89function rundef_DCMIP(){
90    rundef_all
91    set_nbp_$1
92    setvar radius 6.37122e6 g 9.80616 kappa 0.2857143 cpp 1004.5 preff 1e5
93    setvar nitergdiv 2 nitergrot 2 niterdivgrad 2 tau_graddiv
94}
95
96function rundef_JW06() { # NBP TAU
97    NBP=$1 ; TAU=$2
98    rundef_DCMIP $NBP
99    setvar hydrostatic .FALSE.
100    setvar omega 7.292e-5 llm 60 disvert ncar ncar_dz 500 nqtot 2 itau_adv 3
101    setvar tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU
102    setvar write_period 21600 run_length 864000 etat0 jablonowsky06
103}
104
105function job_JW06() { # EXEC NBP
106    job_$1_$2 JW06_$1 # e.g. job_mpi_80 JW06_mpi
107}
108
109#------------------------------------- DCMIP 2012 ---------------------------------
110
111function rundef_DCMIP21() { # NBP TAU
112    NBP=$1 ; TAU=$2
113    rundef_DCMIP $NBP
114    setvar dysl_caldyn_vert .TRUE. caldyn_vert conservative
115    setvar omega 0. llm 60 disvert ncar ncar_T0 300 ncar_p0 1e5 ncar_disvert_c 1 ncar_dz 500
116    setvar tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU 
117    setvar scale_factor 500 write_period 50000 run_length 1.8e6 etat0 dcmip2_schaer_noshear
118    setvar rayleigh_friction_type dcmip2_schaer_noshear rayleigh_friction_tau 12500
119}
120
121function rundef_DCMIP31() { # NBP TAU HYDRO
122    NBP=$1 ; TAU=$2 ; HYDRO=$3
123    rundef_DCMIP $NBP
124    setvar dysl .TRUE. hydrostatic $3
125    setvar omega 0. llm 10 disvert ncar ncar_T0 300 ncar_p0 1e5 ncar_disvert_c 1 ncar_dz 1118
126    setvar tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU 
127    setvar scale_factor 125 write_period 7500 run_length 4.5e5 etat0 dcmip3
128}
129
130function rundef_DCMIP41() { # NBP TAU
131    NBP=$1 ; TAU=$2
132    rundef_DCMIP $NBP
133#    setvar dysl .TRUE.
134#    setvar hydrostatic .FALSE.
135    setvar diagflux .TRUE.
136    setvar omega 7.292e-5 llm 30 disvert ncarl30 nqtot 2 itau_adv 3
137    setvar tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU
138    setvar write_period 21600 run_length 2592000 etat0 dcmip4 dcmip4_testcase 1
139}
140
141function rundef_DCMIP51() { # NBP TAU
142    NBP=$1 ; TAU=$2
143    rundef_DCMIP $NBP
144    setvar omega 7.292e-5 llm 30 disvert ncarl30 nqtot 1 itau_adv 3
145    setvar tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU
146    setvar write_period 7200 run_length 864000 etat0 dcmip5
147    setvar physics dcmip dcmip_physics 0 itau_physics 6
148}
149
150function job_DCMIP21() { # EXEC NBP
151    job_$1_$2 DCMIP21_$1 # e.g. job_mpi_80 DCMIP31_mpi
152}
153function job_DCMIP31() { # EXEC NBP
154    job_$1_$2 DCMIP31_$1 # e.g. job_mpi_80 DCMIP31_mpi
155}
156function job_DCMIP41() { # EXEC NBP
157    job_$1_$2 DCMIP41_$1
158}
159function job_DCMIP51() { # EXEC NBP
160    job_$1_$2 DCMIP51_$1
161}
162
163#------------------------------------- OTHER ---------------------------------
164
165function rundef_bubble() { # NBP TAU
166    NBP=$1 ; TAU=$2
167    rundef_all
168    set_nbp_$NBP
169    setvar llm 50 disvert ncar ncar_dz 20 ncar_T0 300 ncar_p0 1e5
170#    setvar time_scheme ARK2.3
171    setvar nitergdiv 2 nitergrot 2 niterdivgrad 2 tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU
172    setvar radius 5e6 scale_factor 10000  g 9.80616 kappa 0.2857143 cpp 1004.5 preff 1e5 omega 0.
173}
174function job_bubble() { # EXEC NBP
175    job_$1_$2 Bubble_$1
176}
177
178function rundef_held_suarez() { # NBP TAU
179    NBP=$1 ; TAU=$2
180    rundef_DCMIP $NBP
181    setvar llm 19 disvert std write_period 86400 run_length 2592000 etat0 held_suarez # physics held_suarez
182    setvar time_scheme RK2.5
183    setvar nitergdiv 2 nitergrot 2 niterdivgrad 2 tau_graddiv $TAU tau_gradrot $TAU tau_divgrad $TAU
184}
185function job_held_suarez() { # EXEC NBP
186    job_$1_$2 HS94_$1
187}
188
189function rundef_venus() {
190    rundef_all
191    split_mpi_32
192    setvar nqtot 0 optim_it 1000 dt 480
193    setvar radius 6.0518e6 g 8.874575 kappa 0.2857248 cpp 669.73533 preff 9.2e6 omega 6.229e-7
194    setvar llm 49 disvert ncar ncar_dz 3500 ncar_T0 700 ncar_p0 9.2e6
195    setvar tau_graddiv 21600 nitergdiv 1 tau_gradrot 21600 nitergrot 2 tau_divgrad 21600 niterdivgrad 2
196    setvar dysl_caldyn_vert .TRUE. caldyn_vert conservative
197    setvar itau_check_conserv 45 check_conservation detailed
198    setvar etat0 venus physics Lebonnois2012 itau_physics 15 friction_time $((3*EARTH_DAY))
199    setvar write_period $((VENUS_DAY/4))
200    setvar run_length $((3*VENUS_DAY))
201#    setvar run_length $((50*VENUS_DAY))
202}
203
204function job_venus() { # EXEC NBP
205    job_$1_32 venus_$1
206}
207
208#-------------------------------- END TEST CASES -----------------------------
209
210function basic()
211{
212    rm -rf RUNS
213    mkdir RUNS
214    cd RUNS
215# Williamson 1991
216#    create_exp serial W91 two_degree 24h 40 5000 # nbp tau
217#    create_exp mpi W91 two_degree 24h 40 5000 # nbp tau
218    create_exp mpi JW06 two_degree 24h 40 10000 # nbp tau
219# DCMIP 2012
220    create_exp mpi DCMIP21 two_degree 100s 40 90000 # nbp tau
221    create_exp mpi DCMIP31 two_degree 60s 40 90000 .FALSE. # nbp tau hydro
222    create_exp mpi_omp DCMIP31 two_degree 60s 40 90000 .TRUE. # nbp tau hydro
223    create_exp mpi_omp DCMIP41 two_degree 24h 40 10000 # nbp tau
224#    create_exp mpi DCMIP51 one_degree 2h  80 10000 # nbp tau
225# Other
226    create_exp mpi_omp held_suarez two_degree 24h 40 10000 # nbp tau
227    create_exp mpi venus two_degree "$((VENUS_DAY/4))s" 32
228}
229
230function main()
231{
232# the number associated to each run.def parameter is used to sort the lines and order them in a logical way
233    declare -A idx
234    order 100 radius omega g cpp kappa preff scale_factor
235    order 200 boussinesq hydrostatic
236    order 300 nbp optim_it nsplit_i nsplit_j llm omp_level_size disvert ncar_disvert_c ncar_dz ncar_T0 ncar_p0
237    order 400 caldyn_eta time_scheme caldyn_conserv dt nqtot itau_adv dysl dysl_caldyn_vert caldyn_vert
238    order 500 nitergdiv tau_graddiv nitergrot tau_gradrot niterdivgrad tau_divgrad rayleigh_friction_type rayleigh_friction_tau
239    order 600 physics dcmip_physics itau_physics friction_time
240    order 700 run_length write_period etat0 dcmip4_testcase diagflux
241    order 800 itau_check_conserv check_conservation
242    basic
243}
244
245source current_args
246source bash/${arch}.sh
247source bash/xml.sh
248ROOT=$PWD
249VENUS_DAY=10087200
250EARTH_DAY=86400
251main
Note: See TracBrowser for help on using the repository browser.