source: trunk/LMDZ.GENERIC/makegcm_pgf90 @ 537

Last change on this file since 537 was 373, checked in by emillour, 13 years ago

Generic GCM: Ooops, forgot something.
EM

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