source: trunk/WRF.COMMON/WRFV2/mars_lmd_new/makegcm_mpi @ 3094

Last change on this file since 3094 was 1038, checked in by aslmd, 11 years ago

MESOSCALE
LMDZ.MARS

--> Performed the necessary modifications for dynamic tracers

to work with the mesoscale model (new physics).

--> Added precompiling flag MESOSCALE around pressure modifications

done in revision 883. This makes the mesoscale model become crazy.

--> Added an option -e in makemeso to erase a configuration and start over.

NOTE
--> not sure recent versions (rev>1000) are compliant with nesting compilation.
--> use mesoscale model + new physics with caution. still not stabilized.

  • Property svn:executable set to *
File size: 24.6 KB
Line 
1#!/bin/csh -f
2# $Header: /users/lmdz/cvsroot/LMDZ.3.3/makegcm,v 1.21 2001/07/04 08:41:44 lmdz Exp $
3#set verbose echo
4########################################################################
5# options par defaut pour la commande make
6########################################################################
7set dim="64x48x32"
8set physique=mars
9set phys="PHYS=$physique"
10set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. -I$(LIBF)/aeronomars'
11set ntrac = 1
12set filtre=filtrez
13set grille=reg
14set dyntype="dyn"
15########################################################################
16# path a changer contenant les sources et les objets du modele
17########################################################################
18
19###### VERSION LMDZ.3.3
20# set LMDGCM=$HOME/LMDZ.3.3
21#
22
23#### If you want you can set environment variables here
24#setenv LMDGCM /u/emlmd/LMDZ.MARS
25#setenv LIBOGCM /tmp15/emlmd/libo
26#if ( `uname -m` == "x86_64" ) then
27## 64 bit machines
28#  setenv NCDFLIB /donnees/emlmd/netcdf64/netcdf-3.6.1/lib
29#  setenv NCDFINC /donnees/emlmd/netcdf64/netcdf-3.6.1/include
30#else
31#  setenv NCDFLIB /distrib/local/netcdf/pgi_32bits/lib
32#  setenv NCDFINC /distrib/local/netcdf/pgi_32bits/include
33#endif
34####
35
36setenv localdir "`pwd`"
37set MODIPSL=0
38echo $localdir | grep modipsl >& /dev/null
39if ( ! $status ) then
40  set MODIPSL=1
41  setenv LMDGCM $localdir
42  cd ../..
43  setenv LIBOGCM "`pwd`/lib"
44  cd $localdir
45  if ( `hostname` == rhodes ) then
46    set NCDFINC=`grep sxnec ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
47    set NCDFLIB=`grep sxnec ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
48  else
49    if ( `hostname` == nymphea0 ) then
50      set NCDFINC=`grep fjvpp ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
51      set NCDFLIB=`grep fjvpp ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
52    else
53      echo 'Probleme de definition des variables NCDFINC et NCDFLIB'
54    endif
55  endif
56else
57  if ( ! $?LMDGCM ) then
58    echo You must initialize the variable LMDGCM in your environnement
59    echo for instance: "setenv LMDGCM /usr/myself/supergcm" in .cshrc
60    exit
61  endif
62  if ( ! $?LIBOGCM ) then
63    set LIBOGCM=$LMDGCM/libo
64  endif
65  if ( ! $?NCDFLIB ) then
66    echo You must initialize the variable NCDFLIB in your environnement
67    echo for instance: "setenv NCDFLIB /usr/myself/netcdf" in .cshrc
68    exit
69  endif
70  if ( ! $?NCDFINC ) then
71    echo You must initialize the variable NCDFINC in your environnement
72    echo for instance: "setenv NCDFINC /usr/myself/netcdf" in .cshrc
73    exit
74  endif
75   ### Aymeric: that could be useless, but user might
76   ### want to test various mpi at various locations on the disk
77   if ( ! $?WHERE_MPI ) then
78     echo You must initialize the variable WHERE_MPI in your environnement
79     echo for instance: "setenv WHERE_MPI /home/install_mpi/bin" in .cshrc
80     exit
81   endif
82
83endif
84set model=$LMDGCM
85set libo=$LIBOGCM
86
87########################################################################
88#  Les differentes platformes reconnues
89########################################################################
90
91set HP=0
92set IBM=0
93set SUN=0
94set VPP=0
95set CRAY=0
96set DEC=0
97set LINUX=0
98set NEC=0
99set XNEC=0
100if ( `uname` == HP-UX ) then
101   set machine=HP
102   set HP=1
103else if (`uname` == UNIX_System_V ) then
104   set machine=VPP
105   set VPP=1
106else if (`uname` == SunOS ) then
107   set machine=SUN
108   set SUN=1
109else if ( `uname` == AIX ) then
110   set machine=IBM
111   set IBM=1
112else if ( `uname` == OSF1 ) then
113   set machine=ALPHA
114   set DEC=1
115else if ( `uname` == Linux ) then
116   set machine=LINUX
117   set LINUX=1
118else if ( `hostname` == atlas || `hostname` == axis  || `hostname` == etoile ) then
119   set machine=CRAY
120   set CRAY=1
121else if ( `uname` == SUPER-UX ) then
122   set machine=NEC
123   set NEC=1
124else if ( `hostname` == rhodes) then
125   set machine=XNEC
126   set XNEC=1
127else
128   echo Vous travaillez sur une machine non prevue par le reglement
129   exit
130endif
131
132# create $libo directory if it doesn't exist
133if ( ! -d $libo )  then
134   mkdir $libo
135endif
136
137if $VPP then
138set netcdf=netcdf_v
139else
140set netcdf=netcdf
141endif
142########################################################################
143#  Quelques initialisations de variables du shell.
144########################################################################
145
146set dyn=
147set opt_link=""
148set adjnt=""
149set opt_dep=""
150
151set optim90=""
152set oplink=""
153
154########################################################################
155#  Optimisations par defaut suivant les machines
156########################################################################
157
158echo "Optimisations par defaut suivant les machines"
159set libf=$model/libf
160#setenv localdir "LOCAL_DIR=`pwd`"
161#setenv localdir "`pwd`"
162cd $model
163if $CRAY then
164   set optim90="-Wp'-P' -DCRAY "'-p$(LIBO) -eiv '
165   set oplink="-Wl'-DSTACK=128 -f indef' -L$NCDFLIB -lnetcdf "
166   set mod_loc_dir=" "
167   set mod_suffix=" "
168else if $SUN then
169   set optim90=" -fast"
170   set optimtru90=" -fast -free"
171   set opt_link="-L$NCDFLIB -lnetcdf"
172   set mod_loc_dir=$localdir
173   set mod_suffix=mod
174else if $HP then
175else if $IBM then
176else if $VPP then
177   set optim90="$optim -X9 -w"
178   if $COUPLE then
179     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"
180     set oplink="-Wl,-t,-P,-dy "
181   else
182     set opt_link="-Wg,-c /usr/local/lib/lib64/libnetcdf_cc.a -L$IOIPSLDIR -lioipsl"
183     set oplink="-Wl,-t,-dy "
184   endif
185   set mod_loc_dir=$IOIPSLDIR
186   set mod_suffix=mod
187else if $DEC then
188else if $LINUX then
189##-Ktrap=fp
190#   set optim90=" -fast -I. -Mlarge_arrays -mcmodel=medium"
191   set optim=" -DMESOSCALE -O2 -I. -Munroll -Mcache_align" #-C #-fpic" #-Mlarge_arrays -mcmodel=medium
192   set optim90=" -DMESOSCALE -O2 -I. -Munroll -Mcache_align" #-C #-fpic" #-Mlarge_arrays -mcmodel=medium
193## Aymeric: added handling of large arrays and large memory
194## Aymeric: get rid of -Mfree for mpi
195#   set optimtru90=" -fast -c -Mlarge_arrays -mcmodel=medium"
196  set optimtru90=" -DMESOSCALE -O2 -I. -Munroll -Mcache_align" #-C #-fpic" #-Mlarge_arrays -mcmodel=medium
197#   set opt_link=" -Mfree -L/usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$NCDFLIB -lnetcdf -Wl,-Bstatic "
198# Ehouarn: there is no /usr/local/pgi/linux86/lib, but it doesn't matter
199#          also changed -Wl,-Bstatic to -Bstatic
200# Aymeric : -Bstatic might need to be removed for mesoscale applications     
201#   set opt_link=" -Mlarge_arrays -mcmodel=medium -Mfree -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$NCDFLIB -lnetcdf" # -Bstatic "
202   set opt_link=" -L$NCDFLIB -lnetcdf -Bstatic" #-r" #-fpic" #-Bstatic" #-Mlarge_arrays -mcmodel=medium
203   set mod_loc_dir=$localdir
204   set mod_suffix=mod
205else if $NEC then
206   set optim90=' -clear -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
207   set optimtru90=' -clear -f4 -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
208###   set opt_link=" -C hopt -float0 -ew -P static -L$IOIPSLDIR -lioipsl  -L/u/rech/psl/rpsl003/IOIPSL -lnetcdf_i8r8_v "
209   set opt_link=" -C hopt -float0 -ew -P static -L/SX/usr/local/lib  -lnetcdf_i8r8 "
210   set mod_loc_dir="."
211   set mod_suffix="mod"
212else if $XNEC then
213   set optim90=' -clear -R5 -C vopt -float0 -ew -P static -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
214   set optimtru90=' -clear -R5 -f4 -C vopt -float0 -ew -P static -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
215   if $MODIPSL then
216     if $COUPLE then
217       set opt_link="-L$IOIPSLDIR -lsxioipsl -loasis2.4_mpi2 -float0 -ew -P static -I$NCDFINC $NCDFLIB "
218     else
219       set opt_link="-L$IOIPSLDIR -lsxioipsl -float0 -ew -P static -I$NCDFINC $NCDFLIB "
220     endif
221     set mod_loc_dir="./"
222   else
223####     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"
224     set opt_link=" -C hopt -float0 -ew -P static -I$NCDFINC -L/SX/usr/local/lib -lnetcdf_i8r8"
225     set mod_loc_dir="."
226   endif
227   set mod_suffix="mod"
228
229endif
230
231set nomlib=$machine
232
233# Impose distinct name for 64 bit Linux machines (to avoid mixing 32 and 64)
234if (`uname` == Linux && `uname -m` == "x86_64") then
235  set nomlib=${machine}64
236endif
237
238########################################################################
239# lecture des options de mymake
240########################################################################
241
242top:
243if ($#argv > 0) then
244    switch ($1:q)
245
246    case -h:
247
248########################################################################
249# Manuel en ligne
250########################################################################
251more <<eod
252
253
254makegcm [Options] prog
255
256
257The makegcm script:
258-------------------
259
2601. compiles a series of subroutines located in the $LMDGCM/libf
261 sub-directories.
262 The objects are then stored in the libraries in $LIBOGCM.
263
2642. then, makegcm compiles program prog.f located by default in
265$LMDGCM/libf/dyn3d and makes the link with the libraries.
266
267Environment Variables '$LMDGCM' and '$LIBOGCM'
268 must be set as environment variables or directly
269 in the makegcm file.
270
271The makegcm command is used to control the different versions of the model
272 in parallel, compiled using the compilation options
273 and the various dimensions, without having to recompile the whole model.
274
275The FORTRAN libraries are stored in directory $LIBOGCM.
276
277
278OPTIONS:
279--------
280
281The following options can either be defined by default by editing the
282makegcm "script", or in interactive mode:
283
284-d imxjmxlm  where im, jm, and lm are the number of longitudes,
285             latitudes and vertical layers respectively.
286
287-t ntrac   Selects the number of tracers present in the model
288
289             Options -d and -t overwrite file
290             $LMDGCM/libf/grid/dimensions.h
291             which contains the 3 dimensions of the
292             horizontal grid
293             im, jm, lm plus the number of tracers passively advected
294             by the dynamics ntrac,
295             in 4 PARAMETER FORTRAN format
296             with a new file:
297             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
298             If the file does not exist already
299             it is created by the script
300             $LMDGCM/libf/grid/dimension/makdim
301
302-p PHYS    Selects the set of physical parameterizations
303           you want to compile the model with.
304           The model is then compiled using the physical
305           parameterization sources in directory:
306            $LMDGCM/libf/phyPHYS
307
308-g grille  Selects the grid type.
309           This option overwrites file
310           $LMDGCM/libf/grid/fxyprim.h
311           with file
312           $LMDGCM/libf/grid/fxy_grille.h
313           the grid can take the following values:
314           1. reg - the regular grid
315           2. sin - to obtain equidistant points in terms of sin(latitude)
316           3. new - to zoom into a part of the globe
317
318-O "compilation options" set of fortran compilation options to use
319
320-include path
321           Used if the subroutines contain #include files (ccp) that
322           are located in directories that are not referenced by default.
323
324-adjnt     Compiles the adjoint model to the dynamical code.
325
326-olddyn    To compile GCM with "old dynamics"
327
328-filtre  filter
329           To select the longitudinal filter in the polar regions.
330           "filter" corresponds to the name of a directory located in
331           $LMDGCM/libf. The standard filter for the model is "filtrez"
332           which can be used for a regular grid and for a 
333           grid with longitudinal zoom.
334
335-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
336           Adds a link to FORTRAN libraries
337           libfile1.a, libfile2.a ...
338           located in directories dir1, dir2 ...respectively
339           If dirn is a directory with an automatic path
340           (/usr/lib ... for example)
341           there is no need to specify  -Ldirn.
342
343eod
344exit
345
346########################################################################
347# Lecture des differentes options
348########################################################################
349
350    case -d:
351        set dim=$2 ; shift ; shift ; goto top
352                       
353    case -O:
354        set optim90="$2" ; shift ; shift ; goto top
355
356     case -p
357        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
358
359     case -g
360        set grille="$2" ; shift ; shift ; goto top
361
362     case -t
363        set ntrac=$2 ; shift ; shift ; goto top
364
365     case -include
366        set include="$include -I$2" ; shift ; shift ; goto top
367
368     case -adjnt
369        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
370
371     case -olddyn
372        set dyntype="olddyn" ; shift; goto top
373
374     case -filtre
375        set filtre=$2 ; shift ; shift ; goto top
376
377     case -link
378        set opt_link="$opt_link $2" ; shift ; shift ; goto top
379
380     case -debug
381        if $HP then
382           set optim90=" -g "
383        else if $SUN then
384           setenv PARALLEL 4
385           set optim90=" -g -C "
386           set optimtru90=" -g -C "
387        else if $CRAY then
388           set optim90="$optim90"" -G1 "
389        else if $LINUX then
390           set optim90="-DMESOSCALE -g -Mbounds "
391        else
392           echo "pas d option debug predefinie pour cette machine"
393           exit
394        endif
395        shift ; goto top
396
397     default
398        set code="$1" ; shift ; goto top
399
400   endsw
401endif
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\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
452
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 -n -e 's/[^0-9]/ /gp'`
462#   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
463     set dim=`echo $dim | sed -e 's/[^0-9]/ /g'`
464     set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
465endif
466
467# build final name of libraries directory:
468if ( "$dyntype" == "olddyn" ) then
469  set nomlib=${nomlib}_${dim_}_t${ntrac}_${grille}_olddyn
470else
471  set nomlib=${nomlib}_${dim_}_t${ntrac}_${grille}
472endif
473
474# Append 'physique' type, if it is not mars, to nomlib
475if ( "$physique" != "mars" ) then
476  set nomlib=${nomlib}_${physique}
477endif
478
479## M-A-F nomlib trop long sur CRAY pour ar
480if ( $CRAY ) then
481    set nomlib=F90_${dim_}_t${ntrac}
482endif
483if ( $NEC || $XNEC ) then
484    set nomlib=F90_${dim_}_t${ntrac}
485endif
486
487echo "calcul de la dimension"
488set dimc=`echo $dim | wc -w`
489
490if ( "$dimc" == "2" ) then
491  set include="$include "'-I$(LIBF)/dyn2d '
492  set dimh=$dim
493else
494  if ( "$dyntype" == "olddyn" ) then
495    set include="$include "'-I$(LIBF)/olddyn3d '
496  else
497    set include="$include "'-I$(LIBF)/dyn3d '
498  endif
499  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
500endif
501echo "dimc is $dimc"
502
503########################################################################
504# path pour les #include
505########################################################################
506
507set include="$include -I$NCDFINC "
508echo $include
509
510########################################################################
511# Gestion des dimensions du modele.
512# on cree ou remplace le fichier des dimensions/nombre de traceur
513########################################################################
514
515cd $libf/grid
516#if ( -f dimensions.h ) then
517#  echo "ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs"
518#  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
519#  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
520#  echo "vous pouvez continuer en repondant oui."
521#  echo "Voulez-vous vraiment continuer?"
522#  if ( $< == "oui" ) then
523#    #remove old dimensions.h file
524#    \rm $libf/grid/dimensions.h
525#  else
526#    exit
527#  endif
528#endif
529#### Aymeric: commented for mesoscale purposes
530
531# Build the appropriate 'dimensions.h' file
532cd dimension
533makdim $dim
534# echo contents of dimensions.h to standard output
535cat $libf/grid/dimensions.h
536#### Aymeric: necessary for nests, just add lines if more than 4 nests
537cp -f $libf/grid/dimensions.h $libf/grid/d2_dimensions.h
538cp -f $libf/grid/dimensions.h $libf/grid/d3_dimensions.h
539cp -f $libf/grid/dimensions.h $libf/grid/d4_dimensions.h
540
541cd $LMDGCM
542# set path to objects directory
543set libo=$libo/$nomlib
544# create objects directory, if it doesn't exist
545if ( ! -d $libo )  then
546   mkdir $libo
547   cd $model
548endif
549
550########################################################################
551# Differentes dynamiques (3d, 2d, 1d)
552########################################################################
553
554set dimension=`echo $dim | wc -w`
555echo dimension $dimension dim $dim
556if ( $dimension == 1 ) then
557  echo pas de dynamique
558  set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
559endif
560endif
561
562cd $model
563if ( $dimension == 3 ) then
564  cd libf/grid
565  \rm fxyprim.h
566  cp -p fxy_${grille}.h fxyprim.h
567endif
568
569######################################################################
570#   Traitement special pour le nouveau rayonnement de Laurent Li.
571######################################################################
572
573if ( -f $libf/phy$physique/raddim.h ) then
574  if ( -f $libf/phy$physique/raddim.$dimh.h ) then
575    \rm $libf/phy$physique/raddim.h
576    cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
577    echo $libf/phy$physique/raddim.$dimh.h
578    cat $libf/phy$physique/raddim.$dimh.h
579    cat $libf/phy$physique/raddim.h
580  else
581    echo On peut diminuer la taille de l executable en creant
582    echo le fichier $libf/phy$physique/raddim.$dimh.h
583    \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
584  endif
585endif
586
587######################################################################
588# Gestion du filtre qui n'existe qu'en 3d.
589######################################################################
590
591# set filtre to 'oldfiltrez' if using -olddyn option
592if ( "$dyntype" == "olddyn" ) then
593  set filtre="oldfiltrez"
594endif
595
596if ( `expr $dimc \> 2` == 1 ) then
597   set filtre="FILTRE=$filtre"
598else
599   set filtre="FILTRE= L_FILTRE= "
600endif
601echo "MACRO FILTRE $filtre"
602
603echo "dimc $dimc"
604
605########################################################################
606#  Avant de lancer le make, on recree le makefile si necessaire
607########################################################################
608# c'est a dire dans 3 cas:
609# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
610#    derniere creation du makefile
611# 2. si le fichier contenant cette liste "liste_des_sources"
612#    n'existe pas.
613# 3. Si le makefile n'existe pas.
614########################################################################
615
616cd $model
617find libf -name '*.[Fh]' -print >! tmp77
618#find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
619find libf -name '*.[Fh]90' -print >> tmp90
620
621if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
622     || `diff tmp90 liste_des_sources_f90 | wc -w` \
623     || ! -f makefile \
624     || ! -f liste_des_sources_f90 \
625     || ! -f liste_des_sources_f77 ) then
626        echo "les fichiers suivants ont ete crees ou detruits"
627        echo "ou les fichiers suivants sont passes ou ne sont plus en Fortran 90"
628        diff liste_des_sources_f77 tmp77
629        diff liste_des_sources_f90 tmp90
630        \cp tmp77 liste_des_sources_f77
631        \cp tmp90 liste_des_sources_f90
632        echo "On recree le makefile"
633        if ("$dyntype" == "olddyn") then
634          ./create_make_gcm olddyn3d grid bibio aeronomars phy$physique >! tmp
635        else
636          ./create_make_gcm dyn3d grid bibio aeronomars phy$physique >! tmp
637        endif
638        \mv tmp makefile
639        echo "Nouveau makefile cree."
640endif
641
642########################################################################
643#  Execution de la comande make
644########################################################################
645
646echo PHYSIQUE $phys
647echo dynamique $dyn $dimension
648echo OPTIM90="$optim90" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
649echo PATH pour les fichiers INCLUDE $include
650echo OPLINK="$oplink"
651
652if $HP then
653   set f77='fort77 +OP'
654   set f90='jensaisrien'
655   set opt_link="$opt_link -lm"
656else  if $VPP then
657   set f77=frt
658   set f90=$f77
659else if $CRAY then
660   set f77=f90
661   set f90=f90
662else if $LINUX then
663   set f77=$WHERE_MPI/mpif90 #pgf90
664   set f90=$WHERE_MPI/mpif90 #pgf90
665else if $SUN then
666   set f77=f90
667   set f90=f90
668else if $NEC then
669   set f77=f90
670   set f90=f90
671else if $XNEC then
672   set f77=sxmpif90
673   set f90=sxmpif90
674else
675   set f77=f77
676   set f90=f90
677endif
678
679cd $model
680
681if $VPP then
682  set make="gmake RANLIB=ls"
683else if $CRAY then
684  set make="make RANLIB=ls"
685else if $NEC then
686  set make="make RANLIB=ls"
687else if $LINUX then
688  set make="make -k RANLIB=ranlib"
689else if $XNEC then
690  set make="/usr/local/bin/gmake RANLIB=ls"
691  set make="/usr/freeware/bin/gmake RANLIB=ls"
692else
693  set make="make RANLIB=ranlib"
694endif
695
696
697
698#
699# les deux test suivants sont "temporaires" pour pallier des "faiblesses" du
700# compilateur fortran Sun: f90: SC4.0 11 Sep 1995 FORTRAN 90 1.1
701#
702#if ($code == 'create_limit' && $SUN) then
703#   set link=f77
704#   set opt_link="-L$NCDFLIB -lnetcdf"
705#endif
706
707#if ($code == 'create_etat0' && $SUN) then
708#   if ( ! -f $libo/libdyn3d.a ) then
709#     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
710#     \rm $libf/grid/dimensions.h
711#     exit
712#   endif
713#   set optim90=" -dalign -fixed "
714#   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
715#   set link="$f90 $optim90"
716#   touch $LMDGCM/libf/dyn3d/startvar.F
717#   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
718#endif
719
720#
721# Encore un test temporaire: probleme de compilation sur VPP
722# l'optimisation de startvar se passe mal
723#
724if ($code == 'create_etat0' && $VPP) 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="$optim90"" -X9 -w"
731   set opt_link="-L$NCDFLIB -lnetcdf"
732   touch $LMDGCM/libf/dyn3d/startvar.F
733   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
734endif
735
736#
737# etat0_netcdf a besoin d'info de la physique
738# A revoir
739set include="$include"" -I$libf/phy$physique"
740
741
742#################################################################
743# Execution de la comande make... ENFIN!
744#################################################################
745
746if $VPP then
747  set optim90=" $optim90 -Am -M$libo"
748  set optimtru90="$optim90"
749else if $SUN then
750 set optim90=" $optim90 -M$libo"
751 set optimtru90=" $optimtru90 "
752else if $NEC then
753 set optim90=" $optim90 -I$libo "
754else if $XNEC then
755 set optim90=" $optim90 -I$libo "
756 set optimtru90=" $optimtru90 -I$libo "
757else if $LINUX then
758 set optim="$optim -module $libo"
759 set optim90="$optim90 -module $libo"
760 set optimtru90="$optimtru90 -module $libo"
761# Ehouarn: remove set mod_loc_dir def below; mod_loc_dir=$localdir (set above)
762# set mod_loc_dir=$libo
763endif
764
765set link="$f90 $optim90"
766
767set ar=ar
768
769if $XNEC then
770  set link="sxld $opt_link"
771  set link="$f90 "
772#  set ar=sxar
773endif
774
775
776cd $localdir
777
778echo $make -f $LMDGCM/makefile \
779OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
780OPTIM="$optim" \
781OPTIM90="$optim90" \
782OPTIMTRU90="$optimtru90" \
783INCLUDE="$include" \
784$filtre \
785LIBO=$libo \
786$dyn \
787$phys \
788DIM=$dimc \
789DYNTYPE="$dyntype" \
790L_ADJNT="$adjnt" \
791LOCAL_DIR="$localdir"  \
792F77="$f77" \
793F90="$f90" \
794OPLINK="$oplink" \
795LINK="$link" \
796GCM="$LMDGCM" \
797MOD_LOC_DIR=$mod_loc_dir \
798MOD_SUFFIX=$mod_suffix \
799AR=$ar \
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 \
825PROG=$code
826
827\rm $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.