source: BOL/script_install/install_lmdz.sh @ 4291

Last change on this file since 4291 was 4286, checked in by lguez, 2 years ago

Remove verbose option of tar

This printed thousands of not very interesting lines. The option on
one of the tar commands was already removed in revision 4205 and
unvoluntarily put back in revision 4267.

  • Property svn:executable set to *
File size: 50.5 KB
RevLine 
[4210]1#!/bin/bash
2
3#set -vx
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.
[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
38echo install_lmdz.sh DEBUT `date`
39set -e
40
41################################################################
42# Choice of installation options
43################################################################
44
45################################################################
46# A function to fetch files either locally or on the internet
47################################################################
48function myget { #1st and only argument should be file name
[4215]49    # Path on local computer where to look for the datafile
50    if [ -f /u/lmdz/WWW/LMDZ/pub/$1 ] ; then
51        \cp -f -p /u/lmdz/WWW/LMDZ/pub/$1 .
52    elif [ -f ~/LMDZ/pub/$1 ] ; then
53        \cp -f -p ~/LMDZ/pub/$1 .
54    else
55        wget --no-check-certificate -nv http://lmdz.lmd.jussieu.fr/pub/$1
56        save_pub_locally=0
57        if [ $save_pub_locally = 1 ] ; then # saving wget files on ~/LMDZ/pub
[4218]58            dir=~/LMDZ/pub/`dirname $1` ; mkdir -p $dir
59            cp -r `basename $1` $dir
[4215]60        fi
[4210]61    fi
62}
63
64# 04_2021 : tester si r4 marche encore !
65#real=r4
66real=r8
67
68
69#########################################################################
70# Valeur par défaut des parametres
71#########################################################################
72svn=""
73#version=trunk
74version=20220131.trunk
75
76getlmdzor=1
[4237]77netcdf=1   #  1: for automatic installation;
[4267]78#          or 0: do not install NetCDF and look for it in standard locations;
79#          or absolute path: look for NetCDF there
[4210]80check_linux=1
81ioipsl=1
82bench=1
83pclinux=1
84pcmac=0 # default: not on a Mac
85compiler=gfortran
[4269]86if [ `gfortran -dumpversion | cut -d. -f1` -ge 11 ] ; then allow_arg_mismatch="-fallow-argument-mismatch" ; fi
[4210]87SCM=0
88# surface/vegetation scheme treatment
89# controlled by the single variable veget which can have the following values
90# - NONE: bucket scheme (default)
91# - CMIP6: orchidee version used in CMIP exercise, rev 5661
92# - number: orchidee version number
93veget=NONE
94# choose the resolution for the bench runs
95# grid_resolution= 32x24x11 or 48x36x19 for tests (test without ORCHIDEE)
96#                  96x71x19  standard configuration
97grid_resolution=144x142x79
98grid_resolution=96x95x39
99grid_resolution=48x36x19
100grid_resolution=32x32x39
101# choose the physiq version you want to test
102#physiq=NPv6.0.14splith
103physiq=
104
105## parallel can take the values none/mpi/omp/mpi_omp
106parallel=mpi_omp
107parallel=none
108idris_acct=lmd
109OPT_GPROF=""
110OPT_MAKELMDZ=""
111MODEL=""
112
113## also compile XIOS? (and more recent NetCDF/HDF5 libraries) Default=no
114with_xios="n"
115opt_makelmdz_xios=""
116
117## compile with oldrad/rrtm/ecrad radiatif code (Default=rrtm)
118rad=rrtm
119
120## compile_with_fcm=1 : use makelmdz_fcm (1) or makelmdz (0)
121compile_with_fcm=1
122
123#Compilation with Cosp (cosp=NONE/v1/v2 ; default=NONE)
124cosp=NONE
125opt_cosp=""
126
127# Check if on a Mac
128if [ `uname` = "Darwin" ]
129then
130    pcmac=1
131    export MAKE=make
132fi
133#echo "pcmac="$pcmac
134
135env_file=""
136
137#########################################################################
138#  Options interactives
139#########################################################################
140while (($# > 0))
[4215]141do
142    case $1 in
143        "-h") cat <<........fin
[4210]144    $0 [ -v version ] [ -r svn_release ]
145           [ -parallel PARA ] [ -d GRID_RESOLUTION ] [ -bench 0/1 ]
146           [-name LOCAL_MODEL_NAME] [-gprof] [-opt_makelmdz] [-rad RADIATIF]
147
148    -v       "version" like 20150828.trunk
149             see http://www.lmd.jussieu.fr/~lmdz/Distrib/LISMOI.trunk
150
151    -r       "svn_release" : either the svn release number or "last"
152
153    -compiler gfortran|ifort|pgf90 (default: gfortran)
154
155    -parallel PARA : can be mpi_omp (mpi with openMP) or none (for sequential)
156
157    -d        GRID_RESOLUTION should be among the available benchs if -bench 1
158              among which : 48x36x19, 48x36x39
159              if wanting to run a bench simulation in addition to compilation
160              default : 48x36x19
161
162    -bench     activating the bench or not (0/1). Default 1
163
164    -name      LOCAL_MODEL_NAME : default = LMDZversion.release
165
[4211]166    -netcdf    0, 1 or PATH
167               0: do not download NetCDF, look for it in standard locations
168               1: download and compile NetCDF
169               PATH: full path to an existing installed NetCDF library
[4210]170
171    -xios      also download and compile the XIOS library
172               (requires the NetCDF4-HDF5 library, also installed by default)
173               (requires to also have -parallel mpi_omp)
174
175    -gprof     to compile with -pg to enable profiling with gprof
176
177    -cosp      to run without our with cospv1 or cospv2 [none/v1/v2]
178
179    -rad RADIATIF can be oldrad, rrtm or ecrad radiatif code
180
181    -nofcm     to compile without fcm
182
183    -SCM        install 1D version automatically
184
185    -debug      compile everything in debug mode
186
187    -opt_makelmdz     to call makelmdz or makelmdz_fcm with additional options
188
189    -physiq    to choose which physics package to use
190
191    -env_file  specify an arch.env file to overwrite the existing one
192
193    -veget surface model to run [NONE/CMIP6/xxxx]
194
195........fin
[4215]196              exit ;;
197        "-v") version=$2 ; shift ; shift ;;
198        "-r") svn=$2 ; shift ; shift ;;
199        "-compiler") compiler=$2
200                     case $compiler in
[4218]201                         "gfortran"|"ifort"|"pgf90") compiler=$2 ; shift
202                                                     shift ;;
203                         *) echo "Only gfortran , ifort or pgf90 for the " \
204                                 "compiler option"
205                            exit
[4215]206                     esac ;;
207        "-d") grid_resolution=$2 ; shift ; shift ;;
208        "-gprof") OPT_GPROF="-pg" ; shift ;;
209        "-cosp") cosp=$2
210                 case $cosp in
211                     "none"|"v1"|"v2") cosp=$2 ; shift ; shift ;;
212                     *) echo Only none v1 v2 for cosp option ; exit
213                 esac ;;
214        "-nofcm") compile_with_fcm=0 ; shift ;;
215        "-SCM") SCM=1 ; shift ;;
216        "-opt_makelmdz") OPT_MAKELMDZ="$2" ; shift ; shift ;;
[4218]217        "-rrtm") rrtm="$2"
218                 if [ "$2" = "false" ] ; then
219                     rad="oldrad"
220                 else
221                     rad="rrtm"
222                 fi
223                 shift ; shift ;;
[4215]224        "-rad") rad=$2
225                case $rad in
226                    "oldrad"|"rrtm"|"ecrad") rad=$2 ; shift ; shift ;;
227                    *) echo Only oldrad rrtm ecrad for rad option ; exit
228                esac ;;
229        "-parallel") parallel=$2
230                     case $parallel in
[4218]231                         "none"|"mpi"|"omp"|"mpi_omp") parallel=$2 ; shift
232                                                       shift ;;
233                         *) echo Only none mpi omp mpi_omp for the parallel \
234                                 option
235                            exit
[4215]236                     esac ;;
237        "-bench") bench=$2 ; shift ; shift ;;
238        "-debug") optim=-debug ; shift ;;
239        "-name") MODEL=$2 ; shift ; shift ;;
240        "-netcdf") netcdf=$2 ; shift ; shift ;;
241        "-physiq") physiq=$2 ; shift ; shift ;;
242        "-xios") with_xios="y" ; shift ;;
243        "-env_file") env_file=$2 ; shift ; shift ;;
244        "-veget") veget=$2 ; shift ; shift ;;
245        *) ./install_lmdz.sh -h ; exit
246    esac
[4210]247done
248
[4218]249# Option de compilation du rayonnement : depend de $mysvn ><= r4185,
250# sera donc definie plus bas
251
[4210]252#opt_rad=""
253#case $rad in
254#   rrtm) opt_rad="-rad rrtm" ;;
255#   ecrad) opt_rad="-rad ecrad" ;;
256#esac
257
258
259# Option de compilation pour Cosp
260opt_cosp=""
261case cosp in
[4215]262    v1) opt_cosp="-cosp true" ;;
263    v2) opt_cosp="-cospv2 true" ;;
[4210]264esac
265
266# Check on veget version
267#if [ "$veget" != 'NONE'  -a "$veget" != "CMIP6" -a "$veget" != +([0-9]) ] ; then
268if [ $veget != 'NONE'   -a $veget != "CMIP6" ] ; then
269    re='^[0-9]+$'
270    if ! [[ $veget =~ $re ]] ; then
271        echo 'Valeur de l option veget non valable'
272        exit
273    fi
274fi
275
276#Define veget-related suffix for gcm name
277if [ "$veget" = 'NONE' ] ; then
278    suff_orc=''
[4218]279    #For use with tutorial, orchidee_rev is also defined (will be
280    #written in surface_env at the end of the script)
[4210]281    orchidee_rev=''
282else
283    suff_orc='_orch'
284fi
285
286
[4218]287if [ $parallel = none ] ; then
288    sequential=1; suff_exe='_seq'
289else
290    sequential=0; suff_exe='_para_mem'
291fi
[4210]292
293#Chemin pour placer le modele
294if [ "$MODEL" = "" ] ; then MODEL=./LMDZ$version$svn$optim ; fi
295
296
297arch=local
298
299
300if [ $compiler = g95 ] ; then echo g95 is not supported anymore ; exit ; fi
301
302################################################################
303# Specificite des machines
304################################################################
305
306hostname=`hostname`
307if [ "$pclinux" = 1 ] ; then o_ins_make="-t g95" ; else o_ins_make="" ; fi
308
309case ${hostname:0:5} in
310
[4215]311    jean-)   compiler="mpiifort" ;
312             par_comp="mpiifort" ;
313             o_ins_make="-t jeanzay" ;
314             make=gmake ;
315             module purge
316             module load intel-compilers/19.0.4 ;
317             #module load intel-mpi/19.0.4 ;
318             #module load intel-mkl/19.0.4 ;
319             module load hdf5/1.10.5-mpi ;
320             module load netcdf/4.7.2-mpi ;
321             module load netcdf-fortran/4.5.2-mpi ;
322             module load subversion/1.9.7 ;
323             export NETCDF_LIBDIR=./
324             export NETCDFFORTRAN_INCDIR=./
325             export NETCDFFORTRAN_LIBDIR=./
326             arch=X64_JEANZAY ;;
[4210]327
[4215]328    cicla|camel)   compiler="gfortran" ;
[4223]329                   module purge
330                   module load gnu/10.2.0
331                   module load openmpi/4.0.5
332                   module load hdf5/1.10.7-mpi
333                   module load netcdf-c/4.7.4-mpi
334                   module load netcdf-fortran/4.5.3-mpi
335                   netcdf=/net/nfs/tools/PrgEnv/linux-scientific6-x86_64/gcc-10.2.0/netcdf-fortran-4.5.3-k3drgfqok3lip62hnm3tsyof4cjen5sk
[4222]336                   module load svn/1.14.0
[4211]337
[4215]338                   if [ $parallel != none ] ; then
[4223]339                       root_mpi=/net/nfs/tools/meso-sl6/openmpi/4.0.5-gcc-10.2.0
[4215]340                       path_mpi=$root_mpi/bin ;
341                       par_comp=${path_mpi}/mpif90 ;
342                       mpirun=${path_mpi}/mpirun ;
343                   fi ;
344                   arch=local  ;
345                   make=make ;
346                   o_ins_make="-t g95" ;;
[4210]347
[4215]348    *)       if [ $parallel = none -o -f /usr/bin/mpif90 ] ; then
349                 path_mpi=`which mpif90 | sed -e s:/mpif90::` ;
350                 if [ -d /usr/lib64/openmpi ] ; then
351                     root_mpi="/usr/lib64/openmpi"
352                 else
353                     root_mpi="/usr"
354                 fi
355             else
356                 echo "Cannot find mpif90" ;
357                 if [ $parallel = none ] ; then exit ; fi ;
358             fi ;
359             if [ $parallel != none ] ; then
360                 root_mpi=$(which mpif90 | sed -e s:/bin/mpif90::)
361                 path_mpi=$(which mpif90 | sed -e s:/mpif90::)
362                 export LD_LIBRARY_PATH=${root_mpi}/lib:$LD_LIBRARY_PATH
363             fi
364             par_comp=${path_mpi}/mpif90 ;
365             mpirun=${path_mpi}/mpirun ;
366             arch=local  ;
367             make=make ;
368             o_ins_make="-t g95"
[4210]369esac
370
371# Flags for parallelism:
372if [ $parallel != none ] ; then
[4215]373    # MPI_LD are the flags needed for linking with MPI
374    MPI_LD="-L${root_mpi}/lib -lmpi"
375    if [ "$compiler" = "gfortran" ] ; then
376        # MPI_FLAGS are the flags needed for compilation with MPI
377        MPI_FLAGS="-fcray-pointer"
378        # OMP_FLAGS are the flags needed for compilation with OpenMP
379        OMP_FLAGS="-fopenmp -fcray-pointer"
380        # OMP_LD are the flags needed for linking with OpenMP
381        OMP_LD="-fopenmp"
382    elif [ "$compiler" = "ifort" ] ; then
383        MPI_FLAGS=""
384        OMP_FLAGS="-openmp"
385        OMP_LD="-openmp"
386    else # pgf90
387        MPI_FLAGS=""
388        OMP_FLAGS="-mp"
389        OMP_LD="-mp"
390    fi
[4210]391fi
392
393#####################################################################
394# Test for old gfortran compilers
395# If the compiler is too old (older than 4.3.x) we test if the
396# temporary gfortran44 patch is available on the computer in which
397# case the compiler is changed from gfortran to gfortran44
398# Must be aware than parallelism can not be activated in this case
399#####################################################################
400
401if [ "$compiler" = "gfortran" ] ; then
[4215]402    gfortran=gfortran
403    gfortranv=`gfortran --version | \
[4210]404   head -1 | awk ' { print $NF } ' | awk -F. ' { print $1 * 10 + $2 } '`
[4215]405    if [ $gfortranv -le 43 ] ; then
406        echo ERROR : Your gfortran compiler is too old
407        echo 'Please choose a new one (ifort) and change the line'
408        echo compiler=xxx
409        echo in the install_lmdz.sh script and rerun it
410        if [ `which gfortran44 | wc -w` -ne 0 ] ; then
411            gfortran=gfortran44
412        else
413            echo gfotran trop vieux ; exit
414        fi
415    fi
416    compiler=$gfortran
[4210]417fi
418#####################################################################
419
420## if also compiling XIOS, parallel must be mpi_omp
421if [ "$with_xios" = "y" -a "$parallel" != "mpi_omp" ] ; then
[4215]422    echo "Error, you must set -parallel mpi_omp if you want XIOS"
423    exit
[4210]424fi
425
426if [ "$with_xios" = "y" ] ; then
[4215]427    opt_makelmdz_xios="-io xios"
[4210]428fi
429
430if [ "$cosp" = "v2" -a "$with_xios" = "n" ] ; then
[4215]431    echo "Error, Cospv2 cannot run without Xios"
432    exit
[4210]433fi
434
435echo '################################################################'
436echo  Choix des options de compilation
437echo '################################################################'
438
439export FC=$compiler
440export F90=$compiler
441export F77=$compiler
442export CPPFLAGS=
443OPTIMNC=$OPTIM
444BASE_LD="$OPT_GPROF"
445OPTPREC="$OPT_GPROF"
[4218]446ARFLAGS="rs"
447if [ -f /etc/issue ] ; then
448    if [ "`grep -i ubuntu /etc/issue`" != "" ] ; then
449        if [ "`grep -i ubuntu /etc/issue | awk ' { print $2 } ' | cut -d. -f1`" -ge 16 ]
450        then
451            ARFLAGS="rU"
452        fi
453    fi
454fi
[4210]455
456
457
458if [ "$compiler" = "$gfortran" ] ; then
[4267]459   OPTIM="-O3 $allow_arg_mismatch"
460   OPTDEB="-g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan  $allow_arg_mismatch"
461   OPTDEV="-Wall -fbounds-check  $allow_arg_mismatch"
462   fmod='I '
463   OPTPREC="$OPTPREC -cpp -ffree-line-length-0"
464   if [ $real = r8 ] ; then OPTPREC="$OPTPREC -fdefault-real-8 -DNC_DOUBLE" ; fi
465   export F90FLAGS=" -ffree-form $OPTIMNC"
466   export FFLAGS=" $OPTIMNC"
467   export CC=gcc
468   export CXX=g++
469   export fpp_flags="-P -C -traditional -ffreestanding"
[4210]470
471elif [ $compiler = mpif90 ] ; then
[4215]472    OPTIM='-O3'
473    OPTDEB="-g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all"
474    OPTDEV="-Wall -fbounds-check"
475    BASE_LD="$BASE_LD -lblas"
476    fmod='I '
[4218]477    if [ $real = r8 ] ; then
478        OPTPREC="$OPTPREC -fdefault-real-8 -DNC_DOUBLE -fcray-pointer"
479    fi
[4215]480    export F90FLAGS=" -ffree-form $OPTIMNC"
481    export FFLAGS=" $OPTIMNC"
482    export CC=gcc
483    export CXX=g++
[4210]484
485elif [ $compiler = pgf90 ] ; then
[4215]486    OPTIM='-O2 -Mipa -Munroll -Mnoframe -Mautoinline -Mcache_align'
487    OPTDEB='-g -Mdclchk -Mbounds -Mchkfpstk -Mchkptr -Minform=inform -Mstandard -Ktrap=fp -traceback'
488    OPTDEV='-g -Mbounds -Ktrap=fp -traceback'
489    fmod='module '
490    if [ $real = r8 ] ; then OPTPREC="$OPTPREC -r8 -DNC_DOUBLE" ; fi
491    export CPPFLAGS="-DpgiFortran"
492    export CC=pgcc
493    export CFLAGS="-O2 -Msignextend"
494    export CXX=pgCC
495    export CXXFLAGS="-O2 -Msignextend"
496    export FFLAGS="-O2 $OPTIMNC"
497    export F90FLAGS="-O2 $OPTIMNC"
498    compile_with_fcm=1
[4210]499
[4221]500elif [[ $compiler = ifort || $compiler = mpiifort ]] ; then
[4215]501    OPTIM="-O2 -fp-model strict -ip -align all "
502    OPTDEV="-p -g -O2 -traceback -fp-stack-check -ftrapuv -check"
503    OPTDEB="-g -no-ftz -traceback -ftrapuv -fp-stack-check -check"
504    fmod='module '
505    if [ $real = r8 ] ; then OPTPREC="$OPTPREC -real-size 64 -DNC_DOUBLE" ; fi
506    export CPP="icc -E"
507    export FFLAGS="-O2 -ip -fpic -mcmodel=large"
508    export FCFLAGS="-O2 -ip -fpic -mcmodel=large"
509    export CC=icc
510    export CFLAGS="-O2 -ip -fpic -mcmodel=large"
511    export CXX=icpc
512    export CXXFLAGS="-O2 -ip -fpic -mcmodel=large"
513    export fpp_flags="-P -traditional"
514    # Pourquoi forcer la compilation fcm. Marche mieux sans
515    #compile_with_fcm=1
[4210]516else
[4215]517    echo unexpected compiler $compiler ; exit
[4210]518fi
519
520OPTIMGCM="$OPTIM $OPTPREC"
521
522hostname=`hostname`
523
524##########################################################################
525# If installing on known machines such as Jean-Zay at IDRIS,
526# don't check for available software and don't install netcdf
527if [ ${hostname:0:5} = jean- ] ; then
[4215]528    netcdf=0 # no need to recompile netcdf, alreday available
529    check_linux=0
530    pclinux=0
531    ioipsl=0 # no need to recompile ioipsl, already available
532    #netcdf="/smplocal/pub/NetCDF/4.1.3"
533    compiler="mpiifort"
534    fmod='module '
535    if [ $real = r8 ] ; then OPTPREC="$OPTPREC -i4 -r8 -DNC_DOUBLE" ; fi
536    OPTIM="-auto -align all -O2 -fp-model strict -xHost "
537    OPTIMGCM="$OPTIM $OPTPREC"
[4210]538fi
539##########################################################################
540
541
542mkdir -p $MODEL
543echo $MODEL
544MODEL=`( cd $MODEL ; pwd )` # to get absolute path, if necessary
545
546
547echo '################################################################'
548if [ "$check_linux" = 1 ] ; then
[4215]549    echo   Check if required software is available
550    echo '################################################################'
[4210]551
[4215]552    #### Ehouarn: test if the required shell is available
553    #### Maj FH-LF-AS 2021-04 : default=bash ; if bash missing, use ksh
554    use_shell="bash" # default
555    if [ "`which bash`" = "" ] ; then
556        echo "no bash ; we will use ksh"
557        use_shell="ksh"
558        if [ "`which ksh`" = "" ] ; then
559            echo "bash (or ksh) needed!! Install it!"
560            exit
561        fi
562    fi
[4210]563
[4215]564    for logiciel in wget tar gzip make $compiler gcc cmake ; do
565        if [ "`which $logiciel`" = "" ] ; then
566            echo You must first install $logiciel on your system
567            exit
568        fi
569    done
[4210]570
[4215]571    if [ $pclinux = 1 ] ; then
572        cd $MODEL
573        cat <<eod > tt.f90
[4210]574print*,'coucou'
575end
576eod
[4215]577        $compiler tt.f90 -o a.out
578        ./a.out >| tt
579        if [ "`cat tt | sed -e 's/ //g' `" != "coucou" ] ; then
580            echo problem installing with compiler $compiler ; exit ; fi
581        \rm tt a.out tt.f90
582    fi
[4210]583fi
584
585###########################################################################
586if [ $getlmdzor = 1 -a ! -d $MODEL/modipsl ] ; then
[4267]587###########################################################################
588   echo '##########################################################'
589   echo  Download a slightly modified version of  LMDZ
590   echo '##########################################################'
591   cd $MODEL
592   getlog=`pwd`/get.log
593   echo logfile : $getlog
594   myget src/modipsl.$version.tar.gz >> get.log 2>&1
595   echo install_lmdz.sh wget_OK `date`
596   gunzip modipsl.$version.tar.gz >> get.log 2>&1
[4286]597   tar xf modipsl.$version.tar >> get.log 2>&1
[4267]598   \rm modipsl.$version.tar
[4210]599fi
600
601###########################################################################
[4217]602if [ $netcdf = 1 ] ; then
[4215]603    ###########################################################################
604    cd $MODEL
605    netcdflog=`pwd`/netcdf.log
606    echo '##########################################################'
607    echo Compiling the Netcdf library
608    echo '##########################################################'
609    echo log file : $netcdflog
[4217]610    if [[ "$with_xios" = "n" && ! -d $MODEL/netcdf4_hdf5_seq ]] ; then
[4267]611        myget import/install_netcdf4_hdf5_seq.bash >> $netcdflog 2>&1
[4215]612        chmod +x install_netcdf4_hdf5_seq.bash
[4212]613
[4215]614        if [ "$compiler" = "gfortran" ]
615        then
616            ./install_netcdf4_hdf5_seq.bash -prefix $MODEL/netcdf4_hdf5_seq \
[4267]617                                            -compiler gnu  >> $netcdflog 2>&1
[4215]618        elif [ "$compiler" = "ifort" ]
619        then
620            ./install_netcdf4_hdf5_seq.bash -prefix $MODEL/netcdf4_hdf5_seq \
[4267]621                                            -compiler intel  >> $netcdflog 2>&1
[4215]622        else
623            echo "unexpected compiler $compiler" ; exit
624        fi
[4212]625
[4215]626        # LF rajout d'une verrue, pour une raison non encore expliquee,
627        # la librairie est parfois rangée dans lib64 et non dans lib
628        # par certains compilateurs
629        if [ ! -e lib -a -d lib64 ] ; then ln -s lib64 lib; fi
[4217]630    elif [[ "$with_xios" = "y" && ! -d $MODEL/netcdf4_hdf5 ]]
631    then
[4216]632        # download and compile hdf5 and netcdf, etc. using the
633        # install_netcdf4_hdf5.bash script
[4267]634        myget import/install_netcdf4_hdf5.bash >> $netcdflog 2>&1
[4215]635        chmod u=rwx install_netcdf4_hdf5.bash
636        if [ "$compiler" = "gfortran" ] ; then
[4218]637            ./install_netcdf4_hdf5.bash -prefix $MODEL/netcdf4_hdf5 -CC gcc \
[4267]638                        -FC gfortran -CXX g++ -MPI $root_mpi  >> $netcdflog 2>&1
[4215]639        elif [ "$compiler" = "ifort" ] ; then
[4218]640            ./install_netcdf4_hdf5.bash -prefix $MODEL/netcdf4_hdf5 -CC icc \
[4267]641                          -FC ifort -CXX icpc -MPI $root_mpi  >> $netcdflog 2>&1
[4215]642        elif [ "$compiler" = "pgf90" ] ; then
[4218]643            ./install_netcdf4_hdf5.bash -prefix $MODEL/netcdf4_hdf5 -CC pgcc \
[4267]644                          -FC pgf90 -CXX pgCC -MPI $root_mpi  >> $netcdflog 2>&1
[4215]645        else
646            echo "unexpected compiler $compiler" ; exit
647        fi
648    fi  # of if [ "$with_xios" = "n" ]
649    echo install_lmdz.sh netcdf_OK `date`
[4210]650fi # of if [ $netcdf = 1 ]
651
652# ncdfdir contains the directory where netcdf is installed
[4211]653if [ $netcdf = 1 ] ; then
[4215]654    if [ "$with_xios" = "y" ] ; then
655        ncdfdir=$MODEL/netcdf4_hdf5
656    else
657        ncdfdir=$MODEL/netcdf4_hdf5_seq
658    fi
[4211]659elif [ $netcdf = 0 ]
660then
[4215]661    ncdfdir=/usr
[4210]662else
[4215]663    ncdfdir=$netcdf
[4210]664fi
665
[4238]666cat >test_netcdf90.f90 <<EOF
[4239]667use netcdf
[4238]668print *, "NetCDF library version: ", nf90_inq_libvers()
669end
670EOF
671
672$compiler -I$ncdfdir/include test_netcdf90.f90 -L$ncdfdir/lib -l netcdff \
[4267]673          -lnetcdf -Wl,-rpath=$ncdfdir/lib && ./a.out
[4238]674   
675if (($? == 0))
676then
677    rm test_netcdf90.f90 a.out
678else
679    echo "Failed test program using NetCDF-Fortran."
680    echo "You can:"
681    echo "- check that you have NetCDF-Fortran installed in your system"
682    echo "- or specify an installation directory with option -netcdf of" \
683         "install_lmdz.sh"
684    echo "- or download and compile NetCDF-Fortran with option -netcdf 1 of" \
685         "install_lmdz.sh"
686    exit 1
687fi
688
[4210]689#=========================================================================
690if [[ ! -f $MODEL/modipsl/lib/libioipsl.a ]]
691then
[4215]692    if [ $ioipsl = 1 ] ; then
[4218]693        #=====================================================================
[4215]694        echo OK ioipsl=$ioipsl
695        echo '##########################################################'
696        echo 'Installing MODIPSL, the installation package manager for the '
697        echo 'IPSL models and tools'
698        echo '##########################################################'
699        echo `date`
[4210]700
[4215]701        cd $MODEL/modipsl
702        \rm -rf lib/*
703        cd util
704        cp AA_make.gdef AA_make.orig
[4218]705        F_C="$compiler -c "
706        if [ "$compiler" = "$gfortran" -o "$compiler" = "mpif90" ]
707        then
708            F_C="$compiler -c -cpp "
709        fi
[4215]710        if [ "$compiler" = "pgf90" ] ; then F_C="$compiler -c -Mpreprocess" ; fi
711        sed -e 's/^\#.*.g95.*.\#.*.$/\#/' AA_make.gdef > tmp
[4218]712        sed -e "s:F_L = g95:F_L = $compiler:" \
713            -e "s:F_C = g95 -c -cpp:F_C = $F_C": \
[4215]714            -e 's/g95.*.w_w.*.(F_D)/g95      w_w = '"$OPTIMGCM"'/' \
715            -e 's:g95.*.NCDF_INC.*.$:g95      NCDF_INC= '"$ncdfdir"'/include:' \
716            -e 's:g95.*.NCDF_LIB.*.$:g95      NCDF_LIB= -L'"$ncdfdir"'/lib -lnetcdff -lnetcdf:' \
717            -e 's:g95      L_O =:g95      L_O = -Wl,-rpath='"$ncdfdir"'/lib:' \
718            -e "s:-fmod=:-$fmod:" -e 's/-fno-second-underscore//' \
719            -e 's:#-Q- g95      M_K = gmake:#-Q- g95      M_K = make:' \
720            tmp >| AA_make.gdef
[4210]721
[4215]722        if [ $pcmac == 1 ]
723        then
724            cp AA_make.gdef tmp
725            sed -e 's/rpath=/rpath,/g' tmp > AA_make.gdef
726        fi
[4210]727
728
[4215]729        # We use lines for g95 even for the other compilers to run ins_make
730        if [ "$use_shell" = "ksh" ] ; then
731            ./ins_make $o_ins_make
732        else # bash
733            sed -e s:/bin/ksh:/bin/bash:g ins_make > ins_make.bash
[4218]734            if [ "`grep jeanzay AA_make.gdef`" = "" ] ; then
735                # Bidouille pour compiler sur ada des vieux modipsl.tar
[4215]736                echo 'Warning jean-zay not in AA_make.gdef'
737                echo 'Think about updating'
738                exit 1
739            fi
[4210]740
[4215]741            chmod u=rwx ins_make.bash
742            ./ins_make.bash $o_ins_make
743        fi # of if [ "$use_shell" = "ksh" ]
[4210]744
[4215]745        echo install_lmdz.sh MODIPSL_OK `date`
[4210]746
[4215]747        cd $MODEL/modipsl/modeles/IOIPSL/src
748        ioipsllog=`pwd`/ioipsl.log
749        echo '##########################################################'
750        echo 'Compiling IOIPSL, the interface library with Netcdf'
751        echo '##########################################################'
752        echo `date`
753        echo log file : $ioipsllog
[4210]754
[4215]755        if [ "$use_shell" = "bash" ] ; then
756            cp Makefile Makefile.ksh
757            sed -e s:/bin/ksh:/bin/bash:g Makefile.ksh > Makefile
758        fi
759        # if [ "$pclinux" = 1 ] ; then
760        # Build IOIPSL modules and library
761        $make clean
762        $make > $ioipsllog 2>&1
[4218]763        if [ "$compiler" = "$gfortran" -o "$compiler" = "mpif90" ] ; then
764            # copy module files to lib
[4215]765            cp -f *.mod ../../../lib
766        fi
767        # Build IOIPSL tools (ie: "rebuild", if present)
768        if [ -f $MODEL/modipsl/modeles/IOIPSL/tools/rebuild ] ; then
769            cd $MODEL/modipsl/modeles/IOIPSL/tools
770            # adapt Makefile & rebuild script if in bash
771            if [ "$use_shell" = "bash" ] ; then
772                cp Makefile Makefile.ksh
773                sed -e s:/bin/ksh:/bin/bash:g Makefile.ksh > Makefile
774                cp rebuild rebuild.ksh
775                sed -e 's:/bin/ksh:/bin/bash:g' \
776                    -e 's:print -u2:echo:g' \
777                    -e 's:print:echo:g' rebuild.ksh > rebuild
778            fi
779            $make clean
780            $make > $ioipsllog 2>&1
781        fi
782        # fi # of if [ "$pclinux" = 1 ]
[4210]783
[4215]784    else # of if [ $ioipsl = 1 ]
785        if [ ${hostname:0:5} = jean- ] ; then
786            cd $MODEL/modipsl
787            cd util
788            if [ "`grep jeanzay AA_make.gdef`" = "" ] ; then
789                echo 'Warning jean-zay not in AA_make.gdef'
790                echo 'Think about updating'
791                exit 1
792            fi
793            ./ins_make $o_ins_make
794            # Compile IOIPSL on jean-zay
795            cd $MODEL/modipsl/modeles/IOIPSL/src
796            gmake > ioipsl.log
797            cd $MODEL/modipsl/modeles/IOIPSL/tools
798            gmake > ioipsl.log
[4210]799
[4215]800        fi
801        echo install_lmdz.sh ioipsl_OK `date`
802    fi # of if [ $ioipsl = 1 ]
[4210]803fi
804# Saving ioipsl lib for possible parallel compile
[4215]805cd $MODEL/modipsl
806tar cf ioipsl.tar lib/ bin/
[4210]807
808#=========================================================================
809if [ "$with_xios" = "y" ] ; then
[4215]810    echo '##########################################################'
811    echo 'Compiling XIOS'
812    echo '##########################################################'
813    cd $MODEL/modipsl/modeles
814    xioslog=`pwd`/xios.log
815    #wget http://www.lmd.jussieu.fr/~lmdz/Distrib/install_xios.bash
816    myget import/install_xios.bash
817    chmod u=rwx install_xios.bash
818    if [ ${hostname:0:5} = jean- ] ; then
[4218]819        svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/branchs/xios-2.5 \
820            XIOS
[4215]821        cd XIOS/arch
822        svn update
823        cd ..
[4218]824        echo "Compiling XIOS, start" `date` \
825             "(it takes about 20 min on Jean-Zay)"
[4215]826        echo "log file: $xioslog"
827        ./make_xios --prod --arch $arch --job 4 > xios.log 2>&1
828    else
829        ./install_xios.bash -prefix $MODEL/modipsl/modeles \
830                            -netcdf ${ncdfdir} -hdf5 ${ncdfdir} \
831                            -MPI $root_mpi -arch $arch > xios.log 2>&1
832    fi # of case Jean-Zay
833    if [ -f XIOS/lib/libxios.a ] ; then
834        echo "XIOS library successfully generated"
835        echo install_lmdz.sh XIOS_OK `date`
836    fi
[4210]837fi
838
839#============================================================================
840veget_version=false
841if [ "$veget" != 'NONE' ] ; then
[4215]842    cd $MODEL/modipsl/modeles/ORCHIDEE
843    set +e ; svn upgrade ; set -e
844    if [ "$veget" = "CMIP6" ] ; then
845        veget_version=orchidee2.0
846        orchidee_rev=6592
847    else # specific orchidee revision newer than CMIP6, on 2_1 or 2_2 branches
848        veget_version=orchidee2.1
849        orchidee_rev=$veget
850        if [ $veget -lt 4465 ] ; then
[4218]851            echo 'Stopping, ORCHIDEE version too old, script needs work on ' \
852                 'the CPP flags to pass to makelmdz'
[4215]853            exit 1
854        fi
855        set +e
856        # which branch is my version on?
857        orcbranch=`svn log -v -q svn://forge.ipsl.jussieu.fr/orchidee/ -r $veget |grep ORCHIDEE |head -1| sed -e 's:ORCHIDEE/.*$:ORCHIDEE:' | awk '{print $2}'`
858        # switch to that branch
[4218]859        echo IF YOU INSTALL ORCHIDEE THE VERY FIRST TIME, ASK for PASSWORD at \
860             orchidee-help@listes.ipsl.fr
861        svn switch -r $veget --accept theirs-full \
862            svn://forge.ipsl.jussieu.fr/orchidee/$orcbranch
[4215]863        svn log -r $veget | grep  $veget
864        if [  $? -gt 0 ] ; then
[4218]865            echo 'Cannot update ORCHIDEE as not on the right branch for ' \
866                 'ORCHIDEE'
[4215]867            exit
868        fi
869        set -e
870        set +e ; svn update -r $veget ; set -e
871    fi
872    # Correctif suite debug Jean-Zay
[4218]873    sed -i -e 's/9010  FORMAT(A52,F17.14)/9010  FORMAT(A52,F20.14)/' \
874        src_stomate/stomate.f90
[4215]875    opt_orc="-prod" ; if [ "$optim" = "-debug" ] ; then opt_orc="-debug" ; fi
[4210]876
[4215]877    orchideelog=`pwd`/orchidee.log
878    echo '########################################################'
879    echo 'Compiling ORCHIDEE, the continental surface model '
880    echo '########################################################'
881    echo Start of the first compilation of orchidee, in sequential mode: `date`
882    echo log file : $orchideelog
[4210]883
[4215]884    export ORCHPATH=`pwd`
885    xios_orchid="-noxios"
886    if [ "$with_xios" = "y" ] ; then
887        xios_orchid="-xios"
888    fi
889    if [ -d tools ] ; then
890        ###################################################################
891        # Pour les experts qui voudraient changer de version d'orchidee.
892        # Attention : necessite d'avoir le password pour orchidee
[4210]893
[4215]894        # Correctif suite debug Jean-Zay
[4218]895        if [ -f src_global/time.f90 ] ; then
896            sed -i -e 's/CALL tlen2itau/\!CALL tlen2itau/' src_global/time.f90
897        fi
[4215]898        ###################################################################
[4218]899        if [ "$veget_version" == "false" ] ; then
900            veget_version=orchidee2.0
901        fi
[4215]902        cd arch
903        sed -e s:"%COMPILER        .*.$":"%COMPILER            $compiler":1 \
904            -e s:"%LINK            .*.$":"%LINK                $compiler":1 \
905            -e s:"%FPP_FLAGS       .*.$":"%FPP_FLAGS           $fpp_flags":1 \
906            -e s:"%PROD_FFLAGS     .*.$":"%PROD_FFLAGS         $OPTIM":1 \
907            -e s:"%DEV_FFLAGS      .*.$":"%DEV_FFLAGS          $OPTDEV":1 \
908            -e s:"%DEBUG_FFLAGS    .*.$":"%DEBUG_FFLAGS        $OPTDEB":1 \
909            -e s:"%BASE_FFLAGS     .*.$":"%BASE_FFLAGS         $OPTPREC":1 \
910            -e s:"%BASE_LD         .*.$":"%BASE_LD             $BASE_LD":1 \
911            -e s:"%ARFLAGS         .*.$":"%ARFLAGS             $ARFLAGS":1 \
912            arch-gfortran.fcm > arch-local.fcm
[4218]913        echo "NETCDF_LIBDIR=\"-L${ncdfdir}/lib -lnetcdff -lnetcdf\"" \
914             > arch-local.path
[4215]915        echo "NETCDF_INCDIR=${ncdfdir}/include" >> arch-local.path
916        echo "IOIPSL_INCDIR=$ORCHPATH/../../lib" >> arch-local.path
917        echo "IOIPSL_LIBDIR=$ORCHPATH/../../lib" >> arch-local.path
918        echo 'XIOS_INCDIR=${ORCHDIR}/../XIOS/inc' >> arch-local.path
919        echo 'XIOS_LIBDIR="${ORCHDIR}/../XIOS/lib -lxios"' >> arch-local.path
920        cd ../
[4210]921
[4218]922        echo ./makeorchidee_fcm -j $xios_orchid $opt_orc -parallel none \
923             -arch $arch
924        ./makeorchidee_fcm -j 8 $xios_orchid $opt_orc -parallel none \
925                           -arch $arch > $orchideelog 2>&1
[4215]926        pwd
927    else # of "if [ -d tools ]"
928        if [ -d src_parallel ] ; then
929            liste_src="parallel parameters global stomate sechiba driver"
[4218]930            if [ "$veget_version" == "false" ] ; then
931                veget_version=orchidee2.0
932            fi
[4215]933        fi
[4218]934        for d in $liste_src ; do
935            src_d=src_$d
936            echo src_d $src_d
937            echo ls ; ls
938            if [ ! -d $src_d ] ; then
939                echo Problem orchidee : no $src_d ; exit
940            fi
941            cd $src_d ; \rm -f *.mod make ; $make clean
942            $make > $orchideelog 2>&1
943            if [ "$compiler" = "$gfortran" -o "$compiler" = "mpif90" ] ; then
944                cp -f *.mod ../../../lib
945            fi
946            cd ..
[4215]947        done
948    fi # of "if [ -d tools ]"
949    echo install_lmdz.sh orchidee_compil_seq_OK `date`
[4210]950fi # of if [ "$veget" != 'NONE' ]
951
952
953#============================================================================
954# Ehouarn: the directory name LMDZ* depends on version/tar file...
955if [ -d $MODEL/modipsl/modeles/LMD* ] ; then
[4215]956    echo '###############################################################'
957    echo 'Preparing LMDZ compilation : arch file, svn switch if needed...'
958    echo '###############################################################'
959    cd $MODEL/modipsl/modeles/LMD*
960    LMDZPATH=`pwd`
[4210]961else
[4215]962    echo "ERROR: No LMD* directory !!!"
963    exit
[4210]964fi
965
966###########################################################
967# For those who want to use fcm to compile via :
968#  makelmdz_fcm -arch local .....
969############################################################
970
[4214]971if [[ "$pclinux" = "1" && ! -f arch/arch-local.path ]] ; then
[4210]972
[4215]973    # create local 'arch' files (if on Linux PC):
974    cd arch
975    # arch-local.path file
[4218]976    echo "NETCDF_LIBDIR=\"-L${ncdfdir}/lib -lnetcdff -lnetcdf\"" \
977         > arch-local.path
[4215]978    echo "NETCDF_INCDIR=-I${ncdfdir}/include" >> arch-local.path
979    echo 'NETCDF95_INCDIR=$LMDGCM/../../include' >> arch-local.path
980    echo 'NETCDF95_LIBDIR=$LMDGCM/../../lib' >> arch-local.path
981    echo 'IOIPSL_INCDIR=$LMDGCM/../../lib' >> arch-local.path
982    echo 'IOIPSL_LIBDIR=$LMDGCM/../../lib' >> arch-local.path
983    echo 'XIOS_INCDIR=$LMDGCM/../XIOS/inc' >> arch-local.path
984    echo 'XIOS_LIBDIR=$LMDGCM/../XIOS/lib' >> arch-local.path
985    echo 'ORCH_INCDIR=$LMDGCM/../../lib' >> arch-local.path
986    echo 'ORCH_LIBDIR=$LMDGCM/../../lib' >> arch-local.path
[4210]987
[4215]988    if [ $pcmac == 1 ] ; then
989        BASE_LD="$BASE_LD -Wl,-rpath,${ncdfdir}/lib"
990    else
991        BASE_LD="$BASE_LD -Wl,-rpath=${ncdfdir}/lib"
992    fi
993    # Arch-local.fcm file (adapted from arch-linux-32bit.fcm)
[4210]994
[4215]995    if [ $real = r8 ] ; then FPP_DEF=NC_DOUBLE ; else FPP_DEF="" ; fi
996    sed -e s:"%COMPILER        .*.$":"%COMPILER            $compiler":1 \
997        -e s:"%LINK            .*.$":"%LINK                $compiler":1 \
998        -e s:"%PROD_FFLAGS     .*.$":"%PROD_FFLAGS         $OPTIM":1 \
999        -e s:"%DEV_FFLAGS      .*.$":"%DEV_FFLAGS          $OPTDEV":1 \
1000        -e s:"%DEBUG_FFLAGS    .*.$":"%DEBUG_FFLAGS        $OPTDEB":1 \
1001        -e s:"%BASE_FFLAGS     .*.$":"%BASE_FFLAGS         $OPTPREC":1 \
1002        -e s:"%FPP_DEF         .*.$":"%FPP_DEF             $FPP_DEF":1 \
1003        -e s:"%BASE_LD         .*.$":"%BASE_LD             $BASE_LD":1 \
1004        -e s:"%ARFLAGS         .*.$":"%ARFLAGS             $ARFLAGS":1 \
1005        arch-linux-32bit.fcm > arch-local.fcm
[4210]1006
[4215]1007    cd ..
1008    ### Adapt "bld.cfg" (add the shell):
1009    #whereisthatshell=$(which ${use_shell})
1010    #echo "bld::tool::SHELL   $whereisthatshell" >> bld.cfg
[4210]1011
1012fi # of if [ "$pclinux" = 1 ]
1013
1014
1015cd $MODEL/modipsl/modeles/LMDZ*
1016lmdzlog=`pwd`/lmdz.log
1017
1018##################################################################
1019# Possibly update LMDZ if a specific svn release is requested
1020##################################################################
1021
1022set +e ; svn upgrade ; set -e
1023
1024if [ "$svn" = "last" ] ; then svnopt="" ; else svnopt="-r $svn" ; fi
1025if [ "$svn" != "" ] ; then
1026    set +e ; svn info | grep -q 'http:'
1027    if [ $? = 0 ] ; then
[4218]1028        svn switch --relocate http://svn.lmd.jussieu.fr/LMDZ \
1029            https://svn.lmd.jussieu.fr/LMDZ
[4210]1030    fi
1031    svn update $svnopt
1032fi
1033set -e
1034
1035##################################################################
[4218]1036# Retrieve the final svn release number, and adjust compilation
1037# options accordingly
[4210]1038mysvn=`svnversion . | egrep -o "[0-9]+"`
1039
1040# Option de compilation du rayonnement : depend de $mysvn ><= r4185
1041opt_rad=""
1042
1043case $rad in
1044    oldrad) iflag_rrtm=0 ; NSW=2 ; opt_rad="" ;;
[4218]1045    rrtm)   iflag_rrtm=1 ; NSW=6
1046            if [ $mysvn -le 4185 ] ; then
1047                opt_rad="-rrtm true"
1048            else
1049                opt_rad="-rad rrtm"
1050            fi ;;
[4210]1051    ecrad)  iflag_rrtm=2 ; NSW=6 ; opt_rad="-rad ecrad" ;;
1052    *) echo Only oldrad rrtm ecrad for rad option ; exit
1053esac
1054
[4218]1055if [ $mysvn -le 4185 -a $rad = "ecrad" ] ; then
1056    echo "ecrad only available for LMDZ rev starting with 4186 " ; exit
1057fi
[4210]1058
1059##################################################################
1060
[4213]1061
1062if [[ ! -f libf/misc/netcdf95.F90 &&  ! -d $MODEL/NetCDF95-0.2 ]]
1063then
1064    cd $MODEL
1065    myget import/NetCDF95-0.2.tar.gz
1066    tar -xf NetCDF95-0.2.tar.gz
1067    rm NetCDF95-0.2.tar.gz
1068    cd NetCDF95-0.2
1069    mkdir build
1070    cd build
1071    cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$ncdfdir \
1072          -DCMAKE_INSTALL_PREFIX=$MODEL/modipsl
1073    make install
1074    cd $MODEL/modipsl/modeles/LMDZ*
1075fi
1076
[4210]1077echo '##################################################################'
1078echo "Preparing script compile.sh for LMDZ compilation"
1079echo "It will only be run automatically if bench=1/tuto"
1080echo Here bench=$bench
1081echo '##################################################################'
1082
[4218]1083if [ "$env_file" != "" ] ; then
1084    mv arch/arch-${arch}.env arch/arch-${arch}.orig
1085    \cp -f $env_file arch/arch-${arch}.env
1086fi
[4210]1087
[4218]1088if [ $compile_with_fcm = 1 ] ; then
1089    makelmdz="makelmdz_fcm $optim -arch $arch -j 8 "
1090else
1091    makelmdz="makelmdz $optim -arch $arch"
1092fi
[4210]1093
1094# sequential compilation
1095if [ "$sequential" = 1 ] ; then
[4215]1096    echo Sequential compilation command, saved in compile.sh:
[4218]1097    echo "./$makelmdz $optim $OPT_MAKELMDZ $optim $opt_rad $opt_cosp " \
1098         "-d ${grid_resolution} -v $veget_version gcm "
1099    echo "./$makelmdz $optim $OPT_MAKELMDZ $optim $opt_rad $opt_cosp " \
1100         "-d ${grid_resolution} -v $veget_version gcm " > compile.sh
[4215]1101    chmod +x ./compile.sh
1102    if [ $bench = 1 ] ; then
1103        echo install_lmdz.sh start_lmdz_seq_compilation `date`
1104        echo log file: $lmdzlog
1105        ./compile.sh > $lmdzlog 2>&1
1106        echo install_lmdz.sh end_lmdz_seq_compilation `date`
1107    fi
[4210]1108fi # fin sequential
1109
1110# compiling in parallel mode
1111if [ $parallel != "none" ] ; then
1112    echo '##########################################################'
[4215]1113    echo ' Parallel compile '
[4210]1114    echo '##########################################################'
[4215]1115    echo "(after saving the sequential libs and binaries)"
1116    cd $MODEL/modipsl
1117    tar cf sequential.tar bin/ lib/
1118    \rm -rf bin/ lib/
1119    tar xf ioipsl.tar
1120    #
1121    # Orchidee
1122    #
1123    cd $ORCHPATH
1124    if [ -d src_parallel -a $veget != 'NONE' ] ; then
1125        cd arch
1126        sed  \
1127            -e s:"%COMPILER.*.$":"%COMPILER            $par_comp":1 \
1128            -e s:"%LINK.*.$":"%LINK                $par_comp":1 \
1129            -e s:"%MPI_FFLAG.*.$":"%MPI_FFLAGS          $MPI_FLAGS":1 \
1130            -e s:"%OMP_FFLAG.*.$":"%OMP_FFLAGS          $OMP_FLAGS":1 \
1131            -e s:"%MPI_LD.*.$":"%MPI_LD              $MPI_LD":1 \
1132            -e s:"%OMP_LD.*.$":"%OMP_LD              $OMP_LD":1 \
1133            arch-local.fcm > tmp.fcm
[4210]1134
[4215]1135        mv tmp.fcm arch-local.fcm
1136        cd ../
1137        echo Compiling ORCHIDEE in parallel mode `date`
1138        echo logfile $orchideelog
[4218]1139        echo "NOTE : to recompile it when necessary, use ./compile_orc.sh " \
1140             "in modipsl/modeles/ORCHIDEE"
1141        echo ./makeorchidee_fcm -j 8 -clean $xios_orchid $opt_orc \
1142             -parallel $parallel -arch $arch > compile_orc.sh
1143        echo ./makeorchidee_fcm -j 8 $xios_orchid $opt_orc \
1144             -parallel $parallel -arch $arch >> compile_orc.sh
1145        echo echo Now you must also recompile LMDZ, by running ./compile.sh \
1146             in modeles/LMDZ >> compile_orc.sh
[4215]1147        chmod u+x compile_orc.sh
[4218]1148        ./makeorchidee_fcm -j 8 -clean $xios_orchid $opt_orc \
1149                           -parallel $parallel -arch $arch > $orchideelog 2>&1
1150        ./makeorchidee_fcm -j 8 $xios_orchid $opt_orc -parallel $parallel \
1151                           -arch $arch >> $orchideelog 2>&1
[4215]1152        echo End of ORCHIDEE compilation in parallel mode `date`
1153    elif [ $veget != 'NONE' ] ; then
1154        echo '##########################################################'
1155        echo ' Orchidee version too old                                 '
1156        echo ' Please update to new version                             '
1157        echo '##########################################################'
1158        exit
1159    fi # of [ -d src_parallel -a $veget != 'NONE' ]
[4210]1160
[4215]1161    # LMDZ
1162    cd $LMDZPATH
1163    if [ $arch = local ] ; then
1164        cd arch
1165        sed -e s:"%COMPILER.*.$":"%COMPILER            $par_comp":1 \
1166            -e s:"%LINK.*.$":"%LINK                $par_comp":1 \
1167            -e s:"%MPI_FFLAG.*.$":"%MPI_FFLAGS          $MPI_FLAGS":1 \
1168            -e s:"%OMP_FFLAG.*.$":"%OMP_FFLAGS          $OMP_FLAGS":1 \
1169            -e s:"%ARFLAGS.*.$":"%ARFLAGS          $ARFLAGS":1 \
1170            -e s@"%BASE_LD.*.$"@"%BASE_LD             -Wl,-rpath=${root_mpi}/lib:${ncdfdir}/lib"@1 \
1171            -e s:"%MPI_LD.*.$":"%MPI_LD              $MPI_LD":1 \
1172            -e s:"%OMP_LD.*.$":"%OMP_LD              $OMP_LD":1 \
1173            arch-local.fcm > tmp.fcm
1174        mv tmp.fcm arch-local.fcm
1175        cd ../
1176    fi
1177    rm -f compile.sh
1178    echo resol=${grid_resolution} >> compile.sh
1179    if [ ${hostname:0:5} = jean- -a "$cosp" = "v2" ] ; then
[4210]1180
[4218]1181        echo LMDZ compilation command in parallel mode, saved in compile.sh, \
1182             is :
1183        echo "(ATTENTION le probleme de cospv2 sur jean-zay en mode prod " \
1184             "n est pas corrige ! )"
1185        # ATTENTION le probleme de cospv2 sur jean-zay en mode prod n
1186        # est pas corrige
1187        echo ./$makelmdz -dev $optim $OPT_MAKELMDZ $opt_rad $opt_cosp \
1188             $opt_makelmdz_xios -d \$resol -v $veget_version -mem \
1189             -parallel $parallel gcm >> compile.sh
1190        echo ./$makelmdz -dev $optim $OPT_MAKELMDZ $opt_rad $opt_cosp \
1191             $opt_makelmdz_xios -d \$resol -v $veget_version -mem \
1192             -parallel $parallel gcm
[4215]1193    else
[4218]1194        echo ./$makelmdz $optim $OPT_MAKELMDZ $opt_rad $opt_cosp \
1195             $opt_makelmdz_xios -d \$resol -v $veget_version -mem \
1196             -parallel $parallel gcm >> compile.sh
1197        echo ./$makelmdz $optim $OPT_MAKELMDZ $opt_rad $opt_cosp \
1198             $opt_makelmdz_xios -d \$resol -v $veget_version -mem \
1199             -parallel $parallel gcm
[4215]1200    fi
1201    chmod +x ./compile.sh
[4210]1202
[4215]1203    if [ $bench = 1 ] ; then
[4218]1204        echo Compiling LMDZ in parallel mode `date`,  LMDZ log file: $lmdzlog
1205        ./compile.sh > $lmdzlog 2>&1
[4215]1206    fi
1207
[4210]1208fi # of if [ $parallel != "none" ]
1209
1210
1211##################################################################
1212# Verification du succes de la compilation
1213##################################################################
1214
1215# Recherche de l'executable dont le nom a change au fil du temps ...
1216# suffix contains radiative option starting with revision 4186
1217if [ $mysvn -ge 4186 ] ; then suff_exe=_${rad}${suff_exe} ; fi
1218gcm=""
[4219]1219
[4218]1220for exe in gcm.e bin/gcm_${grid_resolution}_phylmd${suff_exe}${suff_orc}.e
1221do
1222    if [ -f $exe ] ; then gcm=$exe ; fi
[4210]1223done
1224
1225if [ "$gcm" = "" ] ; then
[4215]1226    if [ $bench = 1 ] ; then
1227        echo 'Compilation failed !! Cannot run the benchmark;'
1228        exit
1229    else
1230        echo 'Compilation not done (only done when bench=1)'
1231    fi
[4210]1232else
[4215]1233    echo '##########################################################'
1234    echo 'Compilation successfull !! ' `date`
1235    echo '##########################################################'
1236    echo The executable is $gcm
[4210]1237fi
1238
1239##################################################################
1240# Below, we run a benchmark if bench=1 or tuto
1241##################################################################
1242
1243if [ $bench = tuto ] ; then
[4286]1244    myget Training/tutorial.tar ; tar xf tutorial.tar ; cd TUTORIAL
[4218]1245    ./init.sh
[4210]1246
1247elif [[ $bench = 1 && ! -d BENCH${grid_resolution} ]] ; then
[4215]1248    # TOUTE CETTE SECTION DEVRAIT DISPARAITRE POUR UNE COMMANDE
1249    # OU DES BENCHS PAR MOTS CLES COMME tuto
[4210]1250
[4215]1251    echo '##########################################################'
1252    echo ' Running a test run '
1253    echo '##########################################################'
[4210]1254
[4215]1255    \rm -rf BENCH${grid_resolution}
1256    bench=bench_lmdz_${grid_resolution}
1257    echo install_lmdz.sh before bench download  `date`
1258    #wget http://www.lmd.jussieu.fr/~lmdz/Distrib/$bench.tar.gz
1259    myget 3DBenchs/$bench.tar.gz
1260    echo install_lmdz.sh after bench download  `date`
[4286]1261    tar xf $bench.tar.gz
[4210]1262
[4215]1263    if [ "$cosp" = "v1" -o "$cosp" = "v2" ] ; then
1264        cd BENCH${grid_resolution}
1265        # copier les fichiers namelist input et output our COSP
1266        cp ../DefLists/cosp*_input_nl.txt .
1267        cp ../DefLists/cosp*_output_nl.txt .
1268        # Activer la cles ok_cosp pour tourner avec COSP
1269        sed -e 's@ok_cosp=n@ok_cosp=y@' config.def > tmp
1270        \mv -f tmp config.def
1271        cd ..
1272    fi
[4210]1273
[4215]1274    if [ -n "$physiq" ]; then
1275        cd BENCH${grid_resolution}
1276        if [ -f physiq.def_${physiq} ]; then
1277            cp physiq.def_${physiq} physiq.def
1278            echo using physiq.def_${physiq}
1279        else
1280            echo using standard physiq.def
1281        fi
1282        cd ..
1283    else
1284        echo using standard physiq.def
1285    fi
[4210]1286
[4215]1287    if [ "$with_xios" = "y" ] ; then
1288        cd BENCH${grid_resolution}
1289        cp ../DefLists/iodef.xml .
1290        cp ../DefLists/context_lmdz.xml .
1291        cp ../DefLists/field_def_lmdz.xml .
1292        # A raffiner par la suite
1293        echo A FAIRE : Copier les *xml en fonction de l option cosp
1294        cp ../DefLists/field_def_cosp*.xml .
1295        cp ../DefLists/file_def_hist*xml .
1296        # adapt iodef.xml to use attached mode
[4218]1297        sed -e 's@"using_server" type="bool">true@"using_server" type="bool">false@' \
1298            iodef.xml > tmp
[4215]1299        \mv -f tmp iodef.xml
[4210]1300
[4215]1301        # and convert all the enabled="_AUTO_" (for libIGCM) to enabled=.FALSE.
1302        # except for histday
1303        for histfile in file_def_hist*xml
1304        do
1305            if [ "$histfile" = "file_def_histday_lmdz.xml" ] ; then
[4218]1306                sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".TRUE."@' \
1307                    $histfile > tmp
1308                \mv -f tmp $histfile
1309                sed -e 's@output_level="_AUTO_"@output_level="5"@' $histfile \
1310                    > tmp
1311                \mv -f tmp $histfile
1312                sed -e 's@compression_level="2"@compression_level="0"@' \
1313                    $histfile > tmp
1314                \mv -f tmp $histfile
[4215]1315            else
[4218]1316                sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
1317                    $histfile > tmp
1318                \mv -f tmp $histfile
[4215]1319            fi
1320        done
1321        # and add option "ok_all_xml=y" in config.def
1322        echo "### XIOS outputs" >> config.def
1323        echo 'ok_all_xml=.true.' >> config.def
[4210]1324
[4215]1325        #activer les sorties pour Cosp
1326        if [ "$cosp" = "v1" ] ; then
1327            histfile=file_def_histdayCOSP_lmdz.xml
[4218]1328            sed -e 's@enabled=".FALSE."@enabled=".TRUE."@' $histfile > tmp
1329            \mv -f tmp $histfile
1330            sed -e 's@output_level="_AUTO_"@output_level="5"@' $histfile > tmp
1331            \mv -f tmp $histfile
1332            sed -e 's@compression_level="2"@compression_level="0"@' \
1333                $histfile > tmp
1334            \mv -f tmp $histfile
[4215]1335        fi
1336        if [ "$cosp" = "v2" ] ; then
1337            histfile=file_def_histdayCOSPv2_lmdz.xml
[4218]1338            sed -e 's@compression_level="2"@compression_level="0"@' \
1339                $histfile > tmp
1340            \mv -f tmp $histfile
[4215]1341            contextfile=context_lmdz.xml
[4218]1342            sed -e 's@src="./file_def_histdayCOSP_lmdz.xml"@src="./file_def_histdayCOSPv2_lmdz.xml"@' \
1343                $contextfile > tmp
1344            \mv -f tmp $contextfile
1345            sed -e 's@src="./file_def_histmthCOSP_lmdz.xml"@src="./file_def_histmthCOSPv2_lmdz.xml"@' \
1346                $contextfile > tmp
1347            \mv -f tmp $contextfile
1348            sed -e 's@src="./file_def_histhfCOSP_lmdz.xml"@src="./file_def_histhfCOSPv2_lmdz.xml"@' \
1349                $contextfile > tmp
1350            \mv -f tmp $contextfile
[4215]1351            fieldfile=field_def_lmdz.xml
[4218]1352            sed -e 's@field_def_cosp1.xml@field_def_cospv2.xml@' $fieldfile \
1353                > tmp
1354            \mv -f tmp $fieldfile
[4215]1355        fi
[4210]1356
[4215]1357        cd ..
1358    fi
[4210]1359
[4215]1360    # Cas Bensh avec ecrad
1361    if [ "$rad" = "ecrad" ] ; then
1362        cd BENCH${grid_resolution}
1363        cp  ../DefLists/namelist_ecrad .
1364        cp -r ../libf/phylmd/ecrad/data .
1365        cd ..
1366    fi
[4210]1367
[4215]1368    # Adjusting bench physiq.def to radiative code chosen
1369    cd BENCH${grid_resolution}
[4218]1370    sed -e 's/iflag_rrtm=.*.$/iflag_rrtm='$iflag_rrtm'/' \
1371        -e 's/NSW=.*.$/NSW='$NSW'/' physiq.def > tmpdef
[4215]1372    \mv tmpdef physiq.def
1373    cd ..
[4210]1374
[4215]1375    cp $gcm BENCH${grid_resolution}/gcm.e
[4210]1376
[4215]1377    cd BENCH${grid_resolution}
1378    # On cree le fichier bench.sh au besoin
1379    # Dans le cas 48x36x39 le bench.sh existe deja en parallele
[4210]1380
[4215]1381    if [ "$grid_resolution" = "48x36x39" ] ; then
1382        echo On ne touche pas au bench.sh
1383        # But we have to adapt "run_local.sh" for $mpirun
1384        sed -e "s@mpirun@$mpirun@g" run_local.sh > tmp
1385        mv -f tmp run_local.sh
1386        chmod u=rwx run_local.sh
1387    elif [ "${parallel:0:3}" = "mpi" ] ; then
1388        # Lancement avec deux procs mpi et 2 openMP
1389        echo "export OMP_STACKSIZE=800M" > bench.sh
1390        if [ "${parallel:4:3}" = "omp" ] ; then
1391            echo "export OMP_NUM_THREADS=2" >> bench.sh
1392        fi
1393        if [ "$cosp" = "v1" -o "$cosp" = "v2" ] ; then
1394            if [ ${hostname:0:5} = jean- ] ; then
1395                chmod +x ../arch.env
1396                ../arch.env     
1397                echo "ulimit -s 2000000" >> bench.sh
1398            else
1399                echo "ulimit -s 200000" >> bench.sh
1400            fi 
1401        else
1402            echo "ulimit -s unlimited" >> bench.sh
1403        fi
1404        if [ ${hostname:0:5} = jean- ] ; then
1405            . ../arch/arch-${arch}.env
[4218]1406            echo "srun -n 2 -A $idris_acct@cpu gcm.e > listing  2>&1" \
1407                 >> bench.sh
[4215]1408        else
1409            echo "$mpirun -np 2 gcm.e > listing  2>&1" >> bench.sh
1410        fi
1411        # Add rebuild, using reb.sh if it is there
1412        echo 'if [ -f reb.sh ] ; then' >> bench.sh
[4218]1413        echo '  ./reb.sh histday ; ./reb.sh histmth ; ./reb.sh histhf ; ' \
1414             './reb.sh histins ; ./reb.sh stomate_history ; ' \
1415             './reb.sh sechiba_history ; ./reb.sh sechiba_out_2 ' >> bench.sh
[4215]1416        echo 'fi' >> bench.sh
1417    else
1418        echo "./gcm.e > listing  2>&1" > bench.sh
1419    fi
1420    # Getting orchidee stuff
1421    if [ $veget == 'CMIP6' ] ; then
1422        #echo 'myget 3DBenchs/BENCHorch11.tar.gz'
1423        #myget 3DBenchs/BENCHorch11.tar.gz
1424        #tar xvzf BENCHorch11.tar.gz
1425        echo 'myget 3DBenchs/BENCHCMIP6.tar.gz'
1426        myget 3DBenchs/BENCHCMIP6.tar.gz
1427        tar xvzf BENCHCMIP6.tar.gz
1428        sed -e "s:VEGET=n:VEGET=y:" config.def > tmp
1429        mv -f tmp config.def
1430        if [ "$with_xios" = "y" ] ; then
1431            cp ../../ORCHIDEE/src_xml/context_orchidee.xml .
[4218]1432            echo '<context id="orchidee" src="./context_orchidee.xml"/>' \
1433                 > add.tmp
[4215]1434            cp ../../ORCHIDEE/src_xml/field_def_orchidee.xml .
1435            cp ../../ORCHIDEE/src_xml/file_def_orchidee.xml .
1436            cp ../../ORCHIDEE/src_xml/file_def_input_orchidee.xml .
1437            if [ -f ../../ORCHIDEE/src_xml/context_input_orchidee.xml ] ; then
1438                cp ../../ORCHIDEE/src_xml/context_input_orchidee.xml .
[4218]1439                echo '<context id="orchidee" ' \
1440                     'src="./context_input_orchidee.xml"/>' >> add.tmp
[4215]1441            fi
1442            sed -e '/id="LMDZ"/r add.tmp' iodef.xml > tmp
1443            mv tmp iodef.xml
[4218]1444            sed -e'{/sechiba1/ s/enabled="_AUTO_"/type="one_file" enabled=".TRUE."/}' \
1445                file_def_orchidee.xml > tmp
1446            \mv -f tmp file_def_orchidee.xml
1447            sed -e 's@enabled="_AUTO_"@type="one_file" enabled=".FALSE."@' \
1448                file_def_orchidee.xml > tmp
1449            \mv -f tmp file_def_orchidee.xml
1450            sed -e 's@output_level="_AUTO_"@output_level="1"@' \
1451                file_def_orchidee.xml > tmp
1452            \mv -f tmp file_def_orchidee.xml
1453            sed -e 's@output_freq="_AUTO_"@output_freq="1d"@' \
1454                file_def_orchidee.xml > tmp
1455            \mv -f tmp file_def_orchidee.xml
1456            sed -e 's@compression_level="4"@compression_level="0"@' \
1457                file_def_orchidee.xml > tmp
1458            \mv -f tmp file_def_orchidee.xml
1459            sed -e 's@XIOS_ORCHIDEE_OK = n@XIOS_ORCHIDEE_OK = y@' \
1460                orchidee.def > tmp
1461            \mv -f tmp orchidee.def
[4215]1462        fi
1463    fi
[4220]1464
1465    if [[ -f ../arch.env ]]
1466    then
1467        source ../arch.env
1468    fi
1469
[4215]1470    echo EXECUTION DU BENCH
1471    set +e
1472    date ; ./bench.sh > out.bench 2>&1 ; date
1473    set -e
1474    tail listing
[4210]1475
1476
[4215]1477    echo '##########################################################'
1478    echo 'Simulation finished in' `pwd`
1479    echo 'You have compiled with:'
1480    cat ../compile.sh
1481    if [ $parallel = "none" ] ; then
1482        echo 'You may re-run it with : cd ' `pwd` ' ; gcm.e'
1483        echo 'or ./bench.sh'
1484    else
1485        echo 'You may re-run it with : '
1486        echo 'cd ' `pwd` '; ./bench.sh'
1487        #  echo 'ulimit -s unlimited'
1488        #  echo 'export OMP_NUM_THREADS=2'
1489        #  echo 'export OMP_STACKSIZE=800M'
1490        #  echo "$mpirun -np 2 gcm.e "
1491    fi
1492    echo '##########################################################'
[4210]1493
1494fi # bench
1495
1496
1497#################################################################
1498# Installation eventuelle du 1D
1499#################################################################
1500
1501if [ $SCM = 1 ] ; then
[4215]1502    cd $MODEL
1503    #wget http://www.lmd.jussieu.fr/~lmdz/Distrib/1D.tar.gz
1504    myget 1D/1D.tar.gz
[4286]1505    tar xf 1D.tar.gz
[4215]1506    cd 1D
1507    ./run.sh -rad $rad
[4210]1508fi
1509#set -vx
1510
1511#################################################################
1512# sauvegarde des options veget pour utilisation eventuelle tutorial_prod
1513#################################################################
1514cd $MODEL/modipsl/modeles
1515#echo surface_env file created in $MODEL
1516echo 'veget='$veget > surface_env
1517#opt_veget="-v $veget_version"
1518#echo 'opt_veget="'$opt_veget\" >> surface_env
1519echo 'opt_veget="'-v $veget_version\" >> surface_env
1520echo 'orchidee_rev='$orchidee_rev >> surface_env
1521echo 'suforch='$suff_orc >> surface_env
Note: See TracBrowser for help on using the repository browser.