source: BOL/script_install/install_lmdz.sh @ 5386

Last change on this file since 5386 was 5386, checked in by abarral, 7 days ago

Add -verbose option
Add wrapper to display generic error message if we exit because of set -e

  • Property svn:executable set to *
File size: 40.4 KB
Line 
1#!/bin/bash
2set -eu  # error on command failure, and on unset variables
3export LC_ALL=# standardize awk format
4
5###########################################################################
6# Author : Laurent Fairhead et Frédéric Hourdin
7# Usage  : install_lmdz.sh -help
8#
9# bash installation script of the LMDZ model on different computer types :
10# Linux PC, "mesocentre" (IPSL-UPMC, IPSL-X), super-computer (IDRIS)
11#
12# The model is downloaded in the following directory tree
13# $MODEL/modipsl/modeles/...
14# using the "modipsl" infrastructure created by the "IPSL"
15# for coupled (atmosphere/ocean/vegetation/chemistry) climate modeling
16# activities.
17# Here we only download atmospheric (LMDZ) and vegetation (ORCHIDEE)
18# components.
19#
20# The sources of the models can be found in the "modeles" directory.
21# In the present case, LMDZ, ORCHIDEE, and IOIPSL or XIOS (handling of
22# input-outputs using the NetCDF library).
23#
24# The script downloads various source files (including a version of NetCDF)
25# and utilities, compiles the model, and runs a test simulation in a
26# minimal configuration.
27#
28# Prerequisites : gfortran, bash or ksh, wget, gunzip, tar, ...
29#
30# Modif 18/11/2011
31#    changes for option real 8.
32#      We compile with -r8 (or equivalent) and -DNC_DOUBLE for the GCM
33#      but with -r4 for netcdf. Variable real must be set to
34#      r4 or r8 at the beginning of the script below.
35#
36###########################################################################
37
38### Functions
39
40function myget {
41  # Get a file from LMDZ repository, make it executable if .(ba)sh
42  local url=$1
43
44  local filename
45  filename=$(basename "$url")
46
47  wget --no-check-certificate -nv "http://lmdz.lmd.jussieu.fr/pub/$url"
48  if [[ $filename =~ .*\.(ba)?sh ]]; then chmod +x "$filename"; fi
49}
50
51function do_compile_sh {
52  local component=$1
53  local command=$2
54  local log
55
56  log="$(pwd)/$component.log"
57  printf "#!/bin/bash\n%s\n" "$command" > compile.sh
58  echo "Compiling $component using $command (log: $log) $(date)"
59    chmod +x ./compile.sh
60    if ! ./compile.sh &> "$log"; then
61        echo "STOP: $component compilation failed, exiting"; exit 1
62    fi
63    echo "Finished $component compilation $(date)"
64}
65
66function get_svn_branch {
67  local url=$1
68  local rev=$2
69  local res
70
71  res=$(svn log -v -q "$url" -r "$rev" -l 1 | cut -d "/" -f -4)
72  if echo "$res" | grep -q "/trunk/"; then
73    res=$(echo "$res" | grep "/trunk/" | head -1 | cut -d "/" -f 2-3)
74  elif echo "$res" | grep -q "/branches/"; then
75    res=$(echo "$res" | grep "/branches/" | head -1 | cut -d "/" -f 2-4)
76  else
77    echo "Could not determine svn branch for $url, r=$rev"
78  fi
79  echo "$res"
80}
81
82function set_default_params {
83    # Valeur par défaut des parametres
84    svn_lmdz=""
85    version="20241018.trunk"
86
87    netcdf=1
88    bench=1
89    SCM=0
90    veget="none"
91    grid_resolution="32x32x39"
92    benchphysiq=""
93    compphysiq="lmd"
94    is_1D="n"
95    fortran_file="gcm"
96
97    parallel="none"
98    trusting="testing"
99    MODEL=""
100
101    with_xios=0
102    opt_makelmdz_xios=""
103
104    icolmdz=0
105    dynamico_commit="11001689"
106
107    rad="rrtm"
108
109    compile_with_fcm=1
110
111    cosp="none"
112    aerosols=0
113    strataer=0
114    inlandsis=0
115
116    make_j=8
117    clean_install=1
118    local="$(pwd)"
119
120    # Check if on a Mac /!\ Probably doesn't work anymore, to fix one day...
121    if [[ $(uname) = "Darwin" ]]; then
122        export MAKE="make"
123    fi
124
125    optim_flag="-prod"
126    arch="local"
127
128    arch="local-gfortran"
129    arch_dir=""
130
131    jobcmd=""
132    verbose=0
133}
134
135function read_cmdline_args {
136    while (($# > 0)); do
137        case $1 in
138            "-v") version=$2; shift; shift;;
139            "-r") svn_lmdz=$2; shift; shift;;
140            "-d") grid_resolution=$2; shift; shift;;
141            "-unstable") trusting="unstable"; shift;;
142            "-cosp") cosp=$2
143                     case $cosp in
144                         "none"|"v1"|"v2") cosp=$2; shift; shift;;
145                         *) echo "Only none v1 v2 for cosp option"; exit 1
146                     esac;;
147            "-nofcm") compile_with_fcm=0; echo "This option will be reactivated soon (promesse du 8dec2022)"; exit 1;  shift;;
148            "-SCM") SCM=1; shift;;
149            "-rad") rad=$2
150                    case $rad in
151                        "oldrad"|"rrtm"|"ecrad") rad=$2; shift; shift;;
152                        *) echo "Only oldrad rrtm ecrad for rad option"; exit 1
153                    esac;;
154            "-parallel") parallel=$2
155                         case $parallel in
156                             "none"|"mpi"|"omp"|"mpi_omp") parallel=$2; shift; shift;;
157                             *) echo "Only none mpi omp mpi_omp for the parallel option"; exit 1
158                         esac;;
159            "-bench") bench=$2; shift; shift;;
160            "-debug") optim_flag="-debug"; shift;;
161            "-name") MODEL=$2; shift; shift;;
162            "-netcdf") netcdf=$2; shift; shift;;
163            "-benchphysiq") benchphysiq=$2; shift; shift;;
164            "-compilephysiq") compphysiq=$2; shift; shift;;
165            "-xios") with_xios=1; shift;;
166            "-arch") arch=$2; shift; shift;;
167            "-arch_dir") arch_dir=$2; shift; shift;;
168            "-veget") veget=$2; shift; shift;;
169            "-spla") aerosols=1; shift;;
170            "-strataer") strataer=1; shift;;
171            "-inlandsis") inlandsis=1; shift;;
172            "-make_j") make_j=$2; shift; shift;;
173            "-jobcmd") jobcmd=$2; shift; shift;;
174            "-noclean") clean_install=0; shift;;
175            "-icolmdz") icolmdz=1; shift;;
176            "-verbose") verbose=1; shift;;
177            "-h" | *) cat <<........fin
178        $0 [ -v version ] [ -r svn_release ]
179               [ -parallel PARA ] [ -d GRID_RESOLUTION ] [ -bench 0/1 ]
180               [-name LOCAL_MODEL_NAME] [-rad RADIATIF]
181
182        -v       "version" like 20150828.trunk, see http://www.lmd.jussieu.fr/~lmdz/Distrib/LISMOI.trunk (default <$version>)
183
184        -r       "svn_release" : either the svn release number or "last" (default <$svn_lmdz>)
185
186        -parallel parallel support: mpi, omp, mpi_omp (mpi with openMP) or none (default: <$parallel>)
187
188        -d        "grid resolution": should be among the available benchs if -bench 1 (valid values: 48x36x19, 48x36x39) (default : <$grid_resolution>)
189
190        -bench     activating the bench or not (0/1) (default: <$bench>)
191
192        -unstable  use unstable tar instead of testing
193
194        -name      name of the folder to install to (default <$MODEL>)
195
196        -netcdf    0, 1 or PATH. 0: do not download NetCDF, look for it in standard locations (/usr);  1: download and compile NetCDF; PATH: full path to an existing installed NetCDF library (default: <$netcdf>)
197
198        -xios      use (download and compile) the XIOS library (will compile the parallel NetCDF4-HDF5 library) (requires to also have -parallel mpi_omp)
199
200        -cosp       to run with cospv1 or cospv2 [none/v1/v2] (default <$cosp>)
201
202        -rad        radiative code: oldrad, rrtm or ecrad (default <$rad>)
203
204        -nofcm      to compile without fcm
205
206        -SCM        install 1D version automatically
207
208        -debug      compile everything in debug mode
209
210        -benchphysiq   to choose which physics.def package to use in the bench (default <$benchphysiq>)
211
212        -compilephysiq   physics to compile the model with (default <$compphysiq>)
213
214        -veget      surface/vegetation scheme treatment controlled by the single variable veget which can have the following values: none: bucket scheme (default); CMIP6 | veget2.0: orchidee version used in CMIP exercise, rev 5661; veget2.2: orchidee branch 2.2, rev 8529 (bundled); number: orchidee version number  [only orch>2.0] (default $veget)
215
216        -spla       activate interactive aerosols
217
218        -inlandsis  activate new snow scheme
219
220        -arch       name of the arch to use (default <$arch>)
221
222        -arch_dir   where to find the arch files (default <$arch_dir>)
223
224        -make_j     number of processes to parallelize installations (default <$make_j>)
225
226        -jobcmd     command prepended to fcm compile jobs, e.g. "srun" (default <$jobcmd>)
227
228        -noclean    will only download necessary files (but no thorough check is made on the integrity of existing files), and will recompile everything (very quick if it's already been compiled before)
229
230        -icolmdz    to compile the icolmdz executable as well as the lonlat one
231
232        -verbose    to print every executed command
233
234........fin
235                  exit 0;;
236        esac
237    done
238
239    # Isotopes : Compile and run with isotopes if lmdz_phys="lmdiso" in main.sh
240    if [[ $compphysiq = "lmdiso" ]]; then isotopes=1; else isotopes=0; fi
241
242    # Option de compilation pour Cosp
243    case $cosp in
244        v1) opt_cosp="-cosp true";;
245        v2) opt_cosp="-cospv2 true";;
246        *) opt_cosp=""
247    esac
248
249    #Define veget-related suffix for gcm name
250    if [[ $veget = 'none' ]]; then
251        suff_orc=''
252    else
253        suff_orc='_orch'
254    fi
255
256
257    if [[ $parallel = "none" ]]; then
258        suff_para='_seq'
259    else
260        suff_para='_para_mem'
261    fi
262
263    if [[ $with_xios = 1 ]]; then opt_makelmdz_xios="-io xios"; fi
264
265    if [[ $aerosols = 1 ]]; then
266      opt_aer="-dust true"; suff_aer="_spla"
267    else
268      opt_aer=""; suff_aer=""
269    fi
270
271    if [[ $strataer = 1 ]]; then
272      opt_strataer="-strataer true"
273    else
274      opt_strataer=""
275    fi
276
277    if [[ $inlandsis = 1 ]]; then
278       opt_inlandsis="-inlandsis true"
279    else
280       opt_inlandsis=""
281    fi
282
283    if [[ $isotopes = 1 ]]; then
284      opt_isotopes="-isotopes true"; suff_iso="_iso"
285    else
286      opt_isotopes="" ; suff_iso=""
287    fi
288
289    # set default arch if parallel
290    if [[ $arch = "local-gfortran" && $parallel != "none" ]]; then
291      arch="local-gfortran-parallel"
292      echo "Switching default arch to $arch"
293    fi
294
295    # Name of the model's folder. The convention taken here is that models that requires different compilation sources should have a different names.
296    local xios_name=""
297    if [[ $with_xios = 1 ]]; then xios_name="XIOS"; fi
298    if [[ $MODEL = "" ]]; then MODEL="./LMDZ$version${svn_lmdz}OR$veget$xios_name"; fi
299
300    if [[ $arch_dir = "" ]]; then
301      arch_dir="$MODEL/modipsl/config/IPSLCM7/ARCH/";
302    elif ! readlink -fe "$arch_dir" >/dev/null; then
303      echo "STOP: no arch dir <$arch_dir>"; exit 1
304    fi
305
306    if ! (echo "$grid_resolution" | grep -q "x"); then
307      is_1D="y"
308      fortran_file="lmdz1d"
309    fi
310
311    if [[ $verbose = 1 ]]; then set -vx; fi
312}
313
314function ensure_correct_option_combinations {
315    # Check on veget version
316    if [[ $veget != 'none' && $veget != "CMIP6" && $veget != "orch2.0" && $veget != "orch2.2" ]]; then
317        re='^[0-9]+$'
318        if ! [[ $veget =~ $re ]]; then
319            echo 'Valeur de l option veget non valable'; exit 1
320        fi
321    fi
322
323    ## if compiling icolmdz, XIOS must be set
324    if [[ $icolmdz = 1 && $with_xios = 0 ]]; then
325      echo "Error, you must set -xios to compile the icolmdz executable"; exit 1
326    fi
327    ## if also compiling XIOS, parallel must be mpi_omp
328    if [[ $with_xios = 1 && $parallel != "mpi_omp" ]]; then
329        echo "Error, you must set -parallel mpi_omp if you want XIOS"; exit 1
330    fi
331
332    if [[ $cosp = "v2" && $with_xios = 0 ]]; then
333        echo "Error, Cospv2 cannot run without Xios"; exit 1
334    fi
335
336    # STOP if trying to use both ORCHIDEE and Isotopes :
337    if [[ $isotopes = 1 && $veget != "none" ]]; then
338      echo "STOP: You cannot run LMDZ with ORCHIDEE and ISOtopes at the same time"; exit 1
339    fi
340
341    # STOP if trying to use both SPLA and Isotopes :
342    if [[ $isotopes = 1 && $aerosols = 1 ]]; then
343      echo "STOP: You cannot run LMDZ with Isotopes and aerosols=spla at the same time"; exit 1
344    fi
345
346    # (Temporary) STOP if trying to use Isotopes with XIOS :
347    if [[ $isotopes = 1 && $with_xios = 1 ]]; then
348      echo "STOP: Isotopes cannont yet be run with XIOS"; exit 1
349    fi
350
351    if [[ $aerosols = 1 && $rad != "rrtm" ]]; then
352      echo "STOP: For the time being, <aerosols=spla> requires <rad=rrtm>"; exit 1
353    fi
354}
355
356function check_available_software {
357    local required_soft=("wget" "tar" "gzip" "make" "gcc" "cmake" "m4" "c++")
358    echo "Checking if required software is available (${required_soft[*]})"
359    for logiciel in "${required_soft[@]}"; do
360        if [[ $(which "$logiciel") = "" ]]; then
361            echo "You must first install $logiciel on your system"; exit 1
362        fi
363    done
364}
365
366function download_modipsl_tar {
367    if [[ $clean_install = 1 ]]; then rm -rf "$MODEL"; fi
368
369    mkdir -p "$MODEL"
370    MODEL=$(readlink -e -f "$MODEL"); echo "MODEL: $MODEL"  # absolute path
371    if [[ ! -d "$MODEL/modipsl" ]]; then
372        echo "Downloading a slightly modified version of modipsl+LMDZ"
373        cd "$MODEL"
374        getlog="$(pwd)/get.log"
375        echo "logfile : $getlog"
376        set +e; myget "src_archives/$trusting/modipsl.$version.tar.gz" &>> "$getlog"; set -e
377        if [[ ! -f "modipsl.$version.tar.gz" ]]; then
378          echo "STOP: failed to download modipsl. $getlog: <$(tail "$getlog")>"; exit 1
379        fi
380        echo "install_lmdz.sh wget_OK $(date)"
381
382        gunzip "modipsl.$version.tar.gz" &>> get.log
383        tar xf "modipsl.$version.tar" &>> get.log
384        rm "modipsl.$version.tar"
385    fi
386}
387
388function init_arch {
389    cd "$local"
390    set +e; arch_dir=$(readlink -f "$arch_dir"); set -e  # full path. readlink must be called *after* the path is created
391
392    # Check where default fcm, path, env are located - by default in $arch_path, instead in $MODEL/modipsl/modeles/LMDZ/arch/
393    local i fcm_path path_path env_path
394    for i in "path" "fcm" "env"; do
395      local varname=${i}_path
396      if [[ -f $arch_dir/arch-$arch.$i ]]; then
397          declare $varname="$arch_dir/arch-$arch.$i"
398      else
399          declare $varname="$MODEL/modipsl/modeles/LMDZ/arch/arch-$arch.$i"
400          if [[ ! -f ${!varname} ]]; then
401              echo "STOP: no ${!varname}"; exit 1
402          fi
403      fi
404    done
405    default_fcm_path=$fcm_path
406    default_path_path=$path_path
407    default_env_path=$env_path
408
409    # check compiler
410    compiler=$(< "$default_fcm_path" grep "%COMPILER" | sed -e "s/%COMPILER\s*//")
411
412    # load env
413    # shellcheck disable=SC1090
414    if [[ -f $default_env_path ]]; then source "$default_env_path"; fi
415
416    local mpi_file  # can't be done before as it depends on sourcing the env
417    mpi_file=$(readlink -e -f "$(which mpif90)")
418    path_mpi=$(dirname "$mpi_file")
419    root_mpi=$(dirname "$path_mpi")
420}
421
422function check_compiler {
423  # Must be called after init_arch to know which compiler to use
424    cat <<eod > tt.f90
425print*,'coucou'
426end
427eod
428    $compiler tt.f90 || a.out
429    ./a.out >| tt
430    if [[ $(< tt sed -e 's/ //g' ) != "coucou" ]]; then
431        echo "problem installing with compiler $compiler"; exit 1
432    fi
433    rm tt a.out tt.f90
434}
435
436function install_arch {
437    local component=$1
438
439    # Use same .env for all components (for module compatibility)
440    cp -f "$default_env_path" "$MODEL/modipsl/modeles/$component/arch" &> /dev/null || true  # allow failure if we're copying the file to itself
441
442    # Use local .path and .fcm if available, otherwise default
443    if [[ ! -f "$MODEL/modipsl/modeles/$component/arch/arch-$arch.path" ]]; then
444        cp -f "$default_path_path" "$MODEL/modipsl/modeles/$component/arch"
445
446        if [[ $component = "ORCHIDEE" ]]; then
447            if [[ $orcbranch = "/tags/ORCHIDEE_2_0/ORCHIDEE" ]]; then  # 2.0 and before have a different fcm convention
448                sed -i'' -e "s/-I//" -e "s/-L//" "$MODEL/modipsl/modeles/ORCHIDEE/arch/arch-$arch.path"  # /!\ we only replace first occurence on purpose
449            fi
450        fi
451    fi
452    if [[ ! -f "$MODEL/modipsl/modeles/$component/arch/arch-$arch.fcm" ]]; then
453        cp -f "$default_fcm_path"  "$MODEL/modipsl/modeles/$component/arch"
454
455        if [[ $component = "XIOS" ]]; then
456            # Adapt for XIOS, which uses different naming conventions
457            sed -i'' -e "s/%COMPILER/%FCOMPILER/" -e "s/%LINK/%LINKER/" -e "s/-fdefault-real-8//" "$MODEL/modipsl/modeles/XIOS/arch/arch-$arch.fcm"
458        fi
459    fi
460}
461
462function install_netcdf {
463    echo "Installing Netcdf"
464    local ncdf_compiler="$compiler"
465
466    if [[ $netcdf = 0 ]]; then
467        ncdfdir=$(nf-config --prefix)
468    else
469        cd "$MODEL"
470
471        # Convert non-basic compiler
472        case $compiler in
473            mpif90) ncdf_compiler=$($compiler --version | head -n 1 | cut -d " " -f -1)
474        esac
475
476        case $ncdf_compiler in
477            gfortran | GNU) ncdf_compiler="gfortran"; opt1="-compiler gnu"; opt2="-CC gcc -FC gfortran -CXX g++";;
478            *)      echo "unexpected compiler $ncdf_compiler for netcdf"; exit 1
479        esac
480
481        case $with_xios in
482            0) script_install_netcdf="install_netcdf4_hdf5_seq.bash"
483               ncdfdir="netcdf4_hdf5_seq"
484               opt_="$opt1";;
485            1) script_install_netcdf="install_netcdf4_hdf5.bash"
486               ncdfdir="netcdf4_hdf5"
487               opt_="$opt2 -MPI $root_mpi";;
488            *) echo "with_xios=$with_xios, should be 0 or 1"; exit 1
489        esac
490        if [[ $netcdf = 1 ]]; then
491           ncdfdir="$MODEL/$ncdfdir"
492        else
493           mkdir -p "$netcdf"; ncdfdir="$netcdf/$ncdfdir"
494        fi
495
496        echo "Repertoire netcdf $ncdfdir"
497        if [[ ! -d $ncdfdir ]]; then
498            netcdflog=$(pwd)/netcdf.log
499            echo "----------------------------------------------------------"
500            echo "Compiling the Netcdf library"
501            echo "----------------------------------------------------------"
502            echo "log file : $netcdflog"
503            myget script_install/$script_install_netcdf &>> "$netcdflog"
504            chmod u=rwx $script_install_netcdf
505            # shellcheck disable=SC2086
506            ./$script_install_netcdf -prefix "$ncdfdir" $opt_ &>> "$netcdflog"
507        fi
508
509        # Add to path
510        export PATH="$ncdfdir/bin:$PATH"
511        echo "Bin PATH" $PATH
512
513        #----------------------------------------------------------------------------
514        # LF rajout d'une verrue, pour une raison non encore expliquee,
515        # la librairie est parfois rangée dans lib64 et non dans lib
516        # par certains compilateurs
517        if [[ ! -e lib && -d lib64 ]]; then ln -s lib64 lib; fi
518        #----------------------------------------------------------------------------
519
520        echo "install_lmdz.sh netcdf_OK $(date)"
521    fi
522
523    cat >test_netcdf90.f90 <<EOF
524    use netcdf
525    print *, "NetCDF library version: ", nf90_inq_libvers()
526    end
527EOF
528
529    if $ncdf_compiler -I"$ncdfdir"/include test_netcdf90.f90 -L"$ncdfdir"/lib -lnetcdff -lnetcdf -Wl,-rpath="$ncdfdir"/lib && ./a.out; then
530        rm test_netcdf90.f90 a.out
531    else
532        cat <<EOF
533Failed test program using NetCDF-Fortran. You can:
534- check that you have NetCDF-Fortran installed in your system
535- or specify an installation directory with option -netcdf of install_lmdz.sh
536- or download and compile NetCDF-Fortran with option -netcdf 1 of install_lmdz.sh
537EOF
538        exit 1
539    fi
540
541    # Compile NetCDF95
542    cd "$MODEL/modipsl/modeles/LMD"*
543    echo "Installing NetCDF95"
544    cd "$MODEL"
545    if [[ ! -d "NetCDF95-0.3" ]]; then
546        myget src_archives/netcdf/NetCDF95-0.3.tar.gz
547        tar -xf NetCDF95-0.3.tar.gz
548        rm NetCDF95-0.3.tar.gz
549        cd NetCDF95-0.3
550        mkdir -p build && cd build
551        netCDF_INCLUDE_DIR=$(nc-config --includedir) netCDF_LIBRARY=$(nc-config --libdir) cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$ncdfdir" -DCMAKE_INSTALL_PREFIX="$MODEL/modipsl"
552        make install
553    fi
554}
555
556function install_IOIPSL {
557    install_arch "IOIPSL"
558
559    cd "$MODEL/modipsl/modeles/IOIPSL"
560    ioipsllog="$(pwd)/ioipsl.log"
561    echo "Compiling IOIPSL, the interface library with Netcdf $(date) (log: $ioipsllog)"
562    # in case ksh is not installed on the pc
563    if [[ ! -x /bin/ksh ]]; then
564      sed -i''  -e 's/ksh/bash/' ins_m_prec
565    fi
566    do_compile_sh "IOIPSL" "$jobcmd ./makeioipsl_fcm -j $make_j -arch $arch $optim_flag"
567
568    # Link to modipsl/bin
569    cp -f bin/* ../../bin
570
571    echo "IOIPSL compiled $(date)"
572}
573
574function install_XIOS {
575    if [[ $with_xios = 1 ]]; then
576        cd "$MODEL/modipsl/modeles"
577        xioslog="$(pwd)/XIOS/xios.log"
578        echo "##########################################################"
579        echo "Compiling XIOS (log $xioslog) $(date)"
580        echo "##########################################################"
581
582        # Download XIOS
583        local xios_http="http://forge.ipsl.fr/ioserver/svn/XIOS2/branches/xios-2.6"
584        local xios_rev="2568"
585       
586        cd "$MODEL/modipsl/modeles"
587        set +e; svn co -r $xios_rev $xios_http XIOS; set -e
588
589        cd XIOS
590
591        install_arch "XIOS"
592        do_compile_sh "XIOS" "$jobcmd ./make_xios --job $make_j --arch $arch"
593    fi
594}
595
596function get_orchidee_version {  # Set / Check ORCHIDEE version
597    echo "Checking Orchidee source version"
598    local fetch_rev=""
599    orcbranch=""
600    case $veget in
601        "none") fcm_veget_version="false";;
602        "orch2.0" | "CMIP6") fcm_veget_version=orchidee2.0; fetch_rev=7906;;  # in previous tar we used 6592 but with some modifications to xios_orchidee.f90, which got integrated in 7906
603        "orch2.2") fcm_veget_version=orchidee2.1; orcbranch="/branches/ORCHIDEE_2_2/ORCHIDEE" ;; # the bundled version
604        *) fetch_rev=$veget; fcm_veget_version=orchidee2.1;;  # /!\ arbitary rev only works for orch>=2.1
605          # /!\ Note: for orch>=4, we should be using fcm_vegt_version="orchideetrunk". Below copied comment by Adriana in LMDZ_Setup docs:
606#          Avec orchidee2.1, on va compiler LMDZ avec le cle cpp ORCHIDEE_NOLIC. On ne va donc pas prendre en compte les avancements fait dans le trunk qui permet que les fractions lic soitent traité par ORCHIDEE. Ca marche très bien sans cela puisque dans tout façon c'est en cours de développement et ce n'est pas activé par default. En fait on devrait compiler le trunk avec -v orchideetrunk mais avec landice_opt>2, ce qui ne change rien par rapport à orchidee2.1
607#Si on voudrait activer landice_opt=2 , il faut compiler avec -v orchideetrunk.
608
609    esac
610
611    if [[ -n $fetch_rev ]]; then
612        echo "IF YOU INSTALL ORCHIDEE THE VERY FIRST TIME, ASK for PASSWORD at orchidee-help@listes.ipsl.fr"
613        local curr_rev
614        curr_rev=$(svn info "$MODEL/modipsl/modeles/ORCHIDEE" | grep Revision: | cut -d ":" -f 2 | cut -c 2-)
615        orcbranch=$(svn log -v -q svn://forge.ipsl.fr/orchidee/ -r "$fetch_rev" | grep ORCHIDEE | head -1 | sed -e 's:ORCHIDEE/.*$:ORCHIDEE:' | awk '{print $2}')
616        if [[ $fetch_rev != "$curr_rev" ]]; then
617            echo "Fetching orch $fetch_rev from the repository (curr: $curr_rev)"
618            echo "branch is $orcbranch"
619            if [[ $fetch_rev -lt 4465 ]]; then echo 'ORCHIDEE version must be >=4465, exiting'; exit 1; fi
620            cd "$MODEL/modipsl/modeles"
621            rm -rf ORCHIDEE
622            svn co -r "$fetch_rev" "svn://forge.ipsl.fr/orchidee/$orcbranch"
623            cd - > /dev/null
624        fi
625    fi
626
627    # Check parallel LMDZ+ORCH
628    if [[ (! $veget = "none") && $parallel = "none" && ($used_lmdz_rev -lt 4894) ]]; then
629        echo "LMDZ revision must be >=4894 for orchidee without parallel support. Upgrade lmdz or use -parallel mpi_omp."; exit 1
630    fi
631}
632
633function compile_orchidee {
634    install_arch "ORCHIDEE"
635
636    if [[ $veget != "none" ]]; then
637        cd "$MODEL/modipsl/modeles/ORCHIDEE"
638
639        local xios_orchid
640        if [[ $with_xios = 1 ]]; then
641            xios_orchid="-xios";
642        else
643            xios_orchid="-noxios"
644        fi
645
646        if [[ $parallel != "none" && ! -d src_parallel ]]; then
647           echo "STOP: Orchidee version too old for parallel support"; exit 1
648        fi
649        do_compile_sh "ORCHIDEE" "$jobcmd ./makeorchidee_fcm -j $make_j $xios_orchid $optim_flag -parallel $parallel -arch $arch"
650    fi
651}
652
653function get_lmdz_version {
654    echo "Checking LMDZ source version"
655    LMDZPATH=$(readlink -e -f "$MODEL/modipsl/modeles/LMD"*)
656    cd "$LMDZPATH"
657
658    if [[ -n $svn_lmdz ]]; then
659        local curr_rev
660        curr_rev=$(svn info "$MODEL/modipsl/modeles/LMD"* | grep Revision: | cut -d ":" -f 2 | cut -c 2-)
661        if [[ $svn_lmdz != "$curr_rev" ]]; then
662            local lmdzbranch
663            echo "Fetching LMDZ $svn_lmdz from the repository"
664            lmdzbranch=$(get_svn_branch "https://svn.lmd.jussieu.fr/LMDZ" "$svn_lmdz")
665            echo "branch is $lmdzbranch"
666            cd "$MODEL/modipsl/modeles"
667            rm -rf LMD*
668            svn co -r "$svn_lmdz" "https://svn.lmd.jussieu.fr/LMDZ/$lmdzbranch" LMDZ
669            cd - > /dev/null
670        fi
671        used_lmdz_rev=$svn_lmdz
672    else  # get svn from info
673        set +e; used_lmdz_rev=$(svn info | grep "Last Changed Rev" | cut -c 19-); set -e
674        if [[ -z $used_lmdz_rev ]]; then  # svn info failed
675            used_lmdz_rev=$(grep 'Revision: [0-9]' "$MODEL"/Read*.md | awk ' { print $2 } ' 2>/dev/null)
676            if [[ -z $used_lmdz_rev ]]; then echo "Could not determine lmdz version. This is likely an issue with the .tar itself, please report to LMDZ team."; exit 1; fi
677        fi
678    fi
679}
680
681function compile_lmdz {
682    install_arch "LMDZ"
683    cd "$LMDZPATH"
684
685    if [[ $used_lmdz_rev -le 4185 ]]; then
686        exe_name="bin/${fortran_file}_${grid_resolution}_phy${compphysiq}_${suff_para}${suff_orc}${suff_aer}${suff_iso}.e"
687    else
688        exe_name="bin/${fortran_file}_${grid_resolution}_phy${compphysiq}_${rad}${suff_para}${suff_orc}${suff_aer}${suff_iso}.e"
689    fi
690
691    local opt_rad
692    case $rad in
693        oldrad) iflag_rrtm=0; NSW=2; opt_rad="";;
694        rrtm)   iflag_rrtm=1; NSW=6
695            if [[ $used_lmdz_rev -le 4185 ]]; then
696                opt_rad="-rrtm true"
697            else
698                opt_rad="-rad rrtm"
699            fi;;
700        ecrad)  iflag_rrtm=2; NSW=6; opt_rad="-rad ecrad";;
701        *) echo "Only oldrad rrtm ecrad for rad option"; exit 1
702    esac
703    if [[ $used_lmdz_rev -le 4185 && $rad = "ecrad" ]]; then
704        echo "ecrad only available for LMDZ rev starting with 4186 "; exit 1
705    fi
706
707    # Compile
708    local makelmdz="makelmdz_fcm $optim_flag -arch $arch -j $make_j"
709    local para_compile_opt="-mem -parallel $parallel"; if [[ $parallel = "none" ]]; then para_compile_opt=""; fi
710    do_compile_sh "LMDZ" "$jobcmd ./$makelmdz $opt_rad $opt_cosp $opt_makelmdz_xios $opt_aer $opt_inlandsis $opt_strataer $opt_isotopes -p $compphysiq -d ${grid_resolution} -v $fcm_veget_version $para_compile_opt $fortran_file"
711
712    # Check executable
713    if [[ ! -f $exe_name ]]; then
714        echo "STOP: Compilation failed, can't find the executable"; exit 1
715    else
716        echo "Compilation successful, the executable is $exe_name $(date)"
717    fi
718}
719
720function get_dynamico_icosa_version {
721  if [[ $icolmdz = 1 ]]; then
722    echo "Checking DYNAMICO source version"
723    cd "$MODEL/modipsl/modeles"
724    if [[ ! -d DYNAMICO ]]; then
725      git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git DYNAMICO
726    fi
727    cd DYNAMICO
728    git checkout master && git checkout $dynamico_commit
729    cd - > /dev/null
730
731    echo "Checking ICOSA_LMDZ source version"
732    if [[ ! -d ICOSA_LMDZ ]]; then
733      svn checkout http://svn.lmd.jussieu.fr/LMDZ/ICOSA_LMDZ
734    fi
735    cd ICOSA_LMDZ
736    svn up -r 5320
737  fi
738}
739
740function compile_icolmdzor {
741    if [[ $icolmdz = 1 ]]; then
742      install_arch "ICOSA_LMDZ"
743      local para_compile_opt="-parallel $parallel"; if [[ $parallel = "none" ]]; then para_compile_opt=""; fi
744
745      # LMDZ physics package library already available in LMDZ/config/lib directory
746
747      # Compile DYNAMICO
748      cd "$MODEL/modipsl/modeles/DYNAMICO"
749
750      # Need to get rather than install the archs as DYNAMICO uses FCMv2 that does not understand the makefile syntax ($shell)
751      cd arch
752      wget "http://lmdz.lmd.jussieu.fr/pub/src_archives/misc/arch/DYNAMICO/arch-$arch.env"
753      wget "http://lmdz.lmd.jussieu.fr/pub/src_archives/misc/arch/DYNAMICO/arch-$arch.fcm"
754      wget "http://lmdz.lmd.jussieu.fr/pub/src_archives/misc/arch/DYNAMICO/arch-$arch.path"
755      cd ..
756
757      do_compile_sh "DYNAMICO" "$jobcmd ./make_icosa $optim_flag -arch $arch -job $make_j $para_compile_opt -external_ioipsl -with_xios"
758
759      # Compile icosa_lmdz
760      echo "Bin PATH before icosalmdz" "$PATH"
761      cd "$MODEL/modipsl/modeles/ICOSA_LMDZ"
762      do_compile_sh "ICOSA_LMDZ" "$jobcmd ./make_icosa_lmdz -arch $arch -j $make_j -nodeps -p lmd $optim_flag $para_compile_opt -with_orchidee"
763      echo "# Running environment for icosa_lmdz" > icosalmdz.env
764      echo "# "                                   >> icosalmdz.env
765      if [[ -v LD_LIBRARY_PATH ]]; then 
766        echo "export LD_LIBRARY_PATH=$ncdfdir/lib:$LD_LIBRARY_PATH" >> icosalmdz.env
767      else 
768        echo "export LD_LIBRARY_PATH=$ncdfdir/lib" >> icosalmdz.env
769      fi
770    fi
771}
772
773function run_bench {
774    local bench_cmd="./bench.sh"
775
776    cd "$MODEL/modipsl/modeles/LMDZ"*
777
778    if [[ $bench = "tuto" ]]; then
779        myget "Training/tutorial.tar"; tar xf tutorial.tar; cd TUTORIAL
780        ./init.sh
781    elif [[ $bench = 1 ]]; then
782      rm -rf "BENCH${grid_resolution}"
783      local bench=bench_lmdz_${grid_resolution}
784      if [[ $compphysiq = "lmdiso" ]]; then bench=bench_lmdz_iso_${grid_resolution}; fi
785
786      if [[ $is_1D = "y" ]] ; then  # 1D
787        myget "1D/1D.tar.gz"
788        mkdir -p "BENCH${grid_resolution}"
789        tar xf "1D.tar.gz" -C "BENCH${grid_resolution}" --strip-components=1
790        cd "BENCH${grid_resolution}"
791        # Below: ugly, but until we rewrite the 1D case...
792        sed -i'' -e "s:^listecas=.*$:listecas=ARMCU/REF:" -e "s:cd \$local/bin ; ./compile -L \$L:#cd \$local/bin ; ./compile -L \$L:" \
793            -e "s:./compile -L \$llm:#./compile -L \$llm:" -e "s:ln -sf \$bin/\\\\\${main}\${suffixe}.e .:ln -sf ../../../../../$exe_name \\\\\${main}\${suffixe}.e:" -e "s:gzip listing:cp listing restartphy.nc ../../../../; exit 0:" \
794            run.sh
795        cp "../$exe_name" bin/
796        bench_cmd="./run.sh -rad $rad"  # suppress ferret commands that launch after bench is "over"
797      else
798        myget "3DBenchs/$bench.tar.gz"
799        mkdir "BENCH${grid_resolution}"
800        tar xf "$bench.tar.gz" -C "BENCH${grid_resolution}" --strip-components=1
801
802        if [[ $cosp = "v1" || $cosp = "v2" ]]; then
803            cd "BENCH${grid_resolution}"
804            # copier les fichiers namelist input et output our COSP
805            cp ../DefLists/cosp*_input_nl.txt .
806            cp ../DefLists/cosp*_output_nl.txt .
807            # Activer la cles ok_cosp pour tourner avec COSP
808            sed -e 's@ok_cosp=n@ok_cosp=y@' config.def > tmp
809            \mv -f tmp config.def
810            cd ..
811        fi
812
813        if [[ -n "$benchphysiq" ]]; then
814            cd "BENCH${grid_resolution}"
815            if [[ -f "physiq.def_${benchphysiq}" ]]; then
816                cp "physiq.def_${benchphysiq}" benchphysiq.def
817                echo "using physiq.def_${benchphysiq}"
818            else
819                echo "using standard physiq.def"
820            fi
821            cd ..
822        else
823            echo "using standard physiq.def"
824        fi
825
826        if [[ $with_xios = 1 ]]; then
827            cd "BENCH${grid_resolution}"
828            cp ../DefLists/iodef.xml .
829            cp ../DefLists/context_lmdz.xml .
830            cp ../DefLists/field_def_lmdz.xml .
831            # A raffiner par la suite
832            echo "A FAIRE : Copier les *xml en fonction de l option cosp"
833            cp ../DefLists/field_def_cosp*.xml .
834            cp ../DefLists/file_def_hist*xml .
835            # adapt iodef.xml to use attached mode
836            sed -e 's@"using_server" type="bool">true@"using_server" type="bool">false@' \
837                iodef.xml > tmp
838            \mv -f tmp iodef.xml
839
840            # and convert all the enabled="_AUTO_" (for libIGCM) to enabled=.FALSE.
841            # except for histday
842            for histfile in file_def_hist*xml; do
843                if [[ "$histfile" = "file_def_histday_lmdz.xml" ]]; then
844                    sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".TRUE."@' \
845                        "$histfile" > tmp
846                    \mv -f tmp "$histfile"
847                    sed -e 's@output_level="_AUTO_"@output_level="5"@' "$histfile" \
848                        > tmp
849                    \mv -f tmp "$histfile"
850                    sed -e 's@compression_level="2"@compression_level="0"@' \
851                        "$histfile" > tmp
852                    \mv -f tmp "$histfile"
853                else
854                    sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
855                        "$histfile" > tmp
856                    \mv -f tmp "$histfile"
857                fi
858            done
859            # and add option "ok_all_xml=y" in config.def
860            echo "### XIOS outputs" >> config.def
861            echo 'ok_all_xml=.true.' >> config.def
862
863            #activer les sorties pour Cosp
864            if [[ "$cosp" = "v1" ]]; then
865                sed -i'' -e 's@enabled=".FALSE."@enabled=".TRUE."@' \
866                         -e 's@output_level="_AUTO_"@output_level="5"@' \
867                         -e 's@compression_level="2"@compression_level="0"@' \
868                         file_def_histdayCOSP_lmdz.xml
869            fi
870            if [[ "$cosp" = "v2" ]]; then
871                sed -i'' -e 's@compression_level="2"@compression_level="0"@' file_def_histdayCOSPv2_lmdz.xml
872                for type_ in hf day mth; do
873                    file=file_def_hist${type_}COSP
874                    sed -i'' -e 's@src="./'${file}'_lmdz.xml"@src="./'${file}'v2_lmdz.xml"@' context_lmdz.xml
875                done
876                sed -i'' -e 's@field_def_cosp1.xml@field_def_cospv2.xml@' field_def_lmdz.xml
877            fi
878
879            cd ..
880        fi
881
882        # Cas Bench avec ecrad
883        if [[ $rad = "ecrad" ]]; then
884            cd "BENCH${grid_resolution}"
885            cp  ../DefLists/namelist_ecrad .
886            cp -r ../libf/phylmd/ecrad/data .
887            cd ..
888        fi
889
890        # Adjusting bench physiq.def to radiative code chosen
891        cd "BENCH${grid_resolution}"
892        sed -e 's/iflag_rrtm=.*.$/iflag_rrtm='$iflag_rrtm'/' \
893            -e 's/NSW=.*.$/NSW='$NSW'/' physiq.def > tmpdef
894        \mv tmpdef physiq.def
895        cd ..
896
897        cp "$exe_name" "BENCH${grid_resolution}/gcm.e"
898        cd "BENCH${grid_resolution}"
899
900        if [[ ${parallel:0:3} = "mpi" ]]; then
901            # Lancement avec deux procs mpi et 2 openMP
902            echo "export OMP_STACKSIZE=800M" > bench.sh
903            if [[ "${parallel:4:3}" = "omp" ]]; then
904                echo "export OMP_NUM_THREADS=2" >> bench.sh
905            fi
906            if [[ $cosp = "v1" || $cosp = "v2" ]]; then
907                echo "ulimit -s 200000" >> bench.sh
908            else
909                echo "ulimit -s unlimited" >> bench.sh
910            fi
911            if which mpirun &> /dev/null; then
912                echo "mpirun -np 2 gcm.e &> listing" >> bench.sh
913            elif grep -q "Adastra" /etc/motd; then
914                local account
915                account=$(/usr/sbin/my_project.py -l 2>&1 | head -1 | cut -d " " -f 3- | cut -c 5-)
916                bench_cmd="srun --nodes=1 --ntasks=1 --cpus-per-task=2 --threads-per-core=2 --time=0:10:00 --constraint=GENOA --account=$account bash bench.sh"
917                echo "./gcm.e &> listing" >> bench.sh
918            else
919                echo "Error: No command found to run parallel bench"; exit 1
920            fi
921            if [[ $(hostname | cut -c -6) = "spirit" ]]; then  # ulimit unlimited segfaults on Spirit
922                sed -i'' "s/ulimit -s unlimited/ulimit -Ss 8000/" bench.sh
923            fi
924            # Add rebuild, using reb.sh if it is there
925            cat <<EOF >> bench.sh
926if [[ -f reb.sh ]]; then
927  ./reb.sh histday; ./reb.sh histmth; ./reb.sh histhf;
928  ./reb.sh histins; ./reb.sh stomate_history;
929  ./reb.sh sechiba_history; ./reb.sh sechiba_out_2
930fi
931EOF
932        else
933            echo "./gcm.e &> listing" > bench.sh
934        fi
935        chmod +x bench.sh
936        # Getting orchidee stuff
937        if [[ $veget = 'CMIP6' || $veget = "orch2.0" ]]; then  # TODO once we have a 2.2 bench, add it here (or in planned separate bench script)
938            echo 'myget 3DBenchs/BENCHCMIP6.tar.gz'
939            myget 3DBenchs/BENCHCMIP6.tar.gz
940            tar xvzf BENCHCMIP6.tar.gz
941            sed -e "s:VEGET=n:VEGET=y:" config.def > tmp
942            mv -f tmp config.def
943            if [[ $with_xios = 1 ]]; then
944                cp ../../ORCHIDEE/src_xml/context_orchidee.xml .
945                echo '<context id="orchidee" src="./context_orchidee.xml"/>' > add.tmp
946                cp ../../ORCHIDEE/src_xml/field_def_orchidee.xml .
947                cp ../../ORCHIDEE/src_xml/file_def_orchidee.xml .
948                cp ../../ORCHIDEE/src_xml/file_def_input_orchidee.xml .
949                if [[ -f ../../ORCHIDEE/src_xml/context_input_orchidee.xml ]]; then
950                       cp ../../ORCHIDEE/src_xml/context_input_orchidee.xml .
951                       echo '<context id="orchidee" src="./context_input_orchidee.xml"/>' >> add.tmp
952                fi
953                sed -e '/id="LMDZ"/r add.tmp' iodef.xml > tmp
954                mv tmp iodef.xml
955                sed -e'{/sechiba1/ s/enabled="_AUTO_"/type="one_file" enabled=".TRUE."/}' \
956                    file_def_orchidee.xml > tmp
957                \mv -f tmp file_def_orchidee.xml
958                sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
959                    file_def_orchidee.xml > tmp
960                \mv -f tmp file_def_orchidee.xml
961                sed -e 's@output_level="_AUTO_"@output_level="1"@' \
962                    file_def_orchidee.xml > tmp
963                \mv -f tmp file_def_orchidee.xml
964                sed -e 's@output_freq="_AUTO_"@output_freq="1d"@' \
965                    file_def_orchidee.xml > tmp
966                \mv -f tmp file_def_orchidee.xml
967                sed -e 's@compression_level="4"@compression_level="0"@' \
968                    file_def_orchidee.xml > tmp
969                \mv -f tmp file_def_orchidee.xml
970                sed -e 's@XIOS_ORCHIDEE_OK = n@XIOS_ORCHIDEE_OK = y@' \
971                    orchidee.def > tmp
972                \mv -f tmp orchidee.def
973            fi
974        fi
975
976        fi
977
978        if [[ -f ../arch.env ]]; then source ../arch.env; fi
979
980        echo "STARTING BENCH"
981        date
982        if (! $bench_cmd &> out.bench) || ! (tail -n 1 listing | grep "Everything is cool"); then
983            tail listing
984            echo "Bench FAILED, exiting"; exit 1
985        fi
986        date
987        tail listing
988    fi
989
990    # 1D case
991    if [[ $SCM = 1 ]]; then
992        cd "$MODEL"
993        myget 1D/1D.tar.gz
994        tar xf 1D.tar.gz
995        cd 1D
996        for e in "fcm" "env" "path"; do
997          cp "$MODEL/modipsl/modeles/LMDZ/arch/arch-$arch.$e" "$MODEL/modipsl/modeles/LMDZ/arch/arch-local.$e"
998        done
999        if [[ $rad = "oldrad" ]]; then
1000            sed -i'' -e 's/^rad=.*$/rad=oldrad/' run.sh
1001            sed -i'' -e 's/^rad=.*$/rad=oldrad/' bin/compile
1002        elif [[ $rad = ecrad ]] ; then
1003                        sed -i'' -e 's/^rad=.*$/rad=ecrad/' run.sh
1004                        sed -i'' -e 's/^rad=.*$/rad=ecrad/' bin/compile
1005                    fi
1006        echo "Running 1D/run.sh, log in $(pwd)/run1d.log"
1007        ./run.sh &> "$(pwd)/run1d.log"
1008    fi
1009}
1010
1011function run_bench_icosa {
1012    local bench_cmd="./bench.sh"
1013
1014    if [[ $icolmdz = 1 ]]; then
1015      cd "$MODEL/modipsl/modeles/ICOSA_LMDZ"
1016      if [[ $bench = 1 ]]; then
1017        namebench="bench_icolmdz_nbp10_79"
1018        rm -rf $namebench
1019        myget "3DBenchs/$namebench.tar.gz"
1020        mkdir -p $namebench
1021        tar xf "$namebench.tar.gz" -C "$namebench" --strip-components=1
1022        cd $namebench
1023        # copy executables
1024        if [[ ! -x ../bin/icosa_lmdz.exe ]]; then
1025          echo "STOP in icosa_lmdz bench, icosa_lmdz.exe executable not present"; exit 1
1026        fi
1027        cp ../bin/icosa_lmdz.exe .
1028         if [[ ! -x ../../XIOS/bin/xios_server.exe ]]; then
1029          echo "STOP in icosa_lmdz bench, XIOS executable not present"; exit 1
1030        fi
1031        cp ../../XIOS/bin/xios_server.exe .
1032        echo "STARTING ICOSA_LMDZ BENCH"
1033        date
1034        if (! $bench_cmd &> out.bench) || ! ( grep "Time elapsed" listing); then
1035            tail listing
1036            echo "ICOSA_LMDZ bench FAILED, exiting"; exit 1
1037        fi
1038        date
1039        echo "ICOSA_LMDZ bench finished"
1040      fi
1041    fi
1042
1043}
1044# If sourced: returns, else run setup
1045if [[ ! "${BASH_SOURCE[0]}" = "$0" ]]; then return 0; fi
1046
1047echo "install_lmdz.sh DEBUT $(date)"
1048
1049function wrapper_run_all() {
1050    set_default_params
1051    read_cmdline_args "$@"
1052    ensure_correct_option_combinations
1053    download_modipsl_tar
1054    get_lmdz_version
1055    get_dynamico_icosa_version
1056    get_orchidee_version
1057    init_arch
1058    check_available_software
1059    check_compiler
1060    install_netcdf
1061    install_IOIPSL
1062    install_XIOS
1063    compile_orchidee
1064    compile_lmdz
1065    compile_icolmdzor
1066    run_bench
1067    run_bench_icosa
1068}
1069
1070set +e; (set -e && wrapper_run_all "$@"); err_status=$?; set -e  # workaround to make sure set -e is propagated to wrapper_run_all & check the result
1071if (($err_status)); then
1072   echo "EXIT (error)"
1073   echo "install_lmdz.sh failed"
1074   set +u
1075   if [[ $verbose != 1 ]]; then
1076       echo "Consider using the \`-verbose\` flag to see precisely where it stopped."
1077   fi
1078fi
Note: See TracBrowser for help on using the repository browser.