Changeset 4953 for BOL/LMDZ_Setup_amaury


Ignore:
Timestamp:
May 27, 2024, 10:46:07 AM (8 months ago)
Author:
abarral
Message:

(WIP) systematic call to install_lmdz.sh with -noclean
mild refactor & clean

Location:
BOL/LMDZ_Setup_amaury
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • BOL/LMDZ_Setup_amaury/lmdz_env.sh

    r4615 r4953  
    44##############################################################
    55
    6 hostname=jean-zay-pp2
    7 echo lmdz_env $hostname 0:3 ${hostname:0:3}
     6hostname=$(hostname)
     7echo "Setting up lmdz_env on $hostname"
    88
    99case ${hostname:0:5} in
    10 
    11         jean-) ARCH=X64_JEANZAY
    12                 module purge
    13                 compilo=19.0.4 # available 2013.0, 2017.2
    14                 module load intel-compilers/$compilo
    15                 #module load intel-mpi/$compilo
    16                 module load intel-mkl/$compilo
    17                 module load hdf5/1.10.5-mpi
    18                 module load netcdf/4.7.2-mpi
    19                 module load netcdf-fortran/4.5.2-mpi
    20                 module load subversion/1.9.7
    21                 #Pour module gcc, voir : https://trac.lmd.jussieu.fr/LMDZ/wiki/PortageJeanZay
    22                 #module load gcc/6.5.0
    23                 module load nco
    24                 module load cdo
    25                 # Imputation de la consommation sur le groupe (projet) actif par defaut,
    26                 #   idrproj indique le groupe (projet) actif par defaut
    27                 #   idrproj -d newproj   redefinit "newproj" en tant que  projet actif,
    28                 #        alors $STORE, $WORK etc vont designer les espaces de "newproj")
    29                 groupe=`idrproj | grep active | awk '{ print $1}'`
    30                 submit="sbatch -A ${groupe}@cpu "
    31                 run="srun --label -n "
    32                 # Espaces suivants definis par defaut en fonction du groupe actif,
    33                 #  par exemple : SCRATCHD=$SCRATCH is /gpfsstore/rech/$groupe/$login
    34                 #    * On peut aussi ne pas installer les scripts a la racine de STORE, 
     10  jean-)
     11    ARCH="X64_JEANZAY"
     12    module purge
     13    compilo=19.0.4 # available 2013.0, 2017.2
     14    module load intel-compilers/$compilo
     15    #module load intel-mpi/$compilo
     16    module load intel-mkl/$compilo
     17    module load hdf5/1.10.5-mpi
     18    module load netcdf/4.7.2-mpi
     19    module load netcdf-fortran/4.5.2-mpi
     20    module load subversion/1.9.7
     21    #Pour module gcc, voir : https://trac.lmd.jussieu.fr/LMDZ/wiki/PortageJeanZay
     22    #module load gcc/6.5.0
     23    module load nco
     24    module load cdo
     25    # Imputation de la consommation sur le groupe (projet) actif par defaut,
     26    #   idrproj indique le groupe (projet) actif par defaut
     27    #   idrproj -d newproj   redefinit "newproj" en tant que  projet actif,
     28    #        alors $STORE, $WORK etc vont designer les espaces de "newproj")
     29    groupe=$(idrproj | grep active | awk '{ print $1}')
     30    submit="sbatch -A ${groupe}@cpu "
     31    run="srun --label -n "
     32    # Espaces suivants definis par defaut en fonction du groupe actif,
     33    #  par exemple : SCRATCHD=$SCRATCH is /gpfsstore/rech/$groupe/$login
     34                #    * On peut aussi ne pas installer les scripts a la racine de STORE,
    3535                #        mais dans STORED=$STORE/your_folder
    36                 STORED=$STORE
    37                 SCRATCHD=$SCRATCH
    38                 LMDZD=$WORK
    39                 nb_mpi_max=2000
    40                 nb_omp_max=20
    41                 #LMDZ_Init sur le $STORE du $groupe
    42                 LMDZ_Init=$STORE/LMDZ_Init ;;
    43         *) ARCH=
    44                 submit=". "
    45                 run="mpirun -np "
    46                 SCRATCHD=~/TMP/SCRATCH
    47                 STORED=~/TMP/
    48                 LMDZD=~/TMP
    49                 nb_mpi_max=2
    50                 nb_omp_max=2
    51                 LMDZ_Init=~/LMDZ/LMDZ_Init
     36    STORED=$STORE
     37    SCRATCHD=$SCRATCH
     38    LMDZD=$WORK
     39    NB_MPI_MAX=2000
     40    NB_OMP_MAX=20
     41    #LMDZ_Init sur le $STORE du $groupe
     42    LMDZ_Init=$STORE/LMDZ_Init ;;
     43  *)  # TODO mettre clairement dans ce paragraphe une doc de chaque param
     44    ARCH="local-gfortran-parallel"
     45#    submit=". "
     46#    run="mpirun -np "
     47#    SCRATCHD="/tmp/SCRATCH"
     48#    STORED=~"/TMP/"
     49    LMDZD="./LMDZD"
     50    NB_MPI_MAX=999999
     51    NB_OMP_MAX=999999
     52#    LMDZ_Init=~"/LMDZ/LMDZ_Init"
    5253esac
    5354
    5455
    55 echo LMDZ_Init dans lmdz_env $LMDZ_Init
     56#echo LMDZ_Init dans lmdz_env $LMDZ_Init
  • BOL/LMDZ_Setup_amaury/setup.sh

    r4940 r4953  
    1515  optim=""
    1616  #optim="-debug"
    17   # TODO Amaury: quelle diff avec l'option fcm="debug" ???
    1817
    1918  #NOTE : "testmode=y" is for running in test mode :
     
    5857  inlandsis="n"
    5958
    60   # COMPILATION options : "", "fcm", "debug"
    61   fcm=""
    62 
    6359  # --->>> ALSO PAY ATTENTION TO OUTPUT files, frequency, level -------------
    6460  #   With IOIPSL : Choose your config.def among the versions available in DEF,
     
    104100  svn=""
    105101
    106   install=0
    107102  init=1
    108103
     
    135130      "-f") freq=$2; shift; shift;;
    136131      "-p") phylmd=$2; shift; shift;;
    137       "-install") install=1; shift;;
    138132      "-name") SIM=$2; shift; shift;;
    139133      "-cosp") cosp=y; shift;;
     
    169163  # AVOID COMBINATIONS OF OPTIONS THAT DON'T WORK in user choices
    170164  if [[ $ok_guide = y && $climato = 1 ]]; then
    171      echo "Running nudged simulations with climatological SSTs is not planned. Change <climato> to <0> or modify the setup (experts)"; exit 1
     165     echo "STOP: Running nudged simulations with climatological SSTs is not planned. Change <climato> to <0> or modify the setup (experts)"; exit 1
    172166  fi
    173167
    174168  if [[ $climato = 0 && $freq = yr ]]; then
    175      echo "Running simulations with interannual SSTs is possible only month by month and a true calendar."
     169     echo "STOP: Running simulations with interannual SSTs is possible only month by month and a true calendar."
    176170     echo "Change <climato> to <1> or <freq> to <mo> or modify setup.sh (experts)"; exit 1
    177171  fi
     172
     173
     174  # (Temporary) Constraints for aerosols=spla :
     175  # --> resolution 128x88x79 and rad=rrtm
     176  if [[ $aerosols = 1 && $resol != "128x88x79" ]]; then
     177    echo 'STOP: For now, <aerosols=spla> requires <resol=128x88x79>, and uses the zoomed grid from gcm.def_zNAfrica_BiJe, for which forcing & initial files are available'
     178    echo "Right now resol=<$resol>"
     179    exit 1
     180  fi
    178181}
    179182
    180183function install_model {
    181184  mkdir -p "$LMDZD"
     185
     186  local ins_xios ins_cosp ins_aero ins_inlandsis
     187  if [[ $xios = "y" ]]; then ins_xios="-xios"; else ins_xios=""; fi
     188  if [[ $cosp = "y" ]]; then ins_cosp="-cosp v1"; else ins_cosp=""; fi
     189  if [[ $aerosols = "spla" ]]; then ins_aero="-spla"; else ins_aero=""; fi
     190  if [[ $inlandsis = "y" ]]; then ins_inlandsis="-inlandsis"; else ins_inlandsis=""; fi
     191  if [[ -n $svn ]]; then svnopt="-r $svn"; else svnopt=""; fi
    182192
    183193  version_name=LMDZ$(echo "$version" | sed -e 's/-v//g' -e 's/-unstable//' -e 's/-r/r/' -e 's/ //g')
     
    185195  MODEL="$LMDZD/$LMDZname/modipsl/modeles/LMDZ"
    186196
    187   if [[ $install = 1 ]]; then  # run install_lmdz to pull the required files and compile once
    188     if [[ -d $MODEL ]]; then
    189       echo "MODEL=$MODEL"
    190       echo "STOP: Vous essayez d'installer une version déja présente (option <-install>)"; exit 1
    191     else
    192       echo "Installing model"
    193       cd "$LMDZD"
    194       cp "$local/install_lmdz.sh" .
    195       chmod +x install_lmdz.sh
    196       # TODO handle arch/env here (used to be -env-file)
    197       echo "./install_lmdz.sh $fcm $optim -v $version $svnopt -d $resol -rad $rad -bench 0 -parallel mpi_omp $ins_cosp $ins_xios -name $LMDZname -veget $veget -netcdf 0 -arch $ARCH" >> install_lmdz_options.$$.sh
    198       chmod +x install_lmdz_options.$$.sh
    199       echo "Running install_lmdz_options.$$.sh"
    200       ./install_lmdz_options.$$.sh
    201       mv install_lmdz.sh install_lmdz.$$.sh
    202       cd -
    203      fi
    204   else
    205      if [[ ! -d $MODEL ]]; then
    206         echo "Le model $MODEL n'est pas installé. Vous pouvez relancez avec <-install>."; exit 1
    207      fi
    208   fi
     197  if [[ -d $MODEL ]]; then echo "Found existing install at MODEL=$MODEL"; fi
     198  echo "Installing model"
     199  cd "$LMDZD"
     200  cp "$local/install_lmdz.sh" .
     201  chmod +x install_lmdz.sh
     202  # TODO handle arch/env here (used to be -env-file)
     203  echo "./install_lmdz.sh -noclean $optim -v $version $svnopt -d $resol -rad $rad -bench 0 -parallel mpi_omp $ins_cosp $ins_xios $ins_aero $ins_inlandsis -name $LMDZname -veget $veget -netcdf 0 -arch $ARCH" >> install_lmdz_options.$$.sh
     204  chmod +x install_lmdz_options.$$.sh
     205  echo "Running install_lmdz_options.$$.sh"
     206  ./install_lmdz_options.$$.sh
     207  mv install_lmdz.sh install_lmdz.$$.sh
     208  cd -
    209209}
    210210
     
    227227
    228228
    229 # TODO check w/ Adriana the exact reasons why we recompile the model (or even compile it using install_lmdz in the first place)
    230 
    231229# COMPILATION OPTIONS depending on the user choices and LMDZ revision number $mysvn
    232230#-------------------------------------------------------
    233 arch="-arch $ARCH"
    234 if [ "$rad" = "ecrad" -a ! -d ecrad_data ]; then
     231if [[ $rad = "ecrad" && ! -d ecrad_data ]]; then
    235232    cd $local; wget https://lmdz.lmd.jussieu.fr/pub/3DInputData/ecrad/ecrad_data.tar; tar xvf ecrad_data.tar; cd -
    236233fi
    237234
    238235if [ "$rad" = "ecrad" -a "$aerosols" != "n" -a "$mysvn" -lt 4489 ] ; then echo "Les aerosols tropospheriques ne sont pas pris en charge par ecrad avant LMDZ rev 4489, ici rev est $mysvn"; exit 1; fi
    239 
    240 # Source the surface_env file created by install_lmdz.sh, to get the "veget"-related variables
    241 #--------------------------------------------------------------------------------------
    242 # surface_env is produced by install_lmdz in $MODEL=$LMDZD/$LMDZname/modipsl/modeles
    243 # Every model installation will have an unique orchidee_rev,
    244 #   to be changed by hand if a new Orchidee rev is installed by hand in modipsl/models
    245 . $LMDZD/$LMDZname/modipsl/modeles/surface_env
    246 echo LMDZname $LMDZD/$LMDZname/modipsl/modeles/surface_env
    247 echo veget=$veget
    248 echo opt_veget=$opt_veget
    249 echo orchidee_rev=$orchidee_rev
    250 echo suforch=$suforch
    251 
    252 
    253 #######################################################################
    254 # Compilation du modele
    255 #######################################################################
    256 # The gcm name defined below is used to check if the executable exists
    257 # It is also used when compiling without fcm : the output of makelmdz is gcm.e, and is renamed as $gcm
    258 #
    259 # NOTE : Some compilation options do not appear in the gcm name (xios, cosp, ...).
    260 #   (Also : LMDZ rev before 4185 included, did not contain radiative-code suffix; starting r4186, it includes oldrad/rrtm/ecrad )
    261 #   So if you change those options and you want to recompile,
    262 #   setup.sh will not detect the change when testing if [ ! -f $gcm ],
    263 #   You'll need to modify and run the compile.sh script created in the present folder, and run it (./compile.sh gcm)
    264 
    265 # compile_opt_iso is used for gcm only; ce0l cannot be compiled with isotopes yet (phylmd instead of phylmdiso is required)
    266 if [ $isotopes = y ]; then
    267     compile_opt_iso="$optim -p $phylmd $opt_cosp $opt_xios $opt_rad $arch -d $resol $opt_veget $opt_aer $opt_inlandsis $opt_isotopes -mem -parallel mpi_omp" 
    268     if [ $mysvn -le 4185 ]; then
    269       suffix_iso=_${resol}_phy${phylmd}_para_mem${suforch}${sufaer}${sufiso}
    270     else
    271       suffix_iso=_${resol}_phy${phylmd}_${rad}_para_mem${suforch}${sufaer}${sufiso}
    272     fi
    273     phylmd="lmd"
    274 fi
    275 
    276 # compile_opt is used for gcm if isotopes=n, and for ce0l always
    277 compile_opt="$optim -p $phylmd $opt_cosp $opt_xios $opt_rad $arch -d $resol $opt_veget $opt_aer $opt_inlandsis -mem -parallel mpi_omp"
    278 
    279 
    280 # use an intermediate variable to use either suffix or suffix_iso
    281 strsuffix=suffix${sufiso}
    282 gcm=$MODEL/bin/gcm${!strsuffix}.e
    283 
    284 echo $mysvn
    285 echo $gcm
    286 
    287 if [ ! -f $gcm ]; then
    288    echo Le model $gcm n existe pas
    289    echo il va se compiler automatiquement sur $MODEL
    290    sleep 10
    291 
    292    compile="./makelmdz_fcm $compile_opt -j 2 \$1"
    293    compile_iso="./makelmdz_fcm $compile_opt_iso -j 2 \$1"
    294 
    295    #NB on est dans $local, qui est $STORE/$MAINDIR
    296    echo $compile${sufiso}
    297 
    298    #create compile.sh;
    299    # if isotopes = y , it will still be used for compiling ce0l
    300    cat << ...eod >| compile.sh
    301    cd $MODEL
    302    prog=\$1
    303    ${compile}
    304 ...eod
    305    pwd
    306    ls -l compile.sh
    307    chmod +x compile.sh
    308 
    309    #create compile_iso.sh for compiling gcm_ _iso.e
    310    if [ $isotopes = y ]; then
    311    cat << ...eod >| compile_iso.sh
    312    cd $MODEL
    313    prog=\$1
    314    ${compile_iso}
    315 ...eod
    316    pwd
    317    ls -l compile_iso.sh
    318    chmod +x compile_iso.sh
    319    fi
    320 
    321    echo Compilation de LMDZ, suivre avancement dans lmdz.log
    322    ./compile${sufiso}.sh gcm > lmdz.log 2>&1
    323 
    324    if [ ! -f $gcm ]; then echo la compilation a echoue; exit; fi
    325    cd $local
    326 fi
    327 
    328 # TODO ^ qu'est-ce qui nous empêche de mettre tout ça directement dans install_lmdz ????
    329 # TODO Ce qu'il faudrait faire:
    330 # TODO 1) bien expliquer ce que fait l'option install (lancer install_lmdz une unique fois pour lancer tout sauf la compil LMDZ => maintenant ça ne fonctionne plus car on installe tjrs lmdz, mais en fait c'est pas grave car derrière on vérifie si le gcm.e existe ou non)
    331 # TODO 2) importer les fonctions de install_lmdz nécessaires pour "recompiler" lmdz "à la carte" (ou bien juste modifier compile.sh ??)
    332236
    333237
     
    339243#   omp=2 for veget=CMIP6 beacause of a bug in ORCHIDEE/src_xml/xios_orchidee.f90
    340244######################################################################
    341 jm=`echo $resol | cut -dx -f2`
    342 (( mpi = ( $jm + 1 ) / 2 ))
     245
     246cd "$local"
     247
     248jm=$(echo "$resol" | cut -dx -f2)
     249(( mpi = ( jm + 1 ) / 2 ))
    343250omp=8
    344 if [ $aerosols = spla ]; then omp=1; fi
    345 if [ $veget = CMIP6 -a $xios = y ]; then omp=2; fi
    346 if [ $mpi -gt $nb_mpi_max ]; then mpi=$nb_mpi_max; fi
    347 if [ $omp -gt $nb_omp_max ]; then omp=$nb_omp_max; fi
    348 
    349 ######################################################################
     251if [[ $aerosols = "spla" ]]; then omp=1; fi
     252if [[ $veget = "CMIP6" && $xios = "y" ]]; then omp=2; fi
     253if [[ $mpi -gt $NB_MPI_MAX ]]; then mpi=$NB_MPI_MAX; fi
     254if [[ $omp -gt $NB_OMP_MAX ]]; then omp=$NB_OMP_MAX; fi
     255
    350256# Utilisation des .def_iso pour LMDZ-ISOtopes
    351 ######################################################################
    352 if [ $isotopes = y ]; then
    353   for file_iso in $( ls DEF | grep _iso)
    354   do
    355     cp DEF/$file_iso DEF/${file_iso%%_iso}
     257if [[ $phylmd = "lmdiso" ]]; then
     258  for file_iso in $(ls DEF | grep _iso); do
     259    cp DEF/"$file_iso" DEF/"${file_iso%%_iso}"
    356260  done
    357261fi
     
    360264# Choix de la grille verticale
    361265######################################################################
    362 if [ ! -d DEF ]; then echo Recuperer un repertoire DEF; exit; fi
    363 lm=`echo $resol | cut -dx -f3`
    364 if [ ! -f DEF/L$lm.def ]; then echo resolution verticale non prevue
    365                                  echo creer un fichier DEF/L$lm.def
    366    exit
     266lm=$(echo "$resol" | cut -dx -f3)
     267if [ ! -f "DEF/L$lm.def" ]; then
     268  echo "STOP: Résolution verticale non prévue - créer un fichier DEF/L$lm.def"; exit 1
    367269else
    368    sed -i -e 's/INCLUDEDEF=L.*.def/INCLUDEDEF=L'$lm'.def/' DEF/run.def
     270  sed -i'' -e "s/INCLUDEDEF=L.*.def/INCLUDEDEF=L$lm.def/" DEF/run.def
    369271fi
    370272
     
    380282# NB: Si on change de traceur.def (entre spla et nospla), il faut refaire l'etape "initialisation" (ce0l)?
    381283# Normalement les traceurs absents de start* files sont initialises=0 dans le code; verifier pour spla ! 
    382 if [ $aerosols = spla ]; then
     284if [[ $aerosols = "spla" ]]; then
    383285   # ancien traceur pour l instant
    384    cp DEF/traceur.def_spla   DEF/traceur.def 
    385 elif [ $isotopes = n ]; then
    386    # nouveau traceur
    387    # déjà copié si 'y'
     286   cp DEF/traceur.def_spla DEF/traceur.def
     287elif [[ $phylmd = "lmdiso" ]]; then
     288   # nouveau traceur , déjà copié si 'y'
    388289   cp DEF/tracer.def_nospla DEF/tracer.def 
    389290fi
     
    391292# TEMPORAIREMENT pour spla on force l'utilisation de gcm.def_zNAfrica_BiJe (avec resolution 128x88x79)
    392293#----------------------------------------------------------------------
    393 if [ $aerosols = spla ]; then cp DEF/gcm.def_zNAfrica_BiJe DEF/gcm.def; fi
     294if [[ $aerosols = spla ]]; then cp DEF/gcm.def_zNAfrica_BiJe DEF/gcm.def; fi
    394295
    395296# Inscription du choix ok_guide dans DEF/guide.def
Note: See TracChangeset for help on using the changeset viewer.