source: trunk/LMDZ.PLUTO.old/makegcm_spirit_gfortran @ 3552

Last change on this file since 3552 was 3175, checked in by emillour, 11 months ago

Pluto PCM:
Add the old Pluto LMDZ for reference (required prior step to making
an LMDZ.PLUTO using the same framework as the other physics packages).
TB+EM

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