source: BOL/script_install/install_lmdz.sh @ 4499

Last change on this file since 4499 was 4494, checked in by lguez, 20 months ago

Do not remove bin and lib for parallel compile

The lines that we remove in this commit appeared in
revision r3044. They do not seem useful since we run `makeorchidee_fcm
-clean afterwards. Now that lib also contains libnetcdf95.a`, we
would have to save libnetcdf95.a and put it back to lib, just as we
did for IOIPSL. It is simpler not to remove lib. (Note that bin is
empty at this point.) Then we do not create ioipsl.tar.

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