source: BOL/LMDZ_Setup_amaury/script_SIMU @ 5034

Last change on this file since 5034 was 5034, checked in by abarral, 2 months ago

fix Adastra max cpu/node
fix Adastra sbatch env inheritance
remove Adastra nomultithread
fix ini script SUBMITCMD

File size: 15.2 KB
Line 
1#!/bin/bash
2## Headers managed by sed
3#@JZ#JeanZay
4#@JZ#SBATCH --job-name=NOM_SIMU         # nom du job
5#@JZ# Nombre de processus MPI :
6#@JZ#SBATCH --ntasks=8
7#@JZ##### number of MPI processes per node : 40(procs/node on Jean-Zay) / cpus-per-task (ex : =5 for 8 OMP)
8#@JZ####SBATCH --ntasks-per-node=5    # if specified, also add "#SBATCH --nodes= ..."  with nodes=ntasks/(ntasks-per-node)
9#@JZ# nombre de threads OpenMP
10#@JZ#SBATCH --cpus-per-task=8
11#@JZ# de Slurm "multithread" fait bien reference a l'hyperthreading.
12#@JZ#SBATCH --hint=nomultithread       # 1 thread par coeur physique (pas d'hyperthreading)
13#@JZ#SBATCH --time=00:30:00            # Temps d execution maximum demande (HH:MM:SS)
14#@JZ#SBATCH --output=outNOM_SIMU%j     # Nom du fichier de sortie
15#@JZ#SBATCH --error=outNOM_SIMU%j      # Nom du fichier d'erreur (ici commun avec la sortie)
16#@JZ# To submit to test queue ; "time" (above) must be max 30 min
17#@JZ#TESTQ#SBATCH --qos=qos_cpu-dev
18#@SP#Spirit
19#@SP#SBATCH --job-name=NOM_SIMU
20#@SP#SBATCH --ntasks=8
21#@SP#SBATCH --cpus-per-task=8
22#@SP#SBATCH --time=00:30:00
23#@SP#SBATCH --output=outNOM_SIMU%j
24#@SP#SBATCH --error=outNOM_SIMU%j
25#@ADS#Adastra
26#@ADS#SBATCH --job-name=NOM_SIMU
27#@ADS#SBATCH --ntasks=8
28#@ADS#SBATCH --cpus-per-task=8
29#@ADS#SBATCH --ntasks-per-node=8
30#@ADS#SBATCH --time=00:30:00
31#@ADS#SBATCH --output=outNOM_SIMU%j
32#@ADS#SBATCH --error=outNOM_SIMU%j
33
34set -eux
35
36# Number of MPI processes :
37ntasks=8
38# number of OpenMP threads
39nthreads=8
40export OMP_NUM_THREADS=$nthreads
41#@JZ#export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK  # For Jean-Zay (replacing the next 3 lines, commented out)
42# private memory for each thread
43export OMP_STACKSIZE=800M
44
45
46#@JZ#export OMP_PLACES=cores  # "binding" present in old script_SIMU, but terribly reduces performance on Spirit...
47ulimit -s unlimited
48#@SP ulimit -Ss 8192
49
50simul=NOM_SIMU
51
52reseau_local=0
53#veget=y
54veget=CMIP6
55if [[ $veget = "none" ]] ; then VEGET=n ; else VEGET=y ; fi
56
57isotopes=n
58# If isotopes=y, initialisation_iso will be changed to 0 in iso.def after the 1st run period, to read isotopes in restart files
59
60# Choice of aerosols : n / clim / spla
61aerosols=clim
62stopsim=201101
63ok_guide=y   # y/n guidage ou non
64climato=1
65
66echo '##############################################################'
67echo '# Gestion des repertoires de lancement                                 '
68echo '##############################################################'
69
70# Repertoires de la simulation
71SCRATCHD=$SCRATCH
72STORED=$STORE
73MAINDIR=LMDZOR96x95x79
74SIMU_dir=$MAINDIR/$simul
75SIMUDIR=$STORED/$SIMU_dir
76
77# Repertoires de travail
78WWORKD=$SCRATCHD/$SIMU_dir$$
79if [[ -d $WWORKD ]]; then  # useful when running on local computer, where jobs aren't submitted
80  rm -rf "$WWORKD"
81fi
82mkdir -p $WWORKD
83cd $WWORKD
84SCRIPTDIR=$SCRATCHD/$MAINDIR
85
86cp $STORED/$MAINDIR/lmdz_env.sh . ; . lmdz_env.sh
87ERADIR=$STORED/$MAINDIR/GUIDE
88if [ "$aerosols" = "spla" ] ; then ERA10mDIR=$STORED/$MAINDIR/ERA10m ; fi
89LIMITDIR=$STORED/$MAINDIR/LIMIT
90SPLADIR=$STORED/$MAINDIR/INPUT_SPLA
91DEFDIR=$SIMUDIR/DEF
92
93GET='ln -s'
94PUT='mv '
95
96
97echo '##################################################################'
98echo 'Gestion des mois et annees'
99echo '##################################################################'
100
101$GET $SIMUDIR/etat
102year=`tail -1 etat | awk ' { print $1 } ' | cut -c1-4`
103month=`tail -1 etat | awk ' { print $1 } ' | cut -c5-`
104echo year $year month $month
105
106if [ "$month" = "" ] ; then
107   paran=1
108   ym=$year
109   next=`expr $ym + 1`
110else
111   paran=0
112   if [ $month = 12 ] ; then
113      nextmonth=1
114      nextyear=`expr $year + 1`
115   else
116      nextmonth=`expr $month + 1`
117      nextyear=$year
118   fi
119   if [ `echo $nextmonth | wc -m` = 2  ] ; then
120      nextmonth=0$nextmonth
121   fi
122   ym=$year$month
123   next=$nextyear$nextmonth
124fi
125
126
127echo ym $ym
128echo mois ancien  : $ym
129echo mois nouveau : $next
130
131INI=${SPLADIR}/INITIAL
132PERIOD=${SPLADIR}/PERIOD00${month}/SUB
133
134echo '#################################################################'
135echo 'Modification de run.def et gcm.def pour prendre en compte la duree du'
136echo 'du mois en question.'
137echo 'le dayref est modifie pour tricher avec le calendrier (ecrit pour'
138echo 'une annee de 260 jours dans le modele).'
139echo 'On passe donc comme jour de reference le numero du jour du mois dans'
140echo 'une annee en 360 jours.'
141echo '#################################################################'
142
143# Choix du calendrier
144#AS: La condition if "$climato" = "0" suffit, car "$ok_guide" = "y" est interdit avec $climato" = "1" dans setup.sh (exit ligne 160)
145##calend=earth_360d
146##if [ "$ok_guide" = "y" -o "$climato" = "0" ] ; then calend=gregorian ; fi
147if [ "$climato" = "0" ] ; then calend=gregorian ; else calend=earth_360d ; fi
148bisextile=0
149if [[ $(( year % 4 )) = 0 && $calend = gregorian ]] ; then bisextile=1 ; fi
150if [ $paran = 0 ] ; then
151   if [ "$calend" = "gregorian" ] ; then
152      ndays=( 31 28 31 30 31 30 31 31 30 31 30 31 )
153      if [ $bisextile = 1 ] ; then ndays[1]=29 ; fi
154   else
155      ndays=( 30 30 30 30 30 30 30 30 30 30 30 30 )
156   fi
157   #Constants with a leading 0 are interpreted as octal numbers.
158   # You can remove the leading zero by parameter expansion: hour=${hour#0}
159
160   nday=${ndays[(( ${month#0} - 1 ))]}
161   ndayh=$nday
162   dayref=1 ; mm=1 ; while [ $mm -lt ${month#0} ] ; do
163    (( dayref = $dayref + ${ndays[(( $mm - 1 ))]} )) ; (( mm = $mm + 1 )) ; done
164else
165   dayref=1
166   if [ "$calend" = "gregorian" ] ; then
167      if [ $bisextile = 0 ] ; then nday=365 ; else nday=366 ; fi
168   else
169      nday=360 ; ndayh=30
170   fi
171fi
172
173echo CALENDRIER $calend : longueur du mois vrai $year $month $nday dayref=$dayref
174
175
176echo '####################################################################'
177echo '# On va chercher les fichiers necessaires a la simulation'
178echo '####################################################################'
179#Reminder : we are in $WWORKD = $SCRATCHD/$SIMU_dir = $SCRATCHD/$MAINDIR/$simul
180
181echo DEFDIR $DEFDIR
182echo SIMUDIR $SIMUDIR
183echo simul $simul
184
185if [ $reseau_local = 0 ] ; then mkdir DEF ; cd DEF ; $GET $DEFDIR/* . ; cd .. ; fi
186
187cp -f DEF/* .
188#---The following changes in .def files will only be visible in the running directory (on SCRATCH if $reseau_local = 0)
189# They concern variables that change during runtime : nday, dayref, anneeref, ndayh
190# The other "sed" were totally or partially moved in setup.sh, to be done in $MAINDIR/DEF/*.def, before creating $MAINDIR/$SIMU (more transparent)
191#sed -e 's/ok_guide=.*.$/ok_guide='$ok_guide'/' DEF/guide.def >| guide.def
192#sed -e 's/nday=.*.$/nday='$nday'/' -e 's/dayref=.*.$/dayref='${dayref}'/' -e 's/calend=.*.$/calend='$calend'/' -e 's/anneeref=.*.$/anneeref='$year'/' DEF/run.def >| run.def
193
194#=====!!!!!!!!====!!!!!!====!!!!+++====!!!!!!====!!!!!!!=====!!!!!!====z!!!====!!!!========!!!!!========!!!
195##POUR que des TESTS soyent tres RAPIDES (pour ex, verifier fichiers input), ON FORCE nday=1 jour  !!!
196#nday=1
197#=====!!!!!!!!====!!!!!!====!!!!+++====!!!!!!====!!!!!!!=====!!!!!!====z!!!====!!!!========!!!!!========!!!
198
199sed -e 's/nday=.*.$/nday='$nday'/' -e 's/dayref=.*.$/dayref='${dayref}'/' -e 's/anneeref=.*.$/anneeref='$year'/' DEF/run.def >| run.def
200sed -e 's/phys_out_filetimesteps=[[:space:]]*[0-9][0-9]day/phys_out_filetimesteps=  '$ndayh'day/'  DEF/config.def >| config.def
201#--- End of *.def changes in the $WWORKD only
202
203${GET} $SIMUDIR/start.$ym.nc start.nc
204${GET} $SIMUDIR/startphy.$ym.nc startphy.nc
205if [ $climato = 1 ] ; then
206   ${GET} $LIMITDIR/limit.nc limit.nc
207else
208   ${GET} $LIMITDIR/limit.$year.nc limit.nc
209fi
210
211
212echo '####################################################################'
213echo '# Imports des fichiers aerosols si flag_aerosol>0 dans config.def, '
214echo '# et si dans setup.sh on a "aerosols=clim" ou "aerosols=spla". '
215echo '# NOTE: Si "aerosols=n" dans setup.sh, script_SIMU met flag_aerosol=0 et on tourne SANS aerosols' 
216echo '####################################################################'
217if [ "`grep 'flag_aerosol=' config.def | head -1 | cut -d= -f2`" != 0 ] ; then
218  if [ $aerosols = clim ] ; then
219    # if [ $climato = 1 ] ; then suf=clim ; else suf=$year ; fi
220    suf=clim
221    # Le script pourrait être sophistique pour prendre des aerosols interannuels
222    ${GET} $LIMITDIR/aerosols.$suf.nc aerosols$year.nc
223    if [ ! -f aerosols1980.nc ] ; then ${GET} $LIMITDIR/aerosols.$suf.nc aerosols1980.nc ; fi
224    ${GET} $LIMITDIR/aerosols.nat.nc aerosols.nat.nc
225  fi
226
227  ## Ca doit etre la meme liste de fichiers rapatriee par setup.sh dans $LMDZ_INIT/SPLA_Init
228  ## et interpolee (setup.sh aussi) dans $SPLADIR
229  if [ $aerosols = spla ] ; then 
230    inputf="wth.dat cly.dat donnees_lisa.nc SOILSPEC.data \
231                carbon_emissions.nc sulphur_emissions_antro.nc  \
232                sulphur_emissions_nat.nc  sulphur_emissions_volc.nc"
233    for file in $inputf ; do ${GET} $INI/$file . ; done
234
235    change="dust.nc "
236    for file in $change ; do ${GET} $PERIOD/$file . ; done
237
238    # Le calcul d'emissions de sels marins utilise les vents ERA-10m interpoles sur grille_s (lonv,latu) avec le script era2gcm_uv10m.sh
239    # NB : GET=ln -s ; ERA10mDIR contient lui-meme le lien ERA10m vers le repertoire des vents interpoles $REA_uv10m (REA=ERA5, ERAI ou OPERA)
240    ventl="u10m.nc v10m.nc"
241    for file in $ventl ; do ${GET} $ERA10mDIR/${year}/${month}/$file . ; done
242  fi
243fi
244
245#----------------------------------------
246# Noveaux forcages a activer a l'avenir
247#   (commentes en attendant) :
248#----------------------------------------
249#for file in climoz_LMDZ.nc solarforcing.nc  taulwstrat.2D.nc  tauswstrat.2D.nc ; do
250#   ${GET} $LIMITDIR/$file $file
251#done
252#----------------------------------------
253
254${GET} $SIMUDIR/gcm.e gcm.e ; chmod  +x gcm.e
255
256
257if [ $VEGET = y ] ; then
258    set +e ; for t in stomate sechiba ; do cp $SIMUDIR/start_$t.$ym.nc ${t}_rest_in.nc ; done ; set -e
259    if [ "`grep RIVER_ROUTING orchidee.def |grep -i y`" ] ; then
260      set +e ; ln -s $LMDZ_INIT/routing_simple.nc . ; ln -s $LMDZ_INIT/routing.nc .
261               cp $SIMUDIR/start_routing.$ym.nc routing_start.nc ; set -e
262    fi
263
264#For Orchidee trunk (post-CMIP6), orchidee_pft.def must be copied in addition to orchidee.def
265    \cp -f DEF/orchidee*.def .
266
267# Test sur sechiba_rest_in.nc,
268#  supposant que les restarts pour sechiba, stomate, et routing le cas echeant,
269#  sont soit tous dispo, soit tous absents
270    if [ ! -f sechiba_rest_in.nc ] ; then
271       echo '#########################################################'
272       echo "Autoinitialisation d'orchidee au besoin"
273       echo '#########################################################'
274       get="ln -s $LMDZ_INIT/"
275       for file in cartepente2d_15min.nc \
276          lai2D.nc soils_param.nc soil_bulk_and_ph.nc alb_bg_modisopt_2D_ESA_v2.nc reftemp.nc ; do ${get}$file ; done
277
278       ln -sf alb_bg_modisopt_2D_ESA_v2.nc alb_bg.nc
279
280       echo ATTENTION : ON UTILISE LES FICHIERS DE L ANNEE 2000
281       ${get}PFTmap_15PFT.v1_2000.nc PFTmap.nc
282       ${get}woodharvest_2000.nc woodharvest.nc
283
284       sed -e 's/^SECHIBA_restart_in.*./SECHIBA_restart_in=NONE/' \
285           -e 's/^STOMATE_RESTART_FILEIN.*./STOMATE_RESTART_FILEIN=NONE/' \
286           -i orchidee.def
287
288      if [ $veget = 7994 ] ; then
289         get="ln -s $LMDZ_INIT/"
290         for file in ndep_nhx.nc ndep_noy.nc nfert_cropland.nc nfert_pasture.nc nmanure_cropland.nc nmanure_pasture.nc bnf.nc ; do ${get}$file ; done
291      fi
292
293    fi
294
295fi
296
297
298echo '#################################################################'
299echo    'Repertoire contenant les fichiers de reanalyses'
300echo '#################################################################'
301
302if [ "$ok_guide" = "y" ] ; then
303   \rm -f u.nc v.nc T.nc hur.nc
304   if [ -f u.nc ] ; then
305      echo PROBLEME D EFFACEMENT DES FICHIERS DE REANALYSES
306      exit 1
307   fi
308   for var in u v T hur ; do $GET $ERADIR/$year/$month/$var.nc $var.nc ; done
309   echo Fin du rapatriement des fichiers de guidage
310fi
311
312echo '##################################################################'
313echo    'liste des fichiers avant le lancement de la simulation'
314echo '##################################################################'
315ls -lrt
316#diff DEF ./
317
318echo '##################################################################'
319echo    'Lancement de la simulation'
320echo '##################################################################'
321
322time $MPICMD $ntasks ./gcm.e > listing
323if [ ! -f restartphy.nc ] ; then
324echo PROBLEME PAS DE FICHIER RESTARTPHY
325exit
326fi
327
328echo '##################################################################'
329echo     'sauvegarde des fichiers de sortie'
330echo '##################################################################'
331
332# listing
333${PUT} listing ${SIMUDIR}/list$ym
334# if the listing for Orchidee is also needed, then uncomment the following line :
335#if [ $VEGET = y ] ; then ${PUT} out_orchidee_0000.0000 ${SIMUDIR}/out_orchidee$ym ; fi
336
337# restart(s)
338${PUT} restart.nc ${SIMUDIR}/start.$next.nc
339${PUT} restartphy.nc ${SIMUDIR}/startphy.$next.nc
340if [ $VEGET = y ] ; then for t in sechiba stomate ; do
341    f=${t}_rest_out.nc ; if [ -f $f ] ; then ${PUT} $f ${SIMUDIR}/start_$t.$next.nc ; fi ; done 
342    f=routing_restart.nc ; if [ -f $f ] ; then ${PUT} $f ${SIMUDIR}/start_routing.$next.nc ; fi
343fi
344
345# fichiers "histoires"
346# Si on tourne avec xios (et type="one_file") au lieu de ioipsl, on n'a pas besoin de rebuild, on doit juste copier les fichiers
347liste_out="histmth histday histhf histmthCOSP Xhistins XhistLES sechiba_history sechiba_history_4dim sechiba_out_2 stomate_history stomate_ipcc_history diag_routing dynzon"
348xios_used=0
349
350for fileout in $liste_out ; do
351  if [ -f  $fileout.nc ] ; then 
352     ${PUT} $fileout.nc ${SIMUDIR}/$fileout.$ym.nc
353     xios_used=1
354  fi
355done
356
357if [ $xios_used = 0 ] ; then
358  $GET $SIMUDIR/reb.sh
359  chmod +x reb.sh
360  ./reb.sh $ym $SIMUDIR $liste_out
361fi
362
363if [ -f guide_ins.nc ] ; then ${PUT} guide_ins.nc ${SIMUDIR}/guide_ins.$ym.nc ; fi
364
365echo '##################################################################'
366echo     'preparation et lancement de la simulation suivante'
367echo '##################################################################'
368
369# Gestion du fichier etat de controle de la simulation
370echo $ym OK >> etat
371echo $next a faire >> etat
372# ${PUT} etat $SIMUDIR/etat # Pas necessaire car etat est un lien vers $SIMUDIR/etat
373
374# set initialisation_iso to 0 for next run to read isotopes from restart files
375if [ $isotopes = y ] ; then
376   sed -i 's/^initialisation_iso=.*.$/initialisation_iso=0/' $SIMUDIR/DEF/iso.def
377fi
378set +e ; \rm out* sec* sta* list* rest* gcm.e aer* ; set -e
379
380# Arret si on est arrive au bout
381if [ $next =  $stopsim ] ; then
382   echo 'On arrive au bout, simulation next:'$next', stopsim:'$stopsim
383   # Cas particulier ou on veut chainer plusieurs simulations multi annuelles.
384   # pour le tuning automatique.
385   # Ici on passe de SCM_1-019 a SCM_1-029
386   if [ "${simul:0:3}" = "SCM" ] ; then
387      pre="SCM_1-"
388      num=`echo $simul | sed -e 's/'$pre'//'`
389      # (( num = $num + 10 )) change a cause d un probleme avec 008
390      num=`echo $num | awk ' { print $1 + 10 } '`
391      num=`printf "%03d\n" $num`
392      simul_new=$pre$num
393      cd $SCRIPTDIR
394      if [ $num -le 250 ] ; then
395         sed -e 's/^simul=.*.$/simul='$simul_new'/' -e 's/^\# @ job_nam.*.=.*.$/\# @ job_name = '$simul_new'/' tmp_$simul >| tmp_$simul_new
396         $SUBMITCMD tmp_$simul_new
397      fi
398   fi
399   exit
400fi
401
402
403echo '##################################################################'
404echo      'lancement de la simulation suivante tmp_'$simul' depuis :'
405echo '##################################################################'
406pwd
407
408
409cd $SCRIPTDIR
410$SUBMITCMD tmp_$simul
Note: See TracBrowser for help on using the repository browser.