source: LMDZ4/branches/LMDZ4-dev/makegcm_fcm @ 1132

Last change on this file since 1132 was 1132, checked in by jghattas, 16 years ago
  • Ajout du module surf_land_orchidee_noooenmp_mod qui contient l'ancien interface d'ORCHIDEE. Pour utiliser cette module il faut compiler avec le cle cpp ORCHIDEE_NOOPENMP. Par default on continue a utiliser le module surf_land_orchidee_mod qui contient l'interface mixte MPI/OpenMP pour ORCHIDEE.
  • Ajout d'option -cpp dans makegcm_fcm qui permet d'ajouter un cle cpp dans la ligne de compilation.
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 10.1 KB
Line 
1#!/bin/csh
2#
3# $Header$
4#
5# FH : on ne cr�e plus le fichier arch.mk qui est suppos� exister par
6# FH : ailleurs.
7# FH : ult�rieurement, 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 makegcm7.
12#
13set verbose echo
14########################################################################
15# options par defaut pour la commande make
16########################################################################
17
18set dim="96x72x19"
19set physique=lmd
20set filtre=filtrez
21set grille=reg
22set couple=false
23set veget=false
24set chimie=false
25set parallel=none
26set compil_mod=prod
27set io=ioipsl
28set LIBPREFIX=""
29
30set LMDGCM=`/bin/pwd`
31set LIBOGCM=$LMDGCM/libo
32set LIBFGCM=$LMDGCM/libf
33
34########################################################################
35#  Quelques initialisations de variables du shell.
36########################################################################
37
38set CPP_KEY="" 
39set INCLUDE=""
40set LIB=""
41set adjnt=""
42set COMPIL_FFLAGS="%PROD_FFLAGS"
43set PARA_FFLAGS=""
44set PARA_LD=""
45
46########################################################################
47# lecture des options de mymake
48########################################################################
49
50top:
51if ($#argv > 0) then
52    switch ($1:q)
53
54    case -h:
55cat <<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 -m arch                   : nom de l'architecture cible
75 exec                      : exécutable généré
76fin
77        exit
78
79    case -d:
80        set dim=$2 ; shift ; shift ; goto top
81                       
82    case -O:
83        echo "option obsolete dans cette version intermediaire de makegcm"
84        exit
85
86     case -p
87        set physique="$2" ;  shift ; shift ; goto top
88
89     case -g
90        set grille="$2" ; shift ; shift ; goto top
91
92     case -c
93        set couple="$2" ; shift ; shift ; goto top
94
95     case -prod
96        set compil_mod="prod" ; shift ; goto top
97
98     case -dev
99       set compil_mod="dev" ; shift ; goto top
100
101     case -debug
102       set compil_mod="debug" ; shift ; goto top
103
104     case -io
105        set io="$2" ; shift ; shift ; goto top
106
107     case -v
108        set veget="$2" ; shift ; shift ; goto top
109
110     case -chimie
111        set chimie="$2" ; shift ; shift ; goto top
112
113     case -parallel
114        set parallel="$2" ; shift ; shift ; goto top
115 
116     case -include
117        set INCLUDE="$INCLUDE -I$2" ; shift ; shift ; goto top
118
119     case -cpp
120        set CPP_KEY="$CPP_KEY $2" ; shift ; shift ; goto top
121
122     case -adjnt
123        echo 'otpion a reactiver ';exit
124        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
125        set optim="$optim -Dadj" ; shift ; goto top
126
127
128     case -filtre
129        set filtre=$2 ; shift ; shift ; goto top
130
131     case -link
132        set LIB="$LIB $2" ; shift ; shift ; goto top
133
134     case -m
135       set arch=$2 ; shift ; shift ; goto top
136
137     default
138        set code="$1" ; shift ; goto top
139
140   endsw
141endif
142
143
144###############################################################
145# lecture des chemins propres � l'architecture  de la machine #
146###############################################################
147
148rm -f ./arch.path
149ln -s ./machine/arch-${arch}.path ./arch.path
150source arch.path
151
152########################################################################
153# Definition des clefs CPP, des chemins des includes et modules
154#  et des libraries
155########################################################################
156
157if ( "$compil_mod" == 'prod' ) then
158  set COMPIL_FFLAGS="%PROD_FFLAGS"
159else if ( "$compil_mod" == 'dev' ) then
160  set COMPIL_FFLAGS="%DEV_FFLAGS"
161else if ( "$compil_mod" == 'debug' ) then
162  set COMPIL_FFLAGS="%DEBUG_FFLAGS"
163endif
164
165if ( "$physique" == 'nophys' ) then
166   
167else
168   set CPP_KEY="$CPP_KEY CPP_PHYS"
169endif
170
171if ( "$chimie" == 'INCA' ) then
172   set CPP_KEY="$CPP_KEY INCA"
173   set INCLUDE="$INCLUDE -I${INCA_INCDIR}"
174   set LIB="$LIB -L${INCA_LIBDIR} -lchimie"
175endif
176
177if ( "$couple" != 'false' ) then
178   set CPP_KEY="$CPP_KEY CPP_COUPLE"
179   set INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
180   set LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
181endif
182
183if ( "$parallel" == 'mpi' ) then
184   set CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
185   set PARA_FFLAGS="%MPI_FFLAGS"
186   set PARA_LD="%MPI_LD"
187else if ("$parallel" == 'omp' ) then
188   set CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
189   set PARA_FFLAGS="%OMP_FFLAGS"
190   set PARA_LD="%OMP_LD"
191else if ("$parallel" == 'mpi_omp' ) then
192   set CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
193   set PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
194   set PARA_LD="%MPI_LD %OMP_LD"
195endif
196
197if ( "$veget" == 'true' ) then
198   set CPP_KEY="$CPP_KEY CPP_VEGET"
199   set INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
200   set LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
201endif
202
203if ( $io == ioipsl ) then
204   set CPP_KEY="$CPP_KEY CPP_IOIPSL"
205   set INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
206   set LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
207endif
208
209set INCLUDE="$INCLUDE -I${NETCDF_INCDIR}"
210set LIB="$LIB -L${NETCDF_LIBDIR} -lnetcdf"
211
212########################################################################
213# calcul du nombre de dimensions
214########################################################################
215
216
217set dim_full=$dim
218set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
219set dimc=`echo $dim | wc -w`
220
221echo calcul de la dimension
222echo dim $dim
223echo dimc $dimc
224
225
226########################################################################
227# Gestion des dimensions du modele.
228# on cree ou remplace le fichier des dimensions
229########################################################################
230
231cd $LIBFGCM/grid/dimension
232./makdim $dim
233cat $LIBFGCM/grid/dimensions.h
234cd $LMDGCM
235
236
237########################################################################
238# Differentes dynamiques (3d, 2d, 1d)
239########################################################################
240
241set dimension=`echo $dim | wc -w`
242echo dimension $dimension
243
244if ( $dimension != 3 ) then
245  echo "Probleme dans les dimensions de la dynamique !!"
246  echo "Non reactive pour l'instant !!!"
247endif
248
249if ( $dimension == 3 ) then
250  cd $LIBFGCM/grid
251  \rm fxyprim.h
252  cp -p fxy_${grille}.h fxyprim.h
253endif
254
255######################################################################
256#   Traitement special pour le nouveau rayonnement de Laurent Li.
257#   ---> YM desactive pour le traitemement en parallele
258######################################################################
259
260#if ( -f $libf/phy$physique/raddim.h ) then
261# if ( -f $libf/phy$physique/raddim.$dimh.h ) then
262#  \rm -f $libf/phy$physique/raddim.h
263#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
264#  echo $libf/phy$physique/raddim.$dimh.h
265#  cat $libf/phy$physique/raddim.h
266# else
267#  echo On peut diminuer la taille de l executable en creant
268#  echo le fichier $libf/phy$physique/raddim.$dimh.h
269#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
270# endif
271#endif
272
273######################################################################
274# Gestion du filtre qui n'existe qu'en 3d.
275######################################################################
276
277if ( `expr $dimc \> 2` == 1 ) then
278   set filtre="FILTRE=$filtre"
279else
280   set filtre="FILTRE= L_FILTRE= "
281endif
282echo MACRO FILTRE $filtre
283
284echo $dimc
285
286
287
288######################################################################
289# Creation du suffixe de la configuration
290######################################################################
291
292
293set SUFF_NAME=_${dim_full}
294set SUFF_NAME=${SUFF_NAME}_phy${physique}
295
296if ( "$parallel" != 'none' ) then
297  set SUFF_NAME=${SUFF_NAME}_para
298  set DYN=dyn${dimc}dpar
299else
300  set SUFF_NAME=${SUFF_NAME}_seq
301  set DYN=dyn${dimc}d
302endif
303
304if ( $veget == "true" ) then
305  set SUFF_NAME=${SUFF_NAME}_orch
306endif
307
308if ( $couple != "false" ) then
309  set SUFF_NAME=${SUFF_NAME}_couple
310endif
311
312if ( $chimie == 'INCA' ) then
313  set SUFF_NAME=${SUFF_NAME}_inca
314endif
315
316cd $LMDGCM
317set config_fcm="config.fcm"
318rm -f $config_fcm
319touch $config_fcm
320rm -f bin/${code}${SUFF_NAME}.e
321rm -f arch.fcm
322
323echo "%ARCH          $arch"          >> $config_fcm
324echo "%INCDIR        $INCLUDE"       >> $config_fcm 
325echo "%LIB           $LIB"           >> $config_fcm
326echo "%ROOT_PATH     $PWD"           >> $config_fcm
327echo "%LIBF          $LIBFGCM"       >> $config_fcm
328echo "%LIBO          $LIBOGCM"       >> $config_fcm
329echo "%DYN           $DYN"           >> $config_fcm
330echo "%PHYS          phy${physique}" >> $config_fcm
331echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
332echo "%EXEC          $code"          >> $config_fcm
333echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
334echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
335echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
336echo "%PARA_LD       $PARA_LD"       >> $config_fcm
337
338
339
340ln -s machine/arch-${arch}.fcm arch.fcm
341rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
342./build_gcm
343
344rm -f tmp_src
345rm -f config
346ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
347ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
348#\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.