source: LMDZ6/trunk/makelmdz @ 3982

Last change on this file since 3982 was 3911, checked in by idelkadi, 3 years ago

Correction: removal of the compilation option "ecrad=true/false" (option to use: "-rad ecrad")

  • 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:executable set to *
File size: 25.2 KB
RevLine 
[1463]1#!/bin/bash
2#
[1695]3# $Id$
[1463]4#
5#
6########################################################################
7# for debug, uncomment line below
8#set -xv
9########################################################################
10# options par defaut pour la commande make
11########################################################################
12dim="96x72x19"
13physique=lmd
14code=gcm
15filtre=filtrez
16grille=reg
17couple=false
18veget=false
19chimie=false
20parallel=none
[1690]21paramem="par"
[1463]22compil_mod=prod
23io=ioipsl
24LIBPREFIX=""
25fcm_path=none
26cosp=false
[3359]27cosp2=false
[3491]28cospv2=false
[3793]29inlandsis=false
[1990]30rrtm=false
[3908]31rad=""
[2631]32dust=false
[2690]33strataer=false
[2112]34full=""
[1463]35
[2743]36arch_defined="FALSE"
37arch_path="arch"
38arch_default_path="arch"
39
[1463]40# guess a default 'arch'
[1690]41arch="local" # start with assuming we're on a local machine with local arch file
[2746]42arch_defined="TRUE" # and thus also set arch_defined to true
[1463]43## try to recognise machine and infer arch from it
44machine=`hostname`
[3574]45if [[ "${machine:0:4}" == "jean" ]]
[1463]46then
[3574]47  arch="X64_JEANZAY"
[1463]48fi
49if [[ "${machine:0:7}" == "platine" ]]
50then
51  arch="IA64_PLATINE"
52fi
53if [[ "${machine:0:6}" == "titane" ]]
54then
55  arch="X64_TITANE"
56fi
57if [[ "${machine:0:8}" == "mercure1" ]]
58then
59  arch="SX8_MERCURE"
60fi
61if [[ "${machine:0:8}" == "mercure2" ]]
62then
63  arch="SX9_MERCURE"
64fi
65
66LMDGCM=`pwd -P`
67LIBFGCM=$LMDGCM/libf
68LIBOGCM=$LMDGCM/libo
69if [[ ! -d $LIBOGCM ]]
70then
71  # create the directory
72  mkdir $LIBOGCM
73  if [[ ! $? ]]
74  then
75  echo "Failed to create directory $LIBOGCM"
76  exit
77  fi
78fi
[3232]79#COSP_PATH=$LMDGCM/.void_dir
[1463]80
81
82
83localdir=`pwd -P`
84########################################################################
85#  Quelques initialisations de variables du shell.
86########################################################################
87
[3835]88CPP_KEY="IN_LMDZ" 
[2239]89INCLUDE='-I$(LIBF)/grid -I$(LIBF)/misc -I$(LIBF)/filtrez -I. '
[1463]90LIB=""
91adjnt=""
92##COMPIL_FFLAGS="%PROD_FFLAGS"
93PARA_FFLAGS=""
94PARA_LD=""
95EXT_SRC=""
[2238]96#src_dirs: directories containing source files
[2239]97src_dirs="grid misc" 
[1463]98########################################################################
99# lecture des options
100########################################################################
101
102while (($# > 0))
103  do
104  case $1 in
105      "-h") cat <<fin
106Usage :
[1772]107makelmdz [options] -arch nom_arch exec
108[-h]                       : brief help
109[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
110[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
111[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug
112[-c false/MPI1/MPI2]       : coupling with ocean model : MPI1/MPI2/false (default: false)
113[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
114          false       : no vegetation model
[3435]115          orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version)
[1772]116          orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)
117          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
118          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
119[-chimie INCA/false]       : with INCA chemistry model or without (default: false)
[2238]120[-cosp true/false]    : compile with/without cosp package (default: false)
[3359]121[-cosp2 true/false]    : compile with/without cosp2 package (default: false)
[3491]122[-cospv2 true/false]    : compile with/without cospv2 package (default: false)
[3793]123[-inlandsis true/false]  : compile with/without inlandsis package (default: false)
[2238]124[-rrtm true/false]    : compile with/without rrtm package (default: false)
[3908]125[-rad old/rrtm/ecrad]    : compile with old/rrtm/ecrad radiatif code (default: old)
[2631]126[-dust true/false]    : compile with/without the dust package from Boucher et al. (default: false)
[2690]127[-strataer true/false]    : compile with/without the strat aer package from Boucher et al. (default: false)
[1772]128[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
129[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
[2097]130[-io ioipsl/mix/xios]                   : Input/Output library (default: ioipsl)
[1772]131[-include INCLUDES]        : extra include path to add
132[-cpp CPP_KEY]             : additional preprocessing definitions
133[-adjnt]                   : adjoint model, not operational ...
134[-mem]                     : reduced memory dynamics (if in parallel mode)
135[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
[2112]136[-full]                    : Full (re)compilation (from scratch)
[1772]137[-link LINKS]              : additional links with other libraries
138[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
139[-ext_src path]            : path to an additional set of routines to compile with the model
[2743]140[-arch_path path]          : path to architecture files (default: $arch_default_path)
[1772]141 -arch nom_arch            : target architecture
142 exec                      : executable to build
[1463]143fin
144          exit;;
145      "-d")
146          dim=$2 ; shift ; shift ;;
147     
148      "-p")
149          physique="$2" ;  shift ; shift ;;
150
151      "-g")
152          grille="$2" ; shift ; shift ;;
153
154      "-c")
155          couple="$2" ; shift ; shift ;;
156
157      "-prod")
158          compil_mod="prod" ; shift ;;
159
160      "-dev")
161          compil_mod="dev" ; shift ;;
162
163      "-debug")
164          compil_mod="debug" ; shift ;;
165
166      "-io")
167          io="$2" ; shift ; shift ;;
168
169      "-v")
170          veget="$2" ; shift ; shift ;;
171
172      "-chimie")
173          chimie="$2" ; shift ; shift ;;
174
175      "-parallel")
176          parallel="$2" ; shift ; shift ;;
177     
178      "-include")
179          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
180
181      "-cpp")
182          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
183
184      "-cosp")
185          cosp="$2" ; shift ; shift ;;
[3359]186
187      "-cosp2")
188          cosp2="$2" ; shift ; shift ;;
[3491]189
190      "-cosp2")
191          cospv2="$2" ; shift ; shift ;;
[1690]192     
[3793]193      "-inlandsis")
194          inlandsis="$2" ; shift ; shift ;; 
195
[1990]196      "-rrtm")
[3908]197          rrtm="$2" ; if [ "$2" = "false" ] ; then rad="old" ; else rad="rrtm" ; fi ; shift ; shift ;;
[2631]198
[3908]199      "-rad")
200          rad="$2" ; shift ; shift ;;
201
[2631]202      "-dust")
203          dust="$2" ; shift ; shift ;;
[1990]204     
[2690]205      "-strataer")
206          strataer="$2" ; shift ; shift ;;
207     
[1690]208      "-mem")
209          paramem="mem" ; shift ;;
[1463]210
211      "-filtre")
212          filtre=$2 ; shift ; shift ;;
213
[2112]214      "-full")
215      full="full" ; shift ;;
216
[1463]217      "-link")
218          LIB="$LIB $2" ; shift ; shift ;;
219
220      "-fcm_path")
221          fcm_path=$2 ; shift ; shift ;;
222
223      "-ext_src")
[2238]224          EXT_SRC=$2 ; src_dirs="$src_dirs $EXT_SRC" ; shift ; shift ;;
[1463]225
226      "-arch")
[2743]227          arch=$2 ; arch_defined="TRUE" ; shift ; shift ;;
[1463]228
[2743]229      "-arch_path")
230          arch_path=$2 ; arch_path_defined="TRUE"; shift ; shift ;;
231
[1463]232      *)
233          code="$1" ; shift ;;
234  esac
235done
236
237###############################################################
[2098]238# lecture des chemins propres \`a l'architecture de la machine #
[1463]239###############################################################
240rm -f .void_file
241echo > .void_file
242rm -rf .void_dir
243mkdir .void_dir
[2743]244
245if [[ "$arch_defined" == "TRUE" ]]
[1463]246then
[2743]247  rm -f arch.path
248  rm -f arch.fcm
249  rm -f arch.env
250
251  if test -f $arch_path/arch-${arch}.path
252  then
253    ln -s $arch_path/arch-${arch}.path arch.path
254  elif test -f $arch_default_path/arch-${arch}.path
255  then
256    ln -s $arch_default_path/arch-${arch}.path arch.path
257  fi
258       
259  if test -f $arch_path/arch-${arch}.fcm
260  then
261    ln -s $arch_path/arch-${arch}.fcm arch.fcm
262  elif test -f $arch_default_path/arch-${arch}.fcm
263  then
264    ln -s $arch_default_path/arch-${arch}.fcm arch.fcm
265  fi
266
267  if test -f $arch_path/arch-${arch}.env
268  then
269    ln -s $arch_path/arch-${arch}.env arch.env
270  elif test -f $arch_default_path/arch-${arch}.env
271  then
272    ln -s $arch_default_path/arch-${arch}.env arch.env
273  else
274    ln -s .void_file arch.env
275  fi
276  # source architecture PATH and ENV files
277  source arch.env
[1463]278  source arch.path
279else
[2743]280  echo "You must define a target architecture"
281  exit 1
[1463]282fi
[2743]283
[1463]284########################################################################
285# Definition des clefs CPP, des chemins des includes et modules
286#  et des libraries
287########################################################################
288
289# basic compile flags from arch.fcm file
290archfileline=$( grep -i '^%BASE_FFLAGS' arch.fcm )
291COMPIL_FFLAGS=$( echo ${archfileline##%BASE_FFLAGS} )
292
293# other compile flags, depending on compilation mode
294if [[ "$compil_mod" == "prod" ]]
295then
296## read COMPIL_FFLAGS from arch.fcm file
297  archfileline=$( grep -i '^%PROD_FFLAGS' arch.fcm )
298  archfileopt=$( echo ${archfileline##%PROD_FFLAGS} )
299  COMPIL_FFLAGS="${COMPIL_FFLAGS} ${archfileopt}"
300elif [[ "$compil_mod" == "dev" ]]
301then
302## read %DEV_FFLAGS from arch.fcm file
303  archfileline=$( grep -i '^%DEV_FFLAGS' arch.fcm )
304  archfileopt=$( echo ${archfileline##%DEV_FFLAGS} )
305  COMPIL_FFLAGS="${COMPIL_FFLAGS} ${archfileopt}"
306elif [[ "$compil_mod" == "debug" ]]
307then
308## read %DEBUG_FFLAGS from arch.fcm file
309  archfileline=$( grep -i '^%DEBUG_FFLAGS' arch.fcm )
310  archfileopt=$( echo ${archfileline##%DEBUG_FFLAGS} )
311  COMPIL_FFLAGS="${COMPIL_FFLAGS} ${archfileopt}"
312fi
313
314# add CPP_KEY defined in arch.fcm file
315archfileline=$( grep -i '^%FPP_DEF' arch.fcm )
316archfileopt=$( echo ${archfileline##%FPP_DEF} )
317CPP_KEY="$CPP_KEY ${archfileopt}"
318
319# get compiler name from arch.fcm file
320archfileline=$( grep -i '^%COMPILER' arch.fcm )
321fcompiler=$( echo ${archfileline##%COMPILER} )
322
323# get linker name from arch.fcm file
324archfileline=$( grep -i '^%LINK' arch.fcm )
325linker=$( echo ${archfileline##%LINK} )
326
327# get ar command from arch.fcm file
[3045]328archfileline=$( grep -i '^%AR ' arch.fcm )
[1463]329arcommand=$( echo ${archfileline##%AR} )
330
[3045]331# get ar command options from arch.fcm file
332archfileline=$( grep -i '^%ARFLAGS' arch.fcm )
[3051]333arflags=$( echo ${archfileline##%ARFLAGS} )
[3045]334
[1463]335# get make utility from arch.fcm file
336archfileline=$( grep -i '^%MAKE' arch.fcm )
337makecommand=$( echo ${archfileline##%MAKE} )
338
339# get basic libraries to link with arch.fcm file
340archfileline=$( grep -i '^%BASE_LD' arch.fcm )
341archfileopt=$( echo ${archfileline##%BASE_LD} )
342LIB="$LIB  ${archfileopt}"
343
[1873]344# add Include files defined in arch.fcm file for pre-processing
345archfileline=$( grep -i '^%FPP_FLAGS' arch.fcm )
346for inc in $archfileline ; do INCLUDE="$INCLUDE `echo $inc | grep '\-I'`" ; done
347
[2250]348phys_root=$physique
349if [[ "${physique:0:3}" == "lmd" ]] ; then phys_root=lmd ; fi
350if [[ "${physique:0:4}" == "mars" ]] ; then phys_root=mars ; fi
351if [[ "${physique:0:3}" == "std" ]] ; then phys_root=std ; fi
352if [[ "${physique:0:5}" == "venus" ]] ; then phys_root=venus ; fi
353if [[ "${physique:0:5}" == "titan" ]] ; then phys_root=titan ; fi
354if [[ "${physique:0:3}" == "mar" ]] ; then phys_root=mar ; fi
355if [[ "${physique:0:3}" == "dev" ]] ; then phys_root=dev ; fi
356
[1463]357if [[ "$physique" != "nophys" ]]
358then
[1690]359   #We'll use some physics
[2326]360   src_dirs="$src_dirs phy_common phy$physique"
[2239]361   LIBPHY='$(LIBO)/libphy'"$physique"'.a'
[2326]362   LIBPHY_COMMON='$(LIBO)/libphy_common.a'
363   lib_phy='-lphy'"$physique"' -lphy_common'
[1690]364   CPP_KEY="$CPP_KEY CPP_PHYS"
[2250]365   if [[ $phys_root == "lmd" ]]
366      then
367      #For lmd physics, default planet type is Earth
368      CPP_KEY="$CPP_KEY CPP_EARTH"
[1690]369   fi
[1463]370fi
371
372if [[ "$chimie" == "INCA" ]]
373then
374   CPP_KEY="$CPP_KEY INCA"
375   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
376   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
377   libchimie=" -L${INCA_LIBDIR} -lchimie"
378fi
379
380if [[ "$couple" != "false" ]]
381then
382   CPP_KEY="$CPP_KEY CPP_COUPLE"
383   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
384   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
385fi
386
387if [[ "$parallel" == "none" ]]
388then
389  FLAG_PARA=''
390else
[1810]391  FLAG_PARA="$paramem"
[2202]392  if [[ $paramem == par ]]
393  then
394      echo "The version of the dynamics in dyn3dpar is no longer updated."
395      echo "You should use option \"-mem\"."
396      exit 1
[2238]397  fi
[1463]398fi
399
400if [[ "$parallel" == "mpi" ]]
401then
402   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
403  # MPI additional compilation options
404  archfileline=$( grep -i '^%MPI_FFLAGS' arch.fcm )
405  PARA_FFLAGS=$( echo ${archfileline##%MPI_FFLAGS} )
406  # MPI additional links
407  archfileline=$( grep -i '^%MPI_LD' arch.fcm )
408  PARA_LD=$( echo ${archfileline##%MPI_LD} )
409elif [[ "$parallel" == "omp" ]]
410then
411   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
412  # OMP additional compilation options
413  archfileline=$( grep -i '^%OMP_FFLAGS' arch.fcm )
414  PARA_FFLAGS=$( echo ${archfileline##%OMP_FFLAGS} )
415  # OMP additional links
416  archfileline=$( grep -i '^%OMP_LD' arch.fcm )
417  PARA_LD=$( echo ${archfileline##%OMP_LD} )
418elif [[ "$parallel" == "mpi_omp" ]]
419then
420   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
421  # MPI additional compilation options
422  archfileline=$( grep -i '^%MPI_FFLAGS' arch.fcm )
423  PARA_FFLAGS=$( echo ${archfileline##%MPI_FFLAGS} )
424  # OMP additional compilation options
425  archfileline=$( grep -i '^%OMP_FFLAGS' arch.fcm )
426  PARA_FFLAGS="${PARA_FFLAGS} "$( echo $archfileopt ${archfileline##%OMP_FFLAGS} )
427  # MPI additional links
428  archfileline=$( grep -i '^%MPI_LD' arch.fcm )
429  PARA_LD=$( echo ${archfileline##%MPI_LD} )
430  # OMP additional links
431  archfileline=$( grep -i '^%OMP_LD' arch.fcm )
432  PARA_LD="${PARA_LD} "$( echo $archfileopt ${archfileline##%OMP_LD} )
433fi
434
435if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
436   && "$compil_mod" == "debug" ]]
437then
438    echo "Usually, parallelization with OpenMP requires some optimization."
439    echo "We suggest switching to \"-dev\"."
440fi
441
[1810]442
443#==============================================================================
[3435]444if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" -o "$veget" = "orchidee2.1" ]
[1463]445then
[1810]446
[1463]447   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
[1772]448   CPP_KEY="$CPP_KEY CPP_VEGET"
[1810]449# temporary, for Orchidee versions 1.9.* (before openmp activation)
450   if [[ "$veget" == "orchidee1.9" ]] ; then
451      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
452   fi
453   if [[ "$veget" == "orchidee2.0" ]] ; then
[1838]454      orch_libs="sechiba parameters stomate parallel orglob orchidee"
[3435]455      CPP_KEY="$CPP_KEY ORCHIDEE_NOUNSTRUCT"
456   elif [[ "$veget" == "orchidee2.1" ]] ; then
457      orch_libs="sechiba parameters stomate parallel orglob orchidee"
[1810]458   else
[1811]459      orch_libs="sechiba parameters stomate parallel orglob"
[1810]460   fi
461   LIB="${LIB} -L${ORCH_LIBDIR}"
[1811]462   for lib in ${orch_libs} ; do
[1810]463      if [ -f ${ORCH_LIBDIR}/lib${LIBPREFIX}$lib.a ] ; then
464         LIB="${LIB} -l${LIBPREFIX}$lib "
465      fi
466   done
467elif [[ "$veget" != "false" ]] ; then
[1772]468   echo "Option -v $veget does not exist"
469   echo "Use ./makelmdz -h for more information"
470   exit 
[1463]471fi
472
[1810]473#===============================================================================
[1463]474if [[ $io == ioipsl ]]
475then
476   CPP_KEY="$CPP_KEY CPP_IOIPSL"
477   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
478   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
[2097]479elif [[ $io == mix ]]
[1897]480then
481   # For now, xios implies also using ioipsl
482   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
483   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
[3075]484   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios -l${LIBPREFIX}stdc++"
[2097]485elif [[ $io == xios ]]
486then
487   # For now, xios implies also using ioipsl
488   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS CPP_IOIPSL_NO_OUTPUT"
489   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
[3075]490   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios -l${LIBPREFIX}stdc++"
[1463]491fi
492
493if [[ "$cosp" == "true" ]]
494then
495   CPP_KEY="$CPP_KEY CPP_COSP"
[3232]496#   COSP_PATH="$LIBFGCM/phylmd/cosp"
497   src_dirs="$src_dirs phy${physique}/cosp"
[1463]498#   LIB="${LIB} -l${LIBPREFIX}cosp"
[3232]499#  opt_dep="$opt_dep cosp"
500#  lcosp="-l${LIBPREFIX}cosp"
501   INCLUDE="$INCLUDE"' -I$(LIBF)/'phy${physique}'/cosp'
[1463]502fi
503
[3359]504if [[ "$cosp2" == "true" ]]
505then
506   CPP_KEY="$CPP_KEY CPP_COSP2"
507   src_dirs="$src_dirs phy${physique}/cosp2"
508   INCLUDE="$INCLUDE"' -I$(LIBF)/'phy${physique}'/cosp2'
509fi
510
[3491]511if [[ "$cospv2" == "true" ]]
512then
513   CPP_KEY="$CPP_KEY CPP_COSPV2"
514   src_dirs="$src_dirs phy${physique}/cospv2"
515   INCLUDE="$INCLUDE"' -I$(LIBF)/'phy${physique}'/cospv2'
516fi
[3359]517
[3491]518
[3793]519if [[ "$inlandsis" == "true" ]]
520then
521   CPP_KEY="$CPP_KEY CPP_INLANDSIS"
522   src_dirs="$src_dirs phy${physique}/inlandsis"
523fi
524
525
[3908]526if [[ "$rad" == "rrtm" ]]
[1990]527then
528   CPP_KEY="$CPP_KEY CPP_RRTM"
[2238]529   src_dirs="$src_dirs phy${physique}/rrtm"
[1990]530fi
[3908]531if [[ "$rad" == "ecrad" ]]
532then
533   CPP_KEY="$CPP_KEY CPP_ECRAD"
534   src_dirs="$src_dirs phy${physique}/ecrad"
535fi
[1865]536
[2631]537if [[ "$dust" == "true" ]]
538then
539   CPP_KEY="$CPP_KEY CPP_Dust"
540   src_dirs="$src_dirs phy${physique}/Dust"
541fi
[1990]542
[2690]543if [[ "$strataer" == "true" ]]
544then
545   CPP_KEY="$CPP_KEY CPP_StratAer"
546   src_dirs="$src_dirs phy${physique}/StratAer"
547fi
[2631]548
[3835]549#add new ocean skin modelisation to source dir by default
[2690]550
[3835]551src_dirs="$src_dirs phy${physique}/Ocean_skin"
552
553
[1551]554INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
555LIB="$LIB ${NETCDF_LIBDIR}"
[1463]556
557########################################################################
558# calcul du nombre de dimensions
559########################################################################
560
561
562dim_full=$dim
563dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
564set $dim
565dimc=$#
566echo calcul de la dimension
567echo dim $dim
568echo dimc $dimc
569
570########################################################################
571# Gestion des dimensions du modele.
572# on cree ou remplace le fichier des dimensions
573########################################################################
574
[1695]575cd $LIBFGCM/grid
576if [[ -f dimensions.h ]]
577then
578  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
579  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
580  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
581  echo  vous pouvez continuer en repondant oui.
582  echo "Voulez-vous vraiment continuer?"
[1755]583  echo ""
584  echo "WARNING: you are probably already compiling the model somewhere else."
585  echo "Wait until the first compilation is finished before launching this one."
586  echo "If you are sure that you are not compiling elsewhere, just answer "
587  echo "yes (or 'oui') to the question below to proceed."
588  echo "Do you wish to continue?"
[1695]589  read reponse
[1755]590  if [[ $reponse == "oui" || $reponse == "yes" ]]
[1695]591  then
[1696]592    \rm -f $LIBFGCM/grid/dimensions.h
[1695]593  else
594    exit
595  fi
596fi
597
[1463]598cd $LIBFGCM/grid/dimension
599./makdim $dim
[2202]600if (($? != 0))
601then
602    exit 1
603fi
604
[1463]605cat $LIBFGCM/grid/dimensions.h
606cd $LMDGCM
607
608########################################################################
609# Differentes dynamiques (3d, 2d, 1d)
610########################################################################
611
[1810]612if (( $dimc == 3 )) ; then
[2238]613   src_dirs="$src_dirs $filtre dyn3d_common dyn3d${FLAG_PARA}"
[2239]614   if [[ $physique != "nophys" ]] ; then
[2417]615     src_dirs="$src_dirs dynphy_lonlat dynphy_lonlat/phy${phys_root}"
616     libdyn_phy="-ldynphy_lonlat"
617     LIBDYN_PHYS='$(LIBO)/libdynphy_lonlat.a'
618     INCLUDE="$INCLUDE "'-I$(LIBF)/dynphy_lonlat'
619     INCLUDE="$INCLUDE "'-I$(LIBF)/dynphy_lonlat/'"phy${phys_root}"
[2239]620   fi
[1810]621   cd $LIBFGCM/grid
622   \rm fxyprim.h
623   cp -p fxy_${grille}.h fxyprim.h
[1463]624   filtre="FILTRE=$filtre"
[2016]625   INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d${FLAG_PARA} -I$(LIBF)/dyn3d_common '
[1810]626elif (( $dimc == 2 )) ; then
[2239]627   src_dirs="$src_dirs dyn2d"
[1810]628   filtre="FILTRE= L_FILTRE= "
629   INCLUDE="$INCLUDE "'-I$(LIBF)/dyn2d'
630elif (( $dimc == 1 )) ; then
[2239]631   #src_dirs="$src_dirs dyn3d dyn3d_common filtrez"
632   src_dirs="$src_dirs phy${physique}/dyn1d"
[2023]633   CPP_KEY="$CPP_KEY CPP_1D"
[2239]634   filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
635   #INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d -I$(LIBF)/dyn3d_common ' # Pas tres propre
636   INCLUDE="$INCLUDE "' -I$(LIBF)/phy'"$physique"'/dyn1d'
[1463]637else
[1810]638   echo Dimension dimc=$dimc pas prevu ; exit
[1463]639fi
640
641cd $LMDGCM
642
[2112]643########################################################################
644# library directory name:
645########################################################################
[1463]646
[2112]647nomlib=`echo ${arch}_${physique}_${dim_full}_${grille}_${compil_mod}_parall${parallel}_${CPP_KEY}_${FLAG_PARA} | sed -e 's/ //g' -e 's/-//g ' | sed -e 's/CPP_//g'`
648echo "Path to library: "$nomlib
649
[1463]650########################################################################
[2112]651#  Cleanup for a full recompilation, if requested
652########################################################################
653
654if [[ $full == "full" ]]
655then
656# remove makefile and librairies
657  echo "-full option: recompiling from scratch"
658  \rm -f makefile
659  \rm -rf "${LIBOGCM}/${nomlib}"
660fi
661
662########################################################################
[1463]663#  Avant de lancer le make, on recree le makefile si necessaire
664########################################################################
665########################################################################
666# c'est a dire dans 3 cas:
667# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
668#    derniere creation du makefile
669# 2. si le fichier contenant cette liste "liste_des_sources"
670#    n'existe pas.
671# 3. Si le makefile n'existe pas.
672########################################################################
673cd $LMDGCM
[1810]674
[1463]675
[2238]676if [[ -r .makelmdz ]]
[1463]677then
[2238]678old_lmdz_configuration=$(cat .makelmdz )
679else
680old_lmdz_configuration=""
681fi
682lmdz_configuration="$src_dirs"
683if [[ "$lmdz_configuration" != "$old_lmdz_configuration" ]]
684then
685  configuration_change="true"
686else
687  configuration_change="false"
688fi
689
[2250]690mkdir -p make_dir
691suf_make=`echo $src_dirs | sed -e 's/\//_/g' -e 's/ /_/g'`
692echo suf_make $suf_make
693
694\rm tmp77 tmp90
695for dir in $src_dirs ; do
696find libf/$dir -name '*.[Fh]' -print | sort >> tmp77
697find libf/$dir -name '*.F90' -print | sort >> tmp90
698done
699
700liste77=make_dir/liste_des_sources_f77_$suf_make
701liste90=make_dir/liste_des_sources_f90_$suf_make
702makefile=make_dir/makefile_$suf_make
703
[2269]704if [[ $configuration_change == "true" || ! ( -r $makefile ) || ! ( -r $liste90 ) || ! ( -r $liste77 ) || ` diff tmp77 $liste77 | wc -w ` -ne 0 || ` diff tmp90 $liste90 | wc -w ` -ne 0 ]]
[2238]705then
[1463]706  echo "les fichiers suivants ont ete crees ou detruits"
707  echo "ou les fichiers suivants sont passes ou ne sont plus en Fortran 90"
[2250]708  diff $liste77 tmp77
709  diff $liste90 tmp90
710  \cp -f tmp77 $liste77
711  \cp -f tmp90 $liste90
[2238]712  echo "Recreating the makefile"
713  echo "src_dirs: $src_dirs"
714  ./create_make_gcm $src_dirs > tmp
[2250]715  \mv -f tmp $makefile
[2238]716  echo "New makefile created"
[1463]717fi
718
[2250]719ln -sf $makefile makefile
720
[2238]721#Create a .makelmdz file containing main compilation option for later comparisons
722echo "$lmdz_configuration" > .makelmdz
723
[1463]724#################################################################
725# Preparation de l'execution de la comande make
726#################################################################
727
728source_code=${code}.F
[2239]729dirmain=dyn${dimc}d${FLAG_PARA}
[1463]730if [[ -r $LMDGCM/libf/dyn${dimc}d${FLAG_PARA}/${code}.F90 ]]
731then
732  source_code=${code}.F90
[2016]733elif [[ -r $LMDGCM/libf/phy$physique/${code}.F90 ]] ; then
[2239]734  dirmain=phy$physique
[2016]735  source_code=${code}.F90
[2417]736elif [[ -r $LMDGCM/libf/dynphy_lonlat/phy$phys_root/${code}.F90 ]] ; then
737  dirmain="dynphy_lonlat/phy${phys_root}"
[2239]738  source_code=${code}.F90
739elif [[ -r $LMDGCM/libf/phy$physique/dyn1d/${code}.F90 ]] ; then
740  dirmain=phy$physique/dyn1d
741  source_code=${code}.F90
[1463]742fi
743
744if [[ ! -d "${LIBOGCM}/${nomlib}" ]]
745then
746  mkdir ${LIBOGCM}/${nomlib}
747  # check we indeed managed to create the directory
748  if [[ ! $? ]]
749  then
750    echo "Error: could not create directory ${LIBOGCM}/${nomlib}"
751    exit
752  fi
753fi
754
755# where module files are created
756mod_loc_dir=$localdir
757
758if [[ "$physique" != "nophys" ]]
759then
760  INCLUDE="$INCLUDE"' -I$(LIBF)/phy'"$physique"
761fi
[1810]762INCLUDE="$INCLUDE"' -I'${LIBOGCM}/${nomlib}
[1463]763
764# ranlib utility (check it exists or else default to ls)
765if [[ `which ranlib > /dev/null 2>&1 ; echo $?` -eq 0 ]]
766then
767  ranlib="ranlib"
768else
769  ranlib="ls"
770fi
771
772# add CPP keys to COMPIL_FLAGS
773# (but first add -D before all CPP_KEY items)
774cpp_definitions=`echo $CPP_KEY | sed -e 's/[A-Za-z_=0-9]*/-D&/g'`
775# (but add a -WF,-D before all CPP_KEY items) => for xlf on Vargas
776if [[ "${fcompiler:0:3}" == "xlf" ]]
777then
778cpp_definitions=`echo $CPP_KEY | sed -e 's/[A-Za-z_=0-9]*/-WF,-D&/g'`
779fi
780COMPIL_FFLAGS="${COMPIL_FFLAGS} ${cpp_definitions}"
781
782#################################################################
783# Execution du make
784#################################################################
785echo $makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
786OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
787OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
788OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
789OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
790INCLUDE="$INCLUDE" \
791$filtre \
792LIBO=${LIBOGCM}/${nomlib} \
793"PHYS=$physique" \
[2239]794LIBPHY=${LIBPHY} \
[2326]795LIBPHY_COMMON=${LIBPHY_COMMON} \
[2239]796LIBDYN_PHYS=${LIBDYN_PHYS} \
[1463]797DIM=$dimc \
798FLAG_PARA=$FLAG_PARA \
[2239]799L_PHY="$lib_phy" \
800L_DYN_PHY="$libdyn_phy" \
[1463]801L_ADJNT=$adjnt \
802L_COSP="$lcosp" \
[3359]803L_COSP2="$lcosp2" \
[3491]804L_COSPV2="$lcospv2" \
[1463]805L_CHIMIE="$libchimie" \
806LOCAL_DIR="$localdir"  \
807F77="$fcompiler" \
808F90="$fcompiler" \
809OPLINK="$LIB" \
810LINK="$linker" \
811GCM="$LMDGCM" \
812MOD_LOC_DIR=$mod_loc_dir \
813MOD_SUFFIX="mod" \
814AR=$arcommand \
[3051]815ARFLAGS="$arflags" \
[2239]816DIRMAIN=$dirmain \
[1463]817SOURCE=$source_code \
818PROG=$code
819
820$makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
821OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
822OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
823OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
824OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
825INCLUDE="$INCLUDE" \
826$filtre \
827LIBO=${LIBOGCM}/${nomlib} \
828"PHYS=$physique" \
[2239]829LIBPHY=${LIBPHY} \
[2326]830LIBPHY_COMMON=${LIBPHY_COMMON} \
[2239]831LIBDYN_PHYS=${LIBDYN_PHYS} \
[1463]832DIM=$dimc \
833FLAG_PARA=$FLAG_PARA \
[2239]834L_PHY="$lib_phy" \
835L_DYN_PHY="$libdyn_phy" \
[1810]836L_ADJNT=$adjnt \
[1463]837L_COSP="$lcosp" \
[3359]838L_COSP2="$lcosp2" \
[3491]839L_COSPV2="$lcospv2" \
[1463]840L_CHIMIE="$libchimie" \
841LOCAL_DIR="$localdir"  \
842F77="$fcompiler" \
843F90="$fcompiler" \
844OPLINK="$LIB" \
845LINK="$linker" \
846GCM="$LMDGCM" \
847MOD_LOC_DIR=$mod_loc_dir \
848MOD_SUFFIX="mod" \
849AR=$arcommand \
[3051]850ARFLAGS="$arflags" \
[2239]851DIRMAIN=$dirmain \
[1463]852SOURCE=$source_code \
853PROG=$code
854
[1810]855
[1696]856if [[ -r $LIBFGCM/grid/dimensions.h ]]
[1463]857then
858  # Cleanup: remove dimension.h file
[1696]859  \rm -f $LIBFGCM/grid/dimensions.h
[1463]860fi
Note: See TracBrowser for help on using the repository browser.