source: LMDZ4/branches/unlabeled-1.1.1/makegcm @ 3722

Last change on this file since 3722 was 524, checked in by lmdzadmin, 20 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: 28.0 KB
Line 
1#!/bin/csh
2#
3# $Header$
4#
5#set verbose echo
6########################################################################
7# options par defaut pour la commande make
8########################################################################
9set dim="96x71x19"
10set physique=lmd
11set phys="PHYS=$physique"
12set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. '
13set ntrac = 4
14set filtre=filtrez
15set grille=reg
16set couple=false
17set veget=true
18set psmile=false
19set OPT_STACK='-Wf,-init stack=nan'
20set OPT_STACK=' '
21set OPTIMI='-C debug -eC '
22set OPTIMI=' -ftrace '
23set io=ioipsl
24
25########################################################################
26# path a changer contenant les sources et les objets du modele
27########################################################################
28
29###### VERSION LMDZ.4
30# set LMDGCM=$HOME/LMDZ.4
31#
32
33setenv localdir "`pwd`"
34set MODIPSL=0
35echo $localdir | grep modipsl >& /dev/null
36if ( ! $status ) then
37  set MODIPSL=1
38  setenv LMDGCM $localdir
39  cd ../..
40  setenv LIBOGCM "`pwd`/lib"
41  setenv IOIPSLDIR $LIBOGCM
42  setenv MODIPSLDIR $LIBOGCM
43  cd $localdir
44  if ( `hostname` == rhodes ) then
45    set NCDFINC=`grep sxnec ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
46    set NCDFLIB=`grep sxnec ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
47  else
48    if ( `hostname` == nymphea0 ) then
49      set NCDFINC=`grep fjvpp ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
50      set NCDFLIB=`grep fjvpp ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
51    else if ( `hostname` == mercure ) then
52      set NCDFINC=`grep sx6nec ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
53      set NCDFLIB=`grep sx6nec ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
54    else
55      echo 'Probleme de definition des variables NCDFINC et NCDFLIB'
56    endif
57  endif
58else
59  if ( ! $?LMDGCM ) then
60    echo You must initialize the variable LMDGCM in your environnement
61    echo for instance: "setenv LMDGCM /usr/myself/supergcm" in .cshrc
62    exit
63  endif
64  if ( ! $?LIBOGCM ) then
65    set LIBOGCM=$LMDGCM/libo
66  endif
67  if ( ! $?IOIPSLDIR ) then
68    echo You must initialize the variable IOIPSLDIR in your environnement
69    echo for instance: "setenv IOIPSLDIR /usr/myself/ioipsl" in .cshrc
70    exit
71  else
72      setenv MODIPSLDIR $IOIPSLDIR
73  endif
74  if ( ! $?NCDFLIB ) then
75    echo You must initialize the variable NCDFLIB in your environnement
76    echo for instance: "setenv NCDFLIB /usr/myself/netcdf" in .cshrc
77    exit
78  endif
79  if ( ! $?NCDFINC ) then
80    echo You must initialize the variable NCDFINC in your environnement
81    echo for instance: "setenv NCDFINC /usr/myself/netcdf" in .cshrc
82    exit
83  endif
84endif
85set model=$LMDGCM
86set libo=$LIBOGCM
87
88########################################################################
89#  Les differentes platformes reconnues
90########################################################################
91
92set HP=0
93set IBM=0
94set SUN=0
95set VPP=0
96set CRAY=0
97set DEC=0
98set LINUX=0
99set NEC=0
100set XNEC=0
101set X6NEC=0
102if ( `uname` == HP-UX ) then
103   set machine=HP
104   set HP=1
105else if (`uname` == UNIX_System_V ) then
106   set machine=VPP
107   set VPP=1
108else if (`uname` == SunOS ) then
109   set machine=SUN
110   set SUN=1
111else if ( `uname` == AIX ) then
112   set machine=IBM
113   set IBM=1
114else if ( `uname` == OSF1 ) then
115   set machine=ALPHA
116   set DEC=1
117else if ( `uname` == Linux && `hostname` != mercure ) then
118   set machine=LINUX
119   set LINUX=1
120else if ( `hostname` == atlas || `hostname` == axis  || `hostname` == etoile ) then
121   set machine=CRAY
122   set CRAY=1
123else if ( `uname` == SUPER-UX ) then
124   set machine=NEC
125   set NEC=1
126else if ( `hostname` == rhodes) then
127   set machine=XNEC
128   set XNEC=1
129else if ( `hostname` == mercure) then
130   set machine=X6NEC
131   set X6NEC=1
132else
133   echo Vous travaillez sur une machine non prevue par le reglement
134   exit
135endif
136
137if ( ! -d $libo )  then
138   mkdir $libo
139endif
140
141
142if $VPP then
143set netcdf=netcdf_v
144else
145set netcdf=netcdf
146endif
147########################################################################
148#  Quelques initialisations de variables du shell.
149########################################################################
150
151set dyn=
152set opt_link=""
153set adjnt=""
154set opt_dep=""
155
156set optim=""
157set optimbis=""
158set optim90=""
159set oplink=""
160
161########################################################################
162#  Optimisations par defaut suivant les machines
163########################################################################
164
165echo "Optimisations par defaut suivant les machines"
166set libf=$model/libf
167#setenv localdir "LOCAL_DIR=`pwd`"
168#setenv localdir "`pwd`"
169cd $model
170#############
171if $CRAY then
172#############
173#   set optim="-Wf'-ei' -dp -Wf'-a static'"
174   set optimbis=" -DCRAY "
175   set optim90="-Wp'-P' -DCRAY -p$IOIPSLDIR "'-p$(LIBO) -eiv '
176   set optim="$optim90"
177   set oplink="-Wl'-DSTACK=128 -f indef' -L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf "
178   set mod_loc_dir=" "
179   set mod_suffix=" "
180#################
181else if $SUN then
182#################
183   set optim=" -fast "
184   set optimbis=" "
185   set optim90=" -fast -fixed "
186   set optimtru90=" -fast -free "
187   set opt_link="-lf77compat -L$MODIPSLDIR -lsechiba -lparameters -lstomate -lioipsl -L$NCDFLIB -lnetcdf "
188   set mod_loc_dir=$localdir
189   set mod_suffix=mod
190#################
191else if $HP then
192#################
193   set optim=" +U77 -O +E1 "
194   set optimbis=" "
195#################
196else if $IBM then
197#################
198   set optim=" -O3 -qtune=pwr2 -qarch=pwr2"
199   set optimbis=" "
200#################
201else if $VPP then
202#################
203#   set optim="-Dasuxm  -On, -g -Ad -Potilax -Eciplume -Si"
204#   set optimbis="  -Wv,-m3 -Wp,-DVPP -Z $LMDGCM/listage"
205   set optimbis=" -Wp,-DNC_DOUBLE -Ad -Z $LMDGCM/listage -X9"
206   set optim90="$optim $optimbis -X9 -w"
207   set mod_loc_dir=$MODIPSLDIR
208   set mod_suffix=mod
209#################
210else if $DEC then
211#################
212   set optim=" "
213   set optimbis=" "
214#################
215else if $LINUX then
216#################
217   set optim="-fast "
218   set optim90=" -fast "
219   set optimtru90=" -fast -c -Mfree -module $MODIPSLDIR "
220   set opt_link=" -Mfree -L /usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$MODIPSLDIR -lsechiba -lparameters -lstomate -L$NCDFLIB -lnetcdf -lioipsl -Wl,-Bstatic -L/usr/lib/gcc-lib/i386-linux/2.95.2/"
221   set mod_loc_dir=$MODIPSLDIR
222   set mod_suffix=mod
223#################
224else if $NEC then
225#################
226   set optim90=' -clear -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
227   set optimtru90=' -clear -f4 -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
228   set optim="$optim90"
229   set optimbis=" "
230   set opt_link=" -C hopt -float0 -ew -P static -L$MODIPSLDIR -lioipsl  $NCDFLIB -lnetcdf_i8r8_v "
231   set mod_loc_dir="."
232   set mod_suffix="mod"
233#################
234else if $XNEC then
235#################
236   set optdbl='-dw -Wf\"-A dbl4\"'
237   set optim90=' -clear -float0 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
238   set optimtru90=' -clear -f4 -float0 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R2 -R3 -R4 -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume"'
239   set optim="$optim90"
240   set optimbis=" "
241   set mod_suffix="mod"
242else if $X6NEC then
243   set optdbl='-dw -Wf\"-A dbl4\"' 
244   set optim90=' -clear -float0 -size_t64 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
245   set optimtru90=' -clear -f4 -float0 -size_t64 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R2 -R3 -R4 -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume"'
246   set optim="$optim90"
247   set optimbis=" "
248   set mod_suffix="mod"
249else
250   set optim=""
251   set optimbis=" "
252endif
253
254set nomlib=$machine
255
256########################################################################
257# lecture des options de mymake
258########################################################################
259
260top:
261if ($#argv > 0) then
262    switch ($1:q)
263
264    case -h:
265
266########################################################################
267# Manuel en ligne
268########################################################################
269more <<eod
270
271
272makegcm [Options] prog
273
274
275
276
277Par default, la commande makegcm:
278---------------------------------
279
2801. compile une serie de sous programmes se trouvant dans des sous-repertoires
281de $LMDGCM/libf.
282Les sous programmes sont ensuite stokes sur dans des librairies FORTRAN
283sur $LIBOGCM.
284
2852. Ensuite, makegcm compile le programme prog.f se trouvant par default sur
286$LMDGCM/libf/dyn3d et effectue le lien avec l ensemble des librairies.
287
288La variable '$LMDGCM' doit etre initialisee dans votre .cshrc ou en dur
289dans la comande makegcm.
290
291La commande makegcm est faite pour permettre de gerer en parallele des
292versions differentes du modele, compilees avec des options de compilation
293et des dimensions differentes sans avoir a chaque fois a recompiler tout
294le modele.
295
296Les librairies FORTRAN sont stoquees sur le directory $LIBOGCM.
297
298
299OPTIONS:
300--------
301
302Les options suivantes peuvent etre definies soit par defaut en editant le
303"script" makegcm, soit en interactif:
304
305-d imxjmxlm  ou im, jm, et lm sont resp. le nombre de longitudes, latitudes
306             et couches verticales.
307
308-t ntrac   selectionne le nombre de traceur advectes par la dynamique.
309           Dans les versions courantes du modele terrestre on a par exemple
310           ntrac=2 pour l'eau vapeur et liquide
311
312             L'effet des options -d et -t est d'ecraser le fichier
313             $LMDGCM/libf/grid/dimensions.h
314             qui contient sous forme de 4 PARAMETER FORTRAN les 3 dimensions
315             de la grille horizontale im, jm, lm plus le nombre de traceurs
316             advectes passivement par la dynamique ntrac, par un nouveu fichier
317             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
318             Si ce fichier n'existe pas encore, il est cree par le script
319             $LMDGCM/libf/grid/dimension/makdim
320
321-p PHYS    pour selectionner le jeu de parametrisations physiques avec
322           lequel on veut compiler le modele.
323           Le modele sera alors compile en prenant les sources des
324           parametrisations physiques dans le repertoire:
325            $LMDGCM/libf/phyPHYS
326
327-c false|true
328           pour selectionner le mode force (par defaut) ou couple
329
330-io ioipsl|noioipsl
331           pour selectionner le logiciel IO : IOIPSL par defaut
332
333-psmile false|true
334           pour selectionner le mode psmile ou non (par defaut)
335
336-v true|false
337           pour selectionner la vegetation (par defaut) ou non
338
339-g grille  selectionne le type de grille qu'on veut utiliser.
340           L'effet de cette option est d'ecraser le fichier
341           $LMDGCM/libf/grid/fxyprim.h
342           avec le fichier
343           $LMDGCM/libf/grid/fxy_grille.h
344           grille peut prendre les valeurs:
345           1. reg pour la grille reguliere
346           2. sin pour avoir des points equidistants en sinus de la latitude
347           3. new pour pouvoir zoomer sur une partie du globe
348
349-O "optimisation fortran" ou les optimisations fortran sont les options de la
350            commande f77
351
352-include path
353           Dans le cas ou on a dans des sous programmes des fichiers
354           #include (cpp) qui se trouve sur des repertoires non references
355           par defaut
356
357-adjnt     Pour compiler la l'adjoint du code dynamique
358
359-filtre  filtre
360           Pour choisir le filtre en longitude dans les regions polaires.
361           "filtre" correspond au nom d'un repertoire se trouvant sur
362           $LMDGCM/libf. Le filtre standard du modele est "filtrez" qui peut
363           etre utilise aussi bien pour une grille reguliere que pour une
364           grille zoomee en longitude.
365
366-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
367          Pour rajouter un lien avec les librairies FORTRAN
368          libfile1.a, libfile2.a ... se trouvant respectivement sur les
369          repertoires dir1, dir2 ...
370          Si dirn est un repertoire dont le chemin est automatique (comme
371          par exemple /usr/lib ...) il n'est pas besoin de specifier -Ldirn.
372
373Auteur: Frederic Hourdin  (hourdin@lmd.jussieu.fr)
374eod
375exit
376
377########################################################################
378# Lecture des differentes options
379########################################################################
380
381    case -d:
382        set dim=$2 ; shift ; shift ; goto top
383                       
384    case -O:
385        set optim="$2" ; shift ; shift ; goto top
386
387     case -p
388        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
389
390     case -g
391        set grille="$2" ; shift ; shift ; goto top
392
393     case -c
394        set couple="$2" ; shift ; shift ; goto top
395
396     case -io
397        set io="$2" ; shift ; shift ; goto top
398
399     case -v
400        set veget="$2" ; shift ; shift ; goto top
401
402     case -psmile
403        set psmile="$2" ; shift ; shift ; goto top
404 
405     case -t
406        set ntrac=$2 ; shift ; shift ; goto top
407
408     case -include
409        set include="$include -I$2" ; shift ; shift ; goto top
410
411     case -adjnt
412        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
413        set optim="$optim -Dadj" ; shift ; goto top
414
415     case -filtre
416        set filtre=$2 ; shift ; shift ; goto top
417
418     case -link
419        set opt_link="$opt_link $2" ; shift ; shift ; goto top
420
421     case -debug
422        if $HP then
423           set optim=" -g "
424        else if $SUN then
425           setenv PARALLEL 2
426# Il faut rajouter l'option -dalign a -g pour pouvoir editer les liens
427# avec des programmes compiles avec -fast
428           set optim=" -g -dalign "
429           set optim90=" -fixed -g "
430           set optimtru90=" -free -g -C -dalign "
431        else if $CRAY then
432           set optim="$optim"" -g "
433           set optim90="$optim90"" -G1 "
434        else if $LINUX then
435           set optim="$optim"" -g -Mbounds -C "
436           set optim90="$optim90"" -g -Mbounds -C "
437        else
438           echo pas d option debug predefinie pour cette machine
439           exit
440        endif
441        shift ; goto top
442
443     default
444        set code="$1" ; shift ; goto top
445
446   endsw
447endif
448
449########################################################################
450# Definition des clefs CPP
451########################################################################
452
453if ( $io == ioipsl ) then
454   set optim="$optim -DCPP_IOIPSL"
455   set optim90="$optim"
456   set optimtru90="$optimtru90 -DCPP_IOIPSL"
457endif
458
459if ( "$physique" == 'nophys' ) then
460   set phys="L_PHY= LIBPHY="
461else
462   set optim="$optim -DCPP_PHYS"
463   set optim90="$optim"
464   set optimtru90="$optimtru90 -DCPP_PHYS"
465endif
466
467set link_veget=" "
468if ( "$veget" == 'true' ) then
469   set optim="$optim -DCPP_VEGET"
470   set optim90="$optim"
471   set optimtru90="$optimtru90 -DCPP_VEGET"
472   set link_veget=" -lsechiba -lparameters -lstomate"
473   if ( $XNEC ) then
474      set link_veget=" -lsxsechiba -lsxparameters -lsxstomate"
475   endif
476endif
477
478
479########################################################################
480# cas special sans physique
481########################################################################
482if ( "$physique" == 'nophys' ) then
483   set phys="L_PHY= LIBPHY="
484endif
485
486########################################################################
487# choix du nombre de traceur par defaut si il n'a pas ete choisi,
488# suivant la physique
489########################################################################
490
491if ( $ntrac == 0  ) then
492    if ( "$physique" == 'nophys' ) then
493        set ntrac=1
494    else if ( "$physique" == 'lmd' ) then
495        set ntrac=2
496    else if ( "$physique" == 'lmd_test_li' ) then
497        set ntrac=2
498    else if ( "$physique" == 'ec' ) then
499        set ntrac=1
500    else
501        set ntrac = 1
502    endif
503endif
504
505########################################################################
506#subtilites sur le nom de la librairie
507########################################################################
508
509\rm -f tmp ; touch tmp
510\rm -f tmp90 ; touch tmp90
511foreach i ( $optim )
512   echo $i | sed -e 's/\"//g' -e "s/\'//g" -e 's/-//g'  >> tmp
513end
514set suf=
515foreach i ( `sort tmp | uniq ` )
516   set suf=$suf$i
517end
518if ( ! $IBM ) then
519   set nomlib="$nomlib$suf"
520endif
521if ( $DEC ) then
522   set nomlib=DEC
523endif
524if ( $IBM ) then
525   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
526   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
527else if ( $SUN ) then
528   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
529   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
530else
531   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
532   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
533endif
534set nomlib=${nomlib}${physique}_${dim_}_t${ntrac}_$grille
535## M-A-F nomlib trop long sur CRAY pour ar
536if ( $CRAY ) then
537    set nomlib=F90_${dim_}_t${ntrac}
538endif
539if ( $NEC || $XNEC || $X6NEC) then
540    set nomlib=F90_${dim_}_t${ntrac}
541endif
542echo calcul de la dimension
543set dimc=`echo $dim | wc -w`
544
545if ( "$dimc" == "2" ) then
546set include="$include "'-I$(LIBF)/dyn2d '
547set dimh=$dim
548else
549set include="$include "'-I$(LIBF)/dyn3d '
550set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
551endif
552echo $dimc
553
554########################################################################
555# path pour les #include
556########################################################################
557
558if ( $XNEC ) then
559  set include="$include -I$NCDFINC -I$IOIPSLDIR"
560else
561  set include="$include -I$NCDFINC -I$IOIPSLDIR"
562endif
563echo $include
564
565########################################################################
566# Gestion des dimensions du modele.
567# on cree ou remplace le fichier des dimensions/nombre de traceur
568########################################################################
569
570cd $libf/grid
571if ( -f dimensions.h ) then
572echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
573echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
574echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
575echo  vous pouvez continuer en repondant oui.
576echo "Voulez-vous vraiment continuer?"
577if ( $< == "oui" ) then
578\rm -f $libf/grid/dimensions.h
579else
580exit
581endif
582endif
583
584cd dimension
585makdim $ntrac $dim
586cat $libf/grid/dimensions.h
587
588cd $LMDGCM
589set libo=$libo/$nomlib
590if ( ! -d $libo )  then
591   mkdir $libo
592   cd $model
593endif
594
595########################################################################
596# Differentes dynamiques (3d, 2d, 1d)
597########################################################################
598
599set dimension=`echo $dim | wc -w`
600echo dimension $dimension
601if ( $dimension == 1 ) then
602echo pas de dynamique
603set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
604endif
605endif
606cd $model
607if ( $dimension == 3 ) then
608cd libf/grid
609\rm fxyprim.h
610cp -p fxy_${grille}.h fxyprim.h
611endif
612
613######################################################################
614#   Traitement special pour le nouveau rayonnement de Laurent Li.
615######################################################################
616
617if ( -f $libf/phy$physique/raddim.h ) then
618 if ( -f $libf/phy$physique/raddim.$dimh.h ) then
619  \rm -f $libf/phy$physique/raddim.h
620  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
621  echo $libf/phy$physique/raddim.$dimh.h
622  cat $libf/phy$physique/raddim.$dimh.h
623  cat $libf/phy$physique/raddim.h
624 else
625  echo On peut diminuer la taille de l executable en creant
626  echo le fichier $libf/phy$physique/raddim.$dimh.h
627  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
628 endif
629endif
630
631######################################################################
632# Gestion du filtre qui n'existe qu'en 3d.
633######################################################################
634
635if ( `expr $dimc \> 2` == 1 ) then
636   set filtre="FILTRE=$filtre"
637else
638   set filtre="FILTRE= L_FILTRE= "
639endif
640echo MACRO FILTRE $filtre
641
642echo $dimc
643
644########################################################################
645#  utilisation des vraies routines de couplage si on est en couple
646########################################################################
647if ( $couple == 'true' ) then
648  banner couple
649  pwd
650  if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true | wc -w` ) then
651   \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy
652   \cp $libf/phy$physique/oasis.true $libf/phy$physique/oasis.F
653  endif
654else
655  if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy | wc -w` ) then
656   \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true
657   \cp $libf/phy$physique/oasis.dummy $libf/phy$physique/oasis.F
658  endif
659endif
660########################################################################
661#  Avant de lancer le make, on recree le makefile si necessaire
662########################################################################
663# c'est a dire dans 3 cas:
664# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
665#    derniere creation du makefile
666# 2. si le fichier contenant cette liste "liste_des_sources"
667#    n'existe pas.
668# 3. Si le makefile n'existe pas.
669########################################################################
670
671cd $model
672find libf -name '*.[Fh]' -print >! tmp77
673find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
674find libf -name '*.[Fh]90' -print >> tmp90
675
676if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
677     || `diff tmp90 liste_des_sources_f90 | wc -w` \
678     || ! -f makefile \
679     || ! -f liste_des_sources_f90 \
680     || ! -f liste_des_sources_f77 ) then
681        echo les fichiers suivants ont ete crees ou detruits
682        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
683        diff liste_des_sources_f77 tmp77
684        diff liste_des_sources_f90 tmp90
685        \cp tmp77 liste_des_sources_f77
686        \cp tmp90 liste_des_sources_f90
687        echo On recree le makefile
688        ./create_make_gcm >! tmp
689        \mv tmp makefile
690        echo Nouveau makefile cree.
691endif
692
693########################################################################
694#  Execution de la comande make
695########################################################################
696
697echo PHYSIQUE $phys
698echo dynamique $dyn $dimension
699echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
700echo PATH pour les fichiers INCLUDE $include
701echo OPLINK="$oplink"
702
703#################
704if $HP then
705#################
706   set f77='fort77 +OP'
707   set f90='jensaisrien'
708   set opt_link="$opt_link -lm"
709#################
710else  if $VPP then
711#################
712   set f77=frt
713   set f90=$f77
714   if ($couple == true) then
715     set opt_link="-Wg,-c $MODIPSLDIR/liboasis2.4_mpi2.a /usr/lang/mpi2/lib64/libmpi.a /usr/lang/mpi2/lib64/libmp.a -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
716     set oplink="-Wl,-t,-P,-dy "
717   else
718     set opt_link="-Wg,-c -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
719     set oplink="-Wl,-t,-dy "
720   endif
721   if ($veget == true) then
722     set opt_link="$opt_link $link_veget -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
723   endif
724#################
725else if $CRAY then
726#################
727   set f77=f90
728   set f90=f90
729#################
730else if $LINUX then
731#################
732   set f77=pgf90
733   set f90=pgf90
734   set opt_link=" -Mfree -L /usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$MODIPSLDIR $link_veget -L$NCDFLIB -lnetcdf -lioipsl -Wl,-Bstatic -L/usr/lib/gcc-lib/i386-linux/2.95.2/"
735#################
736else if $SUN then
737#################
738   set f77=f90
739   set f90=f90
740   set opt_link="-lf77compat -L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf "
741#################
742else if $NEC then
743#################
744   set f77=f90 -ftrace
745   set f90=f90 -ftrace
746   set opt_link="-L$MODIPSLDIR"
747   if ($veget == true) then
748     set opt_link="$opt_link $link_veget"
749   endif
750   if ($couple == true) then
751     set opt_link="$opt_link -lioipsl -loasis2.4_mpi2 -float0 -ew -P static $NCDFLIB "
752   else
753     set opt_link="$opt_link -L$MODIPSLDIR -lioipsl -float0 -ew -P static $NCDFLIB "
754   endif
755   set mod_loc_dir="./"
756#################
757else if $XNEC then
758#################
759   set f77="sxmpif90 -ftrace"
760   set f90="sxmpif90 -ftrace"
761   if $MODIPSL then
762     set opt_link="-L$MODIPSLDIR"
763     if ($veget == true) then
764       set opt_link="$opt_link $link_veget"
765     endif
766     if ($couple == true) then
767       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
768       if ($psmile == true) then
769       endif
770     else
771       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
772     endif
773   else
774     if ($couple == true) then
775       set opt_link="-L$MODIPSLDIR"
776       set opt_link="$opt_link $link_veget -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
777     else
778       set opt_link=" -C hopt -float0 $optdbl -P static -L$MODIPSLDIR $link_veget -lsxioipsl $NCDFLIB "
779   endif
780   set mod_loc_dir="./"
781##################
782else if $X6NEC then
783##################
784   set f77=sxmpif90
785   set f90=sxmpif90
786   if $MODIPSL then
787     set opt_link="-L$MODIPSLDIR"
788     if ($veget == true) then
789       set opt_link="$opt_link -lsxsechiba -lsxparameters -lsxstomate"
790     endif
791     if ($couple == true) then
792       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 -size_t64 $optdbl -P static $NCDFLIB "
793     else
794       set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
795     endif
796   else
797     set opt_link=" -float0 -size_t64 $optdbl -P static -L$MODIPSLDIR -lsxsechiba -lsxparameters -lsxstomate -lsxioipsl $NCDFLIB "
798   endif
799   set mod_loc_dir="./"
800#################
801else
802#################
803   set f77=f77
804   set f90=f90
805endif
806
807cd $model
808
809if $VPP then
810set make="gmake RANLIB=ls"
811else if $CRAY then
812set make="make RANLIB=ls"
813else if $NEC then
814set make="make RANLIB=ls"
815else if $LINUX then
816set make="make -k RANLIB=ranlib"
817else if $XNEC then
818set make="gmake RANLIB=ls"
819else if $X6NEC then
820set make="gmake RANLIB=ls"
821else
822set make="make RANLIB=ranlib"
823endif
824
825
826
827#
828# les deux test suivants sont "temporaires" pour pallier des "faiblesses" du
829# compilateur fortran Sun: f90: SC4.0 11 Sep 1995 FORTRAN 90 1.1
830#
831#if ($code == 'create_limit' && $SUN) then
832#   set link=f77
833#   set opt_link="-L$NCDFLIB -lnetcdf"
834#endif
835
836#if ($code == 'create_etat0' && $SUN) then
837#   if ( ! -f $libo/libdyn3d.a ) then
838#     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
839#     \rm $libf/grid/dimensions.h
840#     exit
841#   endif
842#   set optim=" -dalign "
843#   set optim90=" -dalign -fixed "
844#   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
845#   set link="$f90 $optim90"
846#   touch $LMDGCM/libf/dyn3d/startvar.F
847#   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
848#endif
849
850#
851# etat0_netcdf a besoin d'info de la physique
852# A revoir
853set include="$include"' -I$(LIBF)/phy'"$physique"
854#
855# le programme principal create_limit a besoin de l'info du module
856# startvar: on met donc libo dans les include pour Nec
857set include="$include"' -I$(LIBO)'
858
859
860#################################################################
861# Execution de la comande make... ENFIN!
862#################################################################
863
864if $VPP then
865  set optim90=" $optim90 -Am -M$libo"
866  set optimtru90="$optim90"
867 \cp $IOIPSLDIR/*.mod $libo
868else if $SUN then
869 set optim90=" $optim90 -M$libo -M$MODIPSLDIR "
870 set optimtru90=" $optimtru90 -M$libo -M$MODIPSLDIR "
871 set optim="$optim90"
872 \cp $IOIPSLDIR/*.mod $libo
873else if $NEC then
874 set optim90=" $optim90 -I$libo "
875else if $XNEC then
876 set optim90=" $optim90 -I$libo "
877 set optimtru90=" $optimtru90 -I$libo "
878else if $X6NEC then
879 set optim90=" $optim90 -I$libo "
880 set optimtru90=" $optimtru90 -I$libo "
881else if $LINUX then
882 set optim90=" $optim90 -module $libo "
883 set optim="$optim90"
884 set mod_loc_dir=$libo
885 \cp /d3/fairhead/sechiba/ioipsl/*.mod $libo
886 \cp $IOIPSLDIR/*.mod $libo
887endif
888
889set link="$f90 $optim90"
890
891set ar=ar
892
893if $XNEC then
894  set link="sxld $opt_link"
895  set link="$f90 "
896#  set ar=sxar
897else if $X6NEC then
898  set link="sxld $opt_link"
899  set link="$f90 "
900endif
901
902
903cd $localdir
904
905echo $make -f $LMDGCM/makefile \
906OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
907OPTIM90="$optim90" \
908OPTIMTRU90="$optimtru90" \
909OPTIM="$optim$optimbis" \
910INCLUDE="$include" \
911$filtre \
912LIBO=$libo \
913$dyn \
914$phys \
915DIM=$dimc \
916L_ADJNT="$adjnt" \
917LOCAL_DIR="$localdir"  \
918F77="$f77" \
919F90="$f90" \
920OPLINK="$oplink" \
921LINK="$link" \
922GCM="$LMDGCM" \
923MOD_LOC_DIR=$mod_loc_dir \
924MOD_SUFFIX=$mod_suffix \
925AR=$ar \
926PROG=$code
927
928$make -f $LMDGCM/makefile \
929OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
930OPTIM90="$optim90" \
931OPTIMTRU90="$optimtru90" \
932OPTIM="$optim$optimbis" \
933INCLUDE="$include" \
934$filtre \
935LIBO=$libo \
936$dyn \
937$phys \
938DIM=$dimc \
939L_ADJNT="$adjnt" \
940LOCAL_DIR="$localdir"  \
941F77="$f77" \
942F90="$f90" \
943OPLINK="$oplink" \
944LINK="$link" \
945GCM="$LMDGCM" \
946MOD_LOC_DIR=$mod_loc_dir \
947MOD_SUFFIX=$mod_suffix \
948AR=$ar \
949PROG=$code
950
951\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.