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

Last change on this file since 1138 was 1137, checked in by jghattas, 16 years ago

Adaptation de la compilation (utilisant fcm) conformement aux decisions prises lors de la reunion fcm autours des modeles.

  • makegcm_fcm => makelmdz_fcm
  • option -m => -arch
  • repertoire machine => arch


YM+JG

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