source: trunk/LMDZ.GENERIC/makegcm_pgf90 @ 357

Last change on this file since 357 was 253, checked in by emillour, 13 years ago

Generic GCM

  • Massive update to version 0.7

EM+RW

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