source: trunk/LMDZ.GENERIC/DOC/input/makegcm @ 3556

Last change on this file since 3556 was 987, checked in by jleconte, 12 years ago

11/06/2013 == JL+EM

  • User manual (+ sources) added in DOC.
File size: 12.9 KB
Line 
1#!/bin/csh
2
3# penser a mettre le -autopar pour le -O (optimisation) pour PARALLEL 2
4setenv PARALLEL 2
5
6# path a changer contenant les sources et les objets du modele
7if ( ! $?LMDGCM ) then
8   echo You must initialize the variable LMDGCM in your environnement
9   echo for instance: "setenv LMDGCM /usr/myself/supergcm" in .cshrc
10   exit
11endif
12if ( ! $?LIBOGCM ) then
13   set LIBOGCM=$LMDGCM/libo
14endif
15if ( ! $?DRSDIR ) then
16   echo You must initialize the variable DRSDIR in your environnement
17   echo for instance: "setenv DRSDIR /usr/myself/drs" in .cshrc
18   exit
19endif
20set model=$LMDGCM
21set libo=$LIBOGCM
22
23########################################################################
24#  Les differentes platformes reconnues
25########################################################################
26set HP=0
27set IBM=0
28set SUN=0
29set CRAY=0
30if ( `uname` == HP-UX ) then
31   set machine=HP
32   set HP=1
33else if (`uname` == SunOS ) then
34   set machine=SUN
35   set SUN=1
36else if ( `uname` == AIX ) then
37   set machine=IBM
38   set IBM=1
39else if ( `hostname` == atlas || `hostname` == axis ) then
40   set machine=CRAY
41   set CRAY=1
42else
43   echo Vous travaillez sur une machine non prevue par le reglement
44   exit
45endif
46
47if $CRAY then
48set libo=$WORKDIR/libo
49endif
50if ( ! -d $libo )  then
51   mkdir $libo
52endif
53set drs=$DRSDIR
54
55########################################################################
56# options par defaut pour la commande make
57########################################################################
58
59echo model $model
60set dim="32x24x25"
61set physique=mars
62set phys="PHYS=mars"
63set include='-I$(LIBF)/grid -I$(LIBF)/dyn3d -I$(LIBF)/bibio -I. '
64set ntrac = 0
65set filtre=filtrez
66set grille=reg
67
68set cray=""
69set dyn=
70set opt_link=""
71set adjnt=""
72set opt_dep=""
73
74########################################################################
75#  Optimisations par defaut suivant les machines
76########################################################################
77
78set libf=$model/libf
79set localdir="LOCAL_DIR=`pwd`"
80cd $model
81if $HP then
82   set optim=" +U77 -O -K +E1 "
83else if $SUN then
84   set optim=" -fast -autopar"
85#  set optim=" -Ztha -fast -autopar"
86#  set optim=" -C -g -Xlist"
87#   set optim=" -fast"
88else if $IBM then
89   set optim=" -O3 -qtune=pwr2 -qarch=pwr2"
90else
91   set optim=""
92endif
93
94if ( ! $CRAY ) then
95set nomlib=$machine
96endif
97
98
99########################################################################
100# lecture des options de mymake
101########################################################################
102
103top:
104if ($#argv > 0) then
105    switch ($1:q)
106
107    case -h:
108
109########################################################################
110# Manuel en ligne
111########################################################################
112more <<eod
113
114
115makegcm [Options] prog
116
117
118
119
120Par default, la commande makegcm:
121---------------------------------
122
1231. compile une serie de sous programmes se trouvant dans des sous-repertoires
124de $LMDGCM/libf
1252. Ensuite, makegcm compile le programme prog.f se trouvant par default sur
126$LMDGCM/libf/dyn3d et effectue le lien avec l'ensemble des librairies.
127
128La commande makegcm est faite pour permettre de gerer en parallele des
129versions differentes du modele, compilees avec des options de compilation
130et des dimensions differentes sans avoir a chaque fois a recompiler tout le
131modele.
132
133Les librairies FORTRAN sont stoquees sur le directory $LIBOGCM.
134
135
136OPTIONS:
137--------
138
139Les options suivantes peuvent etre definies soit par defaut en editant le
140"script" makegcm, soit en interactif:
141
142-d imxjmxlm  ou im, jm, et lm sont resp. le nombre de longitudes, latitudes
143             et couches verticales.
144
145-t ntrac   selectionne le nombre de traceur advectes par la dynamique.
146           Dans les versions courantes du modele terrestre on a par exemple
147           ntrac=2 pour l'eau vapeur et liquide
148
149             L'effet des options -d et -t est d'ecraser le fichier
150             $LMDGCM/libf/grid/dimensions.h
151             qui contient sous forme de 4 PARAMETER FORTRAN les 3 dimensions
152             de la grille horizontale im, jm, lm plus le nombre de traceurs
153             advectes passivement par la dynamique ntrac, par un nouveu fichier
154             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
155             Si ce fichier n'existe pas encore, il est cree par le script
156             $LMDGCM/libf/grid/dimension/makdim
157
158-p PHYS    pour selectionner le jeu de parametrisations physiques avec
159           lequel on veut compiler le modele.
160           Le modele sera alors compile en prenant les sources des
161           parametrisations physiques dans le repertoire:
162            $LMDGCM/libf/phyPHYS
163
164-g grille  selectionne le type de grille qu'on veut utiliser.
165           L'effet de cette option est d'ecraser le fichier
166           $LMDGCM/libf/grid/fxyprim.h avec le fichier
167           $LMDGCM/libf/grid/fxy_grille.h
168           La grille peut prendre les valeurs:
169           1. reg pour la grille reguliere
170           2. sin pour avoir des points equidistants en sinus de la latitude
171           3. new pour pouvoir zoomer sur une partie du globe
172
173-O "optimisation fortran" ou les optimisations fortran sont les options de la
174            commande f77
175
176-include path
177           Dans le cas ou on a dans des sous programmes des fichiers
178           #include (cpp) qui se trouve sur des repertoires non references
179           par defaut
180
181-adjnt     Pour compiler la l'adjoint du code dynamique
182
183-filtre  filtre
184           Pour choisir le filtre en longitude dans les regions polaires.
185           "filtre" correspond au nom d'un repertoire se trouvant sur
186           $LMDGCM/libf. Le filtre standard du modele est "filtrez" qui peut
187           etre utilise aussi bien pour une grille reguliere que pour une
188           grille zoomee en longitude.
189
190-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
191          Pour rajouter un lien avec les librairies FORTRAN
192          libfile1.a, libfile2.a ... se trouvant respectivement sur les
193          repertoires dir1, dir2 ...
194          Si dirn est un repertoire dont le chemin est automatique (comme
195          par exemple /usr/lib ...) il n'est pas besoin de specifier -Ldirn.
196
197Auteur: Frederic Hourdin  (hourdin@lmd.jussieu.fr)
198eod
199exit
200
201########################################################################
202# Lecture des differentes options
203########################################################################
204
205    case -d:
206        set dim=$2 ; shift ; shift ; goto top
207                       
208    case -O:
209        set optim="$2" ; shift ; shift ; goto top
210
211     case -p
212        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
213
214     case -g
215        set grille="$2" ; shift ; shift ; goto top
216
217     case -t
218        set ntrac=$2 ; shift ; shift ; goto top
219
220     case -include
221        set include="$include -I$2" ; shift ; shift ; goto top
222
223     case -adjnt
224        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
225        set optim="$optim -Dadj" ; shift ; goto top
226
227     case -filtre
228        set filtre=$2 ; shift ; shift ; goto top
229
230     case -link
231        set opt_link="$2" ; shift ; shift ; goto top
232
233     default
234        set code="$1" ; shift ; goto top
235
236   endsw
237endif
238
239########################################################################
240# cas special sans physique
241########################################################################
242if ( "$physique" == 'nophys' ) then
243   set phys="L_PHY= LIBPHY="
244   echo PHYSIQUE $phys
245endif
246
247########################################################################
248# choix du nombre de traceur par defaut si il n'a pas ete choisi,
249# suivant la physique
250########################################################################
251if ( $ntrac == 0  ) then
252    if ( "$physique" == 'nophys' ) then
253        set ntrac=1
254    else if ( "$physique" == 'lmd' ) then
255        set ntrac=2
256    else if ( "$physique" == 'lmd_test_li' ) then
257        set ntrac=2
258    else if ( "$physique" == 'ec' ) then
259        set ntrac=1
260    else
261        set ntrac = 1
262    endif
263endif
264
265########################################################################
266#subtilites sur le nom de la librairie
267########################################################################
268\rm tmp ; touch tmp
269foreach i ( $optim )
270   echo $i >> tmp
271end
272set suf=
273foreach i ( `sort tmp | uniq ` )
274   set suf=$suf$i
275end
276if ( ! $IBM ) then
277   set nomlib="$nomlib$suf"
278endif
279if $IBM then
280   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
281   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
282else
283   set dim=`echo $dim | sed -e 's/[^0-9]/ /gp'`
284   set dim_=`echo $dim | sed -e 's/[^0-9]/_/gp'`
285endif
286set nomlib=${nomlib}_${physique}_${dim_}_t${ntrac}_$grille
287
288########################################################################
289# path pour les #include
290########################################################################
291if $HP then
292set include="$include -I$drs/HP"
293else if $SUN then
294set include="$include -I$drs/SUN"
295else if  $IBM then
296set include="$include -I$drs/IBM"
297else
298set include="$include -I$drs"
299endif
300echo $include
301
302########################################################################
303# on cree ou remplace le fichier des dimensions/nombre de traceur
304########################################################################
305cd $libf/grid/dimension
306makdim $ntrac $dim
307set dimc=`echo $dim | wc -w`
308cat $libf/grid/dimensions.h
309
310
311set libo=$libo/$nomlib
312if ( ! -d $libo )  then
313   mkdir $libo
314   cd $model
315endif
316
317
318########################################################################
319# Differentes dynamiques
320########################################################################
321
322set dimension=`echo $dim | wc -w`
323echo dimension $dimension
324if ( $dimension == 1 ) then
325echo pas de dynamique
326set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
327endif
328endif
329cd $model
330if ( $dimension == 3 ) then
331cd libf/grid
332\rm fxyprim.h
333cp -p fxy_${grille}.h fxyprim.h
334endif
335
336######################################################################
337# fonctions CRAY
338######################################################################
339
340if ! $CRAY then
341   set dircray=$model/cray/libf  # repertoire par defaut
342   if $HP then
343      if ( ` echo $optim | grep autodblpad ` != "" ) then
344         set opt_cray="-O +autodblpad"
345         set lib_cray=CrayHPr8
346      else
347         set dircray=$model/cray/libfhp  # versions optimisees pour HP
348         set opt_cray=-O
349         set lib_cray=CrayHP
350      endif
351   endif
352   if $SUN then
353      if ( ` echo $optim | grep r8 | wc -w ` != "0" ) then
354         set opt_cray=-r8
355         set lib_cray=CraySUNr8
356      else
357         set opt_cray=-O3
358         set lib_cray=CraySUN
359      endif
360   endif
361   if $IBM then
362      set opt_cray="-O3 -qtune=pwr2 -qarch=pwr2"
363      set lib_cray=CrayIBM
364   endif
365
366   cd $dircray
367   if ( ! -f makefile ) then
368      newmake
369   endif
370   make OPTIM="$opt_cray" NOM_LIB=$lib_cray
371   set cray="-L$dircray -l$lib_cray"
372
373endif
374
375######################################################################
376# execution de la commande make UNIX
377######################################################################
378
379if ( `expr $dimc \> 2` == 1 ) then
380   set filtre="FILTRE=$filtre"
381else
382   set filtre="FILTRE= L_FILTRE= "
383endif
384echo MACRO FILTRE $filtre
385
386echo $dimc
387
388########################################################################
389#  Avant de lancer le make, on recree le makefile si necessaire
390########################################################################
391# c'est a dire dans 3 cas:
392# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
393#    derniere creation du makefile
394# 2. si le fichier contenant cette liste "liste_des_sources"
395#    n'existe pas.
396# 3. Si le makefile n'existe pas.
397########################################################################
398
399cd $model
400( find libf -name '*.[Fh]' -print ; grep include libf/*/*F ) >! tmp
401
402if (    `diff tmp liste_des_sources | wc -w` \
403     || ! -f makefile \
404     || ! -f liste_des_sources ) then
405        echo les fichiers suivants ont ete crees ou detruits
406        diff liste_des_sources tmp
407        \cp tmp liste_des_sources
408        echo On recree le makefile
409        ./create_make_gcm >! tmp
410        \mv tmp makefile
411        echo Nouveau makefile cree.
412endif
413
414########################################################################
415#  Execution de la comande make
416########################################################################
417
418echo PHYSIQUE $phys
419echo dynamique $dyn $dimension
420echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
421echo PATH pour les fichiers INCLUDE $include
422
423if $HP then
424   set f77='fort77 +OP'
425   set opt_link="$opt_link -lm"
426else
427   set f77=f77
428endif
429
430cd $model
431if ( $SUN || $IBM || $HP ) then
432
433make \
434OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
435OPTIM="$optim" \
436INCLUDE="$include" \
437L_CRAY="$cray" \
438$filtre \
439L_DRS="-L$drs/$machine -ldrs" \
440LIBO=$libo \
441$dyn \
442$phys \
443DIM=$dimc \
444L_ADJNT="$adjnt" \
445$localdir  \
446F77="$f77" \
447PROG=$code
448
449else if $CRAY then
450
451make \
452OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
453INCLUDE="$include" \
454L_DRS="-L$drs -ldrs" \
455$filtre \
456LIBO=$libo \
457$dyn \
458$phys \
459DIM=$dimc \
460L_ADJNT="$adjnt" \
461$localdir \
462PROG=$code
463
464endif
Note: See TracBrowser for help on using the repository browser.