source: BOL/LMDZ_Setup/script_SIMU @ 5427

Last change on this file since 5427 was 5427, checked in by fhourdin, 13 months ago

Bug fix

File size: 15.8 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#@ADS#SBATCH --exclusive
34
35set -eux
36
37# Number of MPI processes :
38ntasks=8
39# number of OpenMP threads
40nthreads=8
41export OMP_NUM_THREADS=$nthreads
42#@JZ#export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK  # For Jean-Zay (replacing the next 3 lines, commented out)
43# private memory for each thread
44export OMP_STACKSIZE=800M
45
46
47#@JZ#export OMP_PLACES=cores  # "binding" present in old script_SIMU, but terribly reduces performance on Spirit...
48ulimit -s unlimited
49#@SP ulimit -Ss 8192
50
51simul=NOM_SIMU
52
53reseau_local=0
54#veget=y
55veget=CMIP6
56if [[ $veget = "none" ]] ; then VEGET=n ; else VEGET=y ; fi
57
58isotopes=n
59# If isotopes=y, initialisation_iso will be changed to 0 in iso.def after the 1st run period, to read isotopes in restart files
60
61# Choice of aerosols : n / clim / spla
62aerosols=clim
63stopsim=201101
64ok_guide=y   # y/n guidage ou non
65climato=1
66
67echo '##############################################################'
68echo '# Gestion des repertoires de lancement                                 '
69echo '##############################################################'
70
71# Repertoires de la simulation
72SCRATCHD=$SCRATCH
73STORED=$STORE
74MAINDIR=LMDZOR96x95x79
75SIMU_dir=$MAINDIR/$simul
76SIMUDIR=$STORED/$SIMU_dir
77
78# Repertoires de travail
79WWORKD=$SCRATCHD/$simul$$
80if [[ -d $WWORKD ]]; then  # useful when running on local computer, where jobs aren't submitted
81  #rm -rf "$WWORKD"
82  mv $WWORKD $WWORKD$$
83fi
84mkdir -p $WWORKD
85cd $WWORKD
86SCRIPTDIR=$SCRATCHD
87
88cp "$STORED/$MAINDIR/lmdz_env.sh" .; . lmdz_env.sh
89cp "$STORED/$MAINDIR/slurm_set_cpu_binding.sh" .
90
91ERADIR=$STORED/$MAINDIR/GUIDE
92if [ "$aerosols" = "spla" ] ; then ERA10mDIR=$STORED/$MAINDIR/ERA10m ; fi
93LIMITDIR=$STORED/$MAINDIR/LIMIT
94DEFDIR=$SIMUDIR/DEF
95
96GET='ln -s'
97PUT='mv '
98
99
100echo '##################################################################'
101echo 'Gestion des mois et annees'
102echo '##################################################################'
103
104$GET $SIMUDIR/etat
105year=`tail -1 etat | awk ' { print $1 } ' | cut -c1-4`
106month=`tail -1 etat | awk ' { print $1 } ' | cut -c5-`
107echo year $year month $month
108
109if [ "$month" = "" ] ; then
110   paran=1
111   ym=$year
112   next=`expr $ym + 1`
113else
114   paran=0
115   if [ $month = 12 ] ; then
116      nextmonth=1
117      nextyear=`expr $year + 1`
118   else
119      nextmonth=`expr $month + 1`
120      nextyear=$year
121   fi
122   if [ `echo $nextmonth | wc -m` = 2  ] ; then
123      nextmonth=0$nextmonth
124   fi
125   ym=$year$month
126   next=$nextyear$nextmonth
127fi
128
129
130echo ym $ym
131echo mois ancien  : $ym
132echo mois nouveau : $next
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      # nday=3 ; ndayh=1 # Pratique pour des tests rapides
171   fi
172fi
173
174echo CALENDRIER $calend : longueur du mois vrai $year $month $nday dayref=$dayref
175
176
177echo '####################################################################'
178echo '# On va chercher les fichiers necessaires a la simulation'
179echo '####################################################################'
180#Reminder : we are in $WWORKD = $SCRATCHD/$SIMU_dir = $SCRATCHD/$MAINDIR/$simul
181
182echo DEFDIR $DEFDIR
183echo SIMUDIR $SIMUDIR
184echo simul $simul
185
186if [ $reseau_local = 0 ] ; then mkdir DEF ; cd DEF ; $GET $DEFDIR/* . ; cd .. ; fi
187
188cp -f DEF/* .
189#---The following changes in .def files will only be visible in the running directory (on SCRATCH if $reseau_local = 0)
190# They concern variables that change during runtime : nday, dayref, anneeref, ndayh
191# The other "sed" were totally or partially moved in setup.sh, to be done in $MAINDIR/DEF/*.def, before creating $MAINDIR/$SIMU (more transparent)
192#sed -e 's/ok_guide=.*.$/ok_guide='$ok_guide'/' DEF/guide.def >| guide.def
193#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
194
195#=====!!!!!!!!====!!!!!!====!!!!+++====!!!!!!====!!!!!!!=====!!!!!!====z!!!====!!!!========!!!!!========!!!
196##POUR que des TESTS soyent tres RAPIDES (pour ex, verifier fichiers input), ON FORCE nday=1 jour  !!!
197#nday=1
198#=====!!!!!!!!====!!!!!!====!!!!+++====!!!!!!====!!!!!!!=====!!!!!!====z!!!====!!!!========!!!!!========!!!
199
200sed -e 's/nday=.*.$/nday='$nday'/' -e 's/dayref=.*.$/dayref='${dayref}'/' -e 's/anneeref=.*.$/anneeref='$year'/' DEF/run.def >| run.def
201sed -e 's/phys_out_filetimesteps=[[:space:]]*[0-9][0-9]day/phys_out_filetimesteps=  '$ndayh'day/'  DEF/config.def >| config.def
202#--- End of *.def changes in the $WWORKD only
203
204${GET} $SIMUDIR/start.$ym.nc start.nc
205${GET} $SIMUDIR/startphy.$ym.nc startphy.nc
206if [ $climato = 1 ] ; then
207   ${GET} $LIMITDIR/limit.nc limit.nc
208else
209   ${GET} $LIMITDIR/limit.$year.nc limit.nc
210fi
211
212
213echo '####################################################################'
214echo '# Imports des fichiers aerosols si flag_aerosol>0 dans config.def, '
215echo '# et si dans setup.sh on a "aerosols=clim" ou "aerosols=spla". '
216echo '# NOTE: Si "aerosols=n" dans setup.sh, script_SIMU met flag_aerosol=0 et on tourne SANS aerosols' 
217echo '####################################################################'
218if [ "`grep 'flag_aerosol=' config.def | head -1 | cut -d= -f2`" != 0 ] ; then
219  if [ $aerosols = clim ] ; then
220    # if [ $climato = 1 ] ; then suf=clim ; else suf=$year ; fi
221    suf=clim
222    # Le script pourrait être sophistique pour prendre des aerosols interannuels
223    ${GET} $LIMITDIR/aerosols.$suf.nc aerosols$year.nc
224    if [ ! -f aerosols1980.nc ] ; then ${GET} $LIMITDIR/aerosols.$suf.nc aerosols1980.nc ; fi
225    ${GET} $LIMITDIR/aerosols.nat.nc aerosols.nat.nc
226  fi
227
228  # Rapatriement des fichiers pour SPLA.
229  # AFAIRE : si le wget marche de toutes les machines, enlever le wget_pub equivalent dans setup.sh
230  #          et le faire automatiquement dans ln_from_pub
231  if [[ $aerosols = "spla" ]]; then
232    for file in donnees_lisa.nc SOILSPEC.data ; do
233         ln_from_pub 3DInputData/dust_chimere $file
234    done
235    for file in cly.dat dust$mo.nc wth.dat ; do
236         ln_from_pub 3DInputData/dust_inca $file
237    done
238    ln -s dust$mo.nc dust.nc
239    for file in carbon_emissions.nc sulphur_emissions_antro.nc sulphur_emissions_nat.nc \
240         sulphur_emissions_volc.nc  ; do
241         ln_from_pub 3DInputData/non_dust $file
242    done
243
244    # Le calcul d'emissions de sels marins utilise les vents ERA-10m interpoles sur grille_s (lonv,latu) avec le script era2gcm_uv10m.sh
245    # NB : GET=ln -s ; ERA10mDIR contient lui-meme le lien ERA10m vers le repertoire des vents interpoles $REA_uv10m (REA=ERA5, ERAI ou OPERA)
246    ventl="u10m.nc v10m.nc"
247    for file in $ventl ; do ${GET} $ERA10mDIR/${year}/${month}/$file . ; done
248  fi
249fi
250
251#----------------------------------------
252# Noveaux forcages a activer a l'avenir
253#   (commentes en attendant) :
254#----------------------------------------
255#for file in climoz_LMDZ.nc solarforcing.nc  taulwstrat.2D.nc  tauswstrat.2D.nc ; do
256#   ${GET} $LIMITDIR/$file $file
257#done
258#----------------------------------------
259
260${GET} $SIMUDIR/gcm.e gcm.e ; chmod  +x gcm.e
261
262
263if [ $VEGET = y ] ; then
264    set +e ; for t in stomate sechiba ; do cp $SIMUDIR/start_$t.$ym.nc ${t}_rest_in.nc ; done ; set -e
265    if [ "`grep RIVER_ROUTING orchidee.def |grep -i y`" ] ; then
266      set +e
267      for file in routing_simple.nc routing.nc ; do
268          ln_from_pub 3DInputData/Orchideee routing.nc
269      done
270      cp $SIMUDIR/start_routing.$ym.nc routing_start.nc
271      set -e
272    fi
273
274#For Orchidee trunk (post-CMIP6), orchidee_pft.def must be copied in addition to orchidee.def
275    \cp -f DEF/orchidee*.def .
276
277# Test sur sechiba_rest_in.nc,
278#  supposant que les restarts pour sechiba, stomate, et routing le cas echeant,
279#  sont soit tous dispo, soit tous absents
280    if [ ! -f sechiba_rest_in.nc ] ; then
281       echo '#########################################################'
282       echo "Autoinitialisation d'orchidee au besoin"
283       echo '#########################################################'
284       for file in cartepente2d_15min.nc \
285          lai2D.nc soils_param.nc soil_bulk_and_ph.nc alb_bg_modisopt_2D_ESA_v2.nc reftemp.nc ; do
286          ln_from_pub 3DInputData/Orchidee $file
287       done
288       ln -sf alb_bg_modisopt_2D_ESA_v2.nc alb_bg.nc
289
290       echo ATTENTION : ON UTILISE LES FICHIERS DE L ANNEE 2000
291       ln_from_pub 3DInputData/Orchidee PFTmap_15PFT.v1_2000.nc ; ln -s PFTmap_15PFT.v1_2000.nc PFTmap.nc
292       ln_from_pub 3DInputData/Orchidee woodharvest_2000.nc ; ln -s woodharvest_2000.nc woodharvest.nc
293
294       sed -e 's/^SECHIBA_restart_in.*./SECHIBA_restart_in=NONE/' \
295           -e 's/^STOMATE_RESTART_FILEIN.*./STOMATE_RESTART_FILEIN=NONE/' \
296           -i orchidee.def
297
298      if [ $veget = 7994 ] ; then
299         for file in ndep_nhx.nc ndep_noy.nc nfert_cropland.nc nfert_pasture.nc nmanure_cropland.nc nmanure_pasture.nc bnf.nc ; do
300            ln_from_pub 3DInputData/Orchidee $file
301         done
302      fi
303
304    fi
305
306fi
307
308
309echo '#################################################################'
310echo    'Repertoire contenant les fichiers de reanalyses'
311echo '#################################################################'
312
313if [ "$ok_guide" = "y" ] ; then
314   \rm -f u.nc v.nc T.nc hur.nc
315   if [ -f u.nc ] ; then
316      echo PROBLEME D EFFACEMENT DES FICHIERS DE REANALYSES
317      exit 1
318   fi
319   for var in u v T hur ; do $GET $ERADIR/$year/$month/$var.nc $var.nc ; done
320   echo Fin du rapatriement des fichiers de guidage
321fi
322
323echo '##################################################################'
324echo    'liste des fichiers avant le lancement de la simulation'
325echo '##################################################################'
326ls -lrt
327#diff DEF ./
328
329echo '##################################################################'
330echo    'Lancement de la simulation'
331echo '##################################################################'
332
333#@ADS if 1; then
334time $MPICMD $ntasks ./gcm.e > listing
335#@ADS else
336#@ADS srun --cpu-bind=none --mem-bind=none -- ./slurm_set_cpu_binding.sh ./gcm.e > listing
337#@ADS fi
338
339if [ ! -f restartphy.nc ] ; then
340echo PROBLEME PAS DE FICHIER RESTARTPHY
341exit
342fi
343
344echo '##################################################################'
345echo     'sauvegarde des fichiers de sortie'
346echo '##################################################################'
347
348# listing
349${PUT} listing ${SIMUDIR}/list$ym
350# if the listing for Orchidee is also needed, then uncomment the following line :
351#if [ $VEGET = y ] ; then ${PUT} out_orchidee_0000.0000 ${SIMUDIR}/out_orchidee$ym ; fi
352
353# restart(s)
354${PUT} restart.nc ${SIMUDIR}/start.$next.nc
355${PUT} restartphy.nc ${SIMUDIR}/startphy.$next.nc
356if [ $VEGET = y ] ; then for t in sechiba stomate ; do
357    f=${t}_rest_out.nc ; if [ -f $f ] ; then ${PUT} $f ${SIMUDIR}/start_$t.$next.nc ; fi ; done 
358    f=routing_restart.nc ; if [ -f $f ] ; then ${PUT} $f ${SIMUDIR}/start_routing.$next.nc ; fi
359fi
360
361# fichiers "histoires"
362# 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
363liste_out="histmth histday histhf histmthCOSP Xhistins XhistLES sechiba_history sechiba_history_4dim sechiba_out_2 stomate_history stomate_ipcc_history diag_routing dynzon"
364xios_used=0
365
366for fileout in $liste_out ; do
367  if [ -f  $fileout.nc ] ; then 
368     ${PUT} $fileout.nc ${SIMUDIR}/$fileout.$ym.nc
369     xios_used=1
370  fi
371done
372
373if [ $xios_used = 0 ] ; then
374  $GET $SIMUDIR/reb.sh
375  chmod +x reb.sh
376  ./reb.sh $ym $SIMUDIR $liste_out
377fi
378
379if [ -f guide_ins.nc ] ; then ${PUT} guide_ins.nc ${SIMUDIR}/guide_ins.$ym.nc ; fi
380
381echo '##################################################################'
382echo     'preparation et lancement de la simulation suivante'
383echo '##################################################################'
384
385# Gestion du fichier etat de controle de la simulation
386echo $ym OK >> etat
387echo $next a faire >> etat
388# ${PUT} etat $SIMUDIR/etat # Pas necessaire car etat est un lien vers $SIMUDIR/etat
389
390# set initialisation_iso to 0 for next run to read isotopes from restart files
391if [ $isotopes = y ] ; then
392   sed -i 's/^initialisation_iso=.*.$/initialisation_iso=0/' $SIMUDIR/DEF/iso.def
393fi
394set +e ; \rm out* sec* sta* list* rest* gcm.e aer* ; set -e
395
396# Arret si on est arrive au bout
397if [ $next =  $stopsim ] ; then
398   echo 'On arrive au bout, simulation next:'$next', stopsim:'$stopsim
399   # Cas particulier ou on veut chainer plusieurs simulations multi annuelles.
400   # pour le tuning automatique.
401   # Ici on passe de SCM_1-019 a SCM_1-029
402   if [ "${simul:0:3}" = "SCM" ] ; then
403      pre="SCM_1-"
404      num=`echo $simul | sed -e 's/'$pre'//'`
405      # (( num = $num + 10 )) change a cause d un probleme avec 008
406      num=`echo $num | awk ' { print $1 + 10 } '`
407      num=`printf "%03d\n" $num`
408      simul_new=$pre$num
409      cd $SCRIPTDIR
410      if [ $num -le 250 ] ; then
411         sed -e 's/^simul=.*.$/simul='$simul_new'/' -e 's/^\# @ job_nam.*.=.*.$/\# @ job_name = '$simul_new'/' tmp_$simul >| tmp_$simul_new
412         submitcmd tmp_$simul_new
413      fi
414   fi
415   exit
416fi
417
418
419echo '##################################################################'
420echo      'lancement de la simulation suivante tmp_'$simul' depuis :'
421echo '##################################################################'
422pwd
423
424
425cd $SCRIPTDIR
426submitcmd tmp_$simul
427#$SUBMITCMD tmp_$simul
Note: See TracBrowser for help on using the repository browser.