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

Last change on this file since 1197 was 1197, checked in by lguez, 16 years ago

Translated "makelmdz_fcm" from Csh to Bash.

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