source: LMDZ.3.3/trunk/makegcm @ 68

Last change on this file since 68 was 68, checked in by lmdz, 24 years ago

probleme dans le sed pour dim et dim_ sur Sun. El gringo
Lf

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 20.0 KB
Line 
1#!/bin/csh
2#set verbose echo
3########################################################################
4# options par defaut pour la commande make
5########################################################################
6set dim="48x32x19"
7set physique=lmd
8set phys="PHYS=$physique"
9set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. '
10set ntrac = 4
11set filtre=filtrez
12set grille=reg
13########################################################################
14# path a changer contenant les sources et les objets du modele
15########################################################################
16
17###### VERSION LMDZ.3.3
18# set LMDGCM=$HOME/LMDZ.3.3
19#
20#   a changer  rlmd304/agcm
21#
22###### VERSION LMDZ.3.2
23
24if ( ! $?LMDGCM ) then
25   echo You must initialize the variable LMDGCM in your environnement
26   echo for instance: "setenv LMDGCM /usr/myself/supergcm" in .cshrc
27   exit
28endif
29if ( ! $?LIBOGCM ) then
30   set LIBOGCM=$LMDGCM/libo
31endif
32if ( ! $?IOIPSLDIR ) then
33   echo You must initialize the variable IOIPSLDIR in your environnement
34   echo for instance: "setenv IOIPSLDIR /usr/myself/ioipsl" in .cshrc
35   exit
36endif
37if ( ! $?NCDFLIB ) then
38   echo You must initialize the variable NCDFLIB in your environnement
39   echo for instance: "setenv NCDFLIB /usr/myself/netcdf" in .cshrc
40   exit
41endif
42if ( ! $?NCDFINC ) then
43   echo You must initialize the variable NCDFINC in your environnement
44   echo for instance: "setenv NCDFINC /usr/myself/netcdf" in .cshrc
45   exit
46endif
47set model=$LMDGCM
48set libo=$LIBOGCM
49
50########################################################################
51#  Les differentes platformes reconnues
52########################################################################
53
54set HP=0
55set IBM=0
56set SUN=0
57set VPP=0
58set CRAY=0
59set DEC=0
60set LINUX=0
61set NEC=0
62if ( `uname` == HP-UX ) then
63   set machine=HP
64   set HP=1
65else if (`uname` == UNIX_System_V ) then
66   set machine=VPP
67   set VPP=1
68else if (`uname` == SunOS ) then
69   set machine=SUN
70   set SUN=1
71else if ( `uname` == AIX ) then
72   set machine=IBM
73   set IBM=1
74else if ( `uname` == OSF1 ) then
75   set machine=ALPHA
76   set DEC=1
77else if ( `uname` == Linux ) then
78   set machine=LINUX
79   set LINUX=1
80else if ( `hostname` == atlas || `hostname` == axis  || `hostname` == etoile ) then
81   set machine=CRAY
82   set CRAY=1
83else if ( `uname` == SUPER-UX ) then
84   set machine=NEC
85   set NEC=1
86else
87   echo Vous travaillez sur une machine non prevue par le reglement
88   exit
89endif
90
91if ( ! -d $libo )  then
92   mkdir $libo
93endif
94
95
96if $VPP then
97set netcdf=netcdf_v
98else
99set netcdf=netcdf
100endif
101########################################################################
102#  Quelques initialisations de variables du shell.
103########################################################################
104
105set dyn=
106set opt_link=""
107set adjnt=""
108set opt_dep=""
109
110set optim=""
111set optimbis=""
112set optim90=""
113set oplink=""
114
115########################################################################
116#  Optimisations par defaut suivant les machines
117########################################################################
118
119echo "Optimisations par defaut suivant les machines"
120set libf=$model/libf
121#setenv localdir "LOCAL_DIR=`pwd`"
122setenv localdir "`pwd`"
123cd $model
124if $CRAY then
125#   set optim="-Wf'-ei' -dp -Wf'-a static'"
126   set optimbis=" -DCRAY "
127   set optim90="-Wp'-P' -DCRAY -p$IOIPSLDIR "'-p$(LIBO) -eiv '
128   set optim="$optim90"
129   set oplink="-Wl'-DSTACK=128 -f indef' -L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf "
130   set mod_loc_dir=" "
131   set mod_suffix=" "
132else if $SUN then
133   set optim=" -fast "
134   set optimbis=" "
135   set optim90=" -fast -fixed "
136   set opt_link="-lf77compat -L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
137   set mod_loc_dir=$localdir
138   set mod_suffix=mod
139else if $HP then
140   set optim=" +U77 -O +E1 "
141   set optimbis=" "
142else if $IBM then
143   set optim=" -O3 -qtune=pwr2 -qarch=pwr2"
144   set optimbis=" "
145else if $VPP then
146   set optim=" -Of -Wv,-Of,-ilfunc"
147   set optimbis=" -Psia -Aa -Wv,-m3 -Wp,-DVPP -Z $LMDGCM/listage"
148   set optim90="$optim""$optimbis"" -X9 -w"
149   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
150   set oplink=" "
151   set mod_loc_dir=$IOIPSLDIR
152   set mod_suffix=mod
153else if $DEC then
154   set optim=" "
155   set optimbis=" "
156else if $LINUX then
157   set optim="-fast "
158   set optim90=" -fast -module $libo"
159   set opt_link=" -Mfree -L/usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$NCDFLIB -lnetcdf -L$IOIPSLDIR -lioipsl -Wl,-Bstatic "
160   set mod_loc_dir=$IOIPSLDIR
161   set mod_suffix=mod
162else if $NEC then
163   set optim90=' -C hopt -float0 -ew -R4 -L nostdout '
164   set optim90=' -C hopt -float0 -eabw -P static -R5 -pi auto line=500 -Wf,-O,extendreorder,-pvctl,fullmsg,vchg,noverrchk,assume,loopcnt=300000,vwork=stack,-L,summary,transform'
165   set optim="$optim90"
166   set opt_link=" -L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf "
167   set opt_link=" -V -float0 -ew  -P static -Wl,-Z,4800000,-h,lib_cyclic -L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf "
168   set optimbis=" "
169   set mod_loc_dir="."
170   set mod_suffix="mod"
171else
172   set optim=""
173   set optimbis=" "
174endif
175
176set nomlib=$machine
177
178########################################################################
179# lecture des options de mymake
180########################################################################
181
182top:
183if ($#argv > 0) then
184    switch ($1:q)
185
186    case -h:
187
188########################################################################
189# Manuel en ligne
190########################################################################
191more <<eod
192
193
194makegcm [Options] prog
195
196
197
198
199Par default, la commande makegcm:
200---------------------------------
201
2021. compile une serie de sous programmes se trouvant dans des sous-repertoires
203de $LMDGCM/libf.
204Les sous programmes sont ensuite stokes sur dans des librairies FORTRAN
205sur $LIBOGCM.
206
2072. Ensuite, makegcm compile le programme prog.f se trouvant par default sur
208$LMDGCM/libf/dyn3d et effectue le lien avec l ensemble des librairies.
209
210La variable '$LMDGCM' doit etre initialisee dans votre .cshrc ou en dur
211dans la comande makegcm.
212
213La commande makegcm est faite pour permettre de gerer en parallele des
214versions differentes du modele, compilees avec des options de compilation
215et des dimensions differentes sans avoir a chaque fois a recompiler tout
216le modele.
217
218Les librairies FORTRAN sont stoquees sur le directory $LIBOGCM.
219
220
221OPTIONS:
222--------
223
224Les options suivantes peuvent etre definies soit par defaut en editant le
225"script" makegcm, soit en interactif:
226
227-d imxjmxlm  ou im, jm, et lm sont resp. le nombre de longitudes, latitudes
228             et couches verticales.
229
230-t ntrac   selectionne le nombre de traceur advectes par la dynamique.
231           Dans les versions courantes du modele terrestre on a par exemple
232           ntrac=2 pour l'eau vapeur et liquide
233
234             L'effet des options -d et -t est d'ecraser le fichier
235             $LMDGCM/libf/grid/dimensions.h
236             qui contient sous forme de 4 PARAMETER FORTRAN les 3 dimensions
237             de la grille horizontale im, jm, lm plus le nombre de traceurs
238             advectes passivement par la dynamique ntrac, par un nouveu fichier
239             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
240             Si ce fichier n'existe pas encore, il est cree par le script
241             $LMDGCM/libf/grid/dimension/makdim
242
243-p PHYS    pour selectionner le jeu de parametrisations physiques avec
244           lequel on veut compiler le modele.
245           Le modele sera alors compile en prenant les sources des
246           parametrisations physiques dans le repertoire:
247            $LMDGCM/libf/phyPHYS
248
249-g grille  selectionne le type de grille qu'on veut utiliser.
250           L'effet de cette option est d'ecraser le fichier
251           $LMDGCM/libf/grid/fxyprim.h
252           avec le fichier
253           $LMDGCM/libf/grid/fxy_grille.h
254           grille peut prendre les valeurs:
255           1. reg pour la grille reguliere
256           2. sin pour avoir des points equidistants en sinus de la latitude
257           3. new pour pouvoir zoomer sur une partie du globe
258
259-O "optimisation fortran" ou les optimisations fortran sont les options de la
260            commande f77
261
262-include path
263           Dans le cas ou on a dans des sous programmes des fichiers
264           #include (cpp) qui se trouve sur des repertoires non references
265           par defaut
266
267-adjnt     Pour compiler la l'adjoint du code dynamique
268
269-filtre  filtre
270           Pour choisir le filtre en longitude dans les regions polaires.
271           "filtre" correspond au nom d'un repertoire se trouvant sur
272           $LMDGCM/libf. Le filtre standard du modele est "filtrez" qui peut
273           etre utilise aussi bien pour une grille reguliere que pour une
274           grille zoomee en longitude.
275
276-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
277          Pour rajouter un lien avec les librairies FORTRAN
278          libfile1.a, libfile2.a ... se trouvant respectivement sur les
279          repertoires dir1, dir2 ...
280          Si dirn est un repertoire dont le chemin est automatique (comme
281          par exemple /usr/lib ...) il n'est pas besoin de specifier -Ldirn.
282
283Auteur: Frederic Hourdin  (hourdin@lmd.jussieu.fr)
284eod
285exit
286
287########################################################################
288# Lecture des differentes options
289########################################################################
290
291    case -d:
292        set dim=$2 ; shift ; shift ; goto top
293                       
294    case -O:
295        set optim="$2" ; shift ; shift ; goto top
296
297     case -p
298        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
299
300     case -g
301        set grille="$2" ; shift ; shift ; goto top
302
303     case -t
304        set ntrac=$2 ; shift ; shift ; goto top
305
306     case -include
307        set include="$include -I$2" ; shift ; shift ; goto top
308
309     case -adjnt
310        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
311        set optim="$optim -Dadj" ; shift ; goto top
312
313     case -filtre
314        set filtre=$2 ; shift ; shift ; goto top
315
316     case -link
317        set opt_link="$2" ; shift ; shift ; goto top
318
319     case -debug
320        if $HP then
321           set optim=" -g "
322        else if $SUN then
323           setenv PARALLEL 2
324           set optim=" -g -C "
325           set optim90=" -fixed -g "
326        else if $CRAY then
327           set optim="$optim"" -g "
328           set optim90="$optim90"" -G1 "
329        else if $LINUX then
330           set optim="$optim"" -g -Mbounds "
331           set optim90="$optim90"" -g -Mbounds "
332        else
333           echo pas d option debug predefinie pour cette machine
334           exit
335        endif
336        shift ; goto top
337
338     default
339        set code="$1" ; shift ; goto top
340
341   endsw
342endif
343
344########################################################################
345# cas special sans physique
346########################################################################
347if ( "$physique" == 'nophys' ) then
348   set phys="L_PHY= LIBPHY="
349endif
350
351########################################################################
352# choix du nombre de traceur par defaut si il n'a pas ete choisi,
353# suivant la physique
354########################################################################
355
356if ( $ntrac == 0  ) then
357    if ( "$physique" == 'nophys' ) then
358        set ntrac=1
359    else if ( "$physique" == 'lmd' ) then
360        set ntrac=2
361    else if ( "$physique" == 'lmd_test_li' ) then
362        set ntrac=2
363    else if ( "$physique" == 'ec' ) then
364        set ntrac=1
365    else
366        set ntrac = 1
367    endif
368endif
369
370########################################################################
371#subtilites sur le nom de la librairie
372########################################################################
373
374\rm tmp ; touch tmp
375\rm tmp90 ; touch tmp90
376foreach i ( $optim )
377   echo $i | sed -e 's/\"//g' -e "s/\'//g" -e 's/-//g'  >> tmp
378end
379set suf=
380foreach i ( `sort tmp | uniq ` )
381   set suf=$suf$i
382end
383if ( ! $IBM ) then
384   set nomlib="$nomlib$suf"
385endif
386if ( $DEC ) then
387   set nomlib=DEC
388endif
389if ( $IBM ) then
390   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
391   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
392else if ( $SUN ) then
393   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
394   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
395else
396   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
397   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
398endif
399set nomlib=${nomlib}_${dim_}_t${ntrac}_$grille
400## M-A-F nomlib trop long sur CRAY pour ar
401if ( $CRAY ) then
402    set nomlib=F90_${dim_}_t${ntrac}
403endif
404if ( $NEC ) then
405    set nomlib=F90_${dim_}_t${ntrac}
406endif
407echo calcul de la dimension
408set dimc=`echo $dim | wc -w`
409
410if ( "$dimc" == "2" ) then
411set include="$include "'-I$(LIBF)/dyn2d '
412set dimh=$dim
413else
414set include="$include "'-I$(LIBF)/dyn3d '
415set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
416endif
417echo $dimc
418
419########################################################################
420# path pour les #include
421########################################################################
422
423set include="$include -I$NCDFINC -I$IOIPSLDIR"
424echo $include
425
426########################################################################
427# Gestion des dimensions du modele.
428# on cree ou remplace le fichier des dimensions/nombre de traceur
429########################################################################
430
431cd $libf/grid
432if ( -f dimensions.h ) then
433echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
434echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
435echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
436echo  vous pouvez continuer en repondant oui.
437echo "Voulez-vous vraiment continuer?"
438if ( $< == "oui" ) then
439\rm $libf/grid/dimensions.h
440else
441exit
442endif
443endif
444
445cd dimension
446makdim $ntrac $dim
447cat $libf/grid/dimensions.h
448
449cd $LMDGCM
450set libo=$libo/$nomlib
451if ( ! -d $libo )  then
452   mkdir $libo
453   cd $model
454endif
455
456########################################################################
457# Differentes dynamiques (3d, 2d, 1d)
458########################################################################
459
460set dimension=`echo $dim | wc -w`
461echo dimension $dimension
462if ( $dimension == 1 ) then
463echo pas de dynamique
464set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
465endif
466endif
467cd $model
468if ( $dimension == 3 ) then
469cd libf/grid
470\rm fxyprim.h
471cp -p fxy_${grille}.h fxyprim.h
472endif
473
474######################################################################
475#   Traitement special pour le nouveau rayonnement de Laurent Li.
476######################################################################
477
478if ( -f $libf/phy$physique/raddim.h ) then
479if ( -f $libf/phy$physique/raddim.$dimh.h ) then
480\rm $libf/phy$physique/raddim.h
481cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
482echo $libf/phy$physique/raddim.$dimh.h
483cat $libf/phy$physique/raddim.$dimh.h
484cat $libf/phy$physique/raddim.h
485else
486echo On peut diminuer la taille de l executable en creant
487echo le fichier $libf/phy$physique/raddim.$dimh.h
488\cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
489endif
490endif
491
492######################################################################
493# Gestion du filtre qui n'existe qu'en 3d.
494######################################################################
495
496if ( `expr $dimc \> 2` == 1 ) then
497   set filtre="FILTRE=$filtre"
498else
499   set filtre="FILTRE= L_FILTRE= "
500endif
501echo MACRO FILTRE $filtre
502
503echo $dimc
504
505########################################################################
506#  Avant de lancer le make, on recree le makefile si necessaire
507########################################################################
508# c'est a dire dans 3 cas:
509# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
510#    derniere creation du makefile
511# 2. si le fichier contenant cette liste "liste_des_sources"
512#    n'existe pas.
513# 3. Si le makefile n'existe pas.
514########################################################################
515
516cd $model
517find libf -name '*.[Fh]' -print >! tmp77
518find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
519
520if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
521     || `diff tmp90 liste_des_sources_f90 | wc -w` \
522     || ! -f makefile \
523     || ! -f liste_des_sources_f90 \
524     || ! -f liste_des_sources_f77 ) then
525        echo les fichiers suivants ont ete crees ou detruits
526        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
527        diff liste_des_sources_f77 tmp77
528        diff liste_des_sources_f90 tmp90
529        \cp tmp77 liste_des_sources_f77
530        \cp tmp90 liste_des_sources_f90
531        echo On recree le makefile
532        ./create_make_gcm >! tmp
533        \mv tmp makefile
534        echo Nouveau makefile cree.
535endif
536
537########################################################################
538#  Execution de la comande make
539########################################################################
540
541echo PHYSIQUE $phys
542echo dynamique $dyn $dimension
543echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
544echo PATH pour les fichiers INCLUDE $include
545echo OPLINK="$oplink"
546
547if $HP then
548   set f77='fort77 +OP'
549   set f90='jensaisrien'
550   set opt_link="$opt_link -lm"
551else  if $VPP then
552   set f77=frt
553   set f90=$f77
554else if $CRAY then
555   set f77=f90
556   set f90=f90
557else if $LINUX then
558   set f77=pgf90
559   set f90=pgf90
560else if $SUN then
561   set f77=f90
562   set f90=f90
563else if $NEC then
564   set f77=f90
565   set f90=f90
566else
567   set f77=f77
568   set f90=f90
569endif
570
571cd $model
572
573if $VPP then
574set make="gmake RANLIB=ls"
575else if $CRAY then
576set make="make RANLIB=ls"
577else if $NEC then
578set make="make RANLIB=ls"
579else if $LINUX then
580set make="make -k RANLIB=ranlib"
581else
582set make="make RANLIB=ranlib"
583endif
584
585
586
587#
588# les deux test suivants sont "temporaires" pour pallier des "faiblesses" du
589# compilateur fortran Sun: f90: SC4.0 11 Sep 1995 FORTRAN 90 1.1
590#
591#if ($code == 'create_limit' && $SUN) then
592#   set link=f77
593#   set opt_link="-L$NCDFLIB -lnetcdf"
594#endif
595
596#if ($code == 'create_etat0' && $SUN) then
597#   if ( ! -f $libo/libdyn3d.a ) then
598#     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
599#     \rm $libf/grid/dimensions.h
600#     exit
601#   endif
602#   set optim=" -dalign "
603#   set optim90=" -dalign -fixed "
604#   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
605#   set link="$f90 $optim90"
606#   touch $LMDGCM/libf/dyn3d/startvar.F
607#   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
608#endif
609
610#
611# Encore un test temporaire: probleme de compilation sur VPP
612# l'optimisation de startvar se passe mal
613#
614if ($code == 'create_etat0' && $VPP) then
615   if ( ! -f $libo/libdyn3d.a ) then
616     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
617     \rm $libf/grid/dimensions.h                                             
618     exit                       
619   endif
620   set optim=" -Wv,-Of,-ilfunc"
621   set optimbis=" -Psia -Aa -Wv,-m3 -Wp,-DVPP -Z $LMDGCM/listage"
622   set optim90="$optim""$optimbis"" -X9 -w"
623   set opt_link="-L$IOIPSLDIR -lioipsl -L$NCDFLIB -lnetcdf"
624   touch $LMDGCM/libf/dyn3d/startvar.F
625   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
626endif
627
628#################################################################
629# Execution de la comande make... ENFIN!
630#################################################################
631
632if $VPP then
633  set optim90=" $optim90 -Am -M$libo"
634 \cp $IOIPSLDIR/*.mod $libo
635else if $SUN then
636 set optim90=" $optim90 -M$IOIPSLDIR -M$libo "
637 set optim="$optim90"
638 \cp $IOIPSLDIR/*.mod $libo
639else if $NEC then
640 set optim90=" $optim90 -I$libo "
641else if $LINUX then
642 set optim90=" -fast -module $libo "
643 set mod_loc_dir=$libo
644 \cp $IOIPSLDIR/*.mod $libo
645endif
646
647set link="$f90 $optim90"
648
649#if $NEC then
650#  set link="sxld $opt_link"
651#  set ar=sxar
652#endif
653
654
655cd $localdir
656
657
658echo $make -f $LMDGCM/makefile \
659OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
660OPTIM90="$optim90" \
661OPTIM="$optim$optimbis" \
662INCLUDE="$include" \
663$filtre \
664LIBO=$libo \
665$dyn \
666$phys \
667DIM=$dimc \
668L_ADJNT="$adjnt" \
669LOCAL_DIR="$localdir"  \
670F77="$f77" \
671F90="$f90" \
672OPLINK="$oplink" \
673LINK="$link" \
674GCM="$LMDGCM" \
675MOD_LOC_DIR=$mod_loc_dir \
676MOD_SUFFIX=$mod_suffix \
677PROG=$code
678
679$make -f $LMDGCM/makefile \
680OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
681OPTIM90="$optim90" \
682OPTIM="$optim$optimbis" \
683INCLUDE="$include" \
684$filtre \
685LIBO=$libo \
686$dyn \
687$phys \
688DIM=$dimc \
689L_ADJNT="$adjnt" \
690LOCAL_DIR="$localdir"  \
691F77="$f77" \
692F90="$f90" \
693OPLINK="$oplink" \
694LINK="$link" \
695GCM="$LMDGCM" \
696MOD_LOC_DIR=$mod_loc_dir \
697MOD_SUFFIX=$mod_suffix \
698PROG=$code
699
700\rm $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.