source: LMDZ5/trunk/makelmdz_fcm @ 1757

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

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