source: BOL/LMDZ_Setup_amaury/script_SIMU @ 4978

Last change on this file since 4978 was 4978, checked in by abarral, 6 months ago

(WIP) update spirit and adastra-specific params
detect gcm.e compile fail

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