source: trunk/LMDZ.MARS/makegcm_gfortran @ 1132

Last change on this file since 1132 was 1085, checked in by emillour, 11 years ago

Removed wrongly referenced module variables in lwb and physdem.
Added option "-full" to makegcm_* to force a full recompilation from scratch (ie: removing libo/... and makefile before launching makefile building and compilation).
EM

  • Property svn:executable set to *
File size: 24.1 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"
15set scatterers="1"
16set full=""
17########################################################################
18# path a changer contenant les sources et les objets du modele
19########################################################################
20
21#### If you want you can set environment variables here (instead of
22####  relying on the C-shell environment variables)
23# default LMDGCM to where makegcm script is located:
24set scriptdir=`dirname $0`
25setenv LMDGCM `readlink -f $scriptdir`
26# You may set LIBOGCM to something else; otherwise we default to:
27setenv LIBOGCM $LMDGCM/libo
28## NetCDF Libraries: what follows is OK for LMD 32 and 64bit Linux Machines
29#if ( `uname -m` == "x86_64" ) then
30# 64 bit machines
31  setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_gfortran/lib
32  setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_gfortran/include
33#else
34#  setenv NCDFLIB /donnees/emlmd/netcdf-4.0.1_gfortran/lib
35#  setenv NCDFINC /donnees/emlmd/netcdf-4.0.1_gfortran/include
36#endif
37####
38
39setenv localdir "`pwd`"
40set MODIPSL=0
41echo $localdir | grep modipsl >& /dev/null
42if ( ! $status ) then
43  set MODIPSL=1
44  setenv LMDGCM $localdir
45  cd ../..
46  setenv LIBOGCM "`pwd`/lib"
47  cd $localdir
48  if ( `hostname` == rhodes ) then
49    set NCDFINC=`grep sxnec ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
50    set NCDFLIB=`grep sxnec ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
51  else
52    if ( `hostname` == nymphea0 ) then
53      set NCDFINC=`grep fjvpp ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
54      set NCDFLIB=`grep fjvpp ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
55    else
56      echo 'Probleme de definition des variables NCDFINC et NCDFLIB'
57    endif
58  endif
59else
60  if ( ! $?LMDGCM ) then
61    echo You must initialize the variable LMDGCM in your environnement
62    echo for instance: "setenv LMDGCM /usr/myself/supergcm" in .cshrc
63    exit
64  endif
65  if ( ! $?LIBOGCM ) then
66    set LIBOGCM=$LMDGCM/libo
67  endif
68  if ( ! $?NCDFLIB ) then
69    echo You must initialize the variable NCDFLIB in your environnement
70    echo for instance: "setenv NCDFLIB /usr/myself/netcdf" in .cshrc
71    exit
72  endif
73  if ( ! $?NCDFINC ) then
74    echo You must initialize the variable NCDFINC in your environnement
75    echo for instance: "setenv NCDFINC /usr/myself/netcdf" in .cshrc
76    exit
77  endif
78endif
79set model=$LMDGCM
80set libo=$LIBOGCM
81
82########################################################################
83#  Les differentes platformes reconnues
84########################################################################
85
86set HP=0
87set IBM=0
88set SUN=0
89set VPP=0
90set CRAY=0
91set DEC=0
92set LINUX=0
93set NEC=0
94set XNEC=0
95if ( `uname` == HP-UX ) then
96   set machine=HP
97   set HP=1
98else if (`uname` == UNIX_System_V ) then
99   set machine=VPP
100   set VPP=1
101else if (`uname` == SunOS ) then
102   set machine=SUN
103   set SUN=1
104else if ( `uname` == AIX ) then
105   set machine=IBM
106   set IBM=1
107else if ( `uname` == OSF1 ) then
108   set machine=ALPHA
109   set DEC=1
110else if ( `uname` == Linux ) then
111   set machine=LINUX
112   set LINUX=1
113else if ( `hostname` == atlas || `hostname` == axis  || `hostname` == etoile ) then
114   set machine=CRAY
115   set CRAY=1
116else if ( `uname` == SUPER-UX ) then
117   set machine=NEC
118   set NEC=1
119else if ( `hostname` == rhodes) then
120   set machine=XNEC
121   set XNEC=1
122else
123   echo Vous travaillez sur une machine non prevue par le reglement
124   exit
125endif
126
127# create $libo directory if it doesn't exist
128if ( ! -d $libo )  then
129   mkdir $libo
130endif
131
132if $VPP then
133set netcdf=netcdf_v
134else
135set netcdf=netcdf
136endif
137########################################################################
138#  Quelques initialisations de variables du shell.
139########################################################################
140
141set dyn=
142set opt_link=""
143set adjnt=""
144set opt_dep=""
145
146set optim90=""
147set oplink=""
148
149########################################################################
150#  Optimisations par defaut suivant les machines
151########################################################################
152
153echo "Optimisations par defaut suivant les machines"
154set libf=$model/libf
155#setenv localdir "LOCAL_DIR=`pwd`"
156#setenv localdir "`pwd`"
157cd $model
158if $CRAY then
159   set optim90="-Wp'-P' -DCRAY "'-p$(LIBO) -eiv '
160   set oplink="-Wl'-DSTACK=128 -f indef' -L$NCDFLIB -lnetcdf "
161   set mod_loc_dir=" "
162   set mod_suffix=" "
163else if $SUN then
164   set optim90=" -fast"
165   set optimtru90=" -fast -free"
166   set opt_link="-L$NCDFLIB -lnetcdf"
167   set mod_loc_dir=$localdir
168   set mod_suffix=mod
169else if $HP then
170else if $IBM then
171else if $VPP then
172   set optim90="$optim -X9 -w"
173   if $COUPLE then
174     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"
175     set oplink="-Wl,-t,-P,-dy "
176   else
177     set opt_link="-Wg,-c /usr/local/lib/lib64/libnetcdf_cc.a -L$IOIPSLDIR -lioipsl"
178     set oplink="-Wl,-t,-dy "
179   endif
180   set mod_loc_dir=$IOIPSLDIR
181   set mod_suffix=mod
182else if $DEC then
183else if $LINUX then
184# Ehouarn 'gfortran' compiler
185   set optim="-O3 -funroll-loops "
186   set optim90="-O3 -funroll-loops "
187   set optimtru90="-O3 -funroll-loops "
188#
189   set opt_link=" -L$NCDFLIB -lnetcdf "
190   set mod_loc_dir=$localdir
191   set mod_suffix=mod
192else if $NEC then
193   set optim90=' -clear -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
194   set optimtru90=' -clear -f4 -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
195###   set opt_link=" -C hopt -float0 -ew -P static -L$IOIPSLDIR -lioipsl  -L/u/rech/psl/rpsl003/IOIPSL -lnetcdf_i8r8_v "
196   set opt_link=" -C hopt -float0 -ew -P static -L/SX/usr/local/lib  -lnetcdf_i8r8 "
197   set mod_loc_dir="."
198   set mod_suffix="mod"
199else if $XNEC then
200   set optim90=' -clear -R5 -C vopt -float0 -ew -P static -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
201   set optimtru90=' -clear -R5 -f4 -C vopt -float0 -ew -P static -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
202   if $MODIPSL then
203     if $COUPLE then
204       set opt_link="-L$IOIPSLDIR -lsxioipsl -loasis2.4_mpi2 -float0 -ew -P static -I$NCDFINC $NCDFLIB "
205     else
206       set opt_link="-L$IOIPSLDIR -lsxioipsl -float0 -ew -P static -I$NCDFINC $NCDFLIB "
207     endif
208     set mod_loc_dir="./"
209   else
210####     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"
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
218# Ehouarn: add 'g9fortran' string to pathname
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
245The makegcm script:
246-------------------
247
2481. compiles a series of subroutines located in the $LMDGCM/libf
249 sub-directories.
250 The objects are then stored in the libraries in $LIBOGCM.
251
2522. then, makegcm compiles program prog.f located by default in
253$LMDGCM/libf/dyn3d and makes the link with the libraries.
254
255Environment Variables '$LMDGCM' and '$LIBOGCM'
256 must be set as environment variables or directly
257 in the makegcm file.
258
259The makegcm command is used to control the different versions of the model
260 in parallel, compiled using the compilation options
261 and the various dimensions, without having to recompile the whole model.
262
263The FORTRAN libraries are stored in directory $LIBOGCM.
264
265
266OPTIONS:
267--------
268
269The following options can either be defined by default by editing the
270makegcm "script", or in interactive mode:
271
272-d imxjmxlm  where im, jm, and lm are the number of longitudes,
273             latitudes and vertical layers respectively.
274
275-t ntrac   Selects the number of tracers present in the model
276
277             Options -d and -t overwrite file
278             $LMDGCM/libf/grid/dimensions.h
279             which contains the 3 dimensions of the
280             horizontal grid
281             im, jm, lm plus the number of tracers passively advected
282             by the dynamics ntrac,
283             in 4 PARAMETER FORTRAN format
284             with a new file:
285             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
286             If the file does not exist already
287             it is created by the script
288             $LMDGCM/libf/grid/dimension/makdim
289
290-s nscat   Number of radiatively active scatterers
291
292-p PHYS    Selects the set of physical parameterizations
293           you want to compile the model with.
294           The model is then compiled using the physical
295           parameterization sources in directory:
296            $LMDGCM/libf/phyPHYS
297
298-g grille  Selects the grid type.
299           This option overwrites file
300           $LMDGCM/libf/grid/fxyprim.h
301           with file
302           $LMDGCM/libf/grid/fxy_grille.h
303           the grid can take the following values:
304           1. reg - the regular grid
305           2. sin - to obtain equidistant points in terms of sin(latitude)
306           3. new - to zoom into a part of the globe
307
308-O "compilation options" set of fortran compilation options to use
309
310-include path
311           Used if the subroutines contain #include files (ccp) that
312           are located in directories that are not referenced by default.
313
314-adjnt     Compiles the adjoint model to the dynamical code.
315
316-olddyn    To compile GCM with "old dynamics"
317
318-filtre  filter
319           To select the longitudinal filter in the polar regions.
320           "filter" corresponds to the name of a directory located in
321           $LMDGCM/libf. The standard filter for the model is "filtrez"
322           which can be used for a regular grid and for a 
323           grid with longitudinal zoom.
324
325-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
326           Adds a link to FORTRAN libraries
327           libfile1.a, libfile2.a ...
328           located in directories dir1, dir2 ...respectively
329           If dirn is a directory with an automatic path
330           (/usr/lib ... for example)
331           there is no need to specify  -Ldirn.
332
333-full      Full (re)compilation (from scratch)
334
335eod
336exit
337
338########################################################################
339# Lecture des differentes options
340########################################################################
341
342    case -d:
343        set dim=$2 ; shift ; shift ; goto top
344                       
345    case -O:
346        set optim="$2" ; set optim90="$2" ; set optimtru90="$2" ; shift ; shift ; goto top
347
348     case -p
349        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
350
351     case -s
352        set scatterers="$2" ; shift ; goto top
353
354     case -g
355        set grille="$2" ; shift ; shift ; goto top
356
357     case -t
358        set ntrac=$2 ; shift ; shift ; goto top
359
360     case -include
361        set include="$include -I$2" ; shift ; shift ; goto top
362
363     case -adjnt
364        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
365
366     case -olddyn
367        set dyntype="olddyn" ; shift; goto top
368
369     case -full
370        set full="full" ; shift ; goto top
371
372     case -filtre
373        set filtre=$2 ; shift ; shift ; goto top
374
375     case -link
376        set opt_link="$opt_link $2" ; shift ; shift ; goto top
377
378     case -debug
379        if $HP then
380           set optim90=" -g "
381        else if $SUN then
382           setenv PARALLEL 4
383           set optim90=" -g -C "
384           set optimtru90=" -g -C "
385        else if $CRAY then
386           set optim90="$optim90"" -G1 "
387        else if $LINUX then
388           ## for gfortran
389           set optim="-g -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow"
390           set optim90="-g -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow"
391           set optimtru90="-g -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow"
392        else
393           echo "pas d option debug predefinie pour cette machine"
394           exit
395        endif
396        shift ; goto top
397
398     default
399        set code="$1" ; shift ; goto top
400
401   endsw
402endif
403
404echo "apres les opts dim $dim"
405
406########################################################################
407# cas special sans physique
408########################################################################
409if ( "$physique" == 'nophys' ) then
410   set phys="L_PHY= LIBPHY="
411endif
412
413########################################################################
414# choix du nombre de traceur par defaut si il n'a pas ete choisi,
415# suivant la physique
416########################################################################
417
418if ( $ntrac == 0  ) then
419    if ( "$physique" == 'nophys' ) then
420        set ntrac=1
421    else if ( "$physique" == 'lmd' ) then
422        set ntrac=2
423    else if ( "$physique" == 'lmd_test_li' ) then
424        set ntrac=2
425    else if ( "$physique" == 'ec' ) then
426        set ntrac=1
427    else
428        set ntrac = 1
429    endif
430endif
431
432########################################################################
433#subtilites sur le nom de la librairie
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
453
454echo "dimension avant sed $dim"
455if ( $IBM ) then
456   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
457   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
458else if ( $SUN || $XNEC ) then
459   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
460   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
461else
462#   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
463#   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
464     set dim=`echo $dim | sed -e 's/[^0-9]/ /g'`
465     set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
466endif
467
468# build final name of libraries directory:
469if ( "$dyntype" == "olddyn" ) then
470  set nomlib=${nomlib}_${dim_}_t${ntrac}_s${scatterers}_${grille}_olddyn
471else
472  set nomlib=${nomlib}_${dim_}_t${ntrac}_s${scatterers}_${grille}
473endif
474
475# Append 'physique' type, if it is not mars, to nomlib
476if ( "$physique" != "mars" ) then
477  set nomlib=${nomlib}_${physique}
478endif
479
480## M-A-F nomlib trop long sur CRAY pour ar
481if ( $CRAY ) then
482    set nomlib=F90_${dim_}_t${ntrac}
483endif
484if ( $NEC || $XNEC ) then
485    set nomlib=F90_${dim_}_t${ntrac}
486endif
487
488echo "calcul de la dimension"
489set dimc=`echo $dim | wc -w`
490
491if ( "$dimc" == "2" ) then
492  set include="$include "'-I$(LIBF)/dyn2d '
493  set dimh=$dim
494else
495  if ( "$dyntype" == "olddyn" ) then
496    set include="$include "'-I$(LIBF)/olddyn3d '
497  else
498    set include="$include "'-I$(LIBF)/dyn3d '
499  endif
500  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
501endif
502echo "dimc is $dimc"
503
504########################################################################
505# path pour les #include
506########################################################################
507
508set include="$include -I$NCDFINC "
509echo $include
510
511########################################################################
512# Gestion des dimensions du modele.
513# on cree ou remplace le fichier des dimensions/nombre de traceur
514########################################################################
515
516cd $libf/grid
517if ( -f dimensions.h ) then
518  echo "WARNING: you are probably already compiling the model (perhaps"
519  echo " elsewhere). Wait until the first compilation ends before "
520  echo " compiling a different configuration."
521  echo "If you are sure that you are not already compiling, then you"
522  echo " may continue this compilation by answering yes."
523  echo "Do you want to continue?"
524  if ( $< == "yes" ) then
525    #remove old dimensions.h file
526    \rm -f $libf/grid/dimensions.h
527    #remove old scatterers.h file
528    \rm -f $libf/phy$physique/scatterers.h
529  else
530    exit
531  endif
532endif
533
534# Build the appropriate 'dimensions.h' file
535cd dimension
536./makdim $dim
537# echo contents of dimensions.h to standard output
538cat $libf/grid/dimensions.h
539
540cd $libf/phy$physique/scatterers
541# Build the appropriate 'scatterers.h' file
542./make_scatterers $scatterers
543# echo contents of scatterers.h to standard output
544cat $libf/phy$physique/scatterers.h
545
546cd $LMDGCM
547# set path to objects directory
548set libo=$libo/$nomlib
549# create objects directory, if it doesn't exist
550if ( ! -d $libo )  then
551   mkdir $libo
552   cd $model
553endif
554
555########################################################################
556# Differentes dynamiques (3d, 2d, 1d)
557########################################################################
558
559set dimension=`echo $dim | wc -w`
560echo dimension $dimension dim $dim
561if ( $dimension == 1 ) then
562  echo "No dynamics"
563##  set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
564## NB: we still need to have L_DYN=libdyn3d to reach routines and module
565## objects which are located in dyn3d
566  set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
567endif
568endif
569
570cd $model
571if ( $dimension == 3 ) then
572  cd libf/grid
573  \rm fxyprim.h
574  cp -p fxy_${grille}.h fxyprim.h
575endif
576
577######################################################################
578#   Traitement special pour le nouveau rayonnement de Laurent Li.
579######################################################################
580
581if ( -f $libf/phy$physique/raddim.h ) then
582  if ( -f $libf/phy$physique/raddim.$dimh.h ) then
583    \rm $libf/phy$physique/raddim.h
584    cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
585    echo $libf/phy$physique/raddim.$dimh.h
586    cat $libf/phy$physique/raddim.$dimh.h
587    cat $libf/phy$physique/raddim.h
588  else
589    echo On peut diminuer la taille de l executable en creant
590    echo le fichier $libf/phy$physique/raddim.$dimh.h
591    \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
592  endif
593endif
594
595######################################################################
596# Gestion du filtre qui n'existe qu'en 3d.
597######################################################################
598
599# set filtre to 'oldfiltrez' if using -olddyn option
600if ( "$dyntype" == "olddyn" ) then
601  set filtre="oldfiltrez"
602endif
603
604if ( `expr $dimc \> 2` == 1 ) then
605   set filtre="FILTRE=$filtre"
606else
607   set filtre="FILTRE= L_FILTRE= "
608endif
609echo "MACRO FILTRE $filtre"
610
611echo "dimc $dimc"
612
613#cleanup for a full recompilation, if requested
614if ("$full" == "full") then
615# remove makefile and $libo
616  cd $model
617  \rm -f makefile
618  \rm -rf $libo/*
619endif
620
621########################################################################
622#  Avant de lancer le make, on recree le makefile si necessaire
623########################################################################
624# c'est a dire dans 3 cas:
625# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
626#    derniere creation du makefile
627# 2. si le fichier contenant cette liste "liste_des_sources"
628#    n'existe pas.
629# 3. Si le makefile n'existe pas.
630########################################################################
631
632cd $model
633find libf -name '*.[Fh]' -print | sort >! tmp77
634#find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
635find libf -name '*.[Fh]90' -print | sort >> tmp90
636
637if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
638     || `diff tmp90 liste_des_sources_f90 | wc -w` \
639     || ! -f makefile \
640     || ! -f liste_des_sources_f90 \
641     || ! -f liste_des_sources_f77 ) then
642        echo "les fichiers suivants ont ete crees ou detruits"
643        echo "ou les fichiers suivants sont passes ou ne sont plus en Fortran 90"
644        diff liste_des_sources_f77 tmp77
645        diff liste_des_sources_f90 tmp90
646        \cp tmp77 liste_des_sources_f77
647        \cp tmp90 liste_des_sources_f90
648        echo "On recree le makefile"
649        if ("$dyntype" == "olddyn") then
650          ./create_make_gcm olddyn3d grid bibio aeronomars phy$physique >! tmp
651        else
652          ./create_make_gcm dyn3d grid bibio aeronomars phy$physique >! tmp
653        endif
654        \mv tmp makefile
655        echo "Nouveau makefile cree."
656endif
657
658########################################################################
659#  Execution de la comande make
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=pgf90
680#   set f90=pgf90
681   set f77=gfortran
682   set f90=gfortran
683else if $SUN then
684   set f77=f90
685   set f90=f90
686else if $NEC then
687   set f77=f90
688   set f90=f90
689else if $XNEC then
690   set f77=sxmpif90
691   set f90=sxmpif90
692else
693   set f77=f77
694   set f90=f90
695endif
696
697cd $model
698
699if $VPP then
700  set make="gmake RANLIB=ls"
701else if $CRAY then
702  set make="make RANLIB=ls"
703else if $NEC then
704  set make="make RANLIB=ls"
705else if $LINUX then
706  set make="make -k RANLIB=ranlib"
707else if $XNEC then
708  set make="/usr/local/bin/gmake RANLIB=ls"
709  set make="/usr/freeware/bin/gmake RANLIB=ls"
710else
711  set make="make RANLIB=ranlib"
712endif
713
714set include="$include"" -I$libf/phy$physique"
715
716
717#################################################################
718# Execution de la comande make... ENFIN!
719#################################################################
720
721if $VPP then
722  set optim90=" $optim90 -Am -M$libo"
723  set optimtru90="$optim90"
724else if $SUN then
725 set optim90=" $optim90 -M$libo"
726 set optimtru90=" $optimtru90 "
727else if $NEC then
728 set optim90=" $optim90 -I$libo "
729else if $XNEC then
730 set optim90=" $optim90 -I$libo "
731 set optimtru90=" $optimtru90 -I$libo "
732else if $LINUX then
733# Ehouarn : adapt to gfortran
734 set optim="$optim -I${libo}"
735 set optim90="$optim90 -I${libo}"
736 set optimtru90="$optimtru90 -ffree-form -I${libo}"
737# Ehouarn: remove set mod_loc_dir def below; mod_loc_dir=$localdir (set above)
738# set mod_loc_dir=$libo
739endif
740
741set link="$f90 $optim90"
742
743set ar=ar
744
745if $XNEC then
746  set link="sxld $opt_link"
747  set link="$f90 "
748#  set ar=sxar
749endif
750
751
752cd $localdir
753
754## locate main program (could be in dyn3d or phy$physique
755##                      and could be .F or .F90)
756set source_code=${code}.F
757if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
758  set source_code=${code}.F90
759endif
760if ( -f $LMDGCM/libf/phy${physique}/${code}.F ) then
761  set source_code=${code}.F
762endif
763if ( -f $LMDGCM/libf/phy${physique}/${code}.F90 ) then
764  set source_code=${code}.F90
765endif
766
767## locate directory where main program is located
768if ( $dimension == 3 ) then
769  if ( -f $LMDGCM/libf/dyn3d/${source_code} ) then
770    set dyn="DIRMAIN=dyn3d "
771  endif
772  if ( -f $LMDGCM/libf/phy${physique}/${source_code} ) then
773    set dyn="DIRMAIN=phy${physique} "
774  endif
775endif
776
777echo $make -f $LMDGCM/makefile \
778OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
779OPTIM="$optim" \
780OPTIM90="$optim90" \
781OPTIMTRU90="$optimtru90" \
782INCLUDE="$include" \
783$filtre \
784LIBO=$libo \
785$dyn \
786$phys \
787DIM=$dimc \
788DYNTYPE="$dyntype" \
789L_ADJNT="$adjnt" \
790LOCAL_DIR="$localdir"  \
791F77="$f77" \
792F90="$f90" \
793OPLINK="$oplink" \
794LINK="$link" \
795GCM="$LMDGCM" \
796MOD_LOC_DIR=$mod_loc_dir \
797MOD_SUFFIX=$mod_suffix \
798AR=$ar \
799SOURCE=$source_code \
800PROG=$code
801
802
803$make -f $LMDGCM/makefile \
804OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
805OPTIM="$optim" \
806OPTIM90="$optim90" \
807OPTIMTRU90="$optimtru90" \
808INCLUDE="$include" \
809$filtre \
810LIBO=$libo \
811$dyn \
812$phys \
813DIM=$dimc \
814DYNTYPE="$dyntype" \
815L_ADJNT="$adjnt" \
816LOCAL_DIR="$localdir"  \
817F77="$f77" \
818F90="$f90" \
819OPLINK="$oplink" \
820LINK="$link" \
821GCM="$LMDGCM" \
822MOD_LOC_DIR=$mod_loc_dir \
823MOD_SUFFIX=$mod_suffix \
824AR=$ar \
825SOURCE=$source_code \
826PROG=$code
827
828# cleanup, remove dimensions.h and scatterers.h
829\rm -f $libf/grid/dimensions.h
830\rm -f $libf/phy$physique/scatterers.h
Note: See TracBrowser for help on using the repository browser.