source: LMDZ.3.3/branches/LF/makegcm @ 5326

Last change on this file since 5326 was 2, checked in by lmdz, 25 years ago

Initial revision

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