source: trunk/LMDZ.GENERIC/makegcm_gfortran @ 386

Last change on this file since 386 was 373, checked in by emillour, 13 years ago

Generic GCM: Ooops, forgot something.
EM

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