source: trunk/MESOSCALE/LMDZ.MARS/makegcm_gnu @ 3241

Last change on this file since 3241 was 1869, checked in by aslmd, 7 years ago

(old Mars for mesoscale) added the correction options for debug with gfortran in makegcm

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