source: LMDZ4/trunk/makegcm_fcm @ 1140

Last change on this file since 1140 was 1136, checked in by jghattas, 16 years ago

Ajoute possibilite de donner le chemin en entree de makegcm_fcm. Si le chemin n'est pas donne, on suppose comme avant, que le chemin de fcm est deja dans le variable environement PATH.

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