source: LMDZ.3.3/trunk/makegcm @ 51

Last change on this file since 51 was 28, checked in by lmdz, 25 years ago

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 19.9 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
393   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
394   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
395endif
396set nomlib=${nomlib}_${dim_}_t${ntrac}_$grille
397## M-A-F nomlib trop long sur CRAY pour ar
398if ( $CRAY ) then
399    set nomlib=F90_${dim_}_t${ntrac}
400endif
401if ( $NEC ) then
402    set nomlib=F90_${dim_}_t${ntrac}
403endif
404echo calcul de la dimension
405set dimc=`echo $dim | wc -w`
406
407if ( "$dimc" == "2" ) then
408set include="$include "'-I$(LIBF)/dyn2d '
409set dimh=$dim
410else
411set include="$include "'-I$(LIBF)/dyn3d '
412set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
413endif
414echo $dimc
415
416########################################################################
417# path pour les #include
418########################################################################
419
420set include="$include -I$NCDFINC -I$IOIPSLDIR"
421echo $include
422
423########################################################################
424# Gestion des dimensions du modele.
425# on cree ou remplace le fichier des dimensions/nombre de traceur
426########################################################################
427
428cd $libf/grid
429if ( -f dimensions.h ) then
430echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
431echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
432echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
433echo  vous pouvez continuer en repondant oui.
434echo "Voulez-vous vraiment continuer?"
435if ( $< == "oui" ) then
436\rm $libf/grid/dimensions.h
437else
438exit
439endif
440endif
441
442cd dimension
443makdim $ntrac $dim
444cat $libf/grid/dimensions.h
445
446cd $LMDGCM
447set libo=$libo/$nomlib
448if ( ! -d $libo )  then
449   mkdir $libo
450   cd $model
451endif
452
453########################################################################
454# Differentes dynamiques (3d, 2d, 1d)
455########################################################################
456
457set dimension=`echo $dim | wc -w`
458echo dimension $dimension
459if ( $dimension == 1 ) then
460echo pas de dynamique
461set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
462endif
463endif
464cd $model
465if ( $dimension == 3 ) then
466cd libf/grid
467\rm fxyprim.h
468cp -p fxy_${grille}.h fxyprim.h
469endif
470
471######################################################################
472#   Traitement special pour le nouveau rayonnement de Laurent Li.
473######################################################################
474
475if ( -f $libf/phy$physique/raddim.h ) then
476if ( -f $libf/phy$physique/raddim.$dimh.h ) then
477\rm $libf/phy$physique/raddim.h
478cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
479echo $libf/phy$physique/raddim.$dimh.h
480cat $libf/phy$physique/raddim.$dimh.h
481cat $libf/phy$physique/raddim.h
482else
483echo On peut diminuer la taille de l executable en creant
484echo le fichier $libf/phy$physique/raddim.$dimh.h
485\cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
486endif
487endif
488
489######################################################################
490# Gestion du filtre qui n'existe qu'en 3d.
491######################################################################
492
493if ( `expr $dimc \> 2` == 1 ) then
494   set filtre="FILTRE=$filtre"
495else
496   set filtre="FILTRE= L_FILTRE= "
497endif
498echo MACRO FILTRE $filtre
499
500echo $dimc
501
502########################################################################
503#  Avant de lancer le make, on recree le makefile si necessaire
504########################################################################
505# c'est a dire dans 3 cas:
506# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
507#    derniere creation du makefile
508# 2. si le fichier contenant cette liste "liste_des_sources"
509#    n'existe pas.
510# 3. Si le makefile n'existe pas.
511########################################################################
512
513cd $model
514find libf -name '*.[Fh]' -print >! tmp77
515find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
516
517if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
518     || `diff tmp90 liste_des_sources_f90 | wc -w` \
519     || ! -f makefile \
520     || ! -f liste_des_sources_f90 \
521     || ! -f liste_des_sources_f77 ) then
522        echo les fichiers suivants ont ete crees ou detruits
523        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
524        diff liste_des_sources_f77 tmp77
525        diff liste_des_sources_f90 tmp90
526        \cp tmp77 liste_des_sources_f77
527        \cp tmp90 liste_des_sources_f90
528        echo On recree le makefile
529        ./create_make_gcm >! tmp
530        \mv tmp makefile
531        echo Nouveau makefile cree.
532endif
533
534########################################################################
535#  Execution de la comande make
536########################################################################
537
538echo PHYSIQUE $phys
539echo dynamique $dyn $dimension
540echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
541echo PATH pour les fichiers INCLUDE $include
542echo OPLINK="$oplink"
543
544if $HP then
545   set f77='fort77 +OP'
546   set f90='jensaisrien'
547   set opt_link="$opt_link -lm"
548else  if $VPP then
549   set f77=frt
550   set f90=$f77
551else if $CRAY then
552   set f77=f90
553   set f90=f90
554else if $LINUX then
555   set f77=pgf77
556   set f90=pgf90
557else if $SUN then
558   set f77=f90
559   set f90=f90
560else if $NEC then
561   set f77=f90
562   set f90=f90
563else
564   set f77=f77
565   set f90=f90
566endif
567
568cd $model
569
570if $VPP then
571set make="gmake RANLIB=ls"
572else if $CRAY then
573set make="make RANLIB=ls"
574else if $NEC then
575set make="make RANLIB=ls"
576else if $LINUX then
577set make="make -k RANLIB=ranlib"
578else
579set make="make RANLIB=ranlib"
580endif
581
582
583
584#
585# les deux test suivants sont "temporaires" pour pallier des "faiblesses" du
586# compilateur fortran Sun: f90: SC4.0 11 Sep 1995 FORTRAN 90 1.1
587#
588#if ($code == 'create_limit' && $SUN) then
589#   set link=f77
590#   set opt_link="-L$NCDFLIB -lnetcdf"
591#endif
592
593#if ($code == 'create_etat0' && $SUN) then
594#   if ( ! -f $libo/libdyn3d.a ) then
595#     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
596#     \rm $libf/grid/dimensions.h
597#     exit
598#   endif
599#   set optim=" -dalign "
600#   set optim90=" -dalign -fixed "
601#   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
602#   set link="$f90 $optim90"
603#   touch $LMDGCM/libf/dyn3d/startvar.F
604#   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
605#endif
606
607#
608# Encore un test temporaire: probleme de compilation sur VPP
609# l'optimisation de startvar se passe mal
610#
611if ($code == 'create_etat0' && $VPP) then
612   if ( ! -f $libo/libdyn3d.a ) then
613     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
614     \rm $libf/grid/dimensions.h                                             
615     exit                       
616   endif
617   set optim=" -Wv,-Of,-ilfunc"
618   set optimbis=" -Psia -Aa -Wv,-m3 -Wp,-DVPP -Z $LMDGCM/listage"
619   set optim90="$optim""$optimbis"" -X9 -w"
620   set opt_link="-L$IOIPSLDIR -lioipsl -L$NCDFLIB -lnetcdf"
621   touch $LMDGCM/libf/dyn3d/startvar.F
622   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
623endif
624
625#################################################################
626# Execution de la comande make... ENFIN!
627#################################################################
628
629if $VPP then
630  set optim90=" $optim90 -Am -M$libo"
631 \cp $IOIPSLDIR/*.mod $libo
632else if $SUN then
633 set optim90=" $optim90 -M$IOIPSLDIR -M$libo "
634 set optim="$optim90"
635 \cp $IOIPSLDIR/*.mod $libo
636else if $NEC then
637 set optim90=" $optim90 -I$libo "
638else if $LINUX then
639 set optim90=" -fast -module $libo "
640 set mod_loc_dir=$libo
641 \cp $IOIPSLDIR/*.mod $libo
642endif
643
644set link="$f90 $optim90"
645
646#if $NEC then
647#  set link="sxld $opt_link"
648#  set ar=sxar
649#endif
650
651
652cd $localdir
653
654
655echo $make -f $LMDGCM/makefile \
656OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
657OPTIM90="$optim90" \
658OPTIM="$optim$optimbis" \
659INCLUDE="$include" \
660$filtre \
661LIBO=$libo \
662$dyn \
663$phys \
664DIM=$dimc \
665L_ADJNT="$adjnt" \
666LOCAL_DIR="$localdir"  \
667F77="$f77" \
668F90="$f90" \
669OPLINK="$oplink" \
670LINK="$link" \
671GCM="$LMDGCM" \
672MOD_LOC_DIR=$mod_loc_dir \
673MOD_SUFFIX=$mod_suffix \
674PROG=$code
675
676$make -f $LMDGCM/makefile \
677OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
678OPTIM90="$optim90" \
679OPTIM="$optim$optimbis" \
680INCLUDE="$include" \
681$filtre \
682LIBO=$libo \
683$dyn \
684$phys \
685DIM=$dimc \
686L_ADJNT="$adjnt" \
687LOCAL_DIR="$localdir"  \
688F77="$f77" \
689F90="$f90" \
690OPLINK="$oplink" \
691LINK="$link" \
692GCM="$LMDGCM" \
693MOD_LOC_DIR=$mod_loc_dir \
694MOD_SUFFIX=$mod_suffix \
695PROG=$code
696
697\rm $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.