source: trunk/LMDZ.COMMON/makelmdz_fcm @ 957

Last change on this file since 957 was 957, checked in by emillour, 12 years ago

Common dynamics:

  • Add possibility to read a traceur.def with a different format; ie: traceur.def file with lines such as "name hadv vadv" where hadv and vadv are advection scheme number , or even just "name" on each line (advections shceme then defaults to 10, the standard VanLeer? scheme)
  • Add the "-s" (number of radiatively active scatterres) and "-b" (number of bands in the IR and visible) options to scripts makelmdz and makelmdz_fcm. Using these options only makes sense if compiling with generic physics.

EM

File size: 12.3 KB
Line 
1#!/bin/bash
2# $Id: makelmdz_fcm 1615 2012-02-10 15:42:26Z emillour $
3# This is a script in Bash.
4
5# FH : on ne crée plus le fichier arch.mk qui est supposé exister par
6# FH : ailleurs.
7# FH : ulterieurement, ce fichier sera pré-existant pour une série
8# FH : de configurations en versions optimisées et debug qui seront
9# FH : liés (ln -s) avec arch.mk en fonction de l'architecture.
10# FH : Pour le moment, cette version est en test et on peut créer les
11# FH : arch.mk en lançant une première fois makegcm.
12#
13##set -x
14########################################################################
15# options par defaut pour la commande make
16########################################################################
17
18dim="96x72x19"
19physique=lmd
20filtre=filtrez
21grille=reg
22couple=false
23veget=false
24chimie=false
25chemistry=false
26parallel=none
27compil_mod=prod
28io=ioipsl
29LIBPREFIX=""
30cosp=false
31bands=""
32scatterers=""
33
34LMDGCM=`/bin/pwd`
35LIBOGCM=$LMDGCM/libo
36LIBFGCM=$LMDGCM/libf
37# path for optional packages, but default set to ".void_dir"
38COSP_PATH=$LMDGCM/.void_dir
39CHEM_PATH=$LMDGCM/.void_dir
40# Path to fcm utility:
41fcm_path=$LMDGCM/tools/fcm/bin
42
43########################################################################
44#  Quelques initialisations de variables du shell.
45########################################################################
46
47CPP_KEY="" 
48INCLUDE=""
49LIB=""
50adjnt=""
51COMPIL_FFLAGS="%PROD_FFLAGS"
52PARA_FFLAGS=""
53PARA_LD=""
54EXT_SRC=""
55
56########################################################################
57# lecture des options de mymake
58########################################################################
59
60while (($# > 0))
61  do
62  case $1 in
63      "-h") cat <<fin
64Usage :
65makegcm [options] -arch arch exec
66[-h]                       : brief help
67[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
68[-s nscat]                 : (Generic) Number of radiatively active scatterers
69[-b IRxVIS]                : (Generic) Number of infrared (IR) and visible (VIS) bands for radiative transfer
70[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
71[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug .
72[-c false/MPI1/MPI2]       : (Earth) coupling with ocean model : MPI1/MPI2/false (default: false)
73[-v false/true]            : (Earth) with or without vegetation (default: false)
74[-chimie INCA/false]       : (Earth) with INCA chemistry model or without (default: false)
75[-cosp cosp/false]         : (Earth) add the cosp model (default: false)
76[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
77[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
78[-io IO]                   : Input/Output library (default: ioipsl)
79[-include INCLUDES]        : extra include path to add
80[-cpp CPP_KEY]             : additional preprocessing definitions
81[-adjnt]                   : adjoint model, not operational ...
82[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
83[-link LINKS]              : additional links with other libraries
84[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
85[-ext_src path]            : path to an additional set of routines to compile with the model
86 -arch arch                : target architecture
87 exec                      : executable to build
88fin
89          exit;;
90
91      "-d")
92          dim=$2 ; shift ; shift ;;
93     
94      "-p")
95          physique="$2" ;  shift ; shift ;;
96
97      "-s")
98          scatterers=$2 ; shift ; shift ;;
99
100      "-b")
101          bands=$2 ; shift ; shift ;;
102
103      "-g")
104          grille="$2" ; shift ; shift ;;
105
106      "-c")
107          couple="$2" ; shift ; shift ;;
108
109      "-prod")
110          compil_mod="prod" ; shift ;;
111
112      "-dev")
113          compil_mod="dev" ; shift ;;
114
115      "-debug")
116          compil_mod="debug" ; shift ;;
117
118      "-io")
119          io="$2" ; shift ; shift ;;
120
121      "-v")
122          veget="$2" ; shift ; shift ;;
123
124      "-chimie")
125          chimie="$2" ; shift ; shift ;;
126
127      "-parallel")
128          parallel="$2" ; shift ; shift ;;
129     
130      "-include")
131          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
132
133      "-cpp")
134          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
135
136      "-adjnt")
137          echo "not operational ... work to be done here ";exit
138          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
139          optim="$optim -Dadj" ; shift ;;
140
141      "-cosp")
142          cosp="$2" ; shift ; shift ;;
143
144
145      "-filtre")
146          filtre=$2 ; shift ; shift ;;
147
148      "-link")
149          LIB="$LIB $2" ; shift ; shift ;;
150
151      "-fcm_path")
152          fcm_path=$2 ; shift ; shift ;;
153
154      "-ext_src")
155          EXT_SRC=$2 ; shift ; shift ;;
156
157      "-arch")
158          arch=$2 ; shift ; shift ;;
159
160      *)
161          code="$1" ; shift ;;
162  esac
163done
164
165###############################################################
166# mettre le chemin du fcm dans le path
167###############################################################
168export PATH=${fcm_path}:${PATH}
169
170echo "Chemin du fcm utlise :" 
171which fcm
172
173###############################################################
174# lecture des chemins propres à l'architecture de la machine #
175###############################################################
176rm -f .void_file
177echo > .void_file
178rm -rf .void_dir
179mkdir .void_dir
180rm -f arch.path
181ln -s arch/arch-${arch}.path ./arch.path
182source arch.path
183
184########################################################################
185# Definition des clefs CPP, des chemins des includes et modules
186#  et des libraries
187########################################################################
188
189if [[ "$compil_mod" == "prod" ]]
190then
191  COMPIL_FFLAGS="%PROD_FFLAGS"
192elif [[ "$compil_mod" == "dev" ]]
193then
194  COMPIL_FFLAGS="%DEV_FFLAGS"
195elif [[ "$compil_mod" == "debug" ]]
196then
197  COMPIL_FFLAGS="%DEBUG_FFLAGS"
198fi
199
200if [[ "$physique" != "nophys" ]]
201then
202   #We'll use some physics
203   CPP_KEY="$CPP_KEY CPP_PHYS"
204   if [[ "${physique:0:3}" == "lmd" ]]
205   then
206   #For lmd physics, default planet type is Earth
207   CPP_KEY="$CPP_KEY CPP_EARTH"
208   fi
209fi
210
211if [[ "$chimie" == "INCA" ]]
212then
213   CPP_KEY="$CPP_KEY INCA"
214   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
215   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
216fi
217
218if [[ "$couple" != "false" ]]
219then
220   CPP_KEY="$CPP_KEY CPP_COUPLE"
221   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
222   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
223fi
224
225if [[ "$parallel" == "mpi" ]]
226then
227   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
228   PARA_FFLAGS="%MPI_FFLAGS"
229   PARA_LD="%MPI_LD"
230elif [[ "$parallel" == "omp" ]]
231then
232   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
233   PARA_FFLAGS="%OMP_FFLAGS"
234   PARA_LD="%OMP_LD"
235elif [[ "$parallel" == "mpi_omp" ]]
236then
237   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
238   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
239   PARA_LD="%MPI_LD %OMP_LD"
240fi
241
242if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
243   && "$compil_mod" == "debug" ]]
244then
245    echo "Usually, parallelization with OpenMP requires some optimization."
246    echo "We suggest switching to \"-dev\"."
247fi
248
249if [[ "$veget" == "true" ]]
250then
251   CPP_KEY="$CPP_KEY CPP_VEGET"
252   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
253   LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
254fi
255
256if [[ $io == ioipsl ]]
257then
258   CPP_KEY="$CPP_KEY CPP_IOIPSL"
259   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
260   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
261fi
262
263if [[ "$cosp" == "true" ]]
264then
265   CPP_KEY="$CPP_KEY CPP_COSP"
266   COSP_PATH="$LIBFGCM/cosp"
267#   LIB="${LIB} -l${LIBPREFIX}cosp"
268fi
269
270if [[ "$physique" == "titan" ]]
271then
272   CHEM_PATH="${LIBFGCM}/chim${physique}"
273   INCLUDE="$INCLUDE -I${LIBFGCM}/chim${physique}"
274fi
275
276INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
277LIB="$LIB ${NETCDF_LIBDIR}"
278
279########################################################################
280# calcul du nombre de dimensions
281########################################################################
282
283
284dim_full=$dim
285dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
286set $dim
287dimc=$#
288echo calcul de la dimension
289echo dim $dim
290echo dimc $dimc
291
292
293########################################################################
294# Gestion des dimensions du modele.
295# on cree ou remplace le fichier des dimensions
296########################################################################
297
298cd $LIBFGCM/grid/dimension
299./makdim $dim
300cat $LIBFGCM/grid/dimensions.h
301cd $LMDGCM
302
303if [[ "$bands" != "" ]]
304then
305  # Generic model, recreate bands.h (IR & VIS bands for radiative transfer)
306  bands=$(echo $bands | sed -e 's/[^0-9]/ /g')
307  cd $LIBFGCM/phy$physique/bands
308  ./makbands $bands
309  cat $LIBFGCM/phy$physique/bands.h
310  cd $LMDGCM
311fi
312
313if [[ "$scatterers" != "" ]]
314then
315  # Generic model, recreate scatterers.h
316  cd $LIBFGCM/phy$physique/scatterers
317  ./make_scatterers $scatterers
318  cat $LIBFGCM/phy$physique/scatterers.h
319  cd $LMDGCM
320fi
321
322
323########################################################################
324# Differentes dynamiques (3d, 2d, 1d)
325########################################################################
326
327dimension=`echo $dim | wc -w`
328echo dimension $dimension
329
330if (( $dimension == 3 ))
331then
332  cd $LIBFGCM/grid
333  \rm fxyprim.h
334  cp -p fxy_${grille}.h fxyprim.h
335#else
336#  echo "Probleme dans les dimensions de la dynamique !!"
337#  echo "Non reactive pour l'instant !!!"
338fi
339
340if (( $dimension == 1 ))
341then
342##in 1D, add dyn3d to include path (because main prog is in physics)
343  INCLUDE="$INCLUDE -Ilibf/dyn3d"
344#  echo pas de dynamique
345#  dyn="DYN= L_DYN=-ldyn3d "
346fi
347
348######################################################################
349#   Traitement special pour le nouveau rayonnement de Laurent Li.
350#   ---> YM desactive pour le traitemement en parallele
351######################################################################
352
353#if [[ -f $libf/phy$physique/raddim.h ]]
354#then
355# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
356#then
357#  \rm -f $libf/phy$physique/raddim.h
358#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
359#  echo $libf/phy$physique/raddim.$dimh.h
360#  cat $libf/phy$physique/raddim.h
361# else
362#  echo On peut diminuer la taille de l executable en creant
363#  echo le fichier $libf/phy$physique/raddim.$dimh.h
364#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
365# fi
366#fi
367
368######################################################################
369# Gestion du filtre qui n'existe qu'en 3d.
370######################################################################
371
372if (( `expr $dimc \> 2` == 1 ))
373then
374   filtre="FILTRE=$filtre"
375else
376   filtre="FILTRE= L_FILTRE= "
377fi
378echo MACRO FILTRE $filtre
379
380echo $dimc
381
382
383
384######################################################################
385# Creation du suffixe de la configuration
386######################################################################
387
388
389SUFF_NAME=_${dim_full}
390SUFF_NAME=${SUFF_NAME}_phy${physique}
391
392if [[ "$parallel" != "none" ]]
393then
394  SUFF_NAME=${SUFF_NAME}_para
395  DYN=dyn${dimc}dpar
396else
397  SUFF_NAME=${SUFF_NAME}_seq
398  DYN=dyn${dimc}d
399  ## specific stuff for 1D model (needs includes which are in dyn3d)
400  if (( $dimension == 1 )) ; then
401    SUFF_NAME=${SUFF_NAME}
402    DYN=dyn3d
403  fi
404fi
405
406if [[ $veget == "true" ]]
407then
408  SUFF_NAME=${SUFF_NAME}_orch
409fi
410
411if [[ $couple != "false" ]]
412then
413  SUFF_NAME=${SUFF_NAME}_couple
414fi
415
416if [[ $chimie == "INCA" ]]
417then
418  SUFF_NAME=${SUFF_NAME}_inca
419fi
420
421cd $LMDGCM
422config_fcm="config.fcm"
423rm -f $config_fcm
424touch $config_fcm
425rm -f bin/${code}${SUFF_NAME}.e
426rm -f arch.fcm
427rm -f arch.opt
428
429echo "%ARCH          $arch"          >> $config_fcm
430echo "%INCDIR        $INCLUDE"       >> $config_fcm 
431echo "%LIB           $LIB"           >> $config_fcm
432echo "%ROOT_PATH     $PWD"           >> $config_fcm
433echo "%LIBF          $LIBFGCM"       >> $config_fcm
434echo "%LIBO          $LIBOGCM"       >> $config_fcm
435echo "%DYN           $DYN"           >> $config_fcm
436echo "%PHYS          phy${physique}" >> $config_fcm
437echo "%COSP          $COSP_PATH"     >> $config_fcm
438echo "%CHEM          $CHEM_PATH"     >> $config_fcm
439echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
440echo "%EXEC          $code"          >> $config_fcm
441echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
442echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
443echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
444echo "%PARA_LD       $PARA_LD"       >> $config_fcm
445echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
446
447
448
449ln -s arch/arch-${arch}.fcm arch.fcm
450if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
451  then
452  ln -s arch/arch-${arch}.opt arch.opt
453else
454  ln -s .void_file arch.opt
455fi
456
457
458rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
459./build_gcm
460
461rm -rf tmp_src
462rm -rf config
463ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
464ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
Note: See TracBrowser for help on using the repository browser.