source: BOL/script_install/install.sh @ 1761

Last change on this file since 1761 was 1731, checked in by Ehouarn Millour, 12 years ago

Update of "install.sh" script to make it work on Ada.
EM

File size: 22.6 KB
RevLine 
[1588]1#!/bin/bash
2
3###########################################################################
[1708]4# Author : Frédéric Hourdin/LMD/hourdin@lmd.jussieu.fr
[1588]5# Usage  : install.sh
6#
[1708]7# bash installation script of the LMDZ model on a Linux PC.
8# the model is downloaded in the following direcory tree
[1588]9# $MODEL/modipsl/modeles/...
[1708]10# using the "modipsl" infrastructure created by the "IPSL"
11# for coupled (atmosphere/ocean/vegetation/chemistry) climate modeling
12# activities.
13# Here we only download atmospheric (LMDZ) and vegetation (ORCHIDEE)
14# components.
[1588]15#
[1708]16# The sources of the models can be found in the "modeles" directory.
17# In the present case, LMDZ5, ORCHIDEE and IOIPSL (handling of input-outputs
18# using the NetCDF library.
[1588]19#
[1708]20# The script downloads various source files (including a version of NetCDF)
21# and utilities, compiles the model, and runs a test simulation in a
22# munimal configuration.
[1588]23#
[1708]24# Prerequisites : g95/pgf90/gfortran, ksh, wget , gunzip, tar, ...
[1588]25#
[1589]26# Modif 18/11/2011
[1708]27#    changes for option real 8.
28#      We comopile with -r8 (or equivalent) and -DNC_DOUBLE for the GCM
29#      but with -r4 for netcdf. Variable real must be set to
30#      r4 or r8 at the beginning of the script below.
[1589]31#
[1588]32###########################################################################
33
34echo '################################################################'
[1708]35echo  Choice of installation options
[1588]36echo '################################################################'
37
38
[1590]39#real=r4
[1589]40real=r8
41
[1708]42# WARNING !!!! For versions before october 2009, use
43# install.v2.sh instead of install.sh
[1588]44
[1708]45#version=20110921.trunk
[1693]46version=testing
47
[1588]48#Chemin pour placer le modele
49MODEL=./LMDZ$version
50
51getlmdzor=1
52netcdf=1   #  1 for automatic installation
53           #  0 for no installation
54           #  /.../../netcdf-4.0.1 if wanting to link with an already
55           #  compiled netcdf library (implies to check option compatibility)
56check_linux=1
57ioipsl=1
[1693]58veget=1
[1588]59bench=1
60pclinux=1
[1708]61compilo=gfortran # compilo=pgf90 or g95 or gfortran or ifort sur PC linux
[1588]62
[1693]63
64#####################################################################
65# Test for old gfortran compilers
66if [ $compilo = gfortran ] ; then
67   gfortranv=`gfortran --version | \
68   head -1 | awk ' { print $NF } ' | awk -F. ' { print $1 * 10 + $2 } '`
69   if [ $gfortranv -le 43 ] ; then
[1708]70       echo ERROR : Your gfortran compiler is too old
[1693]71       echo 'Please choose a new one (g95, ifort) and change the line'
72       echo compilo=xxx
73       echo in the install.sh script and rerun it
74       exit
75   fi
76fi
77#####################################################################
78
79
80
[1708]81## compile_with_fcm=1 : use makelmdz_fcm, possible a of version 20111103.trunk (LMDZ5/trunk rev 1578)
82## compile_with_fcm=0 : use makegcm
[1693]83compile_with_fcm=1
[1588]84
[1589]85OPTPREC=""
[1588]86echo '################################################################'
87echo  Choix des options de compilation
88echo '################################################################'
[1589]89
[1588]90if [ $compilo = g95 ] ; then
[1589]91   if [ $real = r8 ] ; then OPTPREC="-r8 -DNC_DOUBLE" ; fi
92   OPTIM='-i4 -O3'
[1588]93elif [ $compilo = gfortran ] ; then
[1589]94   if [ $real = r8 ] ; then OPTPREC="-fdefault-real-8 -DNC_DOUBLE" ; fi
95   OPTIM='-O3'
[1590]96elif [ $compilo = pgf90 ] ; then
97   if [ $real = r8 ] ; then OPTPREC="-r8 -DNC_DOUBLE" ; fi
[1588]98   OPTIM='-O2 -Munroll -Mnoframe -Mautoinline -Mcache_align'
[1590]99   # with pgf90, compile with fcm
100   compile_with_fcm=1
101else 
102   # ifort
103   if [ $real = r8 ] ; then OPTPREC="-real-size 64 -DNC_DOUBLE" ; fi
[1731]104   OPTIM="-O2 -fp-model strict -ip -align all "
[1590]105   # with ifort, compile with fcm
106   compile_with_fcm=1
[1588]107fi
[1589]108OPTIMGCM="$OPTIM $OPTPREC"
[1588]109
[1708]110# choose the resolution for the bench runs
111# grid_resolution= 32x24x11 or 48x36x19 for tests (test without ORCHIDEE)
[1588]112#                  96x71x19  standard configuration
113grid_resolution=48x36x19
114
115hostname=`hostname`
116
117##########################################################################
[1731]118# If installing on know machines such as IBM x3750 (Ada)
[1708]119# at IDRIS, don't check for available software and don"t install netcdf
[1731]120if [ $hostname = ada338 ] ; then
121  netcdf=0 # no need to recompile netcdf, alreday available
122  check_linux=0
123  pclinux=0
124  ioipsl=0 # no need to recompile ioipsl, already available
125  #netcdf="/smplocal/pub/NetCDF/4.1.3"
126  compilo="ifort"
127  fmod='module '
128  if [ $real = r8 ] ; then OPTPREC="-real-size 64 -DNC_DOUBLE" ; fi
129  OPTIM="-O2 -fp-model strict -ip -axAVX,SSE4.2 -align all "
130  OPTIMGCM="$OPTIM $OPTPREC"
[1588]131fi
132##########################################################################
133
134
135mkdir -p $MODEL
136echo $MODEL
[1708]137MODEL=`( cd $MODEL ; pwd )` # to get absolute path, if necessary
[1588]138
139
140
[1708]141# Option -fendian=big is only to be used with ARPEGE1D.
142# The -r8 should probably be avoided if running on 32 bit machines
143# Option r8 is not mandatory and generates larger executables.
144# It is however mandatory if using ARPEGE1D
145# Better optimization options might be a better choice (e.g. -O3)
[1588]146
147
148echo '################################################################'
149if [ "$check_linux" = 1 ] ; then
[1708]150echo   Check if required software is available
[1588]151echo '################################################################'
152
153#### Ehouarn: test if ksh and/or bash are available
154use_shell="ksh" # default: use ksh
155if [ "`which ksh`" = "" ] ; then
[1708]156  echo "no ksh ... we will use bash"
[1588]157  use_shell="bash"
158  if [ "`which bash`" = "" ] ; then
[1708]159    echo "ksh (or bash) needed!! Install it!"
[1588]160  fi
161fi
162
163
164for logiciel in csh wget tar gzip make $compilo gcc ; do
165if [ "`which $logiciel`" = "" ] ; then
[1708]166echo You must first install $logiciel on your system
[1588]167exit
168fi
169done
170
171if [ $pclinux = 1 ] ; then
172cd $MODEL
173cat <<eod> tt.f90
174print*,'coucou'
175end
176eod
[1708]177$compilo tt.f90 -o a.out
[1588]178./a.out >| tt
179if [ "`cat tt | sed -e 's/ //g' `" != "coucou" ] ; then
[1708]180echo problem installing with compiler $compilo ; exit ; fi
[1588]181\rm tt a.out tt.f90
182fi
183fi
184
185###########################################################################
186
187
188
189if [ $getlmdzor = 1 ] ; then
190echo '##########################################################'
[1708]191echo  Download a slightly modified version of  LMDZ
[1588]192echo '##########################################################'
193cd $MODEL
194wget http://www.lmd.jussieu.fr/~lmdz/DistribG95/modipsl.$version.tar.gz
195gunzip modipsl.$version.tar.gz
196tar xvf modipsl.$version.tar
197\rm modipsl.$version.tar
198
[1708]199# We download LMDZ and make some modifications to make it
200#compatible with $compilo
201# and we use an old stable but robust and well tested version of ORCHIDEE
202# That version of ORCHIDEE can be obtained using
[1588]203# wget http://www.lmd.jussieu.fr/~lmdz/DistribG95/getlmdzor.x
204fi
205
206echo OK1
207
208if [ $netcdf = 1 ] ; then
209echo '##########################################################'
[1708]210echo Compiling the Netcdf library
[1588]211echo '##########################################################'
212cd $MODEL
213wget http://www.lmd.jussieu.fr/~lmdz/DistribG95/netcdf-4.0.1.tar.gz
214gunzip netcdf-4.0.1.tar.gz
215tar xvf netcdf-4.0.1.tar
216\rm -f netcdf-4.0.1.tar
217
218cd netcdf-4.0.1
219
[1589]220OPTIMNC=$OPTIM
[1588]221if [ $compilo = g95 ] ; then
[1708]222# Set the appropriate compilation options
[1588]223   export FC=g95
224   export F90=g95
[1589]225   export F90FLAGS=" -cpp -ffree-form $OPTIMNC"
226   export FFLAGS=" -cpp $OPTIMNC"
[1588]227   export CPPFLAGS=-Df2cFortran
228   export CC=gcc
229   export CXX=g++
230elif [ $compilo = gfortran ] ; then
231   export FC=gfortran
232   export F90=gfortran
[1589]233   export F90FLAGS=" -ffree-form $OPTIMNC"
234   export FFLAGS=" $OPTIMNC"
[1588]235   export CPPFLAGS=
236   export CC=gcc
237   export CXX=g++
238elif [ $compilo = pgf90 ] ; then
239   export CPPFLAGS="-DNDEBUG -DpgiFortran"
240   export CC=pgcc
241   export CFLAGS="-Msignextend"
242   export CXX=pgCC
243   export CXXFLAGS="-Msignextend"
244   export FC=pgf90
[1589]245   export FFLAGS="$OPTIMNC"
[1588]246   export F90=pgf90
[1589]247   export F90FLAGS="$OPTIMNC"
[1590]248elif [ $compilo = ifort ] ; then
249   export CPP="icc -E"
250   export F77=ifort
251   export FFLAGS="-O2 -ip -fpic -mcmodel=large"
252   export F90=ifort
253   export FCFLAGS="-O2 -ip -fpic -mcmodel=large"
254   export CC=icc
255   export CFLAGS="-O2 -ip -fpic -mcmodel=large"
256   export CXX=icpc
257   export CXXFLAGS="-O2 -ip -fpic -mcmodel=large"
[1588]258else
[1708]259   echo unexpected compiler $compilo ; exit
[1588]260fi
261## end of if [ $netcdf = 1 ]
[1708]262#cd src
[1588]263
264### Correction d'un petit probleme de netcdf
265##sed -e '83s/^$/\#define f2cFortran/' cfortran.h >| tmp ; \mv tmp cfortran.h
266
267# Compilation
268# Modif du 6 juillet 2009. Plantage quand on essaie de compiler netcdf avec
269# gcc plutôt que c++
270##sed -e 's/ c++/ gcc/g' configure >| tmp ; mv -f tmp configure ; chmod +x configure
271localdir=`pwd -P`
272./configure --prefix=$localdir
273make check
274make install
[1731]275fi # of if [ $netcdf = 1 ]
[1588]276
277echo OK2 ioipsl=$ioipsl
278echo '##########################################################'
[1731]279echo 'Installing MODIPSL, the installation package manager for the '
280echo 'IPSL models and tools'
[1588]281echo '##########################################################'
282
283if [ $netcdf = 0 -o $netcdf = 1 ] ; then
284ncdfdir=$MODEL/netcdf-4.0.1
285else
286ncdfdir=$netcdf
287fi
288
289if [ $ioipsl = 1 ] ; then
[1731]290  cd $MODEL/modipsl
291  \rm -r lib/*
[1588]292
[1731]293  cd util
[1588]294
[1731]295  if [ $compilo = pgf90 ] ; then 
296    fmod='module '
297  elif [ $compilo = g95 ] ; then
298    fmod='fmod='
299  elif [ $compilo = ifort ] ; then
300    fmod='module '
301  else # gfortran
302    fmod='I '
303  fi
304  cp AA_make.gdef AA_make.orig
305  sed -e 's/^\#.*.g95.*.\#.*.$/\#/' AA_make.gdef > tmp
306  sed -e "s:F_L = g95:F_L = $compilo:" -e "s:F_C = g95 -c:F_C = $compilo -c": \
307  -e 's/g95.*.w_w.*.(F_D)/g95      w_w = '"$OPTIMGCM"'/' \
308  -e 's:g95.*.NCDF_INC.*.$:g95      NCDF_INC= '"$ncdfdir"'/include:' \
309  -e 's:g95.*.NCDF_LIB.*.$:g95      NCDF_LIB= -L'"$ncdfdir"'/lib -lnetcdf:' \
310  -e "s:-fmod=:-$fmod:" -e 's/-fno-second-underscore//' \
311  -e 's:#-Q- g95      M_K = gmake:#-Q- g95      M_K = make:' \
312  tmp >| AA_make.gdef
[1588]313
314
[1731]315  if [ "$use_shell" = "ksh" ] ; then
316    if [ "$pclinux" = 1 ] ; then
317       ./ins_make -t g95 # We use lines for g95 even for the other compilers
318    fi
319  else # bash
320    sed -e s:/bin/ksh:/bin/bash:g ins_make > ins_make.bash
321    chmod u=rwx ins_make.bash
322    if [ "$pclinux" = 1 ] ; then
323    ./ins_make.bash -t g95 # We use lines for g95 even for the other compilers
324    else
325    ./ins_make.bash
326    fi
327  fi # of if [ "$use_shell" = "ksh" ]
328
329  echo '##########################################################'
330  echo 'Compiling IOIPSL, the interface library with Netcdf'
331  echo '##########################################################'
332
333  cd $MODEL/modipsl/modeles/IOIPSL/src
334  if [ "$use_shell" = "bash" ] ; then
335    cp Makefile Makefile.ksh
336    sed -e s:/bin/ksh:/bin/bash:g Makefile.ksh > Makefile
[1588]337  fi
338  if [ "$pclinux" = 1 ] ; then
[1731]339    # Build IOIPSL modules and library
340    make clean
341    make
342    if [ $compilo = gfortran ] ; then # copy module files to lib
343      cp -f *.mod ../../../lib
344    fi
345    # Build IOIPSL tools (ie: "rebuild", if present)
346    if [ -f $MODEL/modipsl/modeles/IOIPSL/tools/rebuild ] ; then
347      cd $MODEL/modipsl/modeles/IOIPSL/tools
348      # adapt Makefile & rebuild script if in bash
349      if [ "$use_shell" = "bash" ] ; then
350        cp Makefile Makefile.ksh
351        sed -e s:/bin/ksh:/bin/bash:g Makefile.ksh > Makefile
352        cp rebuild rebuild.ksh
353        sed -e 's:/bin/ksh:/bin/bash:g' \
354            -e 's:print -u2:echo:g' \
355            -e 's:print:echo:g' rebuild.ksh > rebuild
356      fi
357      make clean
358      make
359    fi
360  fi # of if [ "$pclinux" = 1 ]
[1588]361
[1731]362else # of if [ $ioipsl = 1 ]
363  if [ $hostname = ada338 ] ; then
364    cd $MODEL/modipsl
365    cd util
[1588]366
[1731]367    cp AA_make.gdef AA_make.orig
368    sed -e 's/^\#.*.g95.*.\#.*.$/\#/' AA_make.gdef > tmp
369    sed -e "s:F_L = g95:F_L = $compilo:" -e "s:F_C = g95 -c:F_C = $compilo -c": \
370    -e 's/g95.*.w_w.*.(F_D)/g95      w_w = '"$OPTIMGCM"'/' \
371    -e 's:g95.*.NCDF_INC.*.$:g95      NCDF_INC= -I/smplocal/pub/HDF5/1.8.9/seq/include -I/smplocal/pub/NetCDF/4.1.3/include:' \
372    -e 's:g95.*.NCDF_LIB.*.$:g95      NCDF_LIB= -L/smplocal/pub/NetCDF/4.1.3/lib -lnetcdff -lnetcdf:' \
373    -e "s:-fmod=:-$fmod:" -e 's/-fno-second-underscore//' \
374    -e 's:#-Q- g95      M_K = gmake:#-Q- g95      M_K = make:' \
375    tmp >| AA_make.gdef
376
377    ./ins_make -t g95 # We use lines for g95 even for the other compilers
378
379    # on Ada, IOIPSL is already installed in ~rpsl035/IOIPSL_PLUS
380    # so link it to current settings
381    cd $MODEL/modipsl/modeles/
382    \rm -r -f IOIPSL
383    ln -s ~rpsl035/IOIPSL_PLUS IOIPSL
384    cd ..
385    ln -s ~rpsl035/IOIPSL_PLUS/modipsl/bin/* bin/
386    ln -s ~rpsl035/IOIPSL_PLUS/modipsl/lib/* lib/
387
388  fi # of if [ $hostname = ada338 ]
389fi # of if [ $ioipsl = 1 ]
390
391if [ "$veget" = 1 ] ; then
392  echo '########################################################'
393  echo 'Compiling ORCHIDEE, the continental surfaces model '
394  echo '########################################################'
395  cd $MODEL/modipsl/modeles/ORCHIDEE
396  cd src_parameters
397  # A trick to compile ORCHIDEE depending on if we are using real*4 or real*8
398
399  \cp reqdprec.$real reqdprec.f90
[1588]400  make
401  if [ $compilo = gfortran ] ; then # copy module files to lib
402    cp -f *.mod ../../../lib
403  fi
[1731]404  cd ../src_stomate
405  make
406  if [ $compilo = gfortran ] ; then # copy module files to lib
407    cp -f *.mod ../../../lib
[1621]408  fi
[1731]409  cd ../src_sechiba
410  make
411  if [ $compilo = gfortran ] ; then # copy module files to lib
412    cp -f *.mod ../../../lib
413  fi
414fi # of if [ "$veget" = 1 ]
[1588]415
416# Ehouarn: it may be directory LMDZ4 or LMDZ5 depending on tar file...
417if [[ -d $MODEL/modipsl/modeles/LMDZ4 ]] ; then
418  echo '##########################################################'
[1731]419  echo 'Compiling LMDZ4'
[1588]420  echo '##########################################################'
421  cd $MODEL/modipsl/modeles/LMDZ4
422else
423  if [[ -d $MODEL/modipsl/modeles/LMDZ5 ]] ; then
424    echo '##########################################################'
[1708]425    echo 'Compiling LMDZ5'
[1588]426    echo '##########################################################'
427    cd $MODEL/modipsl/modeles/LMDZ5
428  else
429    echo "ERROR: No LMDZ4 (or LMDZ5) directory !!!"
430    exit
431  fi
432fi
433
[1708]434##########################################################
435# Traitement momentanne a cause d'un bug dans makegcm
436cp create_make_gcm create_make_gcm.orig
437nl=`sed -n -e /PROGRAM/= create_make_gcm.orig | tail -1`
438sed -e "$nl s/      PROGRA/PROGRA/" create_make_gcm.orig >| create_make_gcm
439
440#mv -f tmp crea
[1588]441if [ "$pclinux" = 1 ] ; then
442  if [ $compilo = gfortran ] ; then
443sed \
444-e 's:\#setenv NCDFINC.*.$:setenv NCDFINC '"$ncdfdir"'/include:' \
445-e 's:\#setenv NCDFLIB.*.$:setenv NCDFLIB '"$ncdfdir"'/lib:' \
446-e 's:setenv NCDFINC.*.$:setenv NCDFINC '"$ncdfdir"'/include:' \
447-e 's:setenv NCDFLIB.*.$:setenv NCDFLIB '"$ncdfdir"'/lib:' \
448-e 's/set FC_LINUX.*.$/set FC_LINUX='$compilo'/' \
449-e 's/g95/gfortran/g' \
450-e 's/-fmod=/-I/g' \
451-e 's/-fno-second-underscore//' -e 's/-fstatic//' \
452-e 's/-lparallel//' \
[1708]453-e 's/-lnetcdff//g' \
[1588]454-e 's/-lorglob//' \
455-e 's/-ffixed-form//' -e 's/-ffree-form//' \
[1589]456-e 's/set OPT_LINUX.*.$/set OPT_LINUX=\"'"$OPTIMGCM"\"'/' makegcm.orig >| makegcm
[1590]457  elif [ $compilo = ifort ] ; then
458sed \
459-e 's:\#setenv NCDFINC.*.$:setenv NCDFINC '"$ncdfdir"'/include:' \
460-e 's:\#setenv NCDFLIB.*.$:setenv NCDFLIB '"$ncdfdir"'/lib:' \
461-e 's:setenv NCDFINC.*.$:setenv NCDFINC '"$ncdfdir"'/include:' \
462-e 's:setenv NCDFLIB.*.$:setenv NCDFLIB '"$ncdfdir"'/lib:' \
463-e 's/set FC_LINUX.*.$/set FC_LINUX='$compilo'/' \
464-e 's/g95/ifort/g' \
465-e 's/-fmod=/-module /g' \
466-e 's/-fno-second-underscore//' -e 's/-fstatic//' \
467-e 's/-lparallel//' \
[1708]468-e 's/-lnetcdff//g' \
[1590]469-e 's/-lorglob//' \
470-e 's/-ffixed-form//' -e 's/-ffree-form//' \
471-e 's/set OPT_LINUX.*.$/set OPT_LINUX=\"'"$OPTIMGCM"\"'/' makegcm.orig >| makegcm
[1588]472  else # g95 or pgf90
473sed \
474-e 's:\#setenv NCDFINC.*.$:setenv NCDFINC '"$ncdfdir"'/include:' \
475-e 's:\#setenv NCDFLIB.*.$:setenv NCDFLIB '"$ncdfdir"'/lib:' \
476-e 's:setenv NCDFINC.*.$:setenv NCDFINC '"$ncdfdir"'/include:' \
477-e 's:setenv NCDFLIB.*.$:setenv NCDFLIB '"$ncdfdir"'/lib:' \
478-e 's/set FC_LINUX.*.$/set FC_LINUX='$compilo'/' \
479-e 's/-fno-second-underscore//' -e 's/-fstatic//' \
480-e 's/-lparallel//' \
[1708]481-e 's/-lnetcdff//g' \
[1588]482-e 's/-lorglob//' \
483-e 's/-ffixed-form//' -e 's/-ffree-form//' \
[1589]484-e 's/set OPT_LINUX.*.$/set OPT_LINUX=\"'"$OPTIMGCM"\"'/' makegcm.orig >| makegcm
[1588]485  fi
486else
487sed \
488-e 's/-lparallel//' \
489-e 's/-lorglob//' \
490-e 's/-lsxorglob//' \
491-e 's/-lsxparallel//' \
492-e 's/-lsxioipsl/-lioipsl/g' \
493makegcm.orig >| makegcm
494fi
495
496chmod +x makegcm
497
498###########################################################
[1708]499# For those who want to use fcm to compile via :
[1588]500#  makelmdz_fcm -arch local .....
501############################################################
502
503if [ "$pclinux" = 1 ] ; then
[1708]504# create local 'arch' files (if on Linux PC):
[1588]505cd arch
[1708]506# arch-local.path file
[1590]507echo "NETCDF_LIBDIR=\"-L${ncdfdir}/lib -lnetcdf\"" > arch-local.path
508echo "NETCDF_INCDIR=-I${ncdfdir}/include" >> arch-local.path
[1588]509echo 'IOIPSL_INCDIR=$LMDGCM/../../lib' >> arch-local.path
510echo 'IOIPSL_LIBDIR=$LMDGCM/../../lib' >> arch-local.path
511echo 'ORCH_INCDIR=$LMDGCM/../../lib' >> arch-local.path
512echo 'ORCH_LIBDIR=$LMDGCM/../../lib' >> arch-local.path
[1708]513# arch-local.fcm file (adapted from arch-linux-32bit.fcm)
[1588]514if [ $compilo = g95 ] ; then
515sed -e s:"%COMPILER            pgf95":"%COMPILER            g95":1 \
516    -e s:"%LINK                pgf95":"%LINK                g95":1 \
[1590]517    -e s:"%PROD_FFLAGS         -fast":"%PROD_FFLAGS         $OPTIM":1 \
[1709]518    -e s:"%DEV_FFLAGS          -g -O1":"%DEV_FFLAGS          -g -O1 -Wall":1 \
519    -e s:"%DEBUG_FFLAGS        -g -O0 -Kieee -Ktrap=fp -Mbounds":"%DEBUG_FFLAGS        -g -O0 -Wall -ftrace=full -fbounds-check -freal=nan":1 \
[1590]520    -e s:"%BASE_FFLAGS         ":"%BASE_FFLAGS         $OPTPREC":1 \
[1588]521   arch-linux-32bit.fcm > arch-local.fcm
[1589]522   if [ $real = r8 ] ; then
[1588]523     sed -e s:"%FPP_DEF             ":"%FPP_DEF             NC_DOUBLE":1 \
524     arch-local.fcm > arch-local.fcm.new
525     mv -f arch-local.fcm.new arch-local.fcm
526   fi
527elif [ $compilo = gfortran ] ; then
528sed -e s:"%COMPILER            pgf95":"%COMPILER            gfortran":1 \
529    -e s:"%LINK                pgf95":"%LINK                gfortran":1 \
[1590]530    -e s:"%PROD_FFLAGS         -fast":"%PROD_FFLAGS         $OPTIM":1 \
[1709]531    -e s:"%DEV_FFLAGS          -g -O1":"%DEV_FFLAGS          -Wall -fbounds-check":1 \
532    -e s:"%DEBUG_FFLAGS        -g -O0 -Kieee -Ktrap=fp -Mbounds":"%DEBUG_FFLAGS        -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all":1 \
[1590]533    -e s:"%BASE_FFLAGS         ":"%BASE_FFLAGS         $OPTPREC":1 \
[1588]534   arch-linux-32bit.fcm > arch-local.fcm
[1589]535   if [ $real = r8 ] ; then
[1588]536     sed -e s:"%FPP_DEF             ":"%FPP_DEF             NC_DOUBLE":1 \
537     arch-local.fcm > arch-local.fcm.new
538     mv -f arch-local.fcm.new arch-local.fcm
539   fi
540elif [ $compilo = pgf90 ] ; then
541sed -e s:"-Wl,-Bstatic -L/usr/lib/gcc-lib/i386-linux/2.95.2":" ":1 \
[1590]542    -e s:"%PROD_FFLAGS         -fast":"%PROD_FFLAGS         $OPTIM":1 \
543    -e s:"%BASE_FFLAGS         ":"%BASE_FFLAGS         $OPTPREC":1 \
[1588]544   arch-linux-32bit.fcm > arch-local.fcm
[1590]545   if [ $real = r8 ] ; then
[1588]546     sed -e s:"%FPP_DEF             ":"%FPP_DEF             NC_DOUBLE":1 \
547     arch-local.fcm > arch-local.fcm.new
548     mv -f arch-local.fcm.new arch-local.fcm
549   fi
[1590]550elif [ $compilo = ifort ] ; then
551sed -e s:"%COMPILER            pgf95":"%COMPILER            ifort":1 \
552    -e s:"%LINK                pgf95":"%LINK                ifort":1 \
553    -e s:"-Wl,-Bstatic -L/usr/lib/gcc-lib/i386-linux/2.95.2":" ":1 \
554    -e s:"%PROD_FFLAGS         -fast":"%PROD_FFLAGS         $OPTIM":1 \
555    -e s:"%BASE_FFLAGS         ":"%BASE_FFLAGS         $OPTPREC":1 \
[1709]556    -e s:"%DEV_FFLAGS          -g -O1":"%DEV_FFLAGS          -p -g -O2 -traceback -fp-stack-check -ftrapuv -check":1 \
[1590]557    -e s:"%DEBUG_FFLAGS        -g -O0 -Kieee -Ktrap=fp -Mbounds":"%DEBUG_FFLAGS        -g -no-ftz -traceback -ftrapuv -fp-stack-check -check":1 \
558   arch-linux-32bit.fcm > arch-local.fcm
559   if [ $real = r8 ] ; then
560     sed -e s:"%FPP_DEF             ":"%FPP_DEF             NC_DOUBLE":1 \
561     arch-local.fcm > arch-local.fcm.new
562     mv -f arch-local.fcm.new arch-local.fcm
563   fi
[1588]564else
[1708]565   echo Unexpected compiler $compilo ; exit
[1588]566fi # of if [ $compilo = g95 ] elif [ $compilo = pgf90 ]
567cd ..
[1708]568### Adapt "bld.cfg" (add the shell):
[1588]569whereisthatshell=$(which ${use_shell})
570echo "bld::tool::SHELL   $whereisthatshell" >> bld.cfg
571
[1731]572fi # of if [ "$pclinux" = 1 ]
573
574
575cd $MODEL/modipsl/modeles/LMDZ?
576
[1710]577### Modify makelmdz_fcm and makelmdz to use ORCHIDEE in the bench:
[1708]578### remove liborglob.a and libparallel.a
[1588]579cp makelmdz_fcm makelmdz_fcm.orig
580sed -e "s/-l\${LIBPREFIX}parallel//" \
581sed -e "s/-l\${LIBPREFIX}orglob//" \
582    makelmdz_fcm.orig > makelmdz_fcm
[1710]583cp makelmdz makelmdz.orig
584sed -e "s/-l\${LIBPREFIX}parallel//" \
585sed -e "s/-l\${LIBPREFIX}orglob//" \
586    makelmdz.orig > makelmdz
[1588]587
588
589##################################################################
[1708]590# Compile LMDZ
[1588]591##################################################################
592ok_veget=false
[1731]593if [ "$veget" = 1 ] ; then $ok_veget = true ; fi
[1588]594if [ $compile_with_fcm = 1 ] ; then
[1708]595# Compile with makelmdz_fcm
[1731]596   if [ "$pclinux" = 1 ] ; then
[1588]597        ./makelmdz_fcm -d ${grid_resolution} -arch local -v $ok_veget gcm
[1731]598   else
599   # we are on Ada
600        ./makelmdz_fcm -d ${grid_resolution} -arch X64_ADA -v $ok_veget gcm
601   fi
[1588]602else
[1708]603# Comple with makegcm:
[1590]604#       3 times! because some dependecies are not well resolved with makegcm
[1588]605        ./makegcm -d ${grid_resolution} -v $ok_veget gcm
606        ./makegcm -d ${grid_resolution} -v $ok_veget gcm
607        ./makegcm -d ${grid_resolution} -v $ok_veget gcm
608fi
609
[1731]610if [ -f gcm.e ] || [ -f bin/gcm_${grid_resolution}_phylmd_seq_orch.e ] || [ -f bin/gcm_${grid_resolution}_phylmd_seq.e ] ; then
[1588]611echo '##########################################################'
[1731]612echo 'Compilation successfull !! '
[1588]613echo '##########################################################'
614else
[1731]615echo 'Compilation failed !!'
[1588]616exit
617fi
618
619##################################################################
[1708]620# Below, we run a benchmark test (if bench=0)
[1588]621##################################################################
622if [ $bench = 0 ] ; then
623                exit
624fi
625
626echo '##########################################################'
[1731]627echo ' Running a test run '
[1588]628echo '##########################################################'
629
630\rm -r BENCH${grid_resolution}
631bench=bench_lmdz_${grid_resolution}
632wget http://www.lmd.jussieu.fr/~lmdz/DistribG95/$bench.tar.gz
633gunzip $bench.tar.gz
634tar xvf $bench.tar
635
636if [ -f gcm.e ] ; then 
637    cp gcm.e BENCH${grid_resolution}/
638elif [ -f bin/gcm_${grid_resolution}_phylmd_seq_orch.e ] ; then
639    cp bin/gcm_${grid_resolution}_phylmd_seq_orch.e  BENCH${grid_resolution}/gcm.e
640elif [ -f bin/gcm_${grid_resolution}_phylmd_seq.e ] ; then
641    cp bin/gcm_${grid_resolution}_phylmd_seq.e  BENCH${grid_resolution}/gcm.e
642else
643    echo "No gcm.e found"
644    exit
645fi
646
647cd BENCH${grid_resolution}
648./bench.sh > bench.out  2>&1
649
650echo '##########################################################'
[1708]651echo ' Bench results '
[1588]652echo '##########################################################'
653
654cat ./bench.out
655
656echo '##########################################################'
[1708]657echo 'Simulation finished in' `pwd`
658echo 'You may re-run it with : cd ' `pwd` ' ; gcm.e'
659echo 'or ./bench.sh'
[1588]660echo '##########################################################'
661
Note: See TracBrowser for help on using the repository browser.