source: LMDZ5/trunk/makelmdz_fcm @ 1713

Last change on this file since 1713 was 1696, checked in by Laurent Fairhead, 12 years ago

Problème de définition de libf


$libf not defined

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 11.7 KB
Line 
1#!/bin/bash
2# $Id: makelmdz_fcm 1696 2012-12-19 09:30:26Z fairhead $
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
25parallel=none
26paramem="par"
27compil_mod=prod
28io=ioipsl
29LIBPREFIX=""
30cosp=false
31
32LMDGCM=`/bin/pwd`
33LIBOGCM=$LMDGCM/libo
34LIBFGCM=$LMDGCM/libf
35COSP_PATH=$LMDGCM/.void_dir
36fcm_path=$LMDGCM/tools/fcm/bin
37
38########################################################################
39#  Quelques initialisations de variables du shell.
40########################################################################
41
42CPP_KEY="" 
43INCLUDE=""
44LIB=""
45adjnt=""
46COMPIL_FFLAGS="%PROD_FFLAGS"
47PARA_FFLAGS=""
48PARA_LD=""
49EXT_SRC=""
50
51########################################################################
52# lecture des options de mymake
53########################################################################
54
55while (($# > 0))
56  do
57  case $1 in
58      "-h") cat <<fin
59manuel complet sur http://...
60Usage :
61makegcm [options] -m arch exec
62[-h]                       : manuel abrégé
63[-d [[IMx]JMx]LM]          : IM, JM, LM sont les dims en x, y, z (def: $dim)
64[-p PHYS]                  : compilation avec la physique libf/phyPHYS, (def: lmd)
65[-prod / -dev / -debug]    : compilation en mode production (default) / developpement / debug .
66[-c false/MPI1/MPI2]       : couplé océan : MPI1/MPI2/false (def: false)
67[-v false/true]            : avec ou sans végétation (def: false)
68[-chimie INCA/false]       : avec ou sans model de chimie INCA (def: false)
69[-parallel none/mpi/omp/mpi_omp] : parallelisation (default: none) : mpi, openmp ou mixte mpi_openmp
70[-g GRI]                   : conf. grille dans dyn3d/GRI_xy.h  (def: reg inclue un zoom)
71[-io IO]                   : choix d'une librairie I/O, experts (def: ioipsl)
72[-include INCLUDES]        : variables supplementaires pour include
73[-cpp CPP_KEY]             : cle cpp supplementaires
74[-adjnt]                   : adjoint, a remettre en route ...
75[-mem]                     : version memoire reduite (si en mode parallele)
76[-filtre NOMFILTRE]        : prend le filtre dans libf/NOMFILTRE (def: filtrez)
77[-link LINKS]              : liens optionels avec d'autres librairies
78[-fcm_path path]           : chemin pour fcm (def: tools/fcm/bin)
79[-ext_src path]            : chemin d'un repertoire source avec des sources externe a compiler avec le modele
80 -arch nom_arch            : nom de l'architecture cible
81 exec                      : exécutable généré
82fin
83          exit;;
84
85      "-d")
86          dim=$2 ; shift ; shift ;;
87     
88      "-O")
89          echo "option obsolete dans cette version intermediaire de makegcm"
90          exit;;
91
92      "-p")
93          physique="$2" ;  shift ; shift ;;
94
95      "-g")
96          grille="$2" ; shift ; shift ;;
97
98      "-c")
99          couple="$2" ; shift ; shift ;;
100
101      "-prod")
102          compil_mod="prod" ; shift ;;
103
104      "-dev")
105          compil_mod="dev" ; shift ;;
106
107      "-debug")
108          compil_mod="debug" ; shift ;;
109
110      "-io")
111          io="$2" ; shift ; shift ;;
112
113      "-v")
114          veget="$2" ; shift ; shift ;;
115
116      "-chimie")
117          chimie="$2" ; shift ; shift ;;
118
119      "-parallel")
120          parallel="$2" ; shift ; shift ;;
121     
122      "-include")
123          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
124
125      "-cpp")
126          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
127
128      "-adjnt")
129          echo "option a reactiver ";exit
130          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
131          optim="$optim -Dadj" ; shift ;;
132
133      "-cosp")
134          cosp="$2" ; shift ; shift ;;
135     
136      "-mem")
137          paramem="mem" ; shift ;;
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
256if [[ "$cosp" == "true" ]]
257then
258   CPP_KEY="$CPP_KEY CPP_COSP"
259   COSP_PATH="$LIBFGCM/cosp"
260#   LIB="${LIB} -l${LIBPREFIX}cosp"
261fi
262
263INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
264LIB="$LIB ${NETCDF_LIBDIR}"
265
266########################################################################
267# calcul du nombre de dimensions
268########################################################################
269
270
271dim_full=$dim
272dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
273set $dim
274dimc=$#
275echo calcul de la dimension
276echo dim $dim
277echo dimc $dimc
278
279
280########################################################################
281# Gestion des dimensions du modele.
282# on cree ou remplace le fichier des dimensions
283########################################################################
284
285cd $LIBFGCM/grid
286if [[ -f dimensions.h ]]
287then
288  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
289  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
290  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
291  echo  vous pouvez continuer en repondant oui.
292  echo "Voulez-vous vraiment continuer?"
293  read reponse
294  if [[ $reponse == "oui" ]]
295  then
296    \rm -f $LIBFGCM/grid/dimensions.h
297  else
298    exit
299  fi
300fi
301
302
303cd $LIBFGCM/grid/dimension
304./makdim $dim
305cat $LIBFGCM/grid/dimensions.h
306cd $LMDGCM
307
308
309########################################################################
310# Differentes dynamiques (3d, 2d, 1d)
311########################################################################
312
313dimension=`echo $dim | wc -w`
314echo dimension $dimension
315
316if (( $dimension == 3 ))
317then
318  cd $LIBFGCM/grid
319  \rm fxyprim.h
320  cp -p fxy_${grille}.h fxyprim.h
321else
322  echo "Probleme dans les dimensions de la dynamique !!"
323  echo "Non reactive pour l'instant !!!"
324fi
325
326######################################################################
327#   Traitement special pour le nouveau rayonnement de Laurent Li.
328#   ---> YM desactive pour le traitemement en parallele
329######################################################################
330
331#if [[ -f $libf/phy$physique/raddim.h ]]
332#then
333# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
334#then
335#  \rm -f $libf/phy$physique/raddim.h
336#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
337#  echo $libf/phy$physique/raddim.$dimh.h
338#  cat $libf/phy$physique/raddim.h
339# else
340#  echo On peut diminuer la taille de l executable en creant
341#  echo le fichier $libf/phy$physique/raddim.$dimh.h
342#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
343# fi
344#fi
345
346######################################################################
347# Gestion du filtre qui n'existe qu'en 3d.
348######################################################################
349
350if (( `expr $dimc \> 2` == 1 ))
351then
352   filtre="FILTRE=$filtre"
353else
354   filtre="FILTRE= L_FILTRE= "
355fi
356echo MACRO FILTRE $filtre
357
358echo $dimc
359
360
361
362######################################################################
363# Creation du suffixe de la configuration
364######################################################################
365
366
367SUFF_NAME=_${dim_full}
368SUFF_NAME=${SUFF_NAME}_phy${physique}
369
370if [[ "$parallel" != "none" ]]
371then
372  SUFF_NAME=${SUFF_NAME}_para
373  DYN=dyn${dimc}d${paramem}
374  if [[ "$paramem" == "mem" ]]
375  then
376   SUFF_NAME=${SUFF_NAME}_${paramem}
377  fi
378else
379  SUFF_NAME=${SUFF_NAME}_seq
380  DYN=dyn${dimc}d
381fi
382
383if [[ $veget == "true" ]]
384then
385  SUFF_NAME=${SUFF_NAME}_orch
386fi
387
388if [[ $couple != "false" ]]
389then
390  SUFF_NAME=${SUFF_NAME}_couple
391fi
392
393if [[ $chimie == "INCA" ]]
394then
395  SUFF_NAME=${SUFF_NAME}_inca
396fi
397
398cd $LMDGCM
399config_fcm="config.fcm"
400rm -f $config_fcm
401touch $config_fcm
402rm -f bin/${code}${SUFF_NAME}.e
403rm -f arch.fcm
404rm -f arch.opt
405
406echo "%ARCH          $arch"          >> $config_fcm
407echo "%INCDIR        $INCLUDE"       >> $config_fcm 
408echo "%LIB           $LIB"           >> $config_fcm
409echo "%ROOT_PATH     $PWD"           >> $config_fcm
410echo "%LIBF          $LIBFGCM"       >> $config_fcm
411echo "%LIBO          $LIBOGCM"       >> $config_fcm
412echo "%DYN           $DYN"           >> $config_fcm
413echo "%PHYS          phy${physique}" >> $config_fcm
414echo "%COSP          $COSP_PATH"     >> $config_fcm
415echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
416echo "%EXEC          $code"          >> $config_fcm
417echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
418echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
419echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
420echo "%PARA_LD       $PARA_LD"       >> $config_fcm
421echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
422
423
424
425ln -s arch/arch-${arch}.fcm arch.fcm
426if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
427  then
428  ln -s arch/arch-${arch}.opt arch.opt
429else
430  ln -s .void_file arch.opt
431fi
432
433
434rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
435./build_gcm
436
437rm -rf tmp_src
438rm -rf config
439ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
440ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
441
442if [[ -r $LIBFGCM/grid/dimensions.h ]]
443then
444  # Cleanup: remove dimension.h file
445  \rm -f $LIBFGCM/grid/dimensions.h
446fi
Note: See TracBrowser for help on using the repository browser.