source: LMDZ5/branches/IPSLCM6.0.8/makelmdz @ 2853

Last change on this file since 2853 was 2787, checked in by Laurent Fairhead, 8 years ago

Merged trunk changes r2727:2785 into testing branch

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