source: LMDZ5/branches/testing/makelmdz_fcm @ 1752

Last change on this file since 1752 was 1752, checked in by Ehouarn Millour, 12 years ago

Add better handling of fcm path from makelmdz_fcm script to build_gcm script; and some translation of output messages to English.
EM

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 12.3 KB
Line 
1#!/bin/bash
2# $Id: makelmdz_fcm 1752 2013-04-30 06:34:06Z 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
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# path to fcm
161###############################################################
162# handle case when provided path to fcm was given as a relative
163# path (from makelmdz_fcm script directory) and not an absolute path
164if [[ ${fcm_path:0:1} != "/" ]] ; then
165  # prepend with makelmdz_fcm location
166  fcm_path=$(cd $(dirname $0) ; pwd)"/"${fcm_path}
167fi
168
169echo "Path to fcm:"
170echo ${fcm_path}
171
172###############################################################
173# lecture des chemins propres à l'architecture de la machine #
174###############################################################
175rm -f .void_file
176echo > .void_file
177rm -rf .void_dir
178mkdir .void_dir
179rm -f arch.path
180ln -s arch/arch-${arch}.path ./arch.path
181source arch.path
182
183########################################################################
184# Definition des clefs CPP, des chemins des includes et modules
185#  et des libraries
186########################################################################
187
188if [[ "$compil_mod" == "prod" ]]
189then
190  COMPIL_FFLAGS="%PROD_FFLAGS"
191elif [[ "$compil_mod" == "dev" ]]
192then
193  COMPIL_FFLAGS="%DEV_FFLAGS"
194elif [[ "$compil_mod" == "debug" ]]
195then
196  COMPIL_FFLAGS="%DEBUG_FFLAGS"
197fi
198
199if [[ "$physique" != "nophys" ]]
200then
201   #We'll use some physics
202   CPP_KEY="$CPP_KEY CPP_PHYS"
203   if [[ "${physique:0:3}" == "lmd" ]]
204   then
205   #For lmd physics, default planet type is Earth
206   CPP_KEY="$CPP_KEY CPP_EARTH"
207   fi
208fi
209
210if [[ "$chimie" == "INCA" ]]
211then
212   CPP_KEY="$CPP_KEY INCA"
213   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
214   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
215fi
216
217if [[ "$couple" != "false" ]]
218then
219   CPP_KEY="$CPP_KEY CPP_COUPLE"
220   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
221   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
222fi
223
224if [[ "$parallel" == "mpi" ]]
225then
226   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
227   PARA_FFLAGS="%MPI_FFLAGS"
228   PARA_LD="%MPI_LD"
229elif [[ "$parallel" == "omp" ]]
230then
231   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
232   PARA_FFLAGS="%OMP_FFLAGS"
233   PARA_LD="%OMP_LD"
234elif [[ "$parallel" == "mpi_omp" ]]
235then
236   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
237   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
238   PARA_LD="%MPI_LD %OMP_LD"
239fi
240
241if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
242   && "$compil_mod" == "debug" ]]
243then
244    echo "Usually, parallelization with OpenMP requires some optimization."
245    echo "We suggest switching to \"-dev\"."
246fi
247
248if [[ "$veget" == "true" ]]
249then
250   CPP_KEY="$CPP_KEY CPP_VEGET"
251   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
252   LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
253fi
254
255if [[ $io == ioipsl ]]
256then
257   CPP_KEY="$CPP_KEY CPP_IOIPSL"
258   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
259   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
260fi
261if [[ "$cosp" == "true" ]]
262then
263   CPP_KEY="$CPP_KEY CPP_COSP"
264   COSP_PATH="$LIBFGCM/cosp"
265#   LIB="${LIB} -l${LIBPREFIX}cosp"
266fi
267
268INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
269LIB="$LIB ${NETCDF_LIBDIR}"
270
271########################################################################
272# calcul du nombre de dimensions
273########################################################################
274
275
276dim_full=$dim
277dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
278set $dim
279dimc=$#
280echo calcul de la dimension
281echo dim $dim
282echo dimc $dimc
283
284
285########################################################################
286# Gestion des dimensions du modele.
287# on cree ou remplace le fichier des dimensions
288########################################################################
289
290cd $LIBFGCM/grid
291if [[ -f dimensions.h ]]
292then
293  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
294  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
295  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
296  echo  vous pouvez continuer en repondant oui.
297  echo "Voulez-vous vraiment continuer?"
298  echo ""
299  echo "WARNING: you are probably already compiling the model somewhere else."
300  echo "Wait until the first compilation is finished before launching this one."
301  echo "If you are sure that you are not compiling elsewhere, just answer "
302  echo "yes (or 'oui') to the question below to proceed."
303  echo "Do you wish to continue?"
304  read reponse
305  if [[ $reponse == "oui" || $reponse == "yes" ]]
306  then
307    \rm -f $LIBFGCM/grid/dimensions.h
308  else
309    exit
310  fi
311fi
312
313
314cd $LIBFGCM/grid/dimension
315./makdim $dim
316cat $LIBFGCM/grid/dimensions.h
317cd $LMDGCM
318
319
320########################################################################
321# Differentes dynamiques (3d, 2d, 1d)
322########################################################################
323
324dimension=`echo $dim | wc -w`
325echo dimension $dimension
326
327if (( $dimension == 3 ))
328then
329  cd $LIBFGCM/grid
330  \rm fxyprim.h
331  cp -p fxy_${grille}.h fxyprim.h
332else
333  echo "Probleme dans les dimensions de la dynamique !!"
334  echo "Non reactive pour l'instant !!!"
335fi
336
337######################################################################
338#   Traitement special pour le nouveau rayonnement de Laurent Li.
339#   ---> YM desactive pour le traitemement en parallele
340######################################################################
341
342#if [[ -f $libf/phy$physique/raddim.h ]]
343#then
344# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
345#then
346#  \rm -f $libf/phy$physique/raddim.h
347#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
348#  echo $libf/phy$physique/raddim.$dimh.h
349#  cat $libf/phy$physique/raddim.h
350# else
351#  echo On peut diminuer la taille de l executable en creant
352#  echo le fichier $libf/phy$physique/raddim.$dimh.h
353#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
354# fi
355#fi
356
357######################################################################
358# Gestion du filtre qui n'existe qu'en 3d.
359######################################################################
360
361if (( `expr $dimc \> 2` == 1 ))
362then
363   filtre="FILTRE=$filtre"
364else
365   filtre="FILTRE= L_FILTRE= "
366fi
367echo MACRO FILTRE $filtre
368
369echo $dimc
370
371
372
373######################################################################
374# Creation du suffixe de la configuration
375######################################################################
376
377
378SUFF_NAME=_${dim_full}
379SUFF_NAME=${SUFF_NAME}_phy${physique}
380
381if [[ "$parallel" != "none" ]]
382then
383  SUFF_NAME=${SUFF_NAME}_para
384  DYN=dyn${dimc}d${paramem}
385  if [[ "$paramem" == "mem" ]]
386  then
387   SUFF_NAME=${SUFF_NAME}_${paramem}
388  fi
389else
390  SUFF_NAME=${SUFF_NAME}_seq
391  DYN=dyn${dimc}d
392fi
393
394if [[ $veget == "true" ]]
395then
396  SUFF_NAME=${SUFF_NAME}_orch
397fi
398
399if [[ $couple != "false" ]]
400then
401  SUFF_NAME=${SUFF_NAME}_couple
402fi
403
404if [[ $chimie == "INCA" ]]
405then
406  SUFF_NAME=${SUFF_NAME}_inca
407fi
408
409cd $LMDGCM
410config_fcm="config.fcm"
411rm -f $config_fcm
412touch $config_fcm
413rm -f bin/${code}${SUFF_NAME}.e
414rm -f arch.fcm
415rm -f arch.opt
416
417echo "%ARCH          $arch"          >> $config_fcm
418echo "%INCDIR        $INCLUDE"       >> $config_fcm 
419echo "%LIB           $LIB"           >> $config_fcm
420echo "%ROOT_PATH     $PWD"           >> $config_fcm
421echo "%LIBF          $LIBFGCM"       >> $config_fcm
422echo "%LIBO          $LIBOGCM"       >> $config_fcm
423echo "%DYN           $DYN"           >> $config_fcm
424echo "%PHYS          phy${physique}" >> $config_fcm
425echo "%COSP          $COSP_PATH"     >> $config_fcm
426echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
427echo "%EXEC          $code"          >> $config_fcm
428echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
429echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
430echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
431echo "%PARA_LD       $PARA_LD"       >> $config_fcm
432echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
433
434
435
436ln -s arch/arch-${arch}.fcm arch.fcm
437if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
438  then
439  ln -s arch/arch-${arch}.opt arch.opt
440else
441  ln -s .void_file arch.opt
442fi
443
444
445rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
446./build_gcm ${fcm_path}
447
448rm -rf tmp_src
449rm -rf config
450ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
451ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
452
453if [[ -r $LIBFGCM/grid/dimensions.h ]]
454then
455  # Cleanup: remove dimension.h file
456  \rm -f $LIBFGCM/grid/dimensions.h
457fi
Note: See TracBrowser for help on using the repository browser.