source: LMDZ5/trunk/makelmdz_fcm @ 2087

Last change on this file since 2087 was 2084, checked in by Ehouarn Millour, 10 years ago

Small cosmetic change in makelmdz_fcm, use an empty dir strategy for optional packages rather than overwriting the bld.cfg file (causes issues when the later is a symbolic link).
EM

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 14.8 KB
RevLine 
[1279]1#!/bin/bash
2# $Id: makelmdz_fcm 2084 2014-07-09 15:11:19Z fhourdin $
3# This is a script in Bash.
4
[1140]5# FH : on ne crée plus le fichier arch.mk qui est supposé exister par
[783]6# FH : ailleurs.
[1140]7# FH : ulterieurement, ce fichier sera pré-existant pour une série
8# FH : de configurations en versions optimisées et debug qui seront
9# FH : liés (ln -s) avec arch.mk en fonction de l'architecture.
10# FH : Pour le moment, cette version est en test et on peut créer les
11# FH : arch.mk en lançant une première fois makegcm.
[783]12#
[1279]13##set -x
[783]14########################################################################
15# options par defaut pour la commande make
16########################################################################
17
[1279]18dim="96x72x19"
19physique=lmd
20filtre=filtrez
21grille=reg
22couple=false
23veget=false
[1865]24sisvat=false
[1990]25rrtm=false
[1279]26chimie=false
27parallel=none
[1680]28paramem="par"
[1279]29compil_mod=prod
30io=ioipsl
31LIBPREFIX=""
32cosp=false
[1802]33job=1
34full=''
[783]35
[1279]36LMDGCM=`/bin/pwd`
37LIBOGCM=$LMDGCM/libo
38LIBFGCM=$LMDGCM/libf
[2084]39# path for optional packages, but default set to ".void_dir"
40RRTM_PATH=$LMDGCM/.void_dir
41SISVAT_PATH=$LMDGCM/.void_dir
[1327]42COSP_PATH=$LMDGCM/.void_dir
[1578]43fcm_path=$LMDGCM/tools/fcm/bin
[783]44
45########################################################################
46#  Quelques initialisations de variables du shell.
47########################################################################
48
[1279]49CPP_KEY="" 
50INCLUDE=""
51LIB=""
52adjnt=""
53COMPIL_FFLAGS="%PROD_FFLAGS"
54PARA_FFLAGS=""
55PARA_LD=""
56EXT_SRC=""
[783]57
58########################################################################
59# lecture des options de mymake
60########################################################################
61
[1279]62while (($# > 0))
63  do
64  case $1 in
65      "-h") cat <<fin
[783]66Usage :
[1772]67makelmdz_fcm [options] -arch nom_arch exec
68[-h]                       : brief help
69[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
70[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
71[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug
[1965]72[-c false/MPI1/OMCT]       : coupling with ocean model : MPI1/OMCT/false (default: false)
[1772]73[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
74          false       : no vegetation model
75          orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)
76          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
77          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
78[-chimie INCA/false]       : with INCA chemistry model or without (default: false)
79[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
80[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
81[-io IO]                   : Input/Output library (default: ioipsl)
82[-include INCLUDES]        : extra include path to add
83[-cpp CPP_KEY]             : additional preprocessing definitions
84[-adjnt]                   : adjoint model, not operational ...
85[-mem]                     : reduced memory dynamics (if in parallel mode)
86[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
87[-link LINKS]              : additional links with other libraries
[1802]88[-j n]                     : active parallel compiling on ntask
89[-full]                    : full recompiling
[1772]90[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
91[-ext_src path]            : path to an additional set of routines to compile with the model
92 -arch nom_arch            : target architecture
93 exec                      : executable to build
[783]94fin
[1279]95          exit;;
[783]96
[1279]97      "-d")
98          dim=$2 ; shift ; shift ;;
99     
100      "-p")
101          physique="$2" ;  shift ; shift ;;
[783]102
[1279]103      "-g")
104          grille="$2" ; shift ; shift ;;
[783]105
[1279]106      "-c")
107          couple="$2" ; shift ; shift ;;
[783]108
[1279]109      "-prod")
110          compil_mod="prod" ; shift ;;
[1002]111
[1279]112      "-dev")
113          compil_mod="dev" ; shift ;;
[1002]114
[1279]115      "-debug")
116          compil_mod="debug" ; shift ;;
[1002]117
[1279]118      "-io")
119          io="$2" ; shift ; shift ;;
[783]120
[1279]121      "-v")
122          veget="$2" ; shift ; shift ;;
[783]123
[1865]124      "-sisvat")
125          sisvat="$2" ; shift ; shift ;;
126
[1990]127      "-rrtm")
128          rrtm="$2" ; shift ; shift ;;
129
[1279]130      "-chimie")
131          chimie="$2" ; shift ; shift ;;
[783]132
[1279]133      "-parallel")
134          parallel="$2" ; shift ; shift ;;
135     
136      "-include")
137          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
[783]138
[1279]139      "-cpp")
140          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
[1132]141
[1279]142      "-adjnt")
[1772]143          echo "not operational ... work to be done here ";exit
[1279]144          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
145          optim="$optim -Dadj" ; shift ;;
[783]146
[1279]147      "-cosp")
148          cosp="$2" ; shift ; shift ;;
[1680]149     
150      "-mem")
151          paramem="mem" ; shift ;;
[783]152
[1279]153      "-filtre")
154          filtre=$2 ; shift ; shift ;;
[783]155
[1279]156      "-link")
157          LIB="$LIB $2" ; shift ; shift ;;
[1136]158
[1279]159      "-fcm_path")
160          fcm_path=$2 ; shift ; shift ;;
[783]161
[1279]162      "-ext_src")
163          EXT_SRC=$2 ; shift ; shift ;;
[1802]164      "-j")
165          job=$2 ; shift ; shift ;;
166      "-full")
167          full="-full" ; shift ;;
[783]168
[1279]169      "-arch")
170          arch=$2 ; shift ; shift ;;
[783]171
[1279]172      *)
173          code="$1" ; shift ;;
174  esac
175done
176
[1136]177###############################################################
[1755]178# path to fcm
[1136]179###############################################################
[1755]180# handle case when provided path to fcm was given as a relative
181# path (from makelmdz_fcm script directory) and not an absolute path
182if [[ ${fcm_path:0:1} != "/" ]] ; then
183  # prepend with makelmdz_fcm location
184  fcm_path=$(cd $(dirname $0) ; pwd)"/"${fcm_path}
185fi
[783]186
[1757]187# add fcm_path to PATH
188export PATH=${fcm_path}:${PATH}
189
[1755]190echo "Path to fcm:"
191echo ${fcm_path}
[1136]192
[783]193###############################################################
[1140]194# lecture des chemins propres à l'architecture de la machine #
[783]195###############################################################
[1279]196rm -f .void_file
197echo > .void_file
[1327]198rm -rf .void_dir
199mkdir .void_dir
[1279]200rm -f arch.path
201ln -s arch/arch-${arch}.path ./arch.path
[783]202source arch.path
203
204########################################################################
205# Definition des clefs CPP, des chemins des includes et modules
206#  et des libraries
207########################################################################
208
[1279]209if [[ "$compil_mod" == "prod" ]]
210then
211  COMPIL_FFLAGS="%PROD_FFLAGS"
212elif [[ "$compil_mod" == "dev" ]]
213then
214  COMPIL_FFLAGS="%DEV_FFLAGS"
215elif [[ "$compil_mod" == "debug" ]]
216then
217  COMPIL_FFLAGS="%DEBUG_FFLAGS"
218fi
[783]219
[1279]220if [[ "$physique" != "nophys" ]]
221then
[1615]222   #We'll use some physics
223   CPP_KEY="$CPP_KEY CPP_PHYS"
224   if [[ "${physique:0:3}" == "lmd" ]]
225   then
226   #For lmd physics, default planet type is Earth
[1279]227   CPP_KEY="$CPP_KEY CPP_EARTH"
[1615]228   fi
[1279]229fi
[783]230
[1279]231if [[ "$chimie" == "INCA" ]]
232then
233   CPP_KEY="$CPP_KEY INCA"
234   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
235   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
236fi
[783]237
[1279]238if [[ "$couple" != "false" ]]
239then
[1965]240    if [[ "$couple" == "MPI1" ]]
241    then
242        CPP_KEY="$CPP_KEY CPP_COUPLE"
243        export OASIS_INCDIR=$LMDGCM/../../prism/X64/build/lib/psmile.MPI1
244        export OASIS_LIBDIR=$LMDGCM/../../prism/X64/lib
245        INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
246        LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.MPI1 -lmpp_io"
247    else
248        CPP_KEY="$CPP_KEY CPP_COUPLE CPP_OMCT"
249        INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
250        LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.MPI1 -lscrip -lmct -lmpeu"
251    fi
[1279]252fi
[783]253
[1279]254if [[ "$parallel" == "mpi" ]]
255then
256   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
257   PARA_FFLAGS="%MPI_FFLAGS"
258   PARA_LD="%MPI_LD"
259elif [[ "$parallel" == "omp" ]]
260then
261   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
262   PARA_FFLAGS="%OMP_FFLAGS"
263   PARA_LD="%OMP_LD"
264elif [[ "$parallel" == "mpi_omp" ]]
265then
266   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
267   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
268   PARA_LD="%MPI_LD %OMP_LD"
269fi
[783]270
[1279]271if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
272   && "$compil_mod" == "debug" ]]
273then
274    echo "Usually, parallelization with OpenMP requires some optimization."
275    echo "We suggest switching to \"-dev\"."
276fi
[783]277
[1811]278if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" ]
[1279]279then
[1811]280#NB: option 'true': for backward compatibility. To be used with ORCHIDEE tag 1.9-1.9.6
281#    For this case, cpp flag ORCHIDEE_NOOPENMP must be added to the makelmdz_fcm arguments
282#    option orchidee1.9 : Compile with ORCHIDEE version up to the inclusion of OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
[1279]283   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
[1772]284   CPP_KEY="$CPP_KEY CPP_VEGET"
[1811]285# temporary, for Orchidee versions 1.9.* (before openmp activation)
286   if [[ "$veget" == "orchidee1.9" ]] ; then
287      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
288   fi
289   if [[ "$veget" == "orchidee2.0" ]] ; then
[1854]290      orch_libs="sechiba parameters stomate parallel orglob orchidee"
[1811]291   else
292      orch_libs="sechiba parameters stomate parallel orglob"
293   fi
294   LIB="${LIB} -L${ORCH_LIBDIR}"
295   for lib in ${orch_libs} ; do
296      if [ -f ${ORCH_LIBDIR}/lib${LIBPREFIX}$lib.a ] ; then
297         LIB="${LIB} -l${LIBPREFIX}$lib "
298      fi
299   done
300elif [[ "$veget" != "false" ]] ; then
[1772]301   echo "Option -v $veget does not exist"
302   echo "Use ./makelmdz_fcm -h for more information"
303   exit 
[1279]304fi
[783]305
[1865]306if [[ "$sisvat" == "true" ]]
307then
308   CPP_KEY="$CPP_KEY CPP_SISVAT"
[2084]309   SISVAT_PATH="$LIBFGCM/%PHYS/sisvat"
[1865]310fi
311
[1990]312if [[ "$rrtm" == "true" ]]
313then
314   CPP_KEY="$CPP_KEY CPP_RRTM"
[2084]315   RRTM_PATH="$LIBFGCM/%PHYS/rrtm"
[1990]316fi
317
[1279]318if [[ $io == ioipsl ]]
319then
320   CPP_KEY="$CPP_KEY CPP_IOIPSL"
321   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
322   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
[1897]323elif [[ $io == xios ]]
324then
325   # For now, xios implies also using ioipsl
326   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
327   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
328   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios"
[1279]329fi
[1897]330
[1279]331if [[ "$cosp" == "true" ]]
332then
333   CPP_KEY="$CPP_KEY CPP_COSP"
[1327]334   COSP_PATH="$LIBFGCM/cosp"
[1279]335#   LIB="${LIB} -l${LIBPREFIX}cosp"
336fi
[783]337
[1551]338INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
339LIB="$LIB ${NETCDF_LIBDIR}"
340
[783]341########################################################################
342# calcul du nombre de dimensions
343########################################################################
344
345
[1279]346dim_full=$dim
347dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
348set $dim
349dimc=$#
[783]350echo calcul de la dimension
351echo dim $dim
352echo dimc $dimc
353
354
355########################################################################
356# Gestion des dimensions du modele.
[1114]357# on cree ou remplace le fichier des dimensions
[783]358########################################################################
359
[1695]360cd $LIBFGCM/grid
361if [[ -f dimensions.h ]]
362then
363  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
364  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
365  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
366  echo  vous pouvez continuer en repondant oui.
367  echo "Voulez-vous vraiment continuer?"
[1755]368  echo ""
369  echo "WARNING: you are probably already compiling the model somewhere else."
370  echo "Wait until the first compilation is finished before launching this one."
371  echo "If you are sure that you are not compiling elsewhere, just answer "
372  echo "yes (or 'oui') to the question below to proceed."
373  echo "Do you wish to continue?"
[1695]374  read reponse
[1755]375  if [[ $reponse == "oui" || $reponse == "yes" ]]
[1695]376  then
[1696]377    \rm -f $LIBFGCM/grid/dimensions.h
[1695]378  else
379    exit
380  fi
381fi
382
383
[783]384cd $LIBFGCM/grid/dimension
[1114]385./makdim $dim
[783]386cat $LIBFGCM/grid/dimensions.h
387cd $LMDGCM
388
389
390########################################################################
391# Differentes dynamiques (3d, 2d, 1d)
392########################################################################
393
[1279]394dimension=`echo $dim | wc -w`
[783]395echo dimension $dimension
396
[1279]397if (( $dimension == 3 ))
398then
[783]399  cd $LIBFGCM/grid
400  \rm fxyprim.h
401  cp -p fxy_${grille}.h fxyprim.h
[1279]402else
403  echo "Probleme dans les dimensions de la dynamique !!"
404  echo "Non reactive pour l'instant !!!"
405fi
[783]406
407######################################################################
408#   Traitement special pour le nouveau rayonnement de Laurent Li.
409#   ---> YM desactive pour le traitemement en parallele
410######################################################################
411
[1279]412#if [[ -f $libf/phy$physique/raddim.h ]]
413#then
414# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
415#then
[783]416#  \rm -f $libf/phy$physique/raddim.h
417#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
418#  echo $libf/phy$physique/raddim.$dimh.h
419#  cat $libf/phy$physique/raddim.h
420# else
421#  echo On peut diminuer la taille de l executable en creant
422#  echo le fichier $libf/phy$physique/raddim.$dimh.h
423#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
[1279]424# fi
425#fi
[783]426
427######################################################################
428# Gestion du filtre qui n'existe qu'en 3d.
429######################################################################
430
[1279]431if (( `expr $dimc \> 2` == 1 ))
432then
433   filtre="FILTRE=$filtre"
[783]434else
[1279]435   filtre="FILTRE= L_FILTRE= "
436fi
[783]437echo MACRO FILTRE $filtre
438
439echo $dimc
440
441
442
443######################################################################
444# Creation du suffixe de la configuration
445######################################################################
446
447
[1279]448SUFF_NAME=_${dim_full}
449SUFF_NAME=${SUFF_NAME}_phy${physique}
[783]450
[1279]451if [[ "$parallel" != "none" ]]
452then
453  SUFF_NAME=${SUFF_NAME}_para
[1680]454  DYN=dyn${dimc}d${paramem}
455  if [[ "$paramem" == "mem" ]]
456  then
457   SUFF_NAME=${SUFF_NAME}_${paramem}
458  fi
[783]459else
[1279]460  SUFF_NAME=${SUFF_NAME}_seq
461  DYN=dyn${dimc}d
462fi
[783]463
[1772]464if [[ $veget != "false" ]]
[1279]465then
466  SUFF_NAME=${SUFF_NAME}_orch
467fi
[783]468
[1279]469if [[ $couple != "false" ]]
470then
471  SUFF_NAME=${SUFF_NAME}_couple
472fi
[783]473
[1279]474if [[ $chimie == "INCA" ]]
475then
476  SUFF_NAME=${SUFF_NAME}_inca
477fi
[783]478
479cd $LMDGCM
[1279]480config_fcm="config.fcm"
[783]481rm -f $config_fcm
482touch $config_fcm
483rm -f bin/${code}${SUFF_NAME}.e
484rm -f arch.fcm
[1279]485rm -f arch.opt
[783]486
487echo "%ARCH          $arch"          >> $config_fcm
488echo "%INCDIR        $INCLUDE"       >> $config_fcm 
489echo "%LIB           $LIB"           >> $config_fcm
490echo "%ROOT_PATH     $PWD"           >> $config_fcm
491echo "%LIBF          $LIBFGCM"       >> $config_fcm
492echo "%LIBO          $LIBOGCM"       >> $config_fcm
493echo "%DYN           $DYN"           >> $config_fcm
494echo "%PHYS          phy${physique}" >> $config_fcm
[2084]495echo "%RRTM          $RRTM_PATH"     >> $config_fcm
496echo "%SISVAT        $SISVAT_PATH"   >> $config_fcm
[1327]497echo "%COSP          $COSP_PATH"     >> $config_fcm
[783]498echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
499echo "%EXEC          $code"          >> $config_fcm
500echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
[1002]501echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
502echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
503echo "%PARA_LD       $PARA_LD"       >> $config_fcm
[1279]504echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
[783]505
[1002]506
507
[1137]508ln -s arch/arch-${arch}.fcm arch.fcm
[1279]509if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
510  then
511  ln -s arch/arch-${arch}.opt arch.opt
512else
513  ln -s .void_file arch.opt
514fi
515
516
[1002]517rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
[1802]518./build_gcm ${fcm_path} -j $job $full
[783]519
[1279]520rm -rf tmp_src
521rm -rf config
[783]522ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
523ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
[1695]524
[1869]525
[1696]526if [[ -r $LIBFGCM/grid/dimensions.h ]]
[1695]527then
528  # Cleanup: remove dimension.h file
[1696]529  \rm -f $LIBFGCM/grid/dimensions.h
[1695]530fi
Note: See TracBrowser for help on using the repository browser.