source: trunk/LMDZ.GENERIC/makegcm_gfortran @ 372

Last change on this file since 372 was 371, checked in by emillour, 14 years ago

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