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

Last change on this file since 1249 was 1249, checked in by yann meurdesoif, 15 years ago

Corrections de Bug divers - portage vers Titane (CCRT) -
YM

  • 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 1249 2009-10-21 16:04:08Z ymeurdesoif $
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\"."
227fi
228
229if [[ "$veget" == "true" ]]
230then
231   CPP_KEY="$CPP_KEY CPP_VEGET"
232   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
233   LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
234fi
235
236if [[ $io == ioipsl ]]
237then
238   CPP_KEY="$CPP_KEY CPP_IOIPSL"
239   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
240   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
241fi
242
243INCLUDE="$INCLUDE -I${NETCDF_INCDIR}"
244LIB="$LIB -L${NETCDF_LIBDIR} -lnetcdf"
245
246########################################################################
247# calcul du nombre de dimensions
248########################################################################
249
250
251dim_full=$dim
252dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
253set $dim
254dimc=$#
255echo calcul de la dimension
256echo dim $dim
257echo dimc $dimc
258
259
260########################################################################
261# Gestion des dimensions du modele.
262# on cree ou remplace le fichier des dimensions
263########################################################################
264
265cd $LIBFGCM/grid/dimension
266./makdim $dim
267cat $LIBFGCM/grid/dimensions.h
268cd $LMDGCM
269
270
271########################################################################
272# Differentes dynamiques (3d, 2d, 1d)
273########################################################################
274
275dimension=`echo $dim | wc -w`
276echo dimension $dimension
277
278if (( $dimension == 3 ))
279then
280  cd $LIBFGCM/grid
281  \rm fxyprim.h
282  cp -p fxy_${grille}.h fxyprim.h
283else
284  echo "Probleme dans les dimensions de la dynamique !!"
285  echo "Non reactive pour l'instant !!!"
286fi
287
288######################################################################
289#   Traitement special pour le nouveau rayonnement de Laurent Li.
290#   ---> YM desactive pour le traitemement en parallele
291######################################################################
292
293#if [[ -f $libf/phy$physique/raddim.h ]]
294#then
295# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
296#then
297#  \rm -f $libf/phy$physique/raddim.h
298#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
299#  echo $libf/phy$physique/raddim.$dimh.h
300#  cat $libf/phy$physique/raddim.h
301# else
302#  echo On peut diminuer la taille de l executable en creant
303#  echo le fichier $libf/phy$physique/raddim.$dimh.h
304#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
305# fi
306#fi
307
308######################################################################
309# Gestion du filtre qui n'existe qu'en 3d.
310######################################################################
311
312if (( `expr $dimc \> 2` == 1 ))
313then
314   filtre="FILTRE=$filtre"
315else
316   filtre="FILTRE= L_FILTRE= "
317fi
318echo MACRO FILTRE $filtre
319
320echo $dimc
321
322
323
324######################################################################
325# Creation du suffixe de la configuration
326######################################################################
327
328
329SUFF_NAME=_${dim_full}
330SUFF_NAME=${SUFF_NAME}_phy${physique}
331
332if [[ "$parallel" != "none" ]]
333then
334  SUFF_NAME=${SUFF_NAME}_para
335  DYN=dyn${dimc}dpar
336else
337  SUFF_NAME=${SUFF_NAME}_seq
338  DYN=dyn${dimc}d
339fi
340
341if [[ $veget == "true" ]]
342then
343  SUFF_NAME=${SUFF_NAME}_orch
344fi
345
346if [[ $couple != "false" ]]
347then
348  SUFF_NAME=${SUFF_NAME}_couple
349fi
350
351if [[ $chimie == "INCA" ]]
352then
353  SUFF_NAME=${SUFF_NAME}_inca
354fi
355
356cd $LMDGCM
357config_fcm="config.fcm"
358rm -f $config_fcm
359touch $config_fcm
360rm -f bin/${code}${SUFF_NAME}.e
361rm -f arch.fcm
362
363echo "%ARCH          $arch"          >> $config_fcm
364echo "%INCDIR        $INCLUDE"       >> $config_fcm 
365echo "%LIB           $LIB"           >> $config_fcm
366echo "%ROOT_PATH     $PWD"           >> $config_fcm
367echo "%LIBF          $LIBFGCM"       >> $config_fcm
368echo "%LIBO          $LIBOGCM"       >> $config_fcm
369echo "%DYN           $DYN"           >> $config_fcm
370echo "%PHYS          phy${physique}" >> $config_fcm
371echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
372echo "%EXEC          $code"          >> $config_fcm
373echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
374echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
375echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
376echo "%PARA_LD       $PARA_LD"       >> $config_fcm
377echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
378
379
380
381ln -s arch/arch-${arch}.fcm arch.fcm
382rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
383./build_gcm
384
385rm -rf tmp_src
386rm -rf config
387ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
388ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
389#\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.