source: trunk/LMDZ.MARS/makegcm_ifort @ 2164

Last change on this file since 2164 was 1629, checked in by jaudouard, 8 years ago

Bug fix concerning riceco2 declaration and some cleaning concerning the CO2 clouds scheme

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