source: BOL/script_install/install_lmdz.sh @ 5389

Last change on this file since 5389 was 5387, checked in by abarral, 8 days ago

Fix error if MPI missing

  • Property svn:executable set to *
File size: 40.5 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    set +e  # install_lmdz must be able to run without mpi
418    mpi_file=$(readlink -e -f "$(which mpif90)")
419    path_mpi=$(dirname "$mpi_file")
420    root_mpi=$(dirname "$path_mpi")
421    set -e
422}
423
424function check_compiler {
425  # Must be called after init_arch to know which compiler to use
426    cat <<eod > tt.f90
427print*,'coucou'
428end
429eod
430    $compiler tt.f90 || a.out
431    ./a.out >| tt
432    if [[ $(< tt sed -e 's/ //g' ) != "coucou" ]]; then
433        echo "problem installing with compiler $compiler"; exit 1
434    fi
435    rm tt a.out tt.f90
436}
437
438function install_arch {
439    local component=$1
440
441    # Use same .env for all components (for module compatibility)
442    cp -f "$default_env_path" "$MODEL/modipsl/modeles/$component/arch" &> /dev/null || true  # allow failure if we're copying the file to itself
443
444    # Use local .path and .fcm if available, otherwise default
445    if [[ ! -f "$MODEL/modipsl/modeles/$component/arch/arch-$arch.path" ]]; then
446        cp -f "$default_path_path" "$MODEL/modipsl/modeles/$component/arch"
447
448        if [[ $component = "ORCHIDEE" ]]; then
449            if [[ $orcbranch = "/tags/ORCHIDEE_2_0/ORCHIDEE" ]]; then  # 2.0 and before have a different fcm convention
450                sed -i'' -e "s/-I//" -e "s/-L//" "$MODEL/modipsl/modeles/ORCHIDEE/arch/arch-$arch.path"  # /!\ we only replace first occurence on purpose
451            fi
452        fi
453    fi
454    if [[ ! -f "$MODEL/modipsl/modeles/$component/arch/arch-$arch.fcm" ]]; then
455        cp -f "$default_fcm_path"  "$MODEL/modipsl/modeles/$component/arch"
456
457        if [[ $component = "XIOS" ]]; then
458            # Adapt for XIOS, which uses different naming conventions
459            sed -i'' -e "s/%COMPILER/%FCOMPILER/" -e "s/%LINK/%LINKER/" -e "s/-fdefault-real-8//" "$MODEL/modipsl/modeles/XIOS/arch/arch-$arch.fcm"
460        fi
461    fi
462}
463
464function install_netcdf {
465    echo "Installing Netcdf"
466    local ncdf_compiler="$compiler"
467
468    if [[ $netcdf = 0 ]]; then
469        ncdfdir=$(nf-config --prefix)
470    else
471        cd "$MODEL"
472
473        # Convert non-basic compiler
474        case $compiler in
475            mpif90) ncdf_compiler=$($compiler --version | head -n 1 | cut -d " " -f -1)
476        esac
477
478        case $ncdf_compiler in
479            gfortran | GNU) ncdf_compiler="gfortran"; opt1="-compiler gnu"; opt2="-CC gcc -FC gfortran -CXX g++";;
480            *)      echo "unexpected compiler $ncdf_compiler for netcdf"; exit 1
481        esac
482
483        case $with_xios in
484            0) script_install_netcdf="install_netcdf4_hdf5_seq.bash"
485               ncdfdir="netcdf4_hdf5_seq"
486               opt_="$opt1";;
487            1) script_install_netcdf="install_netcdf4_hdf5.bash"
488               ncdfdir="netcdf4_hdf5"
489               opt_="$opt2 -MPI $root_mpi";;
490            *) echo "with_xios=$with_xios, should be 0 or 1"; exit 1
491        esac
492        if [[ $netcdf = 1 ]]; then
493           ncdfdir="$MODEL/$ncdfdir"
494        else
495           mkdir -p "$netcdf"; ncdfdir="$netcdf/$ncdfdir"
496        fi
497
498        echo "Repertoire netcdf $ncdfdir"
499        if [[ ! -d $ncdfdir ]]; then
500            netcdflog=$(pwd)/netcdf.log
501            echo "----------------------------------------------------------"
502            echo "Compiling the Netcdf library"
503            echo "----------------------------------------------------------"
504            echo "log file : $netcdflog"
505            myget script_install/$script_install_netcdf &>> "$netcdflog"
506            chmod u=rwx $script_install_netcdf
507            # shellcheck disable=SC2086
508            ./$script_install_netcdf -prefix "$ncdfdir" $opt_ &>> "$netcdflog"
509        fi
510
511        # Add to path
512        export PATH="$ncdfdir/bin:$PATH"
513        echo "Bin PATH" $PATH
514
515        #----------------------------------------------------------------------------
516        # LF rajout d'une verrue, pour une raison non encore expliquee,
517        # la librairie est parfois rangée dans lib64 et non dans lib
518        # par certains compilateurs
519        if [[ ! -e lib && -d lib64 ]]; then ln -s lib64 lib; fi
520        #----------------------------------------------------------------------------
521
522        echo "install_lmdz.sh netcdf_OK $(date)"
523    fi
524
525    cat >test_netcdf90.f90 <<EOF
526    use netcdf
527    print *, "NetCDF library version: ", nf90_inq_libvers()
528    end
529EOF
530
531    if $ncdf_compiler -I"$ncdfdir"/include test_netcdf90.f90 -L"$ncdfdir"/lib -lnetcdff -lnetcdf -Wl,-rpath="$ncdfdir"/lib && ./a.out; then
532        rm test_netcdf90.f90 a.out
533    else
534        cat <<EOF
535Failed test program using NetCDF-Fortran. You can:
536- check that you have NetCDF-Fortran installed in your system
537- or specify an installation directory with option -netcdf of install_lmdz.sh
538- or download and compile NetCDF-Fortran with option -netcdf 1 of install_lmdz.sh
539EOF
540        exit 1
541    fi
542
543    # Compile NetCDF95
544    cd "$MODEL/modipsl/modeles/LMD"*
545    echo "Installing NetCDF95"
546    cd "$MODEL"
547    if [[ ! -d "NetCDF95-0.3" ]]; then
548        myget src_archives/netcdf/NetCDF95-0.3.tar.gz
549        tar -xf NetCDF95-0.3.tar.gz
550        rm NetCDF95-0.3.tar.gz
551        cd NetCDF95-0.3
552        mkdir -p build && cd build
553        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"
554        make install
555    fi
556}
557
558function install_IOIPSL {
559    install_arch "IOIPSL"
560
561    cd "$MODEL/modipsl/modeles/IOIPSL"
562    ioipsllog="$(pwd)/ioipsl.log"
563    echo "Compiling IOIPSL, the interface library with Netcdf $(date) (log: $ioipsllog)"
564    # in case ksh is not installed on the pc
565    if [[ ! -x /bin/ksh ]]; then
566      sed -i''  -e 's/ksh/bash/' ins_m_prec
567    fi
568    do_compile_sh "IOIPSL" "$jobcmd ./makeioipsl_fcm -j $make_j -arch $arch $optim_flag"
569
570    # Link to modipsl/bin
571    cp -f bin/* ../../bin
572
573    echo "IOIPSL compiled $(date)"
574}
575
576function install_XIOS {
577    if [[ $with_xios = 1 ]]; then
578        cd "$MODEL/modipsl/modeles"
579        xioslog="$(pwd)/XIOS/xios.log"
580        echo "##########################################################"
581        echo "Compiling XIOS (log $xioslog) $(date)"
582        echo "##########################################################"
583
584        # Download XIOS
585        local xios_http="http://forge.ipsl.fr/ioserver/svn/XIOS2/branches/xios-2.6"
586        local xios_rev="2568"
587       
588        cd "$MODEL/modipsl/modeles"
589        set +e; svn co -r $xios_rev $xios_http XIOS; set -e
590
591        cd XIOS
592
593        install_arch "XIOS"
594        do_compile_sh "XIOS" "$jobcmd ./make_xios --job $make_j --arch $arch"
595    fi
596}
597
598function get_orchidee_version {  # Set / Check ORCHIDEE version
599    echo "Checking Orchidee source version"
600    local fetch_rev=""
601    orcbranch=""
602    case $veget in
603        "none") fcm_veget_version="false";;
604        "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
605        "orch2.2") fcm_veget_version=orchidee2.1; orcbranch="/branches/ORCHIDEE_2_2/ORCHIDEE" ;; # the bundled version
606        *) fetch_rev=$veget; fcm_veget_version=orchidee2.1;;  # /!\ arbitary rev only works for orch>=2.1
607          # /!\ Note: for orch>=4, we should be using fcm_vegt_version="orchideetrunk". Below copied comment by Adriana in LMDZ_Setup docs:
608#          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
609#Si on voudrait activer landice_opt=2 , il faut compiler avec -v orchideetrunk.
610
611    esac
612
613    if [[ -n $fetch_rev ]]; then
614        echo "IF YOU INSTALL ORCHIDEE THE VERY FIRST TIME, ASK for PASSWORD at orchidee-help@listes.ipsl.fr"
615        local curr_rev
616        curr_rev=$(svn info "$MODEL/modipsl/modeles/ORCHIDEE" | grep Revision: | cut -d ":" -f 2 | cut -c 2-)
617        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}')
618        if [[ $fetch_rev != "$curr_rev" ]]; then
619            echo "Fetching orch $fetch_rev from the repository (curr: $curr_rev)"
620            echo "branch is $orcbranch"
621            if [[ $fetch_rev -lt 4465 ]]; then echo 'ORCHIDEE version must be >=4465, exiting'; exit 1; fi
622            cd "$MODEL/modipsl/modeles"
623            rm -rf ORCHIDEE
624            svn co -r "$fetch_rev" "svn://forge.ipsl.fr/orchidee/$orcbranch"
625            cd - > /dev/null
626        fi
627    fi
628
629    # Check parallel LMDZ+ORCH
630    if [[ (! $veget = "none") && $parallel = "none" && ($used_lmdz_rev -lt 4894) ]]; then
631        echo "LMDZ revision must be >=4894 for orchidee without parallel support. Upgrade lmdz or use -parallel mpi_omp."; exit 1
632    fi
633}
634
635function compile_orchidee {
636    install_arch "ORCHIDEE"
637
638    if [[ $veget != "none" ]]; then
639        cd "$MODEL/modipsl/modeles/ORCHIDEE"
640
641        local xios_orchid
642        if [[ $with_xios = 1 ]]; then
643            xios_orchid="-xios";
644        else
645            xios_orchid="-noxios"
646        fi
647
648        if [[ $parallel != "none" && ! -d src_parallel ]]; then
649           echo "STOP: Orchidee version too old for parallel support"; exit 1
650        fi
651        do_compile_sh "ORCHIDEE" "$jobcmd ./makeorchidee_fcm -j $make_j $xios_orchid $optim_flag -parallel $parallel -arch $arch"
652    fi
653}
654
655function get_lmdz_version {
656    echo "Checking LMDZ source version"
657    LMDZPATH=$(readlink -e -f "$MODEL/modipsl/modeles/LMD"*)
658    cd "$LMDZPATH"
659
660    if [[ -n $svn_lmdz ]]; then
661        local curr_rev
662        curr_rev=$(svn info "$MODEL/modipsl/modeles/LMD"* | grep Revision: | cut -d ":" -f 2 | cut -c 2-)
663        if [[ $svn_lmdz != "$curr_rev" ]]; then
664            local lmdzbranch
665            echo "Fetching LMDZ $svn_lmdz from the repository"
666            lmdzbranch=$(get_svn_branch "https://svn.lmd.jussieu.fr/LMDZ" "$svn_lmdz")
667            echo "branch is $lmdzbranch"
668            cd "$MODEL/modipsl/modeles"
669            rm -rf LMD*
670            svn co -r "$svn_lmdz" "https://svn.lmd.jussieu.fr/LMDZ/$lmdzbranch" LMDZ
671            cd - > /dev/null
672        fi
673        used_lmdz_rev=$svn_lmdz
674    else  # get svn from info
675        set +e; used_lmdz_rev=$(svn info | grep "Last Changed Rev" | cut -c 19-); set -e
676        if [[ -z $used_lmdz_rev ]]; then  # svn info failed
677            used_lmdz_rev=$(grep 'Revision: [0-9]' "$MODEL"/Read*.md | awk ' { print $2 } ' 2>/dev/null)
678            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
679        fi
680    fi
681}
682
683function compile_lmdz {
684    install_arch "LMDZ"
685    cd "$LMDZPATH"
686
687    if [[ $used_lmdz_rev -le 4185 ]]; then
688        exe_name="bin/${fortran_file}_${grid_resolution}_phy${compphysiq}_${suff_para}${suff_orc}${suff_aer}${suff_iso}.e"
689    else
690        exe_name="bin/${fortran_file}_${grid_resolution}_phy${compphysiq}_${rad}${suff_para}${suff_orc}${suff_aer}${suff_iso}.e"
691    fi
692
693    local opt_rad
694    case $rad in
695        oldrad) iflag_rrtm=0; NSW=2; opt_rad="";;
696        rrtm)   iflag_rrtm=1; NSW=6
697            if [[ $used_lmdz_rev -le 4185 ]]; then
698                opt_rad="-rrtm true"
699            else
700                opt_rad="-rad rrtm"
701            fi;;
702        ecrad)  iflag_rrtm=2; NSW=6; opt_rad="-rad ecrad";;
703        *) echo "Only oldrad rrtm ecrad for rad option"; exit 1
704    esac
705    if [[ $used_lmdz_rev -le 4185 && $rad = "ecrad" ]]; then
706        echo "ecrad only available for LMDZ rev starting with 4186 "; exit 1
707    fi
708
709    # Compile
710    local makelmdz="makelmdz_fcm $optim_flag -arch $arch -j $make_j"
711    local para_compile_opt="-mem -parallel $parallel"; if [[ $parallel = "none" ]]; then para_compile_opt=""; fi
712    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"
713
714    # Check executable
715    if [[ ! -f $exe_name ]]; then
716        echo "STOP: Compilation failed, can't find the executable"; exit 1
717    else
718        echo "Compilation successful, the executable is $exe_name $(date)"
719    fi
720}
721
722function get_dynamico_icosa_version {
723  if [[ $icolmdz = 1 ]]; then
724    echo "Checking DYNAMICO source version"
725    cd "$MODEL/modipsl/modeles"
726    if [[ ! -d DYNAMICO ]]; then
727      git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git DYNAMICO
728    fi
729    cd DYNAMICO
730    git checkout master && git checkout $dynamico_commit
731    cd - > /dev/null
732
733    echo "Checking ICOSA_LMDZ source version"
734    if [[ ! -d ICOSA_LMDZ ]]; then
735      svn checkout http://svn.lmd.jussieu.fr/LMDZ/ICOSA_LMDZ
736    fi
737    cd ICOSA_LMDZ
738    svn up -r 5320
739  fi
740}
741
742function compile_icolmdzor {
743    if [[ $icolmdz = 1 ]]; then
744      install_arch "ICOSA_LMDZ"
745      local para_compile_opt="-parallel $parallel"; if [[ $parallel = "none" ]]; then para_compile_opt=""; fi
746
747      # LMDZ physics package library already available in LMDZ/config/lib directory
748
749      # Compile DYNAMICO
750      cd "$MODEL/modipsl/modeles/DYNAMICO"
751
752      # Need to get rather than install the archs as DYNAMICO uses FCMv2 that does not understand the makefile syntax ($shell)
753      cd arch
754      wget "http://lmdz.lmd.jussieu.fr/pub/src_archives/misc/arch/DYNAMICO/arch-$arch.env"
755      wget "http://lmdz.lmd.jussieu.fr/pub/src_archives/misc/arch/DYNAMICO/arch-$arch.fcm"
756      wget "http://lmdz.lmd.jussieu.fr/pub/src_archives/misc/arch/DYNAMICO/arch-$arch.path"
757      cd ..
758
759      do_compile_sh "DYNAMICO" "$jobcmd ./make_icosa $optim_flag -arch $arch -job $make_j $para_compile_opt -external_ioipsl -with_xios"
760
761      # Compile icosa_lmdz
762      echo "Bin PATH before icosalmdz" "$PATH"
763      cd "$MODEL/modipsl/modeles/ICOSA_LMDZ"
764      do_compile_sh "ICOSA_LMDZ" "$jobcmd ./make_icosa_lmdz -arch $arch -j $make_j -nodeps -p lmd $optim_flag $para_compile_opt -with_orchidee"
765      echo "# Running environment for icosa_lmdz" > icosalmdz.env
766      echo "# "                                   >> icosalmdz.env
767      if [[ -v LD_LIBRARY_PATH ]]; then 
768        echo "export LD_LIBRARY_PATH=$ncdfdir/lib:$LD_LIBRARY_PATH" >> icosalmdz.env
769      else 
770        echo "export LD_LIBRARY_PATH=$ncdfdir/lib" >> icosalmdz.env
771      fi
772    fi
773}
774
775function run_bench {
776    local bench_cmd="./bench.sh"
777
778    cd "$MODEL/modipsl/modeles/LMDZ"*
779
780    if [[ $bench = "tuto" ]]; then
781        myget "Training/tutorial.tar"; tar xf tutorial.tar; cd TUTORIAL
782        ./init.sh
783    elif [[ $bench = 1 ]]; then
784      rm -rf "BENCH${grid_resolution}"
785      local bench=bench_lmdz_${grid_resolution}
786      if [[ $compphysiq = "lmdiso" ]]; then bench=bench_lmdz_iso_${grid_resolution}; fi
787
788      if [[ $is_1D = "y" ]] ; then  # 1D
789        myget "1D/1D.tar.gz"
790        mkdir -p "BENCH${grid_resolution}"
791        tar xf "1D.tar.gz" -C "BENCH${grid_resolution}" --strip-components=1
792        cd "BENCH${grid_resolution}"
793        # Below: ugly, but until we rewrite the 1D case...
794        sed -i'' -e "s:^listecas=.*$:listecas=ARMCU/REF:" -e "s:cd \$local/bin ; ./compile -L \$L:#cd \$local/bin ; ./compile -L \$L:" \
795            -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:" \
796            run.sh
797        cp "../$exe_name" bin/
798        bench_cmd="./run.sh -rad $rad"  # suppress ferret commands that launch after bench is "over"
799      else
800        myget "3DBenchs/$bench.tar.gz"
801        mkdir "BENCH${grid_resolution}"
802        tar xf "$bench.tar.gz" -C "BENCH${grid_resolution}" --strip-components=1
803
804        if [[ $cosp = "v1" || $cosp = "v2" ]]; then
805            cd "BENCH${grid_resolution}"
806            # copier les fichiers namelist input et output our COSP
807            cp ../DefLists/cosp*_input_nl.txt .
808            cp ../DefLists/cosp*_output_nl.txt .
809            # Activer la cles ok_cosp pour tourner avec COSP
810            sed -e 's@ok_cosp=n@ok_cosp=y@' config.def > tmp
811            \mv -f tmp config.def
812            cd ..
813        fi
814
815        if [[ -n "$benchphysiq" ]]; then
816            cd "BENCH${grid_resolution}"
817            if [[ -f "physiq.def_${benchphysiq}" ]]; then
818                cp "physiq.def_${benchphysiq}" benchphysiq.def
819                echo "using physiq.def_${benchphysiq}"
820            else
821                echo "using standard physiq.def"
822            fi
823            cd ..
824        else
825            echo "using standard physiq.def"
826        fi
827
828        if [[ $with_xios = 1 ]]; then
829            cd "BENCH${grid_resolution}"
830            cp ../DefLists/iodef.xml .
831            cp ../DefLists/context_lmdz.xml .
832            cp ../DefLists/field_def_lmdz.xml .
833            # A raffiner par la suite
834            echo "A FAIRE : Copier les *xml en fonction de l option cosp"
835            cp ../DefLists/field_def_cosp*.xml .
836            cp ../DefLists/file_def_hist*xml .
837            # adapt iodef.xml to use attached mode
838            sed -e 's@"using_server" type="bool">true@"using_server" type="bool">false@' \
839                iodef.xml > tmp
840            \mv -f tmp iodef.xml
841
842            # and convert all the enabled="_AUTO_" (for libIGCM) to enabled=.FALSE.
843            # except for histday
844            for histfile in file_def_hist*xml; do
845                if [[ "$histfile" = "file_def_histday_lmdz.xml" ]]; then
846                    sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".TRUE."@' \
847                        "$histfile" > tmp
848                    \mv -f tmp "$histfile"
849                    sed -e 's@output_level="_AUTO_"@output_level="5"@' "$histfile" \
850                        > tmp
851                    \mv -f tmp "$histfile"
852                    sed -e 's@compression_level="2"@compression_level="0"@' \
853                        "$histfile" > tmp
854                    \mv -f tmp "$histfile"
855                else
856                    sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
857                        "$histfile" > tmp
858                    \mv -f tmp "$histfile"
859                fi
860            done
861            # and add option "ok_all_xml=y" in config.def
862            echo "### XIOS outputs" >> config.def
863            echo 'ok_all_xml=.true.' >> config.def
864
865            #activer les sorties pour Cosp
866            if [[ "$cosp" = "v1" ]]; then
867                sed -i'' -e 's@enabled=".FALSE."@enabled=".TRUE."@' \
868                         -e 's@output_level="_AUTO_"@output_level="5"@' \
869                         -e 's@compression_level="2"@compression_level="0"@' \
870                         file_def_histdayCOSP_lmdz.xml
871            fi
872            if [[ "$cosp" = "v2" ]]; then
873                sed -i'' -e 's@compression_level="2"@compression_level="0"@' file_def_histdayCOSPv2_lmdz.xml
874                for type_ in hf day mth; do
875                    file=file_def_hist${type_}COSP
876                    sed -i'' -e 's@src="./'${file}'_lmdz.xml"@src="./'${file}'v2_lmdz.xml"@' context_lmdz.xml
877                done
878                sed -i'' -e 's@field_def_cosp1.xml@field_def_cospv2.xml@' field_def_lmdz.xml
879            fi
880
881            cd ..
882        fi
883
884        # Cas Bench avec ecrad
885        if [[ $rad = "ecrad" ]]; then
886            cd "BENCH${grid_resolution}"
887            cp  ../DefLists/namelist_ecrad .
888            cp -r ../libf/phylmd/ecrad/data .
889            cd ..
890        fi
891
892        # Adjusting bench physiq.def to radiative code chosen
893        cd "BENCH${grid_resolution}"
894        sed -e 's/iflag_rrtm=.*.$/iflag_rrtm='$iflag_rrtm'/' \
895            -e 's/NSW=.*.$/NSW='$NSW'/' physiq.def > tmpdef
896        \mv tmpdef physiq.def
897        cd ..
898
899        cp "$exe_name" "BENCH${grid_resolution}/gcm.e"
900        cd "BENCH${grid_resolution}"
901
902        if [[ ${parallel:0:3} = "mpi" ]]; then
903            # Lancement avec deux procs mpi et 2 openMP
904            echo "export OMP_STACKSIZE=800M" > bench.sh
905            if [[ "${parallel:4:3}" = "omp" ]]; then
906                echo "export OMP_NUM_THREADS=2" >> bench.sh
907            fi
908            if [[ $cosp = "v1" || $cosp = "v2" ]]; then
909                echo "ulimit -s 200000" >> bench.sh
910            else
911                echo "ulimit -s unlimited" >> bench.sh
912            fi
913            if which mpirun &> /dev/null; then
914                echo "mpirun -np 2 gcm.e &> listing" >> bench.sh
915            elif grep -q "Adastra" /etc/motd; then
916                local account
917                account=$(/usr/sbin/my_project.py -l 2>&1 | head -1 | cut -d " " -f 3- | cut -c 5-)
918                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"
919                echo "./gcm.e &> listing" >> bench.sh
920            else
921                echo "Error: No command found to run parallel bench"; exit 1
922            fi
923            if [[ $(hostname | cut -c -6) = "spirit" ]]; then  # ulimit unlimited segfaults on Spirit
924                sed -i'' "s/ulimit -s unlimited/ulimit -Ss 8000/" bench.sh
925            fi
926            # Add rebuild, using reb.sh if it is there
927            cat <<EOF >> bench.sh
928if [[ -f reb.sh ]]; then
929  ./reb.sh histday; ./reb.sh histmth; ./reb.sh histhf;
930  ./reb.sh histins; ./reb.sh stomate_history;
931  ./reb.sh sechiba_history; ./reb.sh sechiba_out_2
932fi
933EOF
934        else
935            echo "./gcm.e &> listing" > bench.sh
936        fi
937        chmod +x bench.sh
938        # Getting orchidee stuff
939        if [[ $veget = 'CMIP6' || $veget = "orch2.0" ]]; then  # TODO once we have a 2.2 bench, add it here (or in planned separate bench script)
940            echo 'myget 3DBenchs/BENCHCMIP6.tar.gz'
941            myget 3DBenchs/BENCHCMIP6.tar.gz
942            tar xvzf BENCHCMIP6.tar.gz
943            sed -e "s:VEGET=n:VEGET=y:" config.def > tmp
944            mv -f tmp config.def
945            if [[ $with_xios = 1 ]]; then
946                cp ../../ORCHIDEE/src_xml/context_orchidee.xml .
947                echo '<context id="orchidee" src="./context_orchidee.xml"/>' > add.tmp
948                cp ../../ORCHIDEE/src_xml/field_def_orchidee.xml .
949                cp ../../ORCHIDEE/src_xml/file_def_orchidee.xml .
950                cp ../../ORCHIDEE/src_xml/file_def_input_orchidee.xml .
951                if [[ -f ../../ORCHIDEE/src_xml/context_input_orchidee.xml ]]; then
952                       cp ../../ORCHIDEE/src_xml/context_input_orchidee.xml .
953                       echo '<context id="orchidee" src="./context_input_orchidee.xml"/>' >> add.tmp
954                fi
955                sed -e '/id="LMDZ"/r add.tmp' iodef.xml > tmp
956                mv tmp iodef.xml
957                sed -e'{/sechiba1/ s/enabled="_AUTO_"/type="one_file" enabled=".TRUE."/}' \
958                    file_def_orchidee.xml > tmp
959                \mv -f tmp file_def_orchidee.xml
960                sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
961                    file_def_orchidee.xml > tmp
962                \mv -f tmp file_def_orchidee.xml
963                sed -e 's@output_level="_AUTO_"@output_level="1"@' \
964                    file_def_orchidee.xml > tmp
965                \mv -f tmp file_def_orchidee.xml
966                sed -e 's@output_freq="_AUTO_"@output_freq="1d"@' \
967                    file_def_orchidee.xml > tmp
968                \mv -f tmp file_def_orchidee.xml
969                sed -e 's@compression_level="4"@compression_level="0"@' \
970                    file_def_orchidee.xml > tmp
971                \mv -f tmp file_def_orchidee.xml
972                sed -e 's@XIOS_ORCHIDEE_OK = n@XIOS_ORCHIDEE_OK = y@' \
973                    orchidee.def > tmp
974                \mv -f tmp orchidee.def
975            fi
976        fi
977
978        fi
979
980        if [[ -f ../arch.env ]]; then source ../arch.env; fi
981
982        echo "STARTING BENCH"
983        date
984        if (! $bench_cmd &> out.bench) || ! (tail -n 1 listing | grep "Everything is cool"); then
985            tail listing
986            echo "Bench FAILED, exiting"; exit 1
987        fi
988        date
989        tail listing
990    fi
991
992    # 1D case
993    if [[ $SCM = 1 ]]; then
994        cd "$MODEL"
995        myget 1D/1D.tar.gz
996        tar xf 1D.tar.gz
997        cd 1D
998        for e in "fcm" "env" "path"; do
999          cp "$MODEL/modipsl/modeles/LMDZ/arch/arch-$arch.$e" "$MODEL/modipsl/modeles/LMDZ/arch/arch-local.$e"
1000        done
1001        if [[ $rad = "oldrad" ]]; then
1002            sed -i'' -e 's/^rad=.*$/rad=oldrad/' run.sh
1003            sed -i'' -e 's/^rad=.*$/rad=oldrad/' bin/compile
1004        elif [[ $rad = ecrad ]] ; then
1005                        sed -i'' -e 's/^rad=.*$/rad=ecrad/' run.sh
1006                        sed -i'' -e 's/^rad=.*$/rad=ecrad/' bin/compile
1007                    fi
1008        echo "Running 1D/run.sh, log in $(pwd)/run1d.log"
1009        ./run.sh &> "$(pwd)/run1d.log"
1010    fi
1011}
1012
1013function run_bench_icosa {
1014    local bench_cmd="./bench.sh"
1015
1016    if [[ $icolmdz = 1 ]]; then
1017      cd "$MODEL/modipsl/modeles/ICOSA_LMDZ"
1018      if [[ $bench = 1 ]]; then
1019        namebench="bench_icolmdz_nbp10_79"
1020        rm -rf $namebench
1021        myget "3DBenchs/$namebench.tar.gz"
1022        mkdir -p $namebench
1023        tar xf "$namebench.tar.gz" -C "$namebench" --strip-components=1
1024        cd $namebench
1025        # copy executables
1026        if [[ ! -x ../bin/icosa_lmdz.exe ]]; then
1027          echo "STOP in icosa_lmdz bench, icosa_lmdz.exe executable not present"; exit 1
1028        fi
1029        cp ../bin/icosa_lmdz.exe .
1030         if [[ ! -x ../../XIOS/bin/xios_server.exe ]]; then
1031          echo "STOP in icosa_lmdz bench, XIOS executable not present"; exit 1
1032        fi
1033        cp ../../XIOS/bin/xios_server.exe .
1034        echo "STARTING ICOSA_LMDZ BENCH"
1035        date
1036        if (! $bench_cmd &> out.bench) || ! ( grep "Time elapsed" listing); then
1037            tail listing
1038            echo "ICOSA_LMDZ bench FAILED, exiting"; exit 1
1039        fi
1040        date
1041        echo "ICOSA_LMDZ bench finished"
1042      fi
1043    fi
1044
1045}
1046# If sourced: returns, else run setup
1047if [[ ! "${BASH_SOURCE[0]}" = "$0" ]]; then return 0; fi
1048
1049echo "install_lmdz.sh DEBUT $(date)"
1050
1051function wrapper_run_all() {
1052    set_default_params
1053    read_cmdline_args "$@"
1054    ensure_correct_option_combinations
1055    download_modipsl_tar
1056    get_lmdz_version
1057    get_dynamico_icosa_version
1058    get_orchidee_version
1059    init_arch
1060    check_available_software
1061    check_compiler
1062    install_netcdf
1063    install_IOIPSL
1064    install_XIOS
1065    compile_orchidee
1066    compile_lmdz
1067    compile_icolmdzor
1068    run_bench
1069    run_bench_icosa
1070}
1071
1072set +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
1073if (($err_status)); then
1074   echo "EXIT (error)"
1075   echo "install_lmdz.sh failed"
1076   set +u
1077   if [[ $verbose != 1 ]]; then
1078       echo "Consider using the \`-verbose\` flag to see precisely where it stopped."
1079   fi
1080fi
Note: See TracBrowser for help on using the repository browser.