source: LMDZ4/branches/LMDZ4-dev/makelmdz_fcm @ 1228

Last change on this file since 1228 was 1228, checked in by jghattas, 15 years ago

Ajoute une option pour compiler des sources dans un repertoire externes
avec le modele. Les sources dans le repertoire externe seront melange a
la comilation avec LMDZ comme si elles etaient dans un repertoire connue
dans libf.

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