source: trunk/LMDZ.COMMON/makelmdz_fcm @ 895

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

Update makelmdz_fcm script so that it can compile the 1D model and that it can also compile C sources (Titan chemistry).
EM

File size: 11.7 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
31
32LMDGCM=`/bin/pwd`
33LIBOGCM=$LMDGCM/libo
34LIBFGCM=$LMDGCM/libf
35# path for optional packages, but default set to ".void_dir"
36COSP_PATH=$LMDGCM/.void_dir
37CHEM_PATH=$LMDGCM/.void_dir
38# Path to fcm utility:
39fcm_path=$LMDGCM/tools/fcm/bin
40
41########################################################################
42#  Quelques initialisations de variables du shell.
43########################################################################
44
45CPP_KEY="" 
46INCLUDE=""
47LIB=""
48adjnt=""
49COMPIL_FFLAGS="%PROD_FFLAGS"
50PARA_FFLAGS=""
51PARA_LD=""
52EXT_SRC=""
53
54########################################################################
55# lecture des options de mymake
56########################################################################
57
58while (($# > 0))
59  do
60  case $1 in
61      "-h") cat <<fin
62manuel complet sur http://...
63Usage :
64makegcm [options] -m arch exec
65[-h]                       : manuel abrégé
66[-d [[IMx]JMx]LM]          : IM, JM, LM sont les dims en x, y, z (def: $dim)
67[-p PHYS]                  : compilation avec la physique libf/phyPHYS, (def: lmd)
68[-prod / -dev / -debug]    : compilation en mode production (default) / developpement / debug .
69[-c false/MPI1/MPI2]       : couplé océan : MPI1/MPI2/false (def: false)
70[-v false/true]            : avec ou sans végétation (def: false)
71[-chimie INCA/false]       : avec ou sans model de chimie INCA (def: false)
72[-parallel none/mpi/omp/mpi_omp] : parallelisation (default: none) : mpi, openmp ou mixte mpi_openmp
73[-g GRI]                   : conf. grille dans dyn3d/GRI_xy.h  (def: reg inclue un zoom)
74[-io IO]                   : choix d'une librairie I/O, experts (def: ioipsl)
75[-include INCLUDES]        : variables supplementaires pour include
76[-cpp CPP_KEY]             : cle cpp supplementaires
77[-adjnt]                   : adjoint, a remettre en route ...
78[-filtre NOMFILTRE]        : prend le filtre dans libf/NOMFILTRE (def: filtrez)
79[-link LINKS]              : liens optionels avec d'autres librairies
80[-fcm_path path]           : chemin pour fcm (def: tools/fcm/bin)
81[-ext_src path]            : chemin d'un repertoire source avec des sources externe a compiler avec le modele
82 -arch nom_arch            : nom de l'architecture cible
83 exec                      : exécutable généré
84fin
85          exit;;
86
87      "-d")
88          dim=$2 ; shift ; shift ;;
89     
90      "-O")
91          echo "option obsolete dans cette version intermediaire de makegcm"
92          exit;;
93
94      "-p")
95          physique="$2" ;  shift ; shift ;;
96
97      "-g")
98          grille="$2" ; shift ; shift ;;
99
100      "-c")
101          couple="$2" ; shift ; shift ;;
102
103      "-prod")
104          compil_mod="prod" ; shift ;;
105
106      "-dev")
107          compil_mod="dev" ; shift ;;
108
109      "-debug")
110          compil_mod="debug" ; shift ;;
111
112      "-io")
113          io="$2" ; shift ; shift ;;
114
115      "-v")
116          veget="$2" ; shift ; shift ;;
117
118      "-chimie")
119          chimie="$2" ; shift ; shift ;;
120
121      "-parallel")
122          parallel="$2" ; shift ; shift ;;
123     
124      "-include")
125          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
126
127      "-cpp")
128          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
129
130      "-adjnt")
131          echo "otpion a reactiver ";exit
132          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
133          optim="$optim -Dadj" ; shift ;;
134
135      "-cosp")
136          cosp="$2" ; shift ; shift ;;
137
138
139      "-filtre")
140          filtre=$2 ; shift ; shift ;;
141
142      "-link")
143          LIB="$LIB $2" ; shift ; shift ;;
144
145      "-fcm_path")
146          fcm_path=$2 ; shift ; shift ;;
147
148      "-ext_src")
149          EXT_SRC=$2 ; shift ; shift ;;
150
151      "-arch")
152          arch=$2 ; shift ; shift ;;
153
154      *)
155          code="$1" ; shift ;;
156  esac
157done
158
159###############################################################
160# mettre le chemin du fcm dans le path
161###############################################################
162export PATH=${fcm_path}:${PATH}
163
164echo "Chemin du fcm utlise :" 
165which fcm
166
167###############################################################
168# lecture des chemins propres à l'architecture de la machine #
169###############################################################
170rm -f .void_file
171echo > .void_file
172rm -rf .void_dir
173mkdir .void_dir
174rm -f arch.path
175ln -s arch/arch-${arch}.path ./arch.path
176source arch.path
177
178########################################################################
179# Definition des clefs CPP, des chemins des includes et modules
180#  et des libraries
181########################################################################
182
183if [[ "$compil_mod" == "prod" ]]
184then
185  COMPIL_FFLAGS="%PROD_FFLAGS"
186elif [[ "$compil_mod" == "dev" ]]
187then
188  COMPIL_FFLAGS="%DEV_FFLAGS"
189elif [[ "$compil_mod" == "debug" ]]
190then
191  COMPIL_FFLAGS="%DEBUG_FFLAGS"
192fi
193
194if [[ "$physique" != "nophys" ]]
195then
196   #We'll use some physics
197   CPP_KEY="$CPP_KEY CPP_PHYS"
198   if [[ "${physique:0:3}" == "lmd" ]]
199   then
200   #For lmd physics, default planet type is Earth
201   CPP_KEY="$CPP_KEY CPP_EARTH"
202   fi
203fi
204
205if [[ "$chimie" == "INCA" ]]
206then
207   CPP_KEY="$CPP_KEY INCA"
208   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
209   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
210fi
211
212if [[ "$couple" != "false" ]]
213then
214   CPP_KEY="$CPP_KEY CPP_COUPLE"
215   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
216   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
217fi
218
219if [[ "$parallel" == "mpi" ]]
220then
221   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
222   PARA_FFLAGS="%MPI_FFLAGS"
223   PARA_LD="%MPI_LD"
224elif [[ "$parallel" == "omp" ]]
225then
226   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
227   PARA_FFLAGS="%OMP_FFLAGS"
228   PARA_LD="%OMP_LD"
229elif [[ "$parallel" == "mpi_omp" ]]
230then
231   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
232   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
233   PARA_LD="%MPI_LD %OMP_LD"
234fi
235
236if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
237   && "$compil_mod" == "debug" ]]
238then
239    echo "Usually, parallelization with OpenMP requires some optimization."
240    echo "We suggest switching to \"-dev\"."
241fi
242
243if [[ "$veget" == "true" ]]
244then
245   CPP_KEY="$CPP_KEY CPP_VEGET"
246   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
247   LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
248fi
249
250if [[ $io == ioipsl ]]
251then
252   CPP_KEY="$CPP_KEY CPP_IOIPSL"
253   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
254   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
255fi
256
257if [[ "$cosp" == "true" ]]
258then
259   CPP_KEY="$CPP_KEY CPP_COSP"
260   COSP_PATH="$LIBFGCM/cosp"
261#   LIB="${LIB} -l${LIBPREFIX}cosp"
262fi
263
264if [[ "$physique" == "titan" ]]
265then
266   CHEM_PATH="${LIBFGCM}/chim${physique}"
267   INCLUDE="$INCLUDE -I${LIBFGCM}/chim${physique}"
268fi
269
270INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
271LIB="$LIB ${NETCDF_LIBDIR}"
272
273########################################################################
274# calcul du nombre de dimensions
275########################################################################
276
277
278dim_full=$dim
279dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
280set $dim
281dimc=$#
282echo calcul de la dimension
283echo dim $dim
284echo dimc $dimc
285
286
287########################################################################
288# Gestion des dimensions du modele.
289# on cree ou remplace le fichier des dimensions
290########################################################################
291
292cd $LIBFGCM/grid/dimension
293./makdim $dim
294cat $LIBFGCM/grid/dimensions.h
295cd $LMDGCM
296
297if [[ "$physique" == "generic" ]]
298then
299   cd $LIBFGCM/phygeneric
300   ./generatedoth.sh
301   cd $LMDGCM
302fi
303
304########################################################################
305# Differentes dynamiques (3d, 2d, 1d)
306########################################################################
307
308dimension=`echo $dim | wc -w`
309echo dimension $dimension
310
311if (( $dimension == 3 ))
312then
313  cd $LIBFGCM/grid
314  \rm fxyprim.h
315  cp -p fxy_${grille}.h fxyprim.h
316#else
317#  echo "Probleme dans les dimensions de la dynamique !!"
318#  echo "Non reactive pour l'instant !!!"
319fi
320
321if (( $dimension == 1 ))
322then
323##in 1D, add dyn3d to include path (because main prog is in physics)
324  INCLUDE="$INCLUDE -Ilibf/dyn3d"
325#  echo pas de dynamique
326#  dyn="DYN= L_DYN=-ldyn3d "
327fi
328
329######################################################################
330#   Traitement special pour le nouveau rayonnement de Laurent Li.
331#   ---> YM desactive pour le traitemement en parallele
332######################################################################
333
334#if [[ -f $libf/phy$physique/raddim.h ]]
335#then
336# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
337#then
338#  \rm -f $libf/phy$physique/raddim.h
339#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
340#  echo $libf/phy$physique/raddim.$dimh.h
341#  cat $libf/phy$physique/raddim.h
342# else
343#  echo On peut diminuer la taille de l executable en creant
344#  echo le fichier $libf/phy$physique/raddim.$dimh.h
345#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
346# fi
347#fi
348
349######################################################################
350# Gestion du filtre qui n'existe qu'en 3d.
351######################################################################
352
353if (( `expr $dimc \> 2` == 1 ))
354then
355   filtre="FILTRE=$filtre"
356else
357   filtre="FILTRE= L_FILTRE= "
358fi
359echo MACRO FILTRE $filtre
360
361echo $dimc
362
363
364
365######################################################################
366# Creation du suffixe de la configuration
367######################################################################
368
369
370SUFF_NAME=_${dim_full}
371SUFF_NAME=${SUFF_NAME}_phy${physique}
372
373if [[ "$parallel" != "none" ]]
374then
375  SUFF_NAME=${SUFF_NAME}_para
376  DYN=dyn${dimc}dpar
377else
378  SUFF_NAME=${SUFF_NAME}_seq
379  DYN=dyn${dimc}d
380  ## specific stuff for 1D model (needs includes which are in dyn3d)
381  if (( $dimension == 1 )) ; then
382    SUFF_NAME=${SUFF_NAME}
383    DYN=dyn3d
384  fi
385fi
386
387if [[ $veget == "true" ]]
388then
389  SUFF_NAME=${SUFF_NAME}_orch
390fi
391
392if [[ $couple != "false" ]]
393then
394  SUFF_NAME=${SUFF_NAME}_couple
395fi
396
397if [[ $chimie == "INCA" ]]
398then
399  SUFF_NAME=${SUFF_NAME}_inca
400fi
401
402cd $LMDGCM
403config_fcm="config.fcm"
404rm -f $config_fcm
405touch $config_fcm
406rm -f bin/${code}${SUFF_NAME}.e
407rm -f arch.fcm
408rm -f arch.opt
409
410echo "%ARCH          $arch"          >> $config_fcm
411echo "%INCDIR        $INCLUDE"       >> $config_fcm 
412echo "%LIB           $LIB"           >> $config_fcm
413echo "%ROOT_PATH     $PWD"           >> $config_fcm
414echo "%LIBF          $LIBFGCM"       >> $config_fcm
415echo "%LIBO          $LIBOGCM"       >> $config_fcm
416echo "%DYN           $DYN"           >> $config_fcm
417echo "%PHYS          phy${physique}" >> $config_fcm
418echo "%COSP          $COSP_PATH"     >> $config_fcm
419echo "%CHEM          $CHEM_PATH"     >> $config_fcm
420echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
421echo "%EXEC          $code"          >> $config_fcm
422echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
423echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
424echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
425echo "%PARA_LD       $PARA_LD"       >> $config_fcm
426echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
427
428
429
430ln -s arch/arch-${arch}.fcm arch.fcm
431if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
432  then
433  ln -s arch/arch-${arch}.opt arch.opt
434else
435  ln -s .void_file arch.opt
436fi
437
438
439rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
440./build_gcm
441
442rm -rf tmp_src
443rm -rf config
444ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
445ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
Note: See TracBrowser for help on using the repository browser.