source: LMDZ6/trunk/makelmdz @ 3996

Last change on this file since 3996 was 3996, checked in by Ehouarn Millour, 3 years ago

Code cleanup. Remove obsolete "phymar" package and references thereto in the maklmdz[_fcm] scripts.
EM

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:executable set to *
File size: 25.2 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
27cosp2=false
28cospv2=false
29inlandsis=false
30rrtm=false
31rad=""
32dust=false
33strataer=false
34full=""
35
36arch_defined="FALSE"
37arch_path="arch"
38arch_default_path="arch"
39
40# guess a default 'arch'
41arch="local" # start with assuming we're on a local machine with local arch file
42arch_defined="TRUE" # and thus also set arch_defined to true
43## try to recognise machine and infer arch from it
44machine=`hostname`
45if [[ "${machine:0:4}" == "jean" ]]
46then
47  arch="X64_JEANZAY"
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
79#COSP_PATH=$LMDGCM/.void_dir
80
81
82
83localdir=`pwd -P`
84########################################################################
85#  Quelques initialisations de variables du shell.
86########################################################################
87
88CPP_KEY="IN_LMDZ" 
89INCLUDE='-I$(LIBF)/grid -I$(LIBF)/misc -I$(LIBF)/filtrez -I. '
90LIB=""
91adjnt=""
92##COMPIL_FFLAGS="%PROD_FFLAGS"
93PARA_FFLAGS=""
94PARA_LD=""
95EXT_SRC=""
96#src_dirs: directories containing source files
97src_dirs="grid misc" 
98########################################################################
99# lecture des options
100########################################################################
101
102while (($# > 0))
103  do
104  case $1 in
105      "-h") cat <<fin
106Usage :
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
115          orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version)
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)
120[-cosp true/false]    : compile with/without cosp package (default: false)
121[-cosp2 true/false]    : compile with/without cosp2 package (default: false)
122[-cospv2 true/false]    : compile with/without cospv2 package (default: false)
123[-inlandsis true/false]  : compile with/without inlandsis package (default: false)
124[-rrtm true/false]    : compile with/without rrtm package (default: false)
125[-rad old/rrtm/ecrad]    : compile with old/rrtm/ecrad radiatif code (default: old)
126[-dust true/false]    : compile with/without the dust package from Boucher et al. (default: false)
127[-strataer true/false]    : compile with/without the strat aer package from Boucher et al. (default: false)
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)
130[-io ioipsl/mix/xios]                   : Input/Output library (default: ioipsl)
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)
136[-full]                    : Full (re)compilation (from scratch)
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
140[-arch_path path]          : path to architecture files (default: $arch_default_path)
141 -arch nom_arch            : target architecture
142 exec                      : executable to build
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 ;;
186
187      "-cosp2")
188          cosp2="$2" ; shift ; shift ;;
189
190      "-cosp2")
191          cospv2="$2" ; shift ; shift ;;
192     
193      "-inlandsis")
194          inlandsis="$2" ; shift ; shift ;; 
195
196      "-rrtm")
197          rrtm="$2" ; if [ "$2" = "false" ] ; then rad="old" ; else rad="rrtm" ; fi ; shift ; shift ;;
198
199      "-rad")
200          rad="$2" ; shift ; shift ;;
201
202      "-dust")
203          dust="$2" ; shift ; shift ;;
204     
205      "-strataer")
206          strataer="$2" ; shift ; shift ;;
207     
208      "-mem")
209          paramem="mem" ; shift ;;
210
211      "-filtre")
212          filtre=$2 ; shift ; shift ;;
213
214      "-full")
215      full="full" ; shift ;;
216
217      "-link")
218          LIB="$LIB $2" ; shift ; shift ;;
219
220      "-fcm_path")
221          fcm_path=$2 ; shift ; shift ;;
222
223      "-ext_src")
224          EXT_SRC=$2 ; src_dirs="$src_dirs $EXT_SRC" ; shift ; shift ;;
225
226      "-arch")
227          arch=$2 ; arch_defined="TRUE" ; shift ; shift ;;
228
229      "-arch_path")
230          arch_path=$2 ; arch_path_defined="TRUE"; shift ; shift ;;
231
232      *)
233          code="$1" ; shift ;;
234  esac
235done
236
237###############################################################
238# lecture des chemins propres \`a l'architecture de la machine #
239###############################################################
240rm -f .void_file
241echo > .void_file
242rm -rf .void_dir
243mkdir .void_dir
244
245if [[ "$arch_defined" == "TRUE" ]]
246then
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
278  source arch.path
279else
280  echo "You must define a target architecture"
281  exit 1
282fi
283
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
328archfileline=$( grep -i '^%AR ' arch.fcm )
329arcommand=$( echo ${archfileline##%AR} )
330
331# get ar command options from arch.fcm file
332archfileline=$( grep -i '^%ARFLAGS' arch.fcm )
333arflags=$( echo ${archfileline##%ARFLAGS} )
334
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
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
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}" == "dev" ]] ; then phys_root=dev ; fi
355
356if [[ "$physique" != "nophys" ]]
357then
358   #We'll use some physics
359   src_dirs="$src_dirs phy_common phy$physique"
360   LIBPHY='$(LIBO)/libphy'"$physique"'.a'
361   LIBPHY_COMMON='$(LIBO)/libphy_common.a'
362   lib_phy='-lphy'"$physique"' -lphy_common'
363   CPP_KEY="$CPP_KEY CPP_PHYS"
364   if [[ $phys_root == "lmd" ]]
365      then
366      #For lmd physics, default planet type is Earth
367      CPP_KEY="$CPP_KEY CPP_EARTH"
368   fi
369fi
370
371if [[ "$chimie" == "INCA" ]]
372then
373   CPP_KEY="$CPP_KEY INCA"
374   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
375   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
376   libchimie=" -L${INCA_LIBDIR} -lchimie"
377fi
378
379if [[ "$couple" != "false" ]]
380then
381   CPP_KEY="$CPP_KEY CPP_COUPLE"
382   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
383   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
384fi
385
386if [[ "$parallel" == "none" ]]
387then
388  FLAG_PARA=''
389else
390  FLAG_PARA="$paramem"
391  if [[ $paramem == par ]]
392  then
393      echo "The version of the dynamics in dyn3dpar is no longer updated."
394      echo "You should use option \"-mem\"."
395      exit 1
396  fi
397fi
398
399if [[ "$parallel" == "mpi" ]]
400then
401   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
402  # MPI additional compilation options
403  archfileline=$( grep -i '^%MPI_FFLAGS' arch.fcm )
404  PARA_FFLAGS=$( echo ${archfileline##%MPI_FFLAGS} )
405  # MPI additional links
406  archfileline=$( grep -i '^%MPI_LD' arch.fcm )
407  PARA_LD=$( echo ${archfileline##%MPI_LD} )
408elif [[ "$parallel" == "omp" ]]
409then
410   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
411  # OMP additional compilation options
412  archfileline=$( grep -i '^%OMP_FFLAGS' arch.fcm )
413  PARA_FFLAGS=$( echo ${archfileline##%OMP_FFLAGS} )
414  # OMP additional links
415  archfileline=$( grep -i '^%OMP_LD' arch.fcm )
416  PARA_LD=$( echo ${archfileline##%OMP_LD} )
417elif [[ "$parallel" == "mpi_omp" ]]
418then
419   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
420  # MPI additional compilation options
421  archfileline=$( grep -i '^%MPI_FFLAGS' arch.fcm )
422  PARA_FFLAGS=$( echo ${archfileline##%MPI_FFLAGS} )
423  # OMP additional compilation options
424  archfileline=$( grep -i '^%OMP_FFLAGS' arch.fcm )
425  PARA_FFLAGS="${PARA_FFLAGS} "$( echo $archfileopt ${archfileline##%OMP_FFLAGS} )
426  # MPI additional links
427  archfileline=$( grep -i '^%MPI_LD' arch.fcm )
428  PARA_LD=$( echo ${archfileline##%MPI_LD} )
429  # OMP additional links
430  archfileline=$( grep -i '^%OMP_LD' arch.fcm )
431  PARA_LD="${PARA_LD} "$( echo $archfileopt ${archfileline##%OMP_LD} )
432fi
433
434if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
435   && "$compil_mod" == "debug" ]]
436then
437    echo "Usually, parallelization with OpenMP requires some optimization."
438    echo "We suggest switching to \"-dev\"."
439fi
440
441
442#==============================================================================
443if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" -o "$veget" = "orchidee2.1" ]
444then
445
446   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
447   CPP_KEY="$CPP_KEY CPP_VEGET"
448# temporary, for Orchidee versions 1.9.* (before openmp activation)
449   if [[ "$veget" == "orchidee1.9" ]] ; then
450      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
451   fi
452   if [[ "$veget" == "orchidee2.0" ]] ; then
453      orch_libs="sechiba parameters stomate parallel orglob orchidee"
454      CPP_KEY="$CPP_KEY ORCHIDEE_NOUNSTRUCT"
455   elif [[ "$veget" == "orchidee2.1" ]] ; then
456      orch_libs="sechiba parameters stomate parallel orglob orchidee"
457   else
458      orch_libs="sechiba parameters stomate parallel orglob"
459   fi
460   LIB="${LIB} -L${ORCH_LIBDIR}"
461   for lib in ${orch_libs} ; do
462      if [ -f ${ORCH_LIBDIR}/lib${LIBPREFIX}$lib.a ] ; then
463         LIB="${LIB} -l${LIBPREFIX}$lib "
464      fi
465   done
466elif [[ "$veget" != "false" ]] ; then
467   echo "Option -v $veget does not exist"
468   echo "Use ./makelmdz -h for more information"
469   exit 
470fi
471
472#===============================================================================
473if [[ $io == ioipsl ]]
474then
475   CPP_KEY="$CPP_KEY CPP_IOIPSL"
476   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
477   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
478elif [[ $io == mix ]]
479then
480   # For now, xios implies also using ioipsl
481   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
482   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
483   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios -l${LIBPREFIX}stdc++"
484elif [[ $io == xios ]]
485then
486   # For now, xios implies also using ioipsl
487   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS CPP_IOIPSL_NO_OUTPUT"
488   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
489   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios -l${LIBPREFIX}stdc++"
490fi
491
492if [[ "$cosp" == "true" ]]
493then
494   CPP_KEY="$CPP_KEY CPP_COSP"
495#   COSP_PATH="$LIBFGCM/phylmd/cosp"
496   src_dirs="$src_dirs phy${physique}/cosp"
497#   LIB="${LIB} -l${LIBPREFIX}cosp"
498#  opt_dep="$opt_dep cosp"
499#  lcosp="-l${LIBPREFIX}cosp"
500   INCLUDE="$INCLUDE"' -I$(LIBF)/'phy${physique}'/cosp'
501fi
502
503if [[ "$cosp2" == "true" ]]
504then
505   CPP_KEY="$CPP_KEY CPP_COSP2"
506   src_dirs="$src_dirs phy${physique}/cosp2"
507   INCLUDE="$INCLUDE"' -I$(LIBF)/'phy${physique}'/cosp2'
508fi
509
510if [[ "$cospv2" == "true" ]]
511then
512   CPP_KEY="$CPP_KEY CPP_COSPV2"
513   src_dirs="$src_dirs phy${physique}/cospv2"
514   INCLUDE="$INCLUDE"' -I$(LIBF)/'phy${physique}'/cospv2'
515fi
516
517
518if [[ "$inlandsis" == "true" ]]
519then
520   CPP_KEY="$CPP_KEY CPP_INLANDSIS"
521   src_dirs="$src_dirs phy${physique}/inlandsis"
522fi
523
524
525if [[ "$rad" == "rrtm" ]]
526then
527   CPP_KEY="$CPP_KEY CPP_RRTM"
528   src_dirs="$src_dirs phy${physique}/rrtm"
529fi
530if [[ "$rad" == "ecrad" ]]
531then
532   CPP_KEY="$CPP_KEY CPP_ECRAD"
533   src_dirs="$src_dirs phy${physique}/ecrad"
534fi
535
536if [[ "$dust" == "true" ]]
537then
538   CPP_KEY="$CPP_KEY CPP_Dust"
539   src_dirs="$src_dirs phy${physique}/Dust"
540fi
541
542if [[ "$strataer" == "true" ]]
543then
544   CPP_KEY="$CPP_KEY CPP_StratAer"
545   src_dirs="$src_dirs phy${physique}/StratAer"
546fi
547
548#add new ocean skin modelisation to source dir by default
549
550src_dirs="$src_dirs phy${physique}/Ocean_skin"
551
552
553INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
554LIB="$LIB ${NETCDF_LIBDIR}"
555
556########################################################################
557# calcul du nombre de dimensions
558########################################################################
559
560
561dim_full=$dim
562dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
563set $dim
564dimc=$#
565echo calcul de la dimension
566echo dim $dim
567echo dimc $dimc
568
569########################################################################
570# Gestion des dimensions du modele.
571# on cree ou remplace le fichier des dimensions
572########################################################################
573
574cd $LIBFGCM/grid
575if [[ -f dimensions.h ]]
576then
577  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
578  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
579  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
580  echo  vous pouvez continuer en repondant oui.
581  echo "Voulez-vous vraiment continuer?"
582  echo ""
583  echo "WARNING: you are probably already compiling the model somewhere else."
584  echo "Wait until the first compilation is finished before launching this one."
585  echo "If you are sure that you are not compiling elsewhere, just answer "
586  echo "yes (or 'oui') to the question below to proceed."
587  echo "Do you wish to continue?"
588  read reponse
589  if [[ $reponse == "oui" || $reponse == "yes" ]]
590  then
591    \rm -f $LIBFGCM/grid/dimensions.h
592  else
593    exit
594  fi
595fi
596
597cd $LIBFGCM/grid/dimension
598./makdim $dim
599if (($? != 0))
600then
601    exit 1
602fi
603
604cat $LIBFGCM/grid/dimensions.h
605cd $LMDGCM
606
607########################################################################
608# Differentes dynamiques (3d, 2d, 1d)
609########################################################################
610
611if (( $dimc == 3 )) ; then
612   src_dirs="$src_dirs $filtre dyn3d_common dyn3d${FLAG_PARA}"
613   if [[ $physique != "nophys" ]] ; then
614     src_dirs="$src_dirs dynphy_lonlat dynphy_lonlat/phy${phys_root}"
615     libdyn_phy="-ldynphy_lonlat"
616     LIBDYN_PHYS='$(LIBO)/libdynphy_lonlat.a'
617     INCLUDE="$INCLUDE "'-I$(LIBF)/dynphy_lonlat'
618     INCLUDE="$INCLUDE "'-I$(LIBF)/dynphy_lonlat/'"phy${phys_root}"
619   fi
620   cd $LIBFGCM/grid
621   \rm fxyprim.h
622   cp -p fxy_${grille}.h fxyprim.h
623   filtre="FILTRE=$filtre"
624   INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d${FLAG_PARA} -I$(LIBF)/dyn3d_common '
625elif (( $dimc == 2 )) ; then
626   src_dirs="$src_dirs dyn2d"
627   filtre="FILTRE= L_FILTRE= "
628   INCLUDE="$INCLUDE "'-I$(LIBF)/dyn2d'
629elif (( $dimc == 1 )) ; then
630   #src_dirs="$src_dirs dyn3d dyn3d_common filtrez"
631   src_dirs="$src_dirs phy${physique}/dyn1d"
632   CPP_KEY="$CPP_KEY CPP_1D"
633   filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
634   #INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d -I$(LIBF)/dyn3d_common ' # Pas tres propre
635   INCLUDE="$INCLUDE "' -I$(LIBF)/phy'"$physique"'/dyn1d'
636else
637   echo Dimension dimc=$dimc pas prevu ; exit
638fi
639
640cd $LMDGCM
641
642########################################################################
643# library directory name:
644########################################################################
645
646nomlib=`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'`
647echo "Path to library: "$nomlib
648
649########################################################################
650#  Cleanup for a full recompilation, if requested
651########################################################################
652
653if [[ $full == "full" ]]
654then
655# remove makefile and librairies
656  echo "-full option: recompiling from scratch"
657  \rm -f makefile
658  \rm -rf "${LIBOGCM}/${nomlib}"
659fi
660
661########################################################################
662#  Avant de lancer le make, on recree le makefile si necessaire
663########################################################################
664########################################################################
665# c'est a dire dans 3 cas:
666# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
667#    derniere creation du makefile
668# 2. si le fichier contenant cette liste "liste_des_sources"
669#    n'existe pas.
670# 3. Si le makefile n'existe pas.
671########################################################################
672cd $LMDGCM
673
674
675if [[ -r .makelmdz ]]
676then
677old_lmdz_configuration=$(cat .makelmdz )
678else
679old_lmdz_configuration=""
680fi
681lmdz_configuration="$src_dirs"
682if [[ "$lmdz_configuration" != "$old_lmdz_configuration" ]]
683then
684  configuration_change="true"
685else
686  configuration_change="false"
687fi
688
689mkdir -p make_dir
690suf_make=`echo $src_dirs | sed -e 's/\//_/g' -e 's/ /_/g'`
691echo suf_make $suf_make
692
693\rm tmp77 tmp90
694for dir in $src_dirs ; do
695find libf/$dir -name '*.[Fh]' -print | sort >> tmp77
696find libf/$dir -name '*.F90' -print | sort >> tmp90
697done
698
699liste77=make_dir/liste_des_sources_f77_$suf_make
700liste90=make_dir/liste_des_sources_f90_$suf_make
701makefile=make_dir/makefile_$suf_make
702
703if [[ $configuration_change == "true" || ! ( -r $makefile ) || ! ( -r $liste90 ) || ! ( -r $liste77 ) || ` diff tmp77 $liste77 | wc -w ` -ne 0 || ` diff tmp90 $liste90 | wc -w ` -ne 0 ]]
704then
705  echo "les fichiers suivants ont ete crees ou detruits"
706  echo "ou les fichiers suivants sont passes ou ne sont plus en Fortran 90"
707  diff $liste77 tmp77
708  diff $liste90 tmp90
709  \cp -f tmp77 $liste77
710  \cp -f tmp90 $liste90
711  echo "Recreating the makefile"
712  echo "src_dirs: $src_dirs"
713  ./create_make_gcm $src_dirs > tmp
714  \mv -f tmp $makefile
715  echo "New makefile created"
716fi
717
718ln -sf $makefile makefile
719
720#Create a .makelmdz file containing main compilation option for later comparisons
721echo "$lmdz_configuration" > .makelmdz
722
723#################################################################
724# Preparation de l'execution de la comande make
725#################################################################
726
727source_code=${code}.F
728dirmain=dyn${dimc}d${FLAG_PARA}
729if [[ -r $LMDGCM/libf/dyn${dimc}d${FLAG_PARA}/${code}.F90 ]]
730then
731  source_code=${code}.F90
732elif [[ -r $LMDGCM/libf/phy$physique/${code}.F90 ]] ; then
733  dirmain=phy$physique
734  source_code=${code}.F90
735elif [[ -r $LMDGCM/libf/dynphy_lonlat/phy$phys_root/${code}.F90 ]] ; then
736  dirmain="dynphy_lonlat/phy${phys_root}"
737  source_code=${code}.F90
738elif [[ -r $LMDGCM/libf/phy$physique/dyn1d/${code}.F90 ]] ; then
739  dirmain=phy$physique/dyn1d
740  source_code=${code}.F90
741fi
742
743if [[ ! -d "${LIBOGCM}/${nomlib}" ]]
744then
745  mkdir ${LIBOGCM}/${nomlib}
746  # check we indeed managed to create the directory
747  if [[ ! $? ]]
748  then
749    echo "Error: could not create directory ${LIBOGCM}/${nomlib}"
750    exit
751  fi
752fi
753
754# where module files are created
755mod_loc_dir=$localdir
756
757if [[ "$physique" != "nophys" ]]
758then
759  INCLUDE="$INCLUDE"' -I$(LIBF)/phy'"$physique"
760fi
761INCLUDE="$INCLUDE"' -I'${LIBOGCM}/${nomlib}
762
763# ranlib utility (check it exists or else default to ls)
764if [[ `which ranlib > /dev/null 2>&1 ; echo $?` -eq 0 ]]
765then
766  ranlib="ranlib"
767else
768  ranlib="ls"
769fi
770
771# add CPP keys to COMPIL_FLAGS
772# (but first add -D before all CPP_KEY items)
773cpp_definitions=`echo $CPP_KEY | sed -e 's/[A-Za-z_=0-9]*/-D&/g'`
774# (but add a -WF,-D before all CPP_KEY items) => for xlf on Vargas
775if [[ "${fcompiler:0:3}" == "xlf" ]]
776then
777cpp_definitions=`echo $CPP_KEY | sed -e 's/[A-Za-z_=0-9]*/-WF,-D&/g'`
778fi
779COMPIL_FFLAGS="${COMPIL_FFLAGS} ${cpp_definitions}"
780
781#################################################################
782# Execution du make
783#################################################################
784echo $makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
785OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
786OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
787OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
788OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
789INCLUDE="$INCLUDE" \
790$filtre \
791LIBO=${LIBOGCM}/${nomlib} \
792"PHYS=$physique" \
793LIBPHY=${LIBPHY} \
794LIBPHY_COMMON=${LIBPHY_COMMON} \
795LIBDYN_PHYS=${LIBDYN_PHYS} \
796DIM=$dimc \
797FLAG_PARA=$FLAG_PARA \
798L_PHY="$lib_phy" \
799L_DYN_PHY="$libdyn_phy" \
800L_ADJNT=$adjnt \
801L_COSP="$lcosp" \
802L_COSP2="$lcosp2" \
803L_COSPV2="$lcospv2" \
804L_CHIMIE="$libchimie" \
805LOCAL_DIR="$localdir"  \
806F77="$fcompiler" \
807F90="$fcompiler" \
808OPLINK="$LIB" \
809LINK="$linker" \
810GCM="$LMDGCM" \
811MOD_LOC_DIR=$mod_loc_dir \
812MOD_SUFFIX="mod" \
813AR=$arcommand \
814ARFLAGS="$arflags" \
815DIRMAIN=$dirmain \
816SOURCE=$source_code \
817PROG=$code
818
819$makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
820OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
821OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
822OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
823OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
824INCLUDE="$INCLUDE" \
825$filtre \
826LIBO=${LIBOGCM}/${nomlib} \
827"PHYS=$physique" \
828LIBPHY=${LIBPHY} \
829LIBPHY_COMMON=${LIBPHY_COMMON} \
830LIBDYN_PHYS=${LIBDYN_PHYS} \
831DIM=$dimc \
832FLAG_PARA=$FLAG_PARA \
833L_PHY="$lib_phy" \
834L_DYN_PHY="$libdyn_phy" \
835L_ADJNT=$adjnt \
836L_COSP="$lcosp" \
837L_COSP2="$lcosp2" \
838L_COSPV2="$lcospv2" \
839L_CHIMIE="$libchimie" \
840LOCAL_DIR="$localdir"  \
841F77="$fcompiler" \
842F90="$fcompiler" \
843OPLINK="$LIB" \
844LINK="$linker" \
845GCM="$LMDGCM" \
846MOD_LOC_DIR=$mod_loc_dir \
847MOD_SUFFIX="mod" \
848AR=$arcommand \
849ARFLAGS="$arflags" \
850DIRMAIN=$dirmain \
851SOURCE=$source_code \
852PROG=$code
853
854
855if [[ -r $LIBFGCM/grid/dimensions.h ]]
856then
857  # Cleanup: remove dimension.h file
858  \rm -f $LIBFGCM/grid/dimensions.h
859fi
Note: See TracBrowser for help on using the repository browser.