source: trunk/LMDZ.COMMON/makelmdz @ 3496

Last change on this file since 3496 was 2168, checked in by jbmadeleine, 5 years ago

Petite correction dans makelmdz

  • Property svn:executable set to *
File size: 27.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
27sisvat=false
28rrtm=false
29dust=false
30strataer=false
31bands=""
32scatterers=""
33full=''
34
35arch_defined="FALSE"
36arch_path="arch"
37arch_default_path="arch"
38
39# guess a default 'arch'
40arch="local" # start with assuming we're on a local machine with local arch file
41arch_defined="TRUE" # and thus also set arch_defined to true
42## try to recognise machine and infer arch from it
43machine=`hostname`
44if [[ "${machine:0:3}" == "ada" ]]
45then
46  arch="X64_ADA"
47fi
48if [[ "${machine:0:7}" == "platine" ]]
49then
50  arch="IA64_PLATINE"
51fi
52if [[ "${machine:0:6}" == "titane" ]]
53then
54  arch="X64_TITANE"
55fi
56if [[ "${machine:0:8}" == "mercure1" ]]
57then
58  arch="SX8_MERCURE"
59fi
60if [[ "${machine:0:8}" == "mercure2" ]]
61then
62  arch="SX9_MERCURE"
63fi
64
65LMDGCM=`pwd -P`
66LIBFGCM=$LMDGCM/libf
67LIBOGCM=$LMDGCM/libo
68if [[ ! -d $LIBOGCM ]]
69then
70  # create the directory
71  mkdir $LIBOGCM
72  if [[ ! $? ]]
73  then
74  echo "Failed to create directory $LIBOGCM"
75  exit
76  fi
77fi
78COSP_PATH=$LMDGCM/.void_dir
79
80
81
82localdir=`pwd -P`
83########################################################################
84#  Quelques initialisations de variables du shell.
85########################################################################
86
87CPP_KEY="" 
88INCLUDE='-I$(LIBF)/grid -I$(LIBF)/misc -I$(LIBF)/filtrez -I. '
89LIB=""
90adjnt=""
91##COMPIL_FFLAGS="%PROD_FFLAGS"
92PARA_FFLAGS=""
93PARA_LD=""
94EXT_SRC=""
95#src_dirs: directories containing source files
96src_dirs="grid misc" 
97ccompiler=""
98OPTIMC=""
99INCLUDEC=""
100
101########################################################################
102# lecture des options
103########################################################################
104
105while (($# > 0))
106  do
107  case $1 in
108      "-h") cat <<fin
109manuel complet sur http://...
110Usage :
111makeldmz [options] -arch arch exec
112[-h]                       : brief help
113[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
114[-s nscat]                 : (Generic) Number of radiatively active scatterers
115[-b IRxVIS]                : (Generic) Number of infrared (IR) and visible (VIS) bands for radiative transfer
116[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
117[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug .
118[-c false/MPI1/MPI2]       : (Earth) coupling with ocean model : MPI1/MPI2/false (default: false)
119[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
120          false       : no vegetation model
121          orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)
122          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
123          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
124
125[-chimie INCA/false]       : (Earth) with INCA chemistry model or without (default: false)
126[-cosp cosp/false]         : (Earth) add the cosp model (default: false)
127[-sisvat true/false]  : (Earth) compile with/without sisvat package (default: false)
128[-rrtm true/false]    : (Earth) compile with/without rrtm package (default: false)
129[-dust true/false]    : (Earth) compile with/without the dust package from Boucher et al. (default: false)
130[-strataer true/false]    : (Earth) compile with/without the strat aer package from Boucher et al. (default: false)
131[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
132[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
133[-io ioipsl/mix/xios]                   : Input/Output library (default: ioipsl)
134[-include INCLUDES]        : extra include path to add
135[-cpp CPP_KEY]             : additional preprocessing definitions
136[-adjnt]                   : adjoint model, not operational ...
137[-mem]                     : reduced memory dynamics (if in parallel mode)
138[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
139[-link LINKS]              : additional links with other libraries
140[-full]                    : full (re-)compilation (from scratch)
141[-ext_src path]            : path to an additional set of routines to compile with the model
142[-arch_path path]          : path to architecture files (default: $arch_default_path)
143 -arch arch                : target architecture
144 exec                      : executable to build
145fin
146          exit;;
147      "-d")
148          dim=$2 ; shift ; shift ;;
149     
150      "-p")
151          physique="$2" ; shift ; shift ;;
152
153      "-s")
154          scatterers=$2 ; shift ; shift ;;
155
156      "-b")
157          bands=$2 ; shift ; shift ;;
158
159      "-g")
160          grille="$2" ; shift ; shift ;;
161
162      "-c")
163          couple="$2" ; shift ; shift ;;
164
165      "-prod")
166          compil_mod="prod" ; shift ;;
167
168      "-dev")
169          compil_mod="dev" ; shift ;;
170
171      "-debug")
172          compil_mod="debug" ; shift ;;
173
174      "-io")
175          io="$2" ; shift ; shift ;;
176
177      "-v")
178          veget="$2" ; shift ; shift ;;
179
180      "-chimie")
181          chimie="$2" ; shift ; shift ;;
182
183      "-parallel")
184          parallel="$2" ; shift ; shift ;;
185     
186      "-include")
187          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
188
189      "-cpp")
190          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
191
192      "-cosp")
193          cosp="$2" ; shift ; shift ;;
194     
195      "-sisvat")
196          sisvat="$2" ; shift ; shift ;;
197     
198      "-rrtm")
199          rrtm="$2" ; shift ; shift ;;
200     
201      "-dust")
202          dust="$2" ; shift ; shift ;;
203     
204      "-strataer")
205          strataer="$2" ; shift ; shift ;;
206     
207      "-mem")
208          paramem="mem" ; shift ;;
209
210      "-filtre")
211          filtre=$2 ; shift ; shift ;;
212
213      "-link")
214          LIB="$LIB $2" ; shift ; shift ;;
215
216      "-full")
217          full="full" ; shift ;;
218
219      "-ext_src")
220          EXT_SRC=$2 ; shift ; shift ;;
221
222      "-arch")
223          arch=$2 ; arch_defined="TRUE" ; shift ; shift ;;
224
225      "-arch_path")
226          arch_path=$2 ; arch_path_defined="TRUE"; shift ; shift ;;
227
228      *)
229          code="$1" ; shift ;;
230  esac
231done
232
233###############################################################
234# lecture des chemins propres \`a l'architecture de la machine #
235###############################################################
236rm -f .void_file
237echo > .void_file
238rm -rf .void_dir
239mkdir .void_dir
240
241if [[ "$arch_defined" == "TRUE" ]]
242then
243  rm -f arch.path
244  rm -f arch.fcm
245  rm -f arch.env
246
247  if test -f $arch_path/arch-${arch}.path
248  then
249    ln -s $arch_path/arch-${arch}.path arch.path
250  elif test -f $arch_default_path/arch-${arch}.path
251  then
252    ln -s $arch_default_path/arch-${arch}.path arch.path
253  fi
254       
255  if test -f $arch_path/arch-${arch}.fcm
256  then
257    ln -s $arch_path/arch-${arch}.fcm arch.fcm
258  elif test -f $arch_default_path/arch-${arch}.fcm
259  then
260    ln -s $arch_default_path/arch-${arch}.fcm arch.fcm
261  fi
262
263  if test -f $arch_path/arch-${arch}.env
264  then
265    ln -s $arch_path/arch-${arch}.env arch.env
266  elif test -f $arch_default_path/arch-${arch}.env
267  then
268    ln -s $arch_default_path/arch-${arch}.env arch.env
269  else
270    ln -s .void_file arch.env
271  fi
272  # source architecture PATH and ENV files
273  source arch.env
274  source arch.path
275else
276  echo "You must define a target architecture"
277  exit 1
278fi
279
280########################################################################
281# Definition des clefs CPP, des chemins des includes et modules
282#  et des libraries
283########################################################################
284
285# basic compile flags from arch.fcm file
286archfileline=$( grep -i '^%BASE_FFLAGS' arch.fcm )
287COMPIL_FFLAGS=$( echo ${archfileline##%BASE_FFLAGS} )
288
289# other compile flags, depending on compilation mode
290if [[ "$compil_mod" == "prod" ]]
291then
292## read COMPIL_FFLAGS from arch.fcm file
293  archfileline=$( grep -i '^%PROD_FFLAGS' arch.fcm )
294  archfileopt=$( echo ${archfileline##%PROD_FFLAGS} )
295  COMPIL_FFLAGS="${COMPIL_FFLAGS} ${archfileopt}"
296elif [[ "$compil_mod" == "dev" ]]
297then
298## read %DEV_FFLAGS from arch.fcm file
299  archfileline=$( grep -i '^%DEV_FFLAGS' arch.fcm )
300  archfileopt=$( echo ${archfileline##%DEV_FFLAGS} )
301  COMPIL_FFLAGS="${COMPIL_FFLAGS} ${archfileopt}"
302elif [[ "$compil_mod" == "debug" ]]
303then
304## read %DEBUG_FFLAGS from arch.fcm file
305  archfileline=$( grep -i '^%DEBUG_FFLAGS' arch.fcm )
306  archfileopt=$( echo ${archfileline##%DEBUG_FFLAGS} )
307  COMPIL_FFLAGS="${COMPIL_FFLAGS} ${archfileopt}"
308fi
309
310# add CPP_KEY defined in arch.fcm file
311archfileline=$( grep -i '^%FPP_DEF' arch.fcm )
312archfileopt=$( echo ${archfileline##%FPP_DEF} )
313CPP_KEY="$CPP_KEY ${archfileopt}"
314
315# get compiler name from arch.fcm file
316archfileline=$( grep -i '^%COMPILER' arch.fcm )
317fcompiler=$( echo ${archfileline##%COMPILER} )
318
319# get linker name from arch.fcm file
320archfileline=$( grep -i '^%LINK' arch.fcm )
321linker=$( echo ${archfileline##%LINK} )
322
323# get ar command from arch.fcm file
324archfileline=$( grep -i '^%AR' arch.fcm )
325arcommand=$( echo ${archfileline##%AR} )
326
327# get make utility from arch.fcm file
328archfileline=$( grep -i '^%MAKE' arch.fcm )
329makecommand=$( echo ${archfileline##%MAKE} )
330
331# get basic libraries to link with arch.fcm file
332archfileline=$( grep -i '^%BASE_LD' arch.fcm )
333archfileopt=$( echo ${archfileline##%BASE_LD} )
334LIB="$LIB  ${archfileopt}"
335
336#NB some -I... might be located in the %FPP_FLAGS section of the arch file
337archfileline=$( grep -i '^%FPP_FLAGS' arch.fcm )
338for inc in $archfileline ; do INCLUDE="$INCLUDE `echo $inc | grep '\-I'`" ; done
339
340phys_root=$physique
341if [[ "${physique:0:3}" == "lmd" ]] ; then phys_root=lmd ; fi
342if [[ "${physique:0:3}" == "mar" ]] ; then phys_root=mar ; fi
343if [[ "${physique:0:4}" == "mars" ]] ; then phys_root=mars ; fi
344if [[ "${physique:0:3}" == "std" ]] ; then phys_root=std ; fi
345if [[ "${physique:0:5}" == "venus" ]] ; then phys_root=venus ; fi
346if [[ "${physique:0:5}" == "titan" ]] ; then phys_root=titan ; fi
347if [[ "${physique:0:3}" == "dev" ]] ; then phys_root=dev ; fi
348
349if [[ "$physique" != "nophys" ]]
350then
351   #We'll use some physics
352   src_dirs="$src_dirs phy_common phy$physique"
353   LIBPHY='$(LIBO)/libphy'"$physique"'.a'
354   LIBPHY_COMMON='$(LIBO)/libphy_common.a'
355   lib_phy='-lphy'"$physique"' -lphy_common'
356   CPP_KEY="$CPP_KEY CPP_PHYS"
357   if [[ "${phys_root}" == "lmd" ]]
358   then
359   #For lmd physics, default planet type is Earth
360   CPP_KEY="$CPP_KEY CPP_EARTH"
361   fi
362fi
363
364######### CAS PARTICULIER CHIMIE TITAN
365if [[ "$physique" == "titan" ]]
366then
367   INCLUDE="$INCLUDE"' -I$(LIBF)/chim'"$physique"
368   LIB="$LIB -l${LIBPREFIX}chim$physique"
369   opt_dep="$opt_dep chim$physique"
370   src_dirs="$src_dirs chim$physique"
371# get C compiler name and optim from arch.fcm file
372   archfileline=$( grep -i '^%C_COMPILER' arch.fcm )
373   ccompiler=$( echo ${archfileline##%C_COMPILER} )
374   archfileline=$( grep -i '^%C_OPTIM' arch.fcm )
375   coptim=$( echo ${archfileline##%C_OPTIM} )
376   OPTIMC="${coptim}"
377   INCLUDEC='-I$(LIBF)/grid -I.'
378fi
379#########
380
381######### CAS PARTICULIER NUAGES VENUS
382if [[ "$physique" == "venus" ]]
383then
384   src_dirs="$src_dirs phy${physique}/cloudvenus"
385fi
386#########
387
388# for Mars (but could be used by others as well), there is also "aeronomars"
389if [[ -d ${LIBFGCM}/aerono${physique} ]]
390then
391   src_dirs="$src_dirs aerono$physique"
392   INCLUDE="$INCLUDE -I${LIBFGCM}/aerono${physique}"
393   LIB="$LIB -l${LIBPREFIX}aerono$physique"
394   opt_dep="$opt_dep aerono$physique"
395if [[ "$physique" == "mars" ]]
396then
397   laeronomars="-l${LIBPREFIX}aeronomars"
398fi
399if [[ "$physique" == "std" ]]
400then
401   laeronostd="-l${LIBPREFIX}aeronostd"
402fi
403fi
404
405if [[ "$chimie" == "INCA" ]]
406then
407   CPP_KEY="$CPP_KEY INCA"
408   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
409   LIB="$LIB -L${INCA_LIBDIR} ${INCA_LIB}"
410   libchimie=" -L${INCA_LIBDIR} ${INCA_LIB}"
411fi
412
413if [[ "$couple" != "false" ]]
414then
415   CPP_KEY="$CPP_KEY CPP_COUPLE"
416   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
417   LIB="$LIB -L${OASIS_LIBDIR} ${OASIS_LIB}"
418fi
419
420if [[ "$parallel" != "none" && \
421     ( "$code" == "newstart" || "$code" == "start2archive" ) ]]
422then
423    echo "newstart or start2archive utilities should be run in serial!"
424    echo " Compile without -parallel [mpi|omp|mpi_omp] option!"
425    exit
426fi
427
428if [[ "$parallel" == "none" ]]
429then
430  FLAG_PARA=''
431else
432  FLAG_PARA="$paramem"
433fi
434
435if [[ "$parallel" == "mpi" ]]
436then
437   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
438  # MPI additional compilation options
439  archfileline=$( grep -i '^%MPI_FFLAGS' arch.fcm )
440  PARA_FFLAGS=$( echo ${archfileline##%MPI_FFLAGS} )
441  # MPI additional links
442  archfileline=$( grep -i '^%MPI_LD' arch.fcm )
443  PARA_LD=$( echo ${archfileline##%MPI_LD} )
444elif [[ "$parallel" == "omp" ]]
445then
446   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
447  # OMP additional compilation options
448  archfileline=$( grep -i '^%OMP_FFLAGS' arch.fcm )
449  PARA_FFLAGS=$( echo ${archfileline##%OMP_FFLAGS} )
450  # OMP additional links
451  archfileline=$( grep -i '^%OMP_LD' arch.fcm )
452  PARA_LD=$( echo ${archfileline##%OMP_LD} )
453elif [[ "$parallel" == "mpi_omp" ]]
454then
455   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
456  # MPI additional compilation options
457  archfileline=$( grep -i '^%MPI_FFLAGS' arch.fcm )
458  PARA_FFLAGS=$( echo ${archfileline##%MPI_FFLAGS} )
459  # OMP additional compilation options
460  archfileline=$( grep -i '^%OMP_FFLAGS' arch.fcm )
461  PARA_FFLAGS="${PARA_FFLAGS} "$( echo $archfileopt ${archfileline##%OMP_FFLAGS} )
462  # MPI additional links
463  archfileline=$( grep -i '^%MPI_LD' arch.fcm )
464  PARA_LD=$( echo ${archfileline##%MPI_LD} )
465  # OMP additional links
466  archfileline=$( grep -i '^%OMP_LD' arch.fcm )
467  PARA_LD="${PARA_LD} "$( echo $archfileopt ${archfileline##%OMP_LD} )
468fi
469
470if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
471   && "$compil_mod" == "debug" ]]
472then
473    echo "Usually, parallelization with OpenMP requires some optimization."
474    echo "We suggest switching to \"-dev\"."
475fi
476
477if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" ]
478then
479
480   INCLUDE="${INCLUDE} ${ORCHIDEE_INCDIR}"
481   CPP_KEY="$CPP_KEY CPP_VEGET"
482# temporary, for Orchidee versions 1.9.* (before openmp activation)
483   if [[ "$veget" == "orchidee1.9" ]] ; then
484      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
485   fi
486   if [[ "$veget" == "orchidee2.0" ]] ; then
487      orch_libs="sechiba parameters stomate parallel orglob orchidee"
488   else
489      orch_libs="sechiba parameters stomate parallel orglob"
490   fi
491   LIB="${LIB} -L${ORCHIDEE_LIBDIR} ${ORCHIDEE_LIB}"
492elif [[ "$veget" != "false" ]] ; then
493   echo "Option -v $veget does not exist"
494   echo "Use ./makelmdz -h for more information"
495   exit 
496fi
497
498if [[ $io == ioipsl ]]
499then
500   CPP_KEY="$CPP_KEY CPP_IOIPSL"
501   INCLUDE="$INCLUDE ${IOIPSL_INCDIR}"
502   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB}"
503elif [[ $io == mix ]]
504then
505   # For now, xios implies also using ioipsl
506   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
507   INCLUDE="$INCLUDE ${IOIPSL_INCDIR} ${XIOS_INCDIR}"
508   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB} ${XIOS_LIBDIR} ${XIOS_LIB}"
509elif [[ $io == xios ]]
510then
511   # For now, xios implies also using ioipsl
512   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS CPP_IOIPSL_NO_OUTPUT"
513   INCLUDE="$INCLUDE ${IOIPSL_INCDIR} ${XIOS_INCDIR}"
514   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB} ${XIOS_LIBDIR} ${XIOS_LIB}"
515fi
516
517if [[ "$cosp" == "true" ]]
518then
519   CPP_KEY="$CPP_KEY CPP_COSP"
520   COSP_PATH="$LIBFGCM/cosp"
521   src_dirs="$src_dirs cosp"
522#   LIB="${LIB} -l${LIBPREFIX}cosp"
523   opt_dep="$opt_dep cosp"
524   lcosp="-l${LIBPREFIX}cosp"
525   INCLUDE="$INCLUDE"' -I$(LIBF)/cosp'
526fi
527
528if [[ "$sisvat" == "true" ]]
529then
530   CPP_KEY="$CPP_KEY CPP_SISVAT"
531   src_dirs="$src_dirs phy${physique}/sisvat"
532fi
533
534if [[ "$rrtm" == "true" ]]
535then
536   CPP_KEY="$CPP_KEY CPP_RRTM"
537   src_dirs="$src_dirs phy${physique}/rrtm"
538fi
539
540if [[ "$dust" == "true" ]]
541then
542   CPP_KEY="$CPP_KEY CPP_Dust"
543   src_dirs="$src_dirs phy${physique}/Dust"
544fi
545
546if [[ "$strataer" == "true" ]]
547then
548   CPP_KEY="$CPP_KEY CPP_StratAer"
549   src_dirs="$src_dirs phy${physique}/StratAer"
550fi
551
552# NETCDF library include/library paths
553INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
554LIB="$LIB ${NETCDF_LIBDIR} ${NETCDF_LIB}"
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########################################################################
571# Gestion des dimensions du modele.
572# on cree ou remplace le fichier des dimensions
573########################################################################
574
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?"
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?"
589  read reponse
590  if [[ $reponse == "oui" || $reponse == "yes" ]]
591  then
592    \rm -f $LIBFGCM/grid/dimensions.h
593  else
594    exit
595  fi
596fi
597
598
599cd $LIBFGCM/grid/dimension
600./makdim $dim
601if (($? != 0))
602then
603    exit 1
604fi
605
606cat $LIBFGCM/grid/dimensions.h
607cd $LMDGCM
608
609if [[ "$bands" != "" ]]
610then
611  # Generic model, recreate bands.h (IR & VIS bands for radiative transfer)
612  bands=$(echo $bands | sed -e 's/[^0-9]/ /g')
613  cd $LIBFGCM/phy$physique/bands
614  ./makbands $bands
615  cat $LIBFGCM/phy$physique/bands.h
616  cd $LMDGCM
617fi
618
619if [[ "$scatterers" != "" ]]
620then
621  # Generic model, recreate scatterers.h
622  cd $LIBFGCM/phy$physique/scatterers
623  ./make_scatterers $scatterers
624  cat $LIBFGCM/phy$physique/scatterers.h
625  cd $LMDGCM
626fi
627
628
629########################################################################
630# Differentes dynamiques (3d, 2d, 1d)
631########################################################################
632
633if (( $dimc == 3 )) ; then
634   src_dirs="$src_dirs $filtre dyn3d_common dyn3d${FLAG_PARA}"
635   if [[ $physique != "nophys" ]] ; then
636     src_dirs="$src_dirs dynphy_lonlat dynphy_lonlat/phy${phys_root}"
637     libdyn_phy="-ldynphy_lonlat"
638     LIBDYN_PHYS='$(LIBO)/libdynphy_lonlat.a'
639     INCLUDE="$INCLUDE "'-I$(LIBF)/dynphy_lonlat'
640     INCLUDE="$INCLUDE "'-I$(LIBF)/dynphy_lonlat/phy'"${phys_root}"
641   fi
642  cd $LIBFGCM/grid
643  \rm fxyprim.h
644  cp -p fxy_${grille}.h fxyprim.h
645  filtre="FILTRE=$filtre"
646  INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d${FLAG_PARA} -I$(LIBF)/dyn3d_common '
647elif (( $dimc == 2 )) ; then
648   src_dirs="$src_dirs dyn2d"
649   filtre="FILTRE= L_FILTRE= "
650   INCLUDE="$INCLUDE "'-I$(LIBF)/dyn2d'
651elif (( $dimc == 1 )) ; then
652   ## Sanity check: 1D models should be used in serial
653   if [[ $parallel != "none" ]]
654   then
655     echo "Error: a 1D model should not be compiled with "
656     echo "       -parallel [mpi|omp|mpi_omp] option!"
657     exit
658   fi
659   echo pas de dynamique
660   src_dirs="$src_dirs phy${physique}/dyn1d"
661   CPP_KEY="$CPP_KEY CPP_1D"
662   filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
663   #INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d -I$(LIBF)/dyn3d_common ' # Pas tres propre
664   INCLUDE="$INCLUDE "' -I$(LIBF)/phy'"$physique"'/dyn1d'
665else
666   echo Dimension dimc=$dimc pas prevu ; exit
667fi
668
669cd $LMDGCM
670
671########################################################################
672# library directory name:
673########################################################################
674
675nomlib=`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'`
676echo "Path to library: "$nomlib
677
678########################################################################
679#  Cleanup for a full recompilation, if requested
680########################################################################
681
682if [[ $full == "full" ]]
683then
684# remove makefile and libraries
685  echo "-full option: recompiling from scratch"
686  \rm -f makefile
687  \rm -rf "${LIBOGCM}/${nomlib}"
688fi
689
690########################################################################
691#  Avant de lancer le make, on recree le makefile si necessaire
692########################################################################
693########################################################################
694# c'est a dire dans 3 cas:
695# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
696#    derniere creation du makefile
697# 2. si le fichier contenant cette liste "liste_des_sources"
698#    n'existe pas.
699# 3. Si le makefile n'existe pas.
700########################################################################
701cd $LMDGCM
702
703
704if [[ -r .makelmdz ]]
705then
706old_lmdz_configuration=$(cat .makelmdz )
707else
708old_lmdz_configuration=""
709fi
710lmdz_configuration="$src_dirs"
711if [[ "$lmdz_configuration" != "$old_lmdz_configuration" ]]
712then
713  configuration_change="true"
714else
715  configuration_change="false"
716fi
717
718mkdir -p make_dir
719suf_make=`echo $src_dirs | sed -e 's/\//_/g' -e 's/ /_/g'`
720echo suf_make $suf_make
721
722\rm tmp77 tmp90
723for dir in $src_dirs ; do
724find libf/$dir -name '*.[Fh]' -print | sort >> tmp77
725find libf/$dir -name '*.F90' -print | sort >> tmp90
726######### CAS PARTICULIER CHIMIE TITAN
727if [[ "$physique" == "titan" ]]
728then 
729  find libf -name '*.[ch]' -print | sort > tmpC
730fi
731#########
732done
733
734liste77=make_dir/liste_des_sources_f77_$suf_make
735liste90=make_dir/liste_des_sources_f90_$suf_make
736if [[ "$physique" == "titan" ]] ; then
737listeC=make_dir/liste_des_sources_C_$suf_make
738fi
739makefile=make_dir/makefile_$suf_make
740
741if [[ $configuration_change == "true" || ! ( -r makefile ) || ! ( -r $liste90 ) || ! ( -r $liste77 ) || ` diff tmp77 $liste77 | wc -w ` -ne 0 || ` diff tmp90 $liste90 | wc -w ` -ne 0 ]]
742then
743  echo "les fichiers suivants ont ete crees ou detruits"
744  echo "ou les fichiers suivants sont passes ou ne sont plus en Fortran 90"
745  diff $liste77  tmp77
746  diff $liste90 tmp90
747  \cp -f tmp77 $liste77
748  \cp -f tmp90 $liste90
749######### CAS PARTICULIER CHIMIE TITAN
750  if [[ "$physique" == "titan" ]]
751  then 
752  diff $listeC tmpC
753  \cp -f tmpC $listeC
754  fi
755#########
756  echo "Recreating the makefile"
757  echo "src_dirs: $src_dirs"
758  ./create_make_gcm $src_dirs > tmp
759  \mv -f tmp $makefile
760  echo "New makefile created"
761######### CAS PARTICULIER CHIMIE TITAN
762else if [[ "$physique" == "titan" ]]
763 then
764   if [[ ! ( -r $listeC ) || ` diff tmpC $listeC | wc -w ` -ne 0 ]]
765   then
766     diff $listeC tmpC
767     \cp -f tmpC $listeC
768     echo "on recree le makefile"
769     ./create_make_gcm $src_dirs > tmp
770     \mv -f tmp $makefile
771     echo "Nouveau makefile cree"
772   fi
773 fi
774#########
775fi
776
777ln -sf $makefile makefile
778
779#Create a .makelmdz file containing main compilation option for later comparisons
780echo "$lmdz_configuration" > .makelmdz
781
782#################################################################
783# Preparation de l'execution de la commande make
784#################################################################
785
786# find code suffix and directory where code is located
787if [[ -r $LMDGCM/libf/dyn${dimc}d${FLAG_PARA}/${code}.F ]]
788then
789  source_code=${code}.F
790  dirmain=dyn${dimc}d${FLAG_PARA}
791else
792  if [[ -r $LMDGCM/libf/dyn${dimc}d${FLAG_PARA}/${code}.F90 ]]
793  then
794    source_code=${code}.F90
795    dirmain=dyn${dimc}d${FLAG_PARA}
796  else
797    if [[ -r $LMDGCM/libf/phy${physique}/${code}.F ]]
798    then
799      source_code=${code}.F
800      dirmain=phy${physique}
801    else
802      if [[ -r $LMDGCM/libf/phy${physique}/${code}.F90 ]]
803      then
804        source_code=${code}.F90
805        dirmain=phy${physique}
806      else
807        if [[ -r $LMDGCM/libf/dynphy_lonlat/phy$phys_root/${code}.F ]] 
808        then
809          source_code=${code}.F
810          dirmain="dynphy_lonlat/phy${phys_root}"
811        else
812          if [[ -r $LMDGCM/libf/phy$physique/dyn1d/${code}.F ]]
813          then
814            source_code=${code}.F
815            dirmain=phy$physique/dyn1d
816          else
817            echo "Error: cannot find ${code}.F[90]"
818            echo " neither in dyn${dimc}d${FLAG_PARA} nor in phy${physique}"
819            exit
820          fi
821        fi
822      fi
823    fi
824  fi
825fi
826
827if [[ ! -d "${LIBOGCM}/${nomlib}" ]]
828then
829  mkdir ${LIBOGCM}/${nomlib}
830  # check we indeed managed to create the directory
831  if [[ ! $? ]]
832  then
833    echo "Error: could not create directory ${LIBOGCM}/${nomlib}"
834    exit
835  fi
836fi
837
838# where module files are created
839mod_loc_dir=$localdir
840
841if [[ "$physique" != "nophys" ]]
842then
843  INCLUDE="$INCLUDE"' -I$(LIBF)/phy'"$physique"
844#  phys="PHYS=$physique"
845#else
846#  # trick to avoid having a physics-related library in the makefile
847#  phys="L_PHY= LIBPHY="
848fi
849INCLUDE="$INCLUDE"' -I'${LIBOGCM}/${nomlib}
850#if (( $dimension == 1 ))
851#then
852# INCLUDE="$INCLUDE"' -I$(LIBF)/dyn3d -I'${LIBOGCM}/${nomlib}
853#else
854#INCLUDE="$INCLUDE"' -I$(LIBF)/dyn'${dimc}'d'$FLAG_PARA' -I'${LIBOGCM}/${nomlib}
855#fi
856
857# ranlib utility (check it exists or else default to ls)
858if [[ `which ranlib > /dev/null 2>&1 ; echo $?` -eq 0 ]]
859then
860  ranlib="ranlib"
861else
862  ranlib="ls"
863fi
864
865# add CPP keys to COMPIL_FLAGS
866# (but first add -D before all CPP_KEY items)
867cpp_definitions=`echo $CPP_KEY | sed -e 's/[A-Za-z_=0-9]*/-D&/g'`
868# (but add a -WF,-D before all CPP_KEY items) => for xlf on Vargas
869if [[ "${fcompiler:0:3}" == "xlf" ]]
870then
871cpp_definitions=`echo $CPP_KEY | sed -e 's/[A-Za-z_=0-9]*/-WF,-D&/g'`
872fi
873COMPIL_FFLAGS="${COMPIL_FFLAGS} ${cpp_definitions}"
874
875#################################################################
876# Execution du make
877#################################################################
878echo $makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
879OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
880OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
881OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
882OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
883OPTIMC="$OPTIMC" \
884INCLUDE="$INCLUDE" \
885INCLUDEC="$includec" \
886$filtre \
887LIBO=${LIBOGCM}/${nomlib} \
888"PHYS=$physique" \
889LIBPHY=${LIBPHY} \
890LIBPHY_COMMON=${LIBPHY_COMMON} \
891LIBDYN_PHYS=${LIBDYN_PHYS} \
892DIM=$dimc \
893FLAG_PARA=$FLAG_PARA \
894L_PHY="$lib_phy" \
895L_DYN_PHY="$libdyn_phy" \
896L_ADJNT=$adjnt \
897L_COSP="$lcosp" \
898L_AERONOMARS="$laeronomars" \
899L_AERONOSTD="$laeronostd" \
900L_CHIMIE="$libchimie" \
901LOCAL_DIR="$localdir"  \
902F77="$fcompiler" \
903F90="$fcompiler" \
904CCC="$ccompiler" \
905OPLINK="$LIB" \
906LINK="$linker" \
907GCM="$LMDGCM" \
908MOD_LOC_DIR=$mod_loc_dir \
909MOD_SUFFIX="mod" \
910AR=$arcommand \
911DIRMAIN=$dirmain \
912SOURCE=$source_code \
913PROG=$code
914
915$makecommand RANLIB=$ranlib -f $LMDGCM/makefile \
916OPTION_DEP="$opt_dep" OPTION_LINK="$LIB ${PARA_LD}" \
917OPTIM90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
918OPTIMTRU90="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
919OPTIM="${COMPIL_FFLAGS} ${PARA_FFLAGS}" \
920OPTIMC="$OPTIMC" \
921INCLUDE="$INCLUDE" \
922INCLUDEC="$includec" \
923$filtre \
924LIBO=${LIBOGCM}/${nomlib} \
925"PHYS=$physique" \
926LIBPHY=${LIBPHY} \
927LIBPHY_COMMON=${LIBPHY_COMMON} \
928LIBDYN_PHYS=${LIBDYN_PHYS} \
929DIM=$dimc \
930FLAG_PARA=$FLAG_PARA \
931L_PHY="$lib_phy" \
932L_DYN_PHY="$libdyn_phy" \
933L_ADJNT="$adjnt" \
934L_COSP="$lcosp" \
935L_AERONOMARS="$laeronomars" \
936L_AERONOSTD="$laeronostd" \
937L_CHIMIE="$libchimie" \
938LOCAL_DIR="$localdir"  \
939F77="$fcompiler" \
940F90="$fcompiler" \
941CCC="$ccompiler" \
942OPLINK="$LIB" \
943LINK="$linker" \
944GCM="$LMDGCM" \
945MOD_LOC_DIR=$mod_loc_dir \
946MOD_SUFFIX="mod" \
947AR=$arcommand \
948DIRMAIN=$dirmain \
949SOURCE=$source_code \
950PROG=$code
951
952if [[ -r $LIBFGCM/grid/dimensions.h ]]
953then
954  # Cleanup: remove dimension.h file
955  \rm -f $LIBFGCM/grid/dimensions.h
956fi
Note: See TracBrowser for help on using the repository browser.