source: LMDZ4/trunk/makegcm_fcm @ 1003

Last change on this file since 1003 was 1002, checked in by Laurent Fairhead, 16 years ago
  • Modifs sur le parallélisme: masquage dans la physique
  • Inclusion strato
  • mise en coherence etat0
  • le mode offline fonctionne maintenant en parallèle,
  • les fichiers de la dynamiques sont correctement sortis et peuvent etre reconstruit avec rebuild
  • la version parallèle de la dynamique peut s'exécuter sans MPI (sur 1 proc)
  • L'OPENMP fonctionne maintenant sans la parallélisation MPI.

YM
LF

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