source: LMDZ6/trunk/makelmdz @ 3838

Last change on this file since 3838 was 3835, checked in by Laurent Fairhead, 4 years ago

Modifications so that the new phylmd/Ocean_skin directory is taken into account

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