source: BOL/script_install_amaury/install_lmdz.sh @ 4909

Last change on this file since 4909 was 4909, checked in by abarral, 6 weeks ago

add test_compils.sh
modify orch 2.2 to correct fortran mistakes
fix orch2.0 rev
remove useless makeorchidee -clean call
remove orchidee bench for 2.2 since it's not yet compatible

  • Property svn:executable set to *
File size: 30.6 KB
RevLine 
[4210]1#!/bin/bash
[4849]2set -eu  # error on command failure, and on unset variables
3export LC_ALL=# standardize awk format
[4210]4
5###########################################################################
[4849]6# Author : Laurent Fairhead et Frédéric Hourdin
[4210]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.
[4218]21# In the present case, LMDZ, ORCHIDEE, and IOIPSL or XIOS (handling of
22# input-outputs using the NetCDF library).
[4210]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 : pgf90/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
[4862]38### Functions
[4210]39
[4871]40function myget { # Get a file from LMDZ repository
41  local url=$1
[4210]42
[4871]43  local filename
44  filename=$(basename "$url")
45
46  wget --no-check-certificate -nv "http://lmdz.lmd.jussieu.fr/pub/$url"
47  if [[ $filename =~ .*\.(ba)?sh ]]; then chmod +x "$filename"; fi
[4210]48}
49
[4862]50function set_default_params {
51    # Valeur par défaut des parametres
52    svn=""
53    version="20231022.trunk"
[4210]54
[4891]55    netcdf=1
[4862]56    bench=1
57    pcmac=0 # default: not on a Mac
58    SCM=0
[4890]59    veget="none"
[4891]60    grid_resolution="32x32x39"
[4862]61    physiq=""
[4210]62
[4873]63    xios_branch="2.6"
64    xios_rev="2568"
65
[4891]66    parallel="none"
[4862]67    trusting="testing"
68    MODEL=""
[4210]69
[4891]70    with_xios=0
[4862]71    opt_makelmdz_xios=""
[4210]72
[4862]73    rad="rrtm"
[4210]74
[4862]75    compile_with_fcm=1
[4210]76
[4890]77    cosp="none"
[4862]78    opt_cosp=""
[4210]79
[4893]80    make_j=8
81
[4862]82    # Check if on a Mac
83    if [[ $(uname) = "Darwin" ]]; then
84        pcmac=1
85        export MAKE="make"
86    fi
[4210]87
[4873]88    optim_debug=""
[4862]89    arch="local"
[4210]90
[4862]91    local mpi_file
92    mpi_file=$(readlink -f "$(which mpif90)")
93    path_mpi=$(dirname "$mpi_file")
94    root_mpi=$(dirname "$path_mpi")
[4873]95
96    arch="local-gfortran"
97    arch_dir=""
[4862]98}
[4210]99
[4862]100function read_cmdline_args {
101    while (($# > 0)); do
102        case $1 in
103            "-h") cat <<........fin
104        $0 [ -v version ] [ -r svn_release ]
105               [ -parallel PARA ] [ -d GRID_RESOLUTION ] [ -bench 0/1 ]
106               [-name LOCAL_MODEL_NAME] [-gprof] [-opt_makelmdz] [-rad RADIATIF]
[4210]107
[4873]108        -v       "version" like 20150828.trunk, see http://www.lmd.jussieu.fr/~lmdz/Distrib/LISMOI.trunk (default <$version>)
[4210]109
[4873]110        -r       "svn_release" : either the svn release number or "last" (default <$svn>)
[4210]111
[4873]112        -parallel parallel support: mpi, omp, mpi_omp (mpi with openMP) or none (default: <$parallel>)
[4210]113
[4873]114        -d        "grid resolution": should be among the available benchs if -bench 1 (valid values: 48x36x19, 48x36x39) (default : <$grid_resolution>)
[4210]115
[4873]116        -bench     activating the bench or not (0/1) (default: <$bench>)
[4210]117
[4862]118        -testing/unstable
[4210]119
[4873]120        -name      name of the folder to install to (default <$MODEL>)
[4210]121
[4873]122        -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>)
[4210]123
[4873]124        -xios      use (download and compile) the XIOS library (will compile the parallel NetCDF4-HDF5 library) (requires to also have -parallel mpi_omp)
[4210]125
[4873]126        -cosp       to run with cospv1 or cospv2 [none/v1/v2] (default <$cosp>)
[4210]127
[4873]128        -rad        radiative code: oldrad, rrtm or ecrad (default <$rad>)
[4210]129
[4873]130        -nofcm      to compile without fcm
[4210]131
[4862]132        -SCM        install 1D version automatically
[4210]133
[4862]134        -debug      compile everything in debug mode
[4210]135
[4873]136        -physiq     to choose which physics package to use (default <$physiq>)
[4210]137
[4900]138        -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 (default $veget)
[4210]139
[4873]140        -arch       name of the arch to use (default <$arch>)
[4210]141
[4873]142        -arch_dir   where to find the arch files (default <$arch_dir>)
[4862]143
[4893]144        -make_j     number of processes to parallelize installations (default <$make_j>)
145
[4210]146........fin
[4862]147                  exit 1;;
148            "-v") version=$2; shift; shift;;
149            "-r") svn=$2; shift; shift;;
150            "-d") grid_resolution=$2; shift; shift;;
[4873]151            "-unstable"|"-testing") trusting=$(echo "$1" | cut -c2-); shift;;
[4862]152            "-cosp") cosp=$2
153                     case $cosp in
154                         "none"|"v1"|"v2") cosp=$2; shift; shift;;
155                         *) echo "Only none v1 v2 for cosp option"; exit 1
[4849]156                     esac;;
[4862]157            "-nofcm") compile_with_fcm=0; echo "This option will be reactivated soon (promesse du 8dec2022)"; exit 1;  shift;;
158            "-SCM") SCM=1; shift;;
159            "-rad") rad=$2
160                    case $rad in
161                        "oldrad"|"rrtm"|"ecrad") rad=$2; shift; shift;;
162                        *) echo "Only oldrad rrtm ecrad for rad option"; exit 1
163                    esac;;
164            "-parallel") parallel=$2
165                         case $parallel in
166                             "none"|"mpi"|"omp"|"mpi_omp") parallel=$2; shift; shift;;
167                             *) echo "Only none mpi omp mpi_omp for the parallel option"; exit 1
168                         esac;;
169            "-bench") bench=$2; shift; shift;;
[4873]170            "-debug") optim_debug=-debug; shift;;
[4862]171            "-name") MODEL=$2; shift; shift;;
172            "-netcdf") netcdf=$2; shift; shift;;
173            "-physiq") physiq=$2; shift; shift;;
[4891]174            "-xios") with_xios=1; shift;;
[4873]175            "-arch") arch=$2; shift; shift;;
176            "-arch_dir") arch_dir=$2; shift; shift;;
[4862]177            "-veget") veget=$2; shift; shift;;
[4893]178            "-make_j") make_j=$2; shift; shift;;
[4862]179            *)  bash install_lmdz.sh -h; exit 1
180        esac
181    done
182
183    # Option de compilation pour Cosp
184    case $cosp in
185        v1) opt_cosp="-cosp true";;
186        v2) opt_cosp="-cospv2 true";;
187        *) opt_cosp=""
[4215]188    esac
[4210]189
[4862]190    # Check on veget version
[4900]191    if [[ $veget != 'none' && $veget != "CMIP6" && $veget != "orch2.0" && $veget != "orch2.2" ]]; then
[4862]192        re='^[0-9]+$'
193        if ! [[ $veget =~ $re ]]; then
194            echo 'Valeur de l option veget non valable'; exit 1
195        fi
196    fi
[4218]197
[4862]198    #Define veget-related suffix for gcm name
[4890]199    if [[ $veget = 'none' ]]; then
[4862]200        suff_orc=''
201    else
202        suff_orc='_orch'
203    fi
[4210]204
[4807]205
[4862]206    if [[ $parallel = "none" ]]; then
[4891]207        suff_exe='_seq'
[4862]208    else
[4891]209        suff_exe='_para_mem'
[4210]210    fi
211
[4862]212    #Chemin pour placer le modele
[4873]213    if [[ $MODEL = "" ]]; then MODEL="./LMDZ$version$svn$optim_debug"; fi
[4210]214
[4862]215    ## if also compiling XIOS, parallel must be mpi_omp
[4891]216    if [[ $with_xios = 1 && $parallel != "mpi_omp" ]]; then
[4862]217        echo "Error, you must set -parallel mpi_omp if you want XIOS"; exit 1
218    fi
[4210]219
[4891]220    if [[ $with_xios = 1 ]]; then
[4862]221        opt_makelmdz_xios="-io xios"
222    fi
[4210]223
[4891]224    if [[ $cosp = "v2" && $with_xios = 0 ]]; then
[4862]225        echo "Error, Cospv2 cannot run without Xios"; exit 1
[4215]226    fi
[4873]227
228    if [[ $arch_dir = "" ]]; then
229        arch_dir="$MODEL/modipsl/config/IPSLCM7/ARCH/"
230    fi
231    arch_dir=$(readlink -f "$arch_dir")  # full path
[4862]232}
[4210]233
[4862]234function check_available_software {
[4873]235    echo "################################################################"
236    echo "Check if required software is available"
237    echo "################################################################"
238    for logiciel in wget tar gzip make gcc cmake m4 c++; do
239        if [[ $(which "$logiciel") = "" ]]; then
240            echo "You must first install $logiciel on your system"; exit 1
241        fi
242    done
[4210]243
[4873]244    cat <<eod > tt.f90
245print*,'coucou'
246end
[4862]247eod
[4873]248    $compiler tt.f90 || a.out
249    ./a.out >| tt
250    if [[ $(< tt sed -e 's/ //g' ) != "coucou" ]]; then
251        echo "problem installing with compiler $compiler"; exit 1
[4218]252    fi
[4873]253    \rm tt a.out tt.f90
[4862]254}
[4210]255
[4862]256function download_model {
257    mkdir -p "$MODEL"
258    MODEL=$(readlink -f "$MODEL"); echo "$MODEL"  # absolute path
[4210]259
[4873]260    rm -rf "$MODEL/modipsl"
261
262    echo "##########################################################"
263    echo "Download a slightly modified version of  LMDZ"
264    echo "##########################################################"
265    cd "$MODEL"
266    getlog="$(pwd)/get.log"
267    echo "logfile : $getlog"
268    myget "src_archives/$trusting/modipsl.$version.tar.gz" >> get.log 2>&1
269    echo "install_lmdz.sh wget_OK $(date)"
270    gunzip "modipsl.$version.tar.gz" >> get.log 2>&1
271    tar xf "modipsl.$version.tar" >> get.log 2>&1
272    \rm "modipsl.$version.tar"
273}
[4871]274
[4909]275function create_model_tar {  # TODO TEMP while waiting for tar: we copy the base from a local path = IPSLCM7 + ORCH2.2 8504
[4900]276    if [[ ! -d ../MODEL_REF ]]; then
277        cd ..
278        mkdir MODEL_REF
279        cd MODEL_REF
[4909]280        # Base is IPSLCM7
[4900]281        svn co --username icmc_users https://forge.ipsl.fr/igcmg/svn/modipsl/trunk modipsl
282        cd modipsl/util
283        ./model IPSLCM7_work
[4909]284        # Remove unused components
[4901]285        rm -rf ../oasis3-mct
[4900]286        cd ../modeles
287        rm -rf ICOSA_LMDZ ORCHIDEE_4 ORCHIDEE_2_2 NEMO DYNAMICO XIOS INCA
[4909]288        # Retrieve orch version
[4901]289        svn co svn://forge.ipsl.fr/orchidee/branches/ORCHIDEE_2_2/ORCHIDEE -r 8504
[4909]290        # Correct orchidee bug in 8504
291        sed -i"" -e "s/ts.second=dt_routing/ts%second=dt_routing/" -e "380,390 s/USE grid/USE grid, temp_disabled => contfrac/" ORCHIDEE/src_sechiba/routing_native_flow.f90
292
[4900]293        cd ../../../script_install
294    fi
295
296    if [[ ! -d "$MODEL" ]]; then
297        \cp -r ../MODEL_REF .
298        mv MODEL_REF "$MODEL"
299    fi
[4873]300    MODEL=$(readlink -f "$MODEL"); echo "$MODEL"  # absolute path
[4862]301}
[4210]302
[4900]303function init_arch {
[4873]304    if [[ ! -d $arch_dir ]]; then
305        echo "Error: no arch dir $arch_dir"; exit 1
306    elif [[ ! -f $arch_dir/arch-$arch.path ]]; then
307        echo "Error: no arch-$arch.path in $arch_dir"; exit 1
308    fi
[4871]309
[4873]310    local fcm_path
311    if [[ -f $arch_dir/arch-$arch.fcm ]]; then
312        fcm_path="$arch_dir/arch-$arch.fcm"
313    else
314        fcm_path="$MODEL/modipsl/modeles/LMDZ/arch/arch-$arch.fcm"
315        if [[ ! -f $fcm_path ]]; then
316            echo "Error: no $fcm_path"; exit 1
317        fi
318    fi
319
320    # check compiler
321    compiler=$(< "$fcm_path" grep "%COMPILER" | sed -e "s/%COMPILER\s*//")
[4900]322}
[4890]323
[4900]324function install_arch {
325    local component=$1
[4890]326
[4900]327    if [[ ! -f "$MODEL/modipsl/modeles/$component/arch/arch-$arch.fcm" ]]; then
328        \cp -f "$arch_dir/arch-$arch.fcm" "$MODEL/modipsl/modeles/$component/arch"
329        \cp -f "$arch_dir/arch-$arch.path" "$MODEL/modipsl/modeles/$component/arch"
[4893]330
[4900]331        if [[ $component = "XIOS" ]]; then
332            # Adapt for XIOS, which uses different naming conventions
333            sed -i'' -e "s/%COMPILER/%FCOMPILER/" -e "s/%LINK/%LINKER/" -e "s/-fdefault-real-8//" "$MODEL/modipsl/modeles/XIOS/arch/arch-$arch.fcm"
334        elif [[ $component = "ORCHIDEE" ]]; then
335            if [[ $orcbranch = "/tags/ORCHIDEE_2_0/ORCHIDEE" ]]; then  # 2.0 and before have a different fcm convention
336                sed -i'' -e "s/-I//" -e "s/-L//" "$MODEL/modipsl/modeles/ORCHIDEE/arch/arch-$arch.path"  # /!\ we only replace first occurence on purpose
337            fi
338        fi
339    fi
[4871]340}
341
[4862]342function install_netcdf {
343    echo "Installing Netcdf"
[4900]344    local ncdf_compiler="$compiler"
[4210]345
[4862]346    if [[ $netcdf = 0 ]]; then
347        ncdfdir=$(nc-config --prefix)
348    else
349        cd "$MODEL"
[4210]350
[4896]351        # Convert non-basic compiler
[4909]352        case $compiler in  # TODO test with pgf90
353            mpif90) ncdf_compiler=$($compiler 2> <(head -n 1 | cut -f 1 -d ":"))
[4862]354        esac
[4210]355
[4896]356        case $ncdf_compiler in
357            gfortran) opt1="-compiler gnu"; opt2="-CC gcc -FC gfortran -CXX g++";;
358            ifort)  opt1="-compiler intel"; opt2="-CC icc -FC ifort -CXX icpc";;
359            pgf90)  opt1="-compiler pgf90"; opt2="-CC pgcc -FC pgf90 -CXX pgCC";;
360            *)      echo "unexpected compiler $ncdf_compiler for netcdf"; exit 1
361        esac
362
[4862]363        case $with_xios in
[4891]364            0) script_install_netcdf="install_netcdf4_hdf5_seq.bash"
[4862]365               ncdfdir="netcdf4_hdf5_seq"
366               opt_="$opt1";;
[4891]367            1) script_install_netcdf="install_netcdf4_hdf5.bash"
[4862]368               ncdfdir="netcdf4_hdf5"
369               opt_="$opt2 -MPI $root_mpi";;
[4891]370            *) echo "with_xios=$with_xios, should be 0 or 1"; exit 1
[4862]371        esac
372        if [[ $netcdf = 1 ]]; then
373           ncdfdir="$MODEL/$ncdfdir"
374        else
375           mkdir -p "$netcdf"; ncdfdir="$netcdf/$ncdfdir"
376        fi
[4210]377
[4862]378        echo "Repertoire netcdf $ncdfdir"
379        if [[ ! -d $ncdfdir ]]; then
380            netcdflog=$(pwd)/netcdf.log
381            echo "----------------------------------------------------------"
382            echo "Compiling the Netcdf library"
383            echo "----------------------------------------------------------"
384            echo "log file : $netcdflog"
385            myget script_install/$script_install_netcdf >> "$netcdflog" 2>&1
386            chmod u=rwx $script_install_netcdf
387            # shellcheck disable=SC2086
388            ./$script_install_netcdf -prefix "$ncdfdir" $opt_ >> "$netcdflog" 2>&1
[4405]389        fi
[4210]390
[4896]391        # Add to path
392        export PATH="$ncdfdir/bin:$PATH"
393
[4862]394        #----------------------------------------------------------------------------
395        # LF rajout d'une verrue, pour une raison non encore expliquee,
396        # la librairie est parfois rangée dans lib64 et non dans lib
397        # par certains compilateurs
398        if [[ ! -e lib && -d lib64 ]]; then ln -s lib64 lib; fi
399        #----------------------------------------------------------------------------
[4210]400
[4862]401        echo "install_lmdz.sh netcdf_OK $(date)"
402    fi
[4210]403
[4862]404    cat >test_netcdf90.f90 <<EOF
405    use netcdf
406    print *, "NetCDF library version: ", nf90_inq_libvers()
407    end
408EOF
[4546]409
[4896]410    if $ncdf_compiler -I"$ncdfdir"/include test_netcdf90.f90 -L"$ncdfdir"/lib -lnetcdff \
[4862]411              -lnetcdf -Wl,-rpath="$ncdfdir"/lib && ./a.out
412    then
413        \rm test_netcdf90.f90 a.out
[4546]414    else
[4862]415        cat <<EOF
416Failed test program using NetCDF-Fortran. You can:
417- check that you have NetCDF-Fortran installed in your system
418- or specify an installation directory with option -netcdf of install_lmdz.sh
419- or download and compile NetCDF-Fortran with option -netcdf 1 of nstall_lmdz.sh
420EOF
421        exit 1
[4546]422    fi
[4891]423
424    # Compile NetCDF95
425    cd "$MODEL/modipsl/modeles/LMD"*
426    echo "Installing NetCDF95"
427    cd "$MODEL"
428    myget src_archives/netcdf/NetCDF95-0.3.tar.gz
429    tar -xf NetCDF95-0.3.tar.gz
430    \rm NetCDF95-0.3.tar.gz
431    cd NetCDF95-0.3
432    mkdir -p build && cd build
433    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"
434    make install
[4862]435}
[4405]436
[4896]437function install_IOIPSL {
[4900]438    install_arch "IOIPSL"
439
[4862]440    cd "$MODEL/modipsl/modeles/IOIPSL"
441    ioipsllog="$(pwd)/ioipsl.log"
442    echo "Compiling IOIPSL, the interface library with Netcdf $(date) (log: $ioipsllog)"
[4405]443
[4890]444    if ! ./makeioipsl_fcm -arch "$arch" -job 8 > "$ioipsllog" 2>&1; then
445        echo "IOIPSL compile failed, exiting"; exit 1
[4862]446    fi
[4896]447
448    # Link to modipsl/bin
449    cp -f bin/* ../../bin
450
[4862]451    echo "IOIPSL compiled $(date)"
[4873]452
[4891]453    IOIPSL_LIBDIR_="$MODEL/modipsl/modeles/IOIPSL/lib"
454    IOIPSL_INCDIR_="$MODEL/modipsl/modeles/IOIPSL/inc"
[4862]455}
[4210]456
[4871]457function install_XIOS {
[4891]458    if [[ $with_xios = 1 ]]; then
[4871]459        cd "$MODEL/modipsl/modeles"
[4893]460        xioslog="$(pwd)/XIOS/xios.log"
[4871]461        echo "##########################################################"
462        echo "Compiling XIOS (log $xioslog) $(date)"
463        echo "##########################################################"
464
[4873]465        # Download XIOS
466        case $xios_branch in
467            "trunk")
468            xios_http="http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk";;
469            "2.5")
470            xios_http="http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/branchs/xios-2.5";;
471            "2.6")
472            xios_http="http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS2/branches/xios-2.6";;
473            *) echo "XIOS: Error, bad argument for -branch ! Did not expect $xios_branch"; exit;;
474        esac
475       
476        cd "$MODEL/modipsl/modeles"
477        set +e; svn co --revision $xios_rev $xios_http XIOS; set -e
478
479        cd XIOS
[4900]480
481        install_arch "XIOS"
482
483        echo "Starting XIOS compilation"
[4893]484        if ! ./make_xios --arch "$arch" --job 8 > "$xioslog" 2>&1; then
[4871]485            echo "XIOS compilation failed, exiting"; exit 1
486        fi
487
488        echo "Compiled XIOS $(date)"
489    fi
[4893]490
491    XIOS_LIBDIR_="$MODEL/modipsl/modeles/XIOS/lib"
492    XIOS_INCDIR_="$MODEL/modipsl/modeles/XIOS/inc"
[4871]493}
494
[4873]495function get_orchidee_version {  # Set / Check ORCHIDEE version
[4900]496    local fetch_rev=""
497    orcbranch=""
498    case $veget in
499        "none") fcm_veget_version="false";;
[4909]500        "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
[4900]501        "orch2.2") fcm_veget_version=orchidee2.1; orcbranch="ORCHIDEE_2_2" ;; # the bundled version
502        *) fetch_rev=$veget
503    esac
[4873]504
[4900]505    if [[ -n $fetch_rev ]]; then
506        echo "Fetching orch $fetch_rev from the repository"
507        orcbranch=$(svn log -v -q svn://forge.ipsl.jussieu.fr/orchidee/ -r "$fetch_rev" |grep ORCHIDEE |head -1| sed -e 's:ORCHIDEE/.*$:ORCHIDEE:' | awk '{print $2}')
508        echo "branch is $orcbranch"
509        if [[ $fetch_rev -lt 4465 ]]; then echo 'ORCHIDEE version must be >=4465, exiting'; exit 1; fi
510        \rm -rf "$MODEL/modipsl/modeles/ORCHIDEE"
511        echo "IF YOU INSTALL ORCHIDEE THE VERY FIRST TIME, ASK for PASSWORD at orchidee-help@listes.ipsl.fr"
512        cd "$MODEL/modipsl/modeles"
[4891]513        set +e
[4900]514        svn co -r "$fetch_rev" "svn://forge.ipsl.jussieu.fr/orchidee/$orcbranch"
[4891]515        set -e
[4900]516        cd -
[4873]517    fi
518}
519
[4891]520function compile_orchidee {
521    get_orchidee_version
[4900]522    install_arch "ORCHIDEE"
523
[4891]524    if [[ $veget != "none" ]]; then
525        cd "$MODEL/modipsl/modeles/ORCHIDEE"
[4873]526
[4891]527        orchideelog="$(pwd)/orchidee.log"
528        echo "Compiling ORCHIDEE, the continental surface model (log $orchideelog) $(date)"
[4873]529
[4891]530        local xios_orchid opt_orc
531        if [[ $with_xios = 1 ]]; then
532            xios_orchid="-xios";
533        else
534            xios_orchid="-noxios"
[4405]535        fi
[4891]536        if [[ $optim_debug = "-debug" ]]; then
537            opt_orc="-debug";
538        else
539            opt_orc="-prod"
540        fi
[4210]541
[4901]542        local varenv="IOIPSL_LIBDIR_=$IOIPSL_LIBDIR_ IOIPSL_INCDIR_=$IOIPSL_INCDIR_ XIOS_INCDIR_=$XIOS_INCDIR_ XIOS_LIBDIR_=$XIOS_LIBDIR_"
[4891]543        if [[ $parallel = "none" ]]; then
[4893]544            echo "$varenv ./makeorchidee_fcm $xios_orchid $opt_orc -parallel none -arch $arch -j $make_j" > compile.sh
[4891]545        else
546            if [[ ! -d src_parallel ]]; then
547               echo "Orchidee version too old for parallel support"; exit 1
[4405]548            fi
[4891]549            {
[4893]550                echo "$varenv ./makeorchidee_fcm -j $make_j $xios_orchid $opt_orc -parallel $parallel -arch $arch"
[4891]551            } > compile.sh
[4405]552        fi
[4891]553        chmod +x compile.sh
554        echo "Compiling ORCHIDEE using $(\cat compile.sh)"
555        if ! ./compile.sh > "$orchideelog" 2>&1; then
556            echo "ORCHIDEE compilation failed, exiting"; exit 1
557        fi
558        echo "Compiled ORCHIDEE $(date)"
[4210]559    fi
560
[4901]561    ORCH_INCDIR_="$MODEL/modipsl/modeles/ORCHIDEE/inc"
[4891]562    ORCH_LIBDIR_="$MODEL/modipsl/modeles/ORCHIDEE/lib"
563}
[4210]564
[4891]565function get_lmdz_version {
566    LMDZPATH=$(readlink -f "$MODEL/modipsl/modeles/LMD"*)
567    cd "$LMDZPATH"
568    lmdzlog="$(pwd)/lmdz.log"
[4372]569
[4891]570    set +e
571    svn upgrade
572    if [[ $svn = "last" ]]; then
573        svnopt=""
[4427]574    else
[4891]575        svnopt="-r $svn"
[4427]576    fi
[4891]577    if [[ $svn != "" ]]; then
578        if svn info | grep -q 'https:'; then svn switch --relocate https://svn.lmd.jussieu.fr/LMDZ http://svn.lmd.jussieu.fr/LMDZ; fi
579        svn update "$svnopt"
580    fi
581    mysvn=$(svnversion . | grep -E -o "[0-9]+" 2>/dev/null)
582    set -e
[4427]583
[4891]584    if [[ $mysvn = "" ]]; then mysvn=$(grep 'Revision: [0-9]' "$MODEL"/Read*.md | awk ' { print $2 } ' 2>/dev/null); fi
585    if [[ $mysvn = "" ]]; then mysvn=4190; fi
586}
[4427]587
[4891]588function compile_lmdz {
589    get_lmdz_version
[4900]590    install_arch "LMDZ"
[4427]591
[4891]592    exe_name="bin/gcm_${grid_resolution}_phylmd_${rad}${suff_exe}${suff_orc}.e"
[4210]593
[4891]594    local opt_rad
595    case $rad in
596        oldrad) iflag_rrtm=0; NSW=2; opt_rad="";;
597        rrtm)   iflag_rrtm=1; NSW=6
[4849]598            if [[ $mysvn -le 4185 ]]; then
[4405]599                opt_rad="-rrtm true"
600            else
601                opt_rad="-rad rrtm"
[4849]602            fi;;
[4891]603        ecrad)  iflag_rrtm=2; NSW=6; opt_rad="-rad ecrad";;
604        *) echo "Only oldrad rrtm ecrad for rad option"; exit 1
605    esac
606    if [[ $mysvn -le 4185 && $rad = "ecrad" ]]; then
607        echo "ecrad only available for LMDZ rev starting with 4186 "; exit 1
[4215]608    fi
[4210]609
[4891]610    # Compile
[4901]611    local varenv="IOIPSL_LIBDIR_=\"$IOIPSL_LIBDIR_\" IOIPSL_INCDIR_=\"$IOIPSL_INCDIR_\" ORCH_INCDIR_=\"$ORCH_INCDIR_\" ORCH_LIBDIR_=\"$ORCH_LIBDIR_\" XIOS_INCDIR_=\"$XIOS_INCDIR_\" XIOS_LIBDIR_=\"$XIOS_LIBDIR_\""
[4893]612    makelmdz="makelmdz_fcm $optim_debug -arch $arch -j $make_j"
[4891]613    if [[ $parallel = "none" ]]; then
[4900]614        echo "$varenv ./$makelmdz $opt_rad $opt_cosp -d ${grid_resolution} -v $fcm_veget_version gcm " > compile.sh
[4215]615    else
[4900]616        echo "$varenv ./$makelmdz $opt_rad $opt_cosp $opt_makelmdz_xios -d ${grid_resolution} -v $fcm_veget_version -mem -parallel $parallel gcm" > compile.sh
[4215]617    fi
[4891]618    echo "Compiling lmdz using $(\cat compile.sh) (log: $lmdzlog) $(date)"
[4215]619    chmod +x ./compile.sh
[4891]620    if ! ./compile.sh > "$lmdzlog" 2>&1; then
621        echo "LMDZ compilation failed, exiting"; exit 1
[4215]622    fi
[4891]623    echo "Finished LMDZ compilation $(date)"
[4215]624
[4891]625    # Check executable
626    # TODO $mysev -ge 4186 => other name convention ! check original install
627    if [[ ! -f $exe_name ]]; then
628        echo "Compilation failed, can't find the executable"; exit 1
[4215]629    else
[4891]630        echo "Compilation successfull, the executable is $exe_name $(date)"
[4215]631    fi
[4891]632}
[4210]633
[4891]634function run_bench {
635    cd "$MODEL/modipsl/modeles/LMDZ"*
[4210]636
[4891]637    if [[ $bench = "tuto" ]]; then
[4893]638        myget "Training/tutorial.tar"; tar xf tutorial.tar; cd TUTORIAL
[4891]639        ./init.sh
640    elif [[ $bench = 1 ]]; then
641        \rm -rf "BENCH${grid_resolution}"
642        local bench=bench_lmdz_${grid_resolution}
643        myget "3DBenchs/$bench.tar.gz"
644        tar xf "$bench.tar.gz"
[4210]645
[4891]646        if [[ $cosp = "v1" || $cosp = "v2" ]]; then
647            cd "BENCH${grid_resolution}"
648            # copier les fichiers namelist input et output our COSP
649            cp ../DefLists/cosp*_input_nl.txt .
650            cp ../DefLists/cosp*_output_nl.txt .
651            # Activer la cles ok_cosp pour tourner avec COSP
652            sed -e 's@ok_cosp=n@ok_cosp=y@' config.def > tmp
653            \mv -f tmp config.def
654            cd ..
655        fi
[4210]656
[4891]657        if [[ -n "$physiq" ]]; then
658            cd "BENCH${grid_resolution}"
659            if [[ -f "physiq.def_${physiq}" ]]; then
660                cp "physiq.def_${physiq}" physiq.def
661                echo "using physiq.def_${physiq}"
662            else
663                echo "using standard physiq.def"
664            fi
665            cd ..
[4405]666        else
[4891]667            echo "using standard physiq.def"
[4405]668        fi
[4210]669
[4891]670        if [[ $with_xios = 1 ]]; then
671            cd "BENCH${grid_resolution}"
672            cp ../DefLists/iodef.xml .
673            cp ../DefLists/context_lmdz.xml .
674            cp ../DefLists/field_def_lmdz.xml .
675            # A raffiner par la suite
676            echo "A FAIRE : Copier les *xml en fonction de l option cosp"
677            cp ../DefLists/field_def_cosp*.xml .
678            cp ../DefLists/file_def_hist*xml .
679            # adapt iodef.xml to use attached mode
680            sed -e 's@"using_server" type="bool">true@"using_server" type="bool">false@' \
681                iodef.xml > tmp
682            \mv -f tmp iodef.xml
[4210]683
[4891]684            # and convert all the enabled="_AUTO_" (for libIGCM) to enabled=.FALSE.
685            # except for histday
686            for histfile in file_def_hist*xml
687            do
688                if [[ "$histfile" = "file_def_histday_lmdz.xml" ]]; then
689                    sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".TRUE."@' \
690                        "$histfile" > tmp
691                    \mv -f tmp "$histfile"
692                    sed -e 's@output_level="_AUTO_"@output_level="5"@' "$histfile" \
693                        > tmp
694                    \mv -f tmp "$histfile"
695                    sed -e 's@compression_level="2"@compression_level="0"@' \
696                        "$histfile" > tmp
697                    \mv -f tmp "$histfile"
698                else
699                    sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
700                        "$histfile" > tmp
701                    \mv -f tmp "$histfile"
702                fi
703            done
704            # and add option "ok_all_xml=y" in config.def
705            echo "### XIOS outputs" >> config.def
706            echo 'ok_all_xml=.true.' >> config.def
707
708            #activer les sorties pour Cosp
709            if [[ "$cosp" = "v1" ]]; then
710                sed -i'' -e 's@enabled=".FALSE."@enabled=".TRUE."@' \
711                         -e 's@output_level="_AUTO_"@output_level="5"@' \
712                         -e 's@compression_level="2"@compression_level="0"@' \
713                         file_def_histdayCOSP_lmdz.xml
[4405]714            fi
[4891]715            if [[ "$cosp" = "v2" ]]; then
716                sed -e 's@compression_level="2"@compression_level="0"@' file_def_histdayCOSPv2_lmdz.xml
717                for type_ in hf day mth; do
718                    file=file_def_hist${type_}COSP
719                    sed -i'' -e 's@src="./'${file}'_lmdz.xml"@src="./'${file}'v2_lmdz.xml"@' context_lmdz.xml
720                done
721                sed -i '' -e 's@field_def_cosp1.xml@field_def_cospv2.xml@' field_def_lmdz.xml
722            fi
[4210]723
[4891]724            cd ..
[4405]725        fi
[4891]726
727        # Cas Bench avec ecrad
728        if [[ $rad = "ecrad" ]]; then
729            cd "BENCH${grid_resolution}"
730            cp  ../DefLists/namelist_ecrad .
731            cp -r ../libf/phylmd/ecrad/data .
732            cd ..
[4405]733        fi
[4210]734
[4891]735        # Adjusting bench physiq.def to radiative code chosen
736        cd "BENCH${grid_resolution}"
737        sed -e 's/iflag_rrtm=.*.$/iflag_rrtm='$iflag_rrtm'/' \
738            -e 's/NSW=.*.$/NSW='$NSW'/' physiq.def > tmpdef
739        \mv tmpdef physiq.def
[4405]740        cd ..
[4210]741
[4891]742        cp "$exe_name" "BENCH${grid_resolution}/gcm.e"
[4849]743        cd "BENCH${grid_resolution}"
[4210]744
[4891]745        if [[ ${parallel:0:3} = "mpi" ]]; then
746            # Lancement avec deux procs mpi et 2 openMP
747            echo "export OMP_STACKSIZE=800M" > bench.sh
748            if [[ "${parallel:4:3}" = "omp" ]]; then
749                echo "export OMP_NUM_THREADS=2" >> bench.sh
750            fi
751            if [[ "$cosp" = "v1" || "$cosp" = "v2" ]]; then
752                echo "ulimit -s 200000" >> bench.sh
[4215]753            else
[4891]754                echo "ulimit -s unlimited" >> bench.sh
755            fi
756            echo "mpirun -np 2 gcm.e > listing  2>&1" >> bench.sh
757            # Add rebuild, using reb.sh if it is there
758            cat <<EOF >> bench.sh
759    if [[ -f reb.sh ]]; then
760      ./reb.sh histday; ./reb.sh histmth; ./reb.sh histhf;
761      ./reb.sh histins; ./reb.sh stomate_history;
762      ./reb.sh sechiba_history; ./reb.sh sechiba_out_2
763    fi
764EOF
[4405]765        else
[4891]766            echo "./gcm.e > listing  2>&1" > bench.sh
[4405]767        fi
[4891]768        # Getting orchidee stuff
[4909]769        if [[ $veget = 'CMIP6' || $veget = "orch2.0" ]]; then  # TODO once we have a 2.2 bench, add it here (or in planned separate bench script)
[4891]770            echo 'myget 3DBenchs/BENCHCMIP6.tar.gz'
771            myget 3DBenchs/BENCHCMIP6.tar.gz
772            tar xvzf BENCHCMIP6.tar.gz
773            sed -e "s:VEGET=n:VEGET=y:" config.def > tmp
774            mv -f tmp config.def
775            if [[ $with_xios = 1 ]]; then
776                cp ../../ORCHIDEE/src_xml/context_orchidee.xml .
777                echo '<context id="orchidee" src="./context_orchidee.xml"/>' > add.tmp
778                cp ../../ORCHIDEE/src_xml/field_def_orchidee.xml .
779                cp ../../ORCHIDEE/src_xml/file_def_orchidee.xml .
780                cp ../../ORCHIDEE/src_xml/file_def_input_orchidee.xml .
781                if [[ -f ../../ORCHIDEE/src_xml/context_input_orchidee.xml ]]; then
782                       cp ../../ORCHIDEE/src_xml/context_input_orchidee.xml .
783                       echo '<context id="orchidee" src="./context_input_orchidee.xml"/>' >> add.tmp
784                fi
785                sed -e '/id="LMDZ"/r add.tmp' iodef.xml > tmp
786                mv tmp iodef.xml
787                sed -e'{/sechiba1/ s/enabled="_AUTO_"/type="one_file" enabled=".TRUE."/}' \
788                    file_def_orchidee.xml > tmp
789                \mv -f tmp file_def_orchidee.xml
790                sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
791                    file_def_orchidee.xml > tmp
792                \mv -f tmp file_def_orchidee.xml
793                sed -e 's@output_level="_AUTO_"@output_level="1"@' \
794                    file_def_orchidee.xml > tmp
795                \mv -f tmp file_def_orchidee.xml
796                sed -e 's@output_freq="_AUTO_"@output_freq="1d"@' \
797                    file_def_orchidee.xml > tmp
798                \mv -f tmp file_def_orchidee.xml
799                sed -e 's@compression_level="4"@compression_level="0"@' \
800                    file_def_orchidee.xml > tmp
801                \mv -f tmp file_def_orchidee.xml
802                sed -e 's@XIOS_ORCHIDEE_OK = n@XIOS_ORCHIDEE_OK = y@' \
803                    orchidee.def > tmp
804                \mv -f tmp orchidee.def
[4215]805            fi
[4405]806        fi
[4220]807
[4891]808        if [[ -f ../arch.env ]]; then source ../arch.env; fi
[4220]809
[4891]810        echo "EXECUTION DU BENCH"
811        date
812        if (! ./bench.sh > out.bench 2>&1) || ! (tail -n 1 listing | grep "Everything is cool"); then
813            tail listing
814            echo "Bench FAILED, exiting"; exit 1
815        fi
816        date
817        tail listing
[4215]818    fi
[4210]819
[4891]820    # 1D case
821    if [[ $SCM = 1 ]]; then
822        cd "$MODEL"
823        myget 1D/1D.tar.gz
824        tar xf 1D.tar.gz
825        cd 1D
826        if [[ $rad = "oldrad" ]]; then
827            sed -i'' -e 's/^rad=.*$/rad=oldrad/' run.sh
828            sed -i'' -e 's/^rad=.*$/rad=oldrad/' bin/compile
829        fi
830        echo "Running 1D/run.sh, log in $(pwd)/run1d.log"
831        ./run.sh > "$(pwd)/run1d.log" 2>&1
[4422]832    fi
[4891]833}
[4210]834
[4891]835echo "install_lmdz.sh DEBUT $(date)"
[4409]836
[4891]837set_default_params
838read_cmdline_args "$@"
839#download_model
[4909]840create_model_tar
[4900]841init_arch
[4891]842check_available_software
843install_netcdf
844install_IOIPSL
[4893]845install_XIOS
[4891]846compile_orchidee
847compile_lmdz
848run_bench
Note: See TracBrowser for help on using the repository browser.