source: LMDZ4/trunk/makegcm_fcm @ 802

Last change on this file since 802 was 783, checked in by Laurent Fairhead, 17 years ago

Modification du makegcm pour utiliser FCM
(http://www.metoffice.gov.uk/research/nwp/external/fcm/) pour compiler le modele
Les options de compilations pour les différentes machines et configurations se
retrouvent maintenant dans des fichiers sauvegardés dans le repertoire machine/
Le makegcm a lancer est nomme makegcm_fcm. On garde les deux makegcm pour l'instant
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.5 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 psmile=false
27set parallel=false
28set io=ioipsl
29
30set LMDGCM=$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=""
42
43
44########################################################################
45# lecture des options de mymake
46########################################################################
47
48top:
49if ($#argv > 0) then
50    switch ($1:q)
51
52    case -h:
53cat <<fin
54manuel complet sur http://...
55Usage :
56makegcm
57[-h]                   : manuel abrégé
58[-d [[IMx]JMx]LM]      : IM, JM, LM sont les dims en x, y, z (def: $dim)
59[-t NTRAC]             : nombre de traceurs (def: 4)
60[-p PHYS]              : compilation avec la physique libf/phyPHYS, (def: lmd)
61[-debug]               : compile avec options debug.
62[-c false/true]        : couplé océan : mpi1/mpi2/false (def: false)
63[-v false/true]        : avec ou sans végétation (def: false)
64[-chimie SCHEMA/false] : nom du schéma chimique ou false (def)
65[-parallel true/false] : parallelisation, en développement (def: false)
66[-g GRI]               : conf. grille dans dyn3d/GRI_xy.h\
67                         (def: reg inclue un zoom)
68[-io IO]               : choix d'une librairie I/O, experts (def: ioipsl)
69[-include INCLUDES]    : variables supplementaires pour include cpp, experts.
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[-m arch]              : nom de l'architecture cible
74fin
75        exit
76
77    case -d:
78        set dim=$2 ; shift ; shift ; goto top
79                       
80    case -O:
81        echo "option obsolete dans cette version intermediaire de makegcm"
82        exit
83
84     case -p
85        set physique="$2" ;  shift ; shift ; goto top
86
87     case -g
88        set grille="$2" ; shift ; shift ; goto top
89
90     case -c
91        set couple="$2" ; shift ; shift ; goto top
92
93     case -io
94        set io="$2" ; shift ; shift ; goto top
95
96     case -v
97        set veget="$2" ; shift ; shift ; goto top
98
99     case -chimie
100        set chimie="$2" ; shift ; shift ; goto top
101
102     case -parallel
103        set parallel="$2" ; shift ; shift ; goto top
104 
105     case -t
106        set ntrac=$2 ; shift ; shift ; goto top
107
108     case -include
109        set INCLUDE="$INCLUDE -I$2" ; shift ; shift ; goto top
110
111     case -adjnt
112        echo 'otpion a reactiver ';exit
113        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
114        set optim="$optim -Dadj" ; shift ; goto top
115
116
117     case -filtre
118        set filtre=$2 ; shift ; shift ; goto top
119
120     case -link
121        set LIB="$LIB $2" ; shift ; shift ; goto top
122
123     case -m
124       set arch=$2 ; shift ; shift ; goto top
125       
126     case -debug
127        echo 'option a reactiver' ; exit
128
129     default
130        set code="$1" ; shift ; goto top
131
132   endsw
133endif
134
135
136###############################################################
137# lecture des chemins propres à l'architecture  de la machine #
138###############################################################
139
140rm -f ./arch.path
141ln -s ./machine/arch-${arch}.path ./arch.path
142source arch.path
143
144########################################################################
145# Definition des clefs CPP, des chemins des includes et modules
146#  et des libraries
147########################################################################
148
149
150if ( "$physique" == 'nophys' ) then
151   
152else
153   set CPP_KEY="$CPP_KEY CPP_PHYS"
154endif
155
156
157if ( "$chimie" == 'true' ) then
158    set CPP_KEY="$CPP_KEY INCA"
159    set INCLUDE="$INCLUDE -I${INCA_INCDIR}"
160    set LIB="$LIB -L${INCA_LIBDIR} -lchimie" 
161endif
162
163if ( "$couple" != 'false' ) then
164   set CPP_KEY="$CPP_KEY CPP_COUPLE"
165   set CPP_KEY="$CPP_KEY CPP_PSMILE"
166   set INCLUDE="$INCLUDE -I${OASIS_INCDIR}.$couple"
167   set LIB="$LIB -L${OASIS_LIBDIR} -loasis.$couple"
168endif
169
170if ( "$parallel" == 'true' ) then
171   set CPP_KEY="$CPP_KEY CPP_PARA"
172endif
173
174if ( "$veget" == 'true' ) then
175   set CPP_KEY="$CPP_KEY CPP_VEGET"
176   set INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
177   set LIB="${LIB} -L${ORCH_LIBDIR} -lsechiba -lparameters -lstomate -lparallel"
178endif
179
180if ( $io == ioipsl ) then
181   set CPP_KEY="$CPP_KEY CPP_IOIPSL"
182   set INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
183   set LIB="$LIB -L${IOIPSL_LIBDIR} -lioipsl"
184endif
185
186set INCLUDE="$INCLUDE -I${NETCDF_INCDIR}"
187set LIB="$LIB -L${NETCDF_LIBDIR} -lnetcdf"
188
189
190########################################################################
191# choix du nombre de traceur par defaut si il n'a pas ete choisi,
192# suivant la physique
193########################################################################
194
195if ( $ntrac == 0  ) then
196    if ( "$physique" == 'nophys' ) then
197        set ntrac=1
198    else if ( "$physique" == 'lmd' ) then
199        set ntrac=2
200    else if ( "$physique" == 'lmd_test_li' ) then
201        set ntrac=2
202    else if ( "$physique" == 'ec' ) then
203        set ntrac=1
204    else
205        set ntrac = 1
206    endif
207endif
208
209
210########################################################################
211# calcul du nombre de dimensions
212########################################################################
213
214
215set dim_full=$dim
216set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
217set dimc=`echo $dim | wc -w`
218
219echo calcul de la dimension
220echo dim $dim
221echo dimc $dimc
222
223
224########################################################################
225# Gestion des dimensions du modele.
226# on cree ou remplace le fichier des dimensions/nombre de traceur
227########################################################################
228
229cd $LIBFGCM/grid/dimension
230./makdim $ntrac $dim
231cat $LIBFGCM/grid/dimensions.h
232cd $LMDGCM
233
234
235########################################################################
236# Differentes dynamiques (3d, 2d, 1d)
237########################################################################
238
239set dimension=`echo $dim | wc -w`
240echo dimension $dimension
241
242if ( $dimension != 3 ) then
243  echo "Probleme dans les dimensions de la dynamique !!"
244  echo "Non reactive pour l'instant !!!"
245endif
246
247if ( $dimension == 3 ) then
248  cd $LIBFGCM/grid
249  \rm fxyprim.h
250  cp -p fxy_${grille}.h fxyprim.h
251endif
252
253######################################################################
254#   Traitement special pour le nouveau rayonnement de Laurent Li.
255#   ---> YM desactive pour le traitemement en parallele
256######################################################################
257
258#if ( -f $libf/phy$physique/raddim.h ) then
259# if ( -f $libf/phy$physique/raddim.$dimh.h ) then
260#  \rm -f $libf/phy$physique/raddim.h
261#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
262#  echo $libf/phy$physique/raddim.$dimh.h
263#  cat $libf/phy$physique/raddim.h
264# else
265#  echo On peut diminuer la taille de l executable en creant
266#  echo le fichier $libf/phy$physique/raddim.$dimh.h
267#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
268# endif
269#endif
270
271######################################################################
272# Gestion du filtre qui n'existe qu'en 3d.
273######################################################################
274
275if ( `expr $dimc \> 2` == 1 ) then
276   set filtre="FILTRE=$filtre"
277else
278   set filtre="FILTRE= L_FILTRE= "
279endif
280echo MACRO FILTRE $filtre
281
282echo $dimc
283
284
285
286######################################################################
287# Creation du suffixe de la configuration
288######################################################################
289
290
291set SUFF_NAME=_${dim_full}
292set SUFF_NAME=${SUFF_NAME}_t${ntrac}
293
294if ( "$parallel" == 'true' ) then
295  set SUFF_NAME=${SUFF_NAME}_para
296  set DYN=dyn${dimc}dpar
297else
298  set SUFF_NAME=${SUFF_NAME}_seq
299  set DYN=dyn${dimc}d
300endif
301
302if ( $veget == "true" ) then
303  set SUFF_NAME=${SUFF_NAME}_orch
304endif
305
306if ( $couple != "false" ) then
307  set SUFF_NAME=${SUFF_NAME}_couple
308endif
309
310if ( $chimie == "true" ) then
311  set SUFF_NAME=${SUFF_NAME}_inca
312endif
313 
314#########################################################
315# On adapte certains include à F90 (mener a disparaitre)
316#########################################################
317#sed -e 's/^c/\!/' $libf/grid/dimensions.h >! $libf/grid/dimensions90.tmp
318#if ( ! -f $libf/grid/dimensions90.h || `diff $libf/grid/dimensions90.tmp $libf/grid/dimensions90.h | wc -w` ) then
319#      \mv $libf/grid/dimensions90.tmp $libf/grid/dimensions90.h
320#endif
321#awk 'BEGIN {} { sub ("^c","\!") ; if ($0 ~ /^     s/) {if (NR > 1) print p0," &"; sub ("     s","     \\&")} else { if (NR > 1) print p0  } p0=$0 } END { print p0}' $libf/dyn3d/paramet.h >! $libf/dyn3d/paramet90.tmp
322#if ( ! -f $libf/dyn3d/paramet90.h || `diff $libf/dyn3d/paramet90.tmp $libf/dyn3d/paramet90.h | wc -w` ) then
323#      \mv $libf/dyn3d/paramet90.tmp $libf/dyn3d/paramet90.h
324#endif
325#awk 'BEGIN {} { sub ("^c","\!") ; if ($0 ~ /^     \./) {if (NR > 1) print p0," &"; sub ("     \.","     \\&")} else { if (NR > 1) print p0  } p0=$0 } END { print p0}' $libf/dyn3d/control.h >! $libf/dyn3d/control.tmp
326#if ( ! -f $libf/dyn3d/control.inc  || `diff $libf/dyn3d/control.tmp $libf/dyn3d/control.inc | wc -w` ) then
327#      \mv $libf/dyn3d/control.tmp $libf/dyn3d/control.inc
328#endif
329#awk 'BEGIN {} { sub ("^c","\!") ; if ($0 ~ /^     S/) {if (NR > 1) print p0," &"; sub ("     S","     \\&")} else { if (NR > 1) print p0  } p0=$0 } END { print p0}' $libf/phylmd/YOMCST.h >! $libf/phylmd/YOMCST.tmp
330#if ( ! -f $libf/phylmd/YOMCST.inc  || `diff $libf/phylmd/YOMCST.tmp $libf/phylmd/YOMCST.inc | wc -w` ) then
331#      \mv $libf/phylmd/YOMCST.tmp $libf/phylmd/YOMCST.inc
332#endif
333#awk 'BEGIN {} { sub ("^c","\!") ; if ($0 ~ /^     S/) {if (NR > 1) print p0," &"; sub ("     S","     \\&")} else { if (NR > 1) print p0  } p0=$0 } END { print p0}' $libf/phylmd/clesphys.h >! $libf/phylmd/clesphys.tmp
334#if ( ! -f $libf/phylmd/clesphys.inc  || `diff $libf/phylmd/clesphys.tmp $libf/phylmd/clesphys.inc | wc -w` ) then
335#      \mv $libf/phylmd/clesphys.tmp $libf/phylmd/clesphys.inc
336#endif
337
338#########################################################
339
340cd $LMDGCM
341set config_fcm="config.fcm"
342rm -f $config_fcm
343touch $config_fcm
344rm -f bin/${code}${SUFF_NAME}.e
345rm -f arch.fcm
346
347echo "%ARCH          $arch"          >> $config_fcm
348echo "%INCDIR        $INCLUDE"       >> $config_fcm 
349echo "%LIB           $LIB"           >> $config_fcm
350echo "%ROOT_PATH     $PWD"           >> $config_fcm
351echo "%LIBF          $LIBFGCM"       >> $config_fcm
352echo "%LIBO          $LIBOGCM"       >> $config_fcm
353echo "%DYN           $DYN"           >> $config_fcm
354echo "%PHYS          phy${physique}" >> $config_fcm
355echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
356echo "%EXEC          $code"          >> $config_fcm
357echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
358
359ln -s machine/arch-${arch}.fcm arch.fcm
360./build_gcm
361
362rm -f tmp_src
363rm -f config
364ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
365ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
366#\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.