source: LMDZ5/trunk/makelmdz_fcm @ 1915

Last change on this file since 1915 was 1907, checked in by lguez, 11 years ago

Added a copyright property to every file of the distribution, except
for the fcm files (which have their own copyright). Use svn propget on
a file to see the copyright. For instance:

$ svn propget copyright libf/phylmd/physiq.F90
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

Also added the files defining the CeCILL version 2 license, in French
and English, at the top of the LMDZ tree.

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