source: BOL/script_install/install.sh @ 1776

Last change on this file since 1776 was 1773, checked in by Ehouarn Millour, 13 years ago

Follow up on changes in makelmdz and makelmdz_fcm from rev. 1772
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
[1773]580sed -e "s/-l\${LIBPREFIX}parallel//g" \
581sed -e "s/-l\${LIBPREFIX}orglob//g" \
[1588]582    makelmdz_fcm.orig > makelmdz_fcm
[1710]583cp makelmdz makelmdz.orig
[1773]584sed -e "s/-l\${LIBPREFIX}parallel//g" \
585sed -e "s/-l\${LIBPREFIX}orglob//g" \
[1710]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.