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

Last change on this file since 1199 was 1199, checked in by lguez, 15 years ago

Corrected "makelmdz_fcm" to make it work on Vargas.

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