source: LMDZ4/trunk/makegcm @ 603

Last change on this file since 603 was 603, checked in by Laurent Fairhead, 19 years ago

Pour regler le probleme de localisation des modules sous linux (probablement
a revoir)
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 28.1 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 optimtru90=" -fast -c -Mfree "
221   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/"
222   set mod_loc_dir=$MODIPSLDIR
223   set mod_suffix=mod
224#################
225else if $NEC then
226#################
227   set optim90=' -clear -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
228   set optimtru90=' -clear -f4 -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
229   set optim="$optim90"
230   set optimbis=" "
231   set opt_link=" -C hopt -float0 -ew -P static -L$MODIPSLDIR -lioipsl  $NCDFLIB -lnetcdf_i8r8_v "
232   set mod_loc_dir="."
233   set mod_suffix="mod"
234#################
235else if $XNEC then
236#################
237   set optdbl='-dw -Wf\"-A dbl4\"'
238   set optim90=' -clear -float0 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
239   set optimtru90=' -clear -f4 -float0 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R2 -R3 -R4 -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume"'
240   set optim="$optim90"
241   set optimbis=" "
242   set mod_suffix="mod"
243   set mod_loc_dir="./"
244else if $X6NEC then
245   set optdbl='-dw -Wf\"-A dbl4\"' 
246   set optim90=' -clear -float0 -size_t64 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
247   set optimtru90=' -clear -f4 -float0 -size_t64 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R2 -R3 -R4 -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume"'
248   set optim="$optim90"
249   set optimbis=" "
250   set mod_suffix="mod"
251   set mod_loc_dir="./"
252else
253   set optim=""
254   set optimbis=" "
255endif
256
257set nomlib=$machine
258
259########################################################################
260# lecture des options de mymake
261########################################################################
262
263top:
264if ($#argv > 0) then
265    switch ($1:q)
266
267    case -h:
268
269########################################################################
270# Manuel en ligne
271########################################################################
272more <<eod
273
274
275makegcm [Options] prog
276
277
278
279
280Par default, la commande makegcm:
281---------------------------------
282
2831. compile une serie de sous programmes se trouvant dans des sous-repertoires
284de $LMDGCM/libf.
285Les sous programmes sont ensuite stokes sur dans des librairies FORTRAN
286sur $LIBOGCM.
287
2882. Ensuite, makegcm compile le programme prog.f se trouvant par default sur
289$LMDGCM/libf/dyn3d et effectue le lien avec l ensemble des librairies.
290
291La variable '$LMDGCM' doit etre initialisee dans votre .cshrc ou en dur
292dans la comande makegcm.
293
294La commande makegcm est faite pour permettre de gerer en parallele des
295versions differentes du modele, compilees avec des options de compilation
296et des dimensions differentes sans avoir a chaque fois a recompiler tout
297le modele.
298
299Les librairies FORTRAN sont stoquees sur le directory $LIBOGCM.
300
301
302OPTIONS:
303--------
304
305Les options suivantes peuvent etre definies soit par defaut en editant le
306"script" makegcm, soit en interactif:
307
308-d imxjmxlm  ou im, jm, et lm sont resp. le nombre de longitudes, latitudes
309             et couches verticales.
310
311-t ntrac   selectionne le nombre de traceur advectes par la dynamique.
312           Dans les versions courantes du modele terrestre on a par exemple
313           ntrac=2 pour l'eau vapeur et liquide
314
315             L'effet des options -d et -t est d'ecraser le fichier
316             $LMDGCM/libf/grid/dimensions.h
317             qui contient sous forme de 4 PARAMETER FORTRAN les 3 dimensions
318             de la grille horizontale im, jm, lm plus le nombre de traceurs
319             advectes passivement par la dynamique ntrac, par un nouveu fichier
320             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
321             Si ce fichier n'existe pas encore, il est cree par le script
322             $LMDGCM/libf/grid/dimension/makdim
323
324-p PHYS    pour selectionner le jeu de parametrisations physiques avec
325           lequel on veut compiler le modele.
326           Le modele sera alors compile en prenant les sources des
327           parametrisations physiques dans le repertoire:
328            $LMDGCM/libf/phyPHYS
329
330-c false|true
331           pour selectionner le mode force (par defaut) ou couple
332
333-io ioipsl|noioipsl
334           pour selectionner le logiciel IO : IOIPSL par defaut
335
336-psmile false|true
337           pour selectionner le mode psmile ou non (par defaut)
338
339-v true|false
340           pour selectionner la vegetation (par defaut) ou non
341
342-g grille  selectionne le type de grille qu'on veut utiliser.
343           L'effet de cette option est d'ecraser le fichier
344           $LMDGCM/libf/grid/fxyprim.h
345           avec le fichier
346           $LMDGCM/libf/grid/fxy_grille.h
347           grille peut prendre les valeurs:
348           1. reg pour la grille reguliere
349           2. sin pour avoir des points equidistants en sinus de la latitude
350           3. new pour pouvoir zoomer sur une partie du globe
351
352-O "optimisation fortran" ou les optimisations fortran sont les options de la
353            commande f77
354
355-include path
356           Dans le cas ou on a dans des sous programmes des fichiers
357           #include (cpp) qui se trouve sur des repertoires non references
358           par defaut
359
360-adjnt     Pour compiler la l'adjoint du code dynamique
361
362-filtre  filtre
363           Pour choisir le filtre en longitude dans les regions polaires.
364           "filtre" correspond au nom d'un repertoire se trouvant sur
365           $LMDGCM/libf. Le filtre standard du modele est "filtrez" qui peut
366           etre utilise aussi bien pour une grille reguliere que pour une
367           grille zoomee en longitude.
368
369-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
370          Pour rajouter un lien avec les librairies FORTRAN
371          libfile1.a, libfile2.a ... se trouvant respectivement sur les
372          repertoires dir1, dir2 ...
373          Si dirn est un repertoire dont le chemin est automatique (comme
374          par exemple /usr/lib ...) il n'est pas besoin de specifier -Ldirn.
375
376Auteur: Frederic Hourdin  (hourdin@lmd.jussieu.fr)
377eod
378exit
379
380########################################################################
381# Lecture des differentes options
382########################################################################
383
384    case -d:
385        set dim=$2 ; shift ; shift ; goto top
386                       
387    case -O:
388        set optim="$2" ; shift ; shift ; goto top
389
390     case -p
391        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
392
393     case -g
394        set grille="$2" ; shift ; shift ; goto top
395
396     case -c
397        set couple="$2" ; shift ; shift ; goto top
398
399     case -io
400        set io="$2" ; shift ; shift ; goto top
401
402     case -v
403        set veget="$2" ; shift ; shift ; goto top
404
405     case -psmile
406        set psmile="$2" ; shift ; shift ; goto top
407 
408     case -t
409        set ntrac=$2 ; shift ; shift ; goto top
410
411     case -include
412        set include="$include -I$2" ; shift ; shift ; goto top
413
414     case -adjnt
415        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
416        set optim="$optim -Dadj" ; shift ; goto top
417
418     case -filtre
419        set filtre=$2 ; shift ; shift ; goto top
420
421     case -link
422        set opt_link="$opt_link $2" ; shift ; shift ; goto top
423
424     case -debug
425        if $HP then
426           set optim=" -g "
427        else if $SUN then
428           setenv PARALLEL 2
429# Il faut rajouter l'option -dalign a -g pour pouvoir editer les liens
430# avec des programmes compiles avec -fast
431           set optim=" -g -dalign "
432           set optim90=" -fixed -g "
433           set optimtru90=" -free -g -C -dalign "
434        else if $CRAY then
435           set optim="$optim"" -g "
436           set optim90="$optim90"" -G1 "
437        else if $LINUX then
438           set optim="$optim"" -g -Mbounds -C "
439           set optim90="$optim90"" -g -Mbounds -C "
440        else
441           echo pas d option debug predefinie pour cette machine
442           exit
443        endif
444        shift ; goto top
445
446     default
447        set code="$1" ; shift ; goto top
448
449   endsw
450endif
451
452########################################################################
453# Definition des clefs CPP
454########################################################################
455
456if ( $io == ioipsl ) then
457   set optim="$optim -DCPP_IOIPSL"
458   set optim90="$optim"
459   set optimtru90="$optimtru90 -DCPP_IOIPSL"
460endif
461
462if ( "$physique" == 'nophys' ) then
463   set phys="L_PHY= LIBPHY="
464else
465   set optim="$optim -DCPP_PHYS"
466   set optim90="$optim"
467   set optimtru90="$optimtru90 -DCPP_PHYS"
468endif
469
470set link_veget=" "
471if ( "$veget" == 'true' ) then
472   set optim="$optim -DCPP_VEGET"
473   set optim90="$optim"
474   set optimtru90="$optimtru90 -DCPP_VEGET"
475   set link_veget=" -lsechiba -lparameters -lstomate"
476   if ( $XNEC ) then
477      set link_veget=" -lsxsechiba -lsxparameters -lsxstomate"
478   endif
479endif
480
481
482########################################################################
483# cas special sans physique
484########################################################################
485if ( "$physique" == 'nophys' ) then
486   set phys="L_PHY= LIBPHY="
487endif
488
489########################################################################
490# choix du nombre de traceur par defaut si il n'a pas ete choisi,
491# suivant la physique
492########################################################################
493
494if ( $ntrac == 0  ) then
495    if ( "$physique" == 'nophys' ) then
496        set ntrac=1
497    else if ( "$physique" == 'lmd' ) then
498        set ntrac=2
499    else if ( "$physique" == 'lmd_test_li' ) then
500        set ntrac=2
501    else if ( "$physique" == 'ec' ) then
502        set ntrac=1
503    else
504        set ntrac = 1
505    endif
506endif
507
508########################################################################
509#subtilites sur le nom de la librairie
510########################################################################
511
512\rm -f tmp ; touch tmp
513\rm -f tmp90 ; touch tmp90
514foreach i ( $optim )
515   echo $i | sed -e 's/\"//g' -e "s/\'//g" -e 's/-//g'  >> tmp
516end
517set suf=
518foreach i ( `sort tmp | uniq ` )
519   set suf=$suf$i
520end
521if ( ! $IBM ) then
522   set nomlib="$nomlib$suf"
523endif
524if ( $DEC ) then
525   set nomlib=DEC
526endif
527if ( $IBM ) then
528   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
529   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
530else if ( $SUN ) then
531   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
532   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
533else
534   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
535   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
536endif
537set nomlib=${nomlib}${physique}_${dim_}_t${ntrac}_$grille
538## M-A-F nomlib trop long sur CRAY pour ar
539if ( $CRAY ) then
540    set nomlib=F90_${dim_}_t${ntrac}
541endif
542if ( $NEC || $XNEC || $X6NEC) then
543    set nomlib=F90_${dim_}_t${ntrac}
544endif
545echo calcul de la dimension
546set dimc=`echo $dim | wc -w`
547
548if ( "$dimc" == "2" ) then
549set include="$include "'-I$(LIBF)/dyn2d '
550set dimh=$dim
551else
552set include="$include "'-I$(LIBF)/dyn3d '
553set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
554endif
555echo $dimc
556
557########################################################################
558# path pour les #include
559########################################################################
560
561if ( $XNEC ) then
562  set include="$include -I$NCDFINC -I$IOIPSLDIR"
563else
564  set include="$include -I$NCDFINC -I$IOIPSLDIR"
565endif
566echo $include
567
568########################################################################
569# Gestion des dimensions du modele.
570# on cree ou remplace le fichier des dimensions/nombre de traceur
571########################################################################
572
573cd $libf/grid
574if ( -f dimensions.h ) then
575echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
576echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
577echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
578echo  vous pouvez continuer en repondant oui.
579echo "Voulez-vous vraiment continuer?"
580if ( $< == "oui" ) then
581\rm -f $libf/grid/dimensions.h
582else
583exit
584endif
585endif
586
587cd dimension
588./makdim $ntrac $dim
589cat $libf/grid/dimensions.h
590
591cd $LMDGCM
592set libo=$libo/$nomlib
593if ( ! -d $libo )  then
594   mkdir $libo
595   cd $model
596endif
597
598########################################################################
599# Differentes dynamiques (3d, 2d, 1d)
600########################################################################
601
602set dimension=`echo $dim | wc -w`
603echo dimension $dimension
604if ( $dimension == 1 ) then
605echo pas de dynamique
606set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
607endif
608endif
609cd $model
610if ( $dimension == 3 ) then
611cd libf/grid
612\rm fxyprim.h
613cp -p fxy_${grille}.h fxyprim.h
614endif
615
616######################################################################
617#   Traitement special pour le nouveau rayonnement de Laurent Li.
618######################################################################
619
620if ( -f $libf/phy$physique/raddim.h ) then
621 if ( -f $libf/phy$physique/raddim.$dimh.h ) then
622  \rm -f $libf/phy$physique/raddim.h
623  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
624  echo $libf/phy$physique/raddim.$dimh.h
625  cat $libf/phy$physique/raddim.$dimh.h
626  cat $libf/phy$physique/raddim.h
627 else
628  echo On peut diminuer la taille de l executable en creant
629  echo le fichier $libf/phy$physique/raddim.$dimh.h
630  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
631 endif
632endif
633
634######################################################################
635# Gestion du filtre qui n'existe qu'en 3d.
636######################################################################
637
638if ( `expr $dimc \> 2` == 1 ) then
639   set filtre="FILTRE=$filtre"
640else
641   set filtre="FILTRE= L_FILTRE= "
642endif
643echo MACRO FILTRE $filtre
644
645echo $dimc
646
647########################################################################
648#  utilisation des vraies routines de couplage si on est en couple
649########################################################################
650if ( $couple == 'true' ) then
651  banner couple
652  pwd
653  if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true | wc -w` ) then
654   \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy
655   \cp $libf/phy$physique/oasis.true $libf/phy$physique/oasis.F
656  endif
657else
658  if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy | wc -w` ) then
659   \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true
660   \cp $libf/phy$physique/oasis.dummy $libf/phy$physique/oasis.F
661  endif
662endif
663########################################################################
664#  Avant de lancer le make, on recree le makefile si necessaire
665########################################################################
666# c'est a dire dans 3 cas:
667# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
668#    derniere creation du makefile
669# 2. si le fichier contenant cette liste "liste_des_sources"
670#    n'existe pas.
671# 3. Si le makefile n'existe pas.
672########################################################################
673
674cd $model
675find libf -name '*.[Fh]' -print >! tmp77
676find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
677find libf -name '*.[Fh]90' -print >> tmp90
678
679if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
680     || `diff tmp90 liste_des_sources_f90 | wc -w` \
681     || ! -f makefile \
682     || ! -f liste_des_sources_f90 \
683     || ! -f liste_des_sources_f77 ) then
684        echo les fichiers suivants ont ete crees ou detruits
685        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
686        diff liste_des_sources_f77 tmp77
687        diff liste_des_sources_f90 tmp90
688        \cp tmp77 liste_des_sources_f77
689        \cp tmp90 liste_des_sources_f90
690        echo On recree le makefile
691        ./create_make_gcm >! tmp
692        \mv tmp makefile
693        echo Nouveau makefile cree.
694endif
695
696########################################################################
697#  Execution de la comande make
698########################################################################
699
700echo PHYSIQUE $phys
701echo dynamique $dyn $dimension
702echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
703echo PATH pour les fichiers INCLUDE $include
704echo OPLINK="$oplink"
705
706#################
707if $HP then
708#################
709   set f77='fort77 +OP'
710   set f90='jensaisrien'
711   set opt_link="$opt_link -lm"
712#################
713else  if $VPP then
714#################
715   set f77=frt
716   set f90=$f77
717   if ($couple == true) then
718     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"
719     set oplink="-Wl,-t,-P,-dy "
720   else
721     set opt_link="-Wg,-c -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
722     set oplink="-Wl,-t,-dy "
723   endif
724   if ($veget == true) then
725     set opt_link="$opt_link $link_veget -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
726   endif
727#################
728else if $CRAY then
729#################
730   set f77=f90
731   set f90=f90
732#################
733else if $LINUX then
734#################
735   set f77=pgf90
736   set f90=pgf90
737   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/"
738#################
739else if $SUN then
740#################
741   set f77=f90
742   set f90=f90
743   set opt_link="-lf77compat -L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf "
744#################
745else if $NEC then
746#################
747   set f77=f90 -ftrace
748   set f90=f90 -ftrace
749   set opt_link="-L$MODIPSLDIR"
750   if ($veget == true) then
751     set opt_link="$opt_link $link_veget"
752   endif
753   if ($couple == true) then
754     set opt_link="$opt_link -lioipsl -loasis2.4_mpi2 -float0 -ew -P static $NCDFLIB "
755   else
756     set opt_link="$opt_link -L$MODIPSLDIR -lioipsl -float0 -ew -P static $NCDFLIB "
757   endif
758   set mod_loc_dir="./"
759#################
760else if $XNEC then
761#################
762   set f77="sxmpif90 -ftrace"
763   set f90="sxmpif90 -ftrace"
764   if $MODIPSL then
765     set opt_link="-L$MODIPSLDIR"
766     if ($veget == true) then
767       set opt_link="$opt_link $link_veget"
768     endif
769     if ($couple == true) then
770       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
771       if ($psmile == true) then
772       endif
773     else
774       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
775     endif
776   else
777     if ($couple == true) then
778       set opt_link="-L$MODIPSLDIR"
779       set opt_link="$opt_link $link_veget -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
780     else
781       set opt_link=" -C hopt -float0 $optdbl -P static -L$MODIPSLDIR $link_veget -lsxioipsl $NCDFLIB "
782     endif
783   endif
784   set mod_loc_dir="./"
785##################
786else if $X6NEC then
787##################
788   set f77=sxmpif90
789   set f90=sxmpif90
790   if $MODIPSL then
791     set opt_link="-L$MODIPSLDIR"
792     if ($veget == true) then
793       set opt_link="$opt_link -lsxsechiba -lsxparameters -lsxstomate"
794     endif
795     if ($couple == true) then
796       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 -size_t64 $optdbl -P static $NCDFLIB "
797     else
798       set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
799     endif
800   else
801     set opt_link=" -float0 -size_t64 $optdbl -P static -L$MODIPSLDIR -lsxsechiba -lsxparameters -lsxstomate -lsxioipsl $NCDFLIB "
802   endif
803   set mod_loc_dir="./"
804#################
805else
806#################
807   set f77=f77
808   set f90=f90
809endif
810
811cd $model
812
813if $VPP then
814set make="gmake RANLIB=ls"
815else if $CRAY then
816set make="make RANLIB=ls"
817else if $NEC then
818set make="make RANLIB=ls"
819else if $LINUX then
820set make="make -k RANLIB=ranlib"
821else if $XNEC then
822set make="gmake RANLIB=ls"
823else if $X6NEC then
824set make="gmake RANLIB=ls"
825else
826set make="make RANLIB=ranlib"
827endif
828
829
830
831#
832# les deux test suivants sont "temporaires" pour pallier des "faiblesses" du
833# compilateur fortran Sun: f90: SC4.0 11 Sep 1995 FORTRAN 90 1.1
834#
835#if ($code == 'create_limit' && $SUN) then
836#   set link=f77
837#   set opt_link="-L$NCDFLIB -lnetcdf"
838#endif
839
840#if ($code == 'create_etat0' && $SUN) then
841#   if ( ! -f $libo/libdyn3d.a ) then
842#     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
843#     \rm $libf/grid/dimensions.h
844#     exit
845#   endif
846#   set optim=" -dalign "
847#   set optim90=" -dalign -fixed "
848#   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
849#   set link="$f90 $optim90"
850#   touch $LMDGCM/libf/dyn3d/startvar.F
851#   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
852#endif
853
854#
855# etat0_netcdf a besoin d'info de la physique
856# A revoir
857set include="$include"' -I$(LIBF)/phy'"$physique"
858#
859# le programme principal create_limit a besoin de l'info du module
860# startvar: on met donc libo dans les include pour Nec
861set include="$include"' -I$(LIBO)'
862
863
864#################################################################
865# Execution de la comande make... ENFIN!
866#################################################################
867
868if $VPP then
869  set optim90=" $optim90 -Am -M$libo"
870  set optimtru90="$optim90"
871 \cp $IOIPSLDIR/*.mod $libo
872else if $SUN then
873 set optim90=" $optim90 -M$libo -M$MODIPSLDIR "
874 set optimtru90=" $optimtru90 -M$libo -M$MODIPSLDIR "
875 set optim="$optim90"
876 \cp $IOIPSLDIR/*.mod $libo
877else if $NEC then
878 set optim90=" $optim90 -I$libo "
879else if $XNEC then
880 set optim90=" $optim90 -I$libo "
881 set optimtru90=" $optimtru90 -I$libo "
882else if $X6NEC then
883 set optim90=" $optim90 -I$libo "
884 set optimtru90=" $optimtru90 -I$libo "
885else if $LINUX then
886 set optimtru90=" $optimtru90 -module $libo "
887 set optim90=" $optim90 -module $libo "
888 set optim="$optim90"
889 set mod_loc_dir=$libo
890 \cp /d3/fairhead/sechiba/ioipsl/*.mod $libo
891 \cp $IOIPSLDIR/*.mod $libo
892endif
893
894set link="$f90 $optim90"
895
896set ar=ar
897
898if $XNEC then
899  set link="sxld $opt_link"
900  set link="$f90 "
901#  set ar=sxar
902else if $X6NEC then
903  set link="sxld $opt_link"
904  set link="$f90 "
905endif
906
907
908cd $localdir
909
910echo $make -f $LMDGCM/makefile \
911OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
912OPTIM90="$optim90" \
913OPTIMTRU90="$optimtru90" \
914OPTIM="$optim$optimbis" \
915INCLUDE="$include" \
916$filtre \
917LIBO=$libo \
918$dyn \
919$phys \
920DIM=$dimc \
921L_ADJNT="$adjnt" \
922LOCAL_DIR="$localdir"  \
923F77="$f77" \
924F90="$f90" \
925OPLINK="$oplink" \
926LINK="$link" \
927GCM="$LMDGCM" \
928MOD_LOC_DIR=$mod_loc_dir \
929MOD_SUFFIX=$mod_suffix \
930AR=$ar \
931PROG=$code
932
933$make -f $LMDGCM/makefile \
934OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
935OPTIM90="$optim90" \
936OPTIMTRU90="$optimtru90" \
937OPTIM="$optim$optimbis" \
938INCLUDE="$include" \
939$filtre \
940LIBO=$libo \
941$dyn \
942$phys \
943DIM=$dimc \
944L_ADJNT="$adjnt" \
945LOCAL_DIR="$localdir"  \
946F77="$f77" \
947F90="$f90" \
948OPLINK="$oplink" \
949LINK="$link" \
950GCM="$LMDGCM" \
951MOD_LOC_DIR=$mod_loc_dir \
952MOD_SUFFIX=$mod_suffix \
953AR=$ar \
954PROG=$code
955
956\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.