source: LMDZ4/branches/IPSL-CM4_IPCC_branch/makegcm

Last change on this file was 744, checked in by Laurent Fairhead, 17 years ago

Pour compiler IPPC_branch sur brodie
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 31.4 KB
Line 
1#!/bin/csh
2#
3# $Header$
4#
5#set verbose echo
6########################################################################
7# options par defaut pour la commande make
8########################################################################
9set dim="96x71x19"
10set physique=lmd
11set phys="PHYS=$physique"
12set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. '
13set ntrac = 4
14set filtre=filtrez
15set grille=reg
16set couple=false
17set veget=true
18set psmile=false
19set OPT_STACK='-Wf,-init stack=nan'
20set OPT_STACK=' '
21set OPTIMI='-C debug -eC '
22set OPTIMI=' -ftrace '
23set io=ioipsl
24
25########################################################################
26# path a changer contenant les sources et les objets du modele
27########################################################################
28
29###### VERSION LMDZ.4
30# set LMDGCM=$HOME/LMDZ.4
31#set LMDGCM="`pwd`"
32#
33
34setenv localdir "`pwd`"
35set MODIPSL=0
36echo $localdir | grep modipsl >& /dev/null
37if ( ! $status ) then
38  set MODIPSL=1
39  setenv LMDGCM $localdir
40  cd ../..
41  setenv LIBOGCM "`pwd`/lib"
42  setenv IOIPSLDIR $LIBOGCM
43  setenv MODIPSLDIR $LIBOGCM
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 if ( `hostname` == mercure ) then
53      set NCDFINC=`grep sx6nec ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
54      set NCDFLIB=`grep sx6nec ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
55    else  if ( `hostname` == brodie ) then
56      set NCDFINC=`grep sx8brodie ../../util/AA_make.gdef| grep NCDF_INC|sed -e "s/^.* =//"`
57      set NCDFLIB=`grep sx8brodie ../../util/AA_make.gdef| grep NCDF_LIB|sed -e 's/^.* =//'`
58    else
59      echo 'Probleme de definition des variables NCDFINC et NCDFLIB'
60    endif
61  endif
62else
63  if ( ! $?LMDGCM ) then
64    echo You must initialize the variable LMDGCM in your environnement
65    echo for instance: "setenv LMDGCM /usr/myself/supergcm" in .cshrc
66    exit
67  endif
68  if ( ! $?LIBOGCM ) then
69    set LIBOGCM=$LMDGCM/libo
70  endif
71  if ( ! $?IOIPSLDIR ) then
72    echo You must initialize the variable IOIPSLDIR in your environnement
73    echo for instance: "setenv IOIPSLDIR /usr/myself/ioipsl" in .cshrc
74    exit
75  else
76      setenv MODIPSLDIR $IOIPSLDIR
77  endif
78  if ( ! $?NCDFLIB ) then
79    echo You must initialize the variable NCDFLIB in your environnement
80    echo for instance: "setenv NCDFLIB /usr/myself/netcdf" in .cshrc
81    exit
82  endif
83  if ( ! $?NCDFINC ) then
84    echo You must initialize the variable NCDFINC in your environnement
85    echo for instance: "setenv NCDFINC /usr/myself/netcdf" in .cshrc
86    exit
87  endif
88endif
89set model=$LMDGCM
90set libo=$LIBOGCM
91
92########################################################################
93#  Les differentes platformes reconnues
94########################################################################
95
96set HP=0
97set IBM=0
98set SUN=0
99set VPP=0
100set CRAY=0
101set DEC=0
102set LINUX=0
103set NEC=0
104set XNEC=0
105set X6NEC=0
106set X8BRODIE=0
107if ( `uname` == HP-UX ) then
108   set machine=HP
109   set HP=1
110else if (`uname` == UNIX_System_V ) then
111   set machine=VPP
112   set VPP=1
113else if (`uname` == SunOS ) then
114   set machine=SUN
115   set SUN=1
116else if ( `uname` == AIX ) then
117   set machine=IBM
118   set IBM=1
119else if ( `uname` == OSF1 ) then
120   set machine=ALPHA
121   set DEC=1
122else if ( `uname` == Linux && `hostname` != mercure  && `hostname` != brodie ) then
123   set machine=LINUX
124   set LINUX=1
125else if ( `hostname` == atlas || `hostname` == axis  || `hostname` == etoile ) then
126   set machine=CRAY
127   set CRAY=1
128else if ( `uname` == SUPER-UX ) then
129   set machine=NEC
130   set NEC=1
131else if ( `hostname` == rhodes) then
132   set machine=XNEC
133   set XNEC=1
134else if ( `hostname` == mercure) then
135   set machine=X6NEC
136   set X6NEC=1
137else if ( `hostname` == brodie) then
138   set machine=X8BRODIE
139   set X8BRODIE=1
140else
141   echo Vous travaillez sur une machine non prevue par le reglement
142   exit
143endif
144
145if ( ! -d $libo )  then
146   mkdir $libo
147endif
148
149
150if $VPP then
151set netcdf=netcdf_v
152else
153set netcdf=netcdf
154endif
155########################################################################
156#  Quelques initialisations de variables du shell.
157########################################################################
158
159set dyn=
160set opt_link=""
161set adjnt=""
162set opt_dep=""
163
164set optim=""
165set optimbis=""
166set optim90=""
167set oplink=""
168
169########################################################################
170#  Optimisations par defaut suivant les machines
171########################################################################
172
173echo "Optimisations par defaut suivant les machines"
174set libf=$model/libf
175#setenv localdir "LOCAL_DIR=`pwd`"
176#setenv localdir "`pwd`"
177cd $model
178#############
179if $CRAY then
180#############
181#   set optim="-Wf'-ei' -dp -Wf'-a static'"
182   set optimbis=" -DCRAY "
183   set optim90="-Wp'-P' -DCRAY -p$IOIPSLDIR "'-p$(LIBO) -eiv '
184   set optim="$optim90"
185   set oplink="-Wl'-DSTACK=128 -f indef' -L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf "
186   set mod_loc_dir=" "
187   set mod_suffix=" "
188#################
189else if $SUN then
190#################
191   set optim=" -fast "
192   set optimbis=" "
193   set optim90=" -fast -fixed "
194   set optimtru90=" -fast -free "
195   set opt_link="-lf77compat -L$MODIPSLDIR -lsechiba -lparameters -lstomate -lioipsl -L$NCDFLIB -lnetcdf "
196   set mod_loc_dir=$localdir
197   set mod_suffix=mod
198#################
199else if $HP then
200#################
201   set optim=" +U77 -O +E1 "
202   set optimbis=" "
203#################
204else if $IBM then
205#################
206   set optim=" -O3 -qtune=pwr2 -qarch=pwr2"
207   set optimbis=" "
208#################
209else if $VPP then
210#################
211#   set optim="-Dasuxm  -On, -g -Ad -Potilax -Eciplume -Si"
212#   set optimbis="  -Wv,-m3 -Wp,-DVPP -Z $LMDGCM/listage"
213   set optimbis=" -Wp,-DNC_DOUBLE -Ad -Z $LMDGCM/listage -X9"
214   set optim90="$optim $optimbis -X9 -w"
215   set mod_loc_dir=$MODIPSLDIR
216   set mod_suffix=mod
217#################
218else if $DEC then
219#################
220   set optim=" "
221   set optimbis=" "
222#################
223else if $LINUX then
224#################
225   set optim="-fast "
226   set optim90=" -fast "
227   set optimtru90=" -fast -c -Mfree -module $MODIPSLDIR "
228   set opt_link=" -Mfree -L /usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$MODIPSLDIR -lsechiba -lparameters -lstomate -L$NCDFLIB -lnetcdf -lioipsl -Wl,-Bstatic -L/usr/lib/gcc-lib/i386-linux/2.95.2/"
229   set mod_loc_dir=$MODIPSLDIR
230   set mod_suffix=mod
231#################
232else if $NEC then
233#################
234   set optim90=' -clear -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
235   set optimtru90=' -clear -f4 -C hopt -float0 -ew -P static -Wf,"-pvctl fullmsg noassume "'
236   set optim="$optim90"
237   set optimbis=" "
238   set opt_link=" -C hopt -float0 -ew -P static -L$MODIPSLDIR -lioipsl  $NCDFLIB -lnetcdf_i8r8_v "
239   set mod_loc_dir="."
240   set mod_suffix="mod"
241#################
242else if $XNEC then
243#################
244   set optdbl='-dw -Wf\"-A dbl4\"'
245   set optim90=' -clear -float0 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
246   set optimtru90=' -clear -f4 -float0 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R2 -R3 -R4 -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume"'
247   set optim="$optim90"
248   set optimbis=" "
249   set mod_suffix="mod"
250   set mod_loc_dir="./"
251else if $X6NEC then
252   set optdbl='-dw -Wf\"-A dbl4\"' 
253   set optim90=' -clear -float0 -size_t64 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume "'
254   set optimtru90=' -clear -f4 -float0 -size_t64 -Ep -DNC_DOUBLE -dw -Wf\"-A dbl4\" -R2 -R3 -R4 -R5 -Wf,"-pvctl loopcnt=40000 fullmsg noassume"'
255   set optim="$optim90"
256   set optimbis=" "
257   set mod_suffix="mod"
258   set mod_loc_dir="./"
259#################
260else if $X8BRODIE then
261##################
262   set optdbl='-dw -Wf\"-A dbl4\"' 
263   set optim90='-P stack -Wf,-pvctl res=whole,-A dbl4,-ptr byte -EP -R5 -float0 -dw -Wf,"-pvctl loopcnt=999999 fullmsg noassume" -I/SX/usr/include'
264   set optimtru90="$optim90"
265   set optim90="$optim90"
266   set optim="$optim90"
267   set optimbis=" "
268   set mod_suffix="mod"
269   set mod_loc_dir="./"
270else
271   set optim=""
272   set optimbis=" "
273endif
274
275set nomlib=$machine
276
277########################################################################
278# lecture des options de mymake
279########################################################################
280
281top:
282if ($#argv > 0) then
283    switch ($1:q)
284
285    case -h:
286
287########################################################################
288# Manuel en ligne
289########################################################################
290more <<eod
291
292
293makegcm [Options] prog
294
295
296
297
298Par default, la commande makegcm:
299---------------------------------
300
3011. compile une serie de sous programmes se trouvant dans des sous-repertoires
302de $LMDGCM/libf.
303Les sous programmes sont ensuite stokes sur dans des librairies FORTRAN
304sur $LIBOGCM.
305
3062. Ensuite, makegcm compile le programme prog.f se trouvant par default sur
307$LMDGCM/libf/dyn3d et effectue le lien avec l ensemble des librairies.
308
309La variable '$LMDGCM' doit etre initialisee dans votre .cshrc ou en dur
310dans la comande makegcm.
311
312La commande makegcm est faite pour permettre de gerer en parallele des
313versions differentes du modele, compilees avec des options de compilation
314et des dimensions differentes sans avoir a chaque fois a recompiler tout
315le modele.
316
317Les librairies FORTRAN sont stoquees sur le directory $LIBOGCM.
318
319
320OPTIONS:
321--------
322
323Les options suivantes peuvent etre definies soit par defaut en editant le
324"script" makegcm, soit en interactif:
325
326-d imxjmxlm  ou im, jm, et lm sont resp. le nombre de longitudes, latitudes
327             et couches verticales.
328
329-t ntrac   selectionne le nombre de traceur advectes par la dynamique.
330           Dans les versions courantes du modele terrestre on a par exemple
331           ntrac=2 pour l'eau vapeur et liquide
332
333             L'effet des options -d et -t est d'ecraser le fichier
334             $LMDGCM/libf/grid/dimensions.h
335             qui contient sous forme de 4 PARAMETER FORTRAN les 3 dimensions
336             de la grille horizontale im, jm, lm plus le nombre de traceurs
337             advectes passivement par la dynamique ntrac, par un nouveu fichier
338             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
339             Si ce fichier n'existe pas encore, il est cree par le script
340             $LMDGCM/libf/grid/dimension/makdim
341
342-p PHYS    pour selectionner le jeu de parametrisations physiques avec
343           lequel on veut compiler le modele.
344           Le modele sera alors compile en prenant les sources des
345           parametrisations physiques dans le repertoire:
346            $LMDGCM/libf/phyPHYS
347
348-c false|true
349           pour selectionner le mode force (par defaut) ou couple
350
351-io ioipsl|noioipsl
352           pour selectionner le logiciel IO : IOIPSL par defaut
353
354-psmile false|true
355           pour selectionner le mode psmile ou non (par defaut)
356
357-v true|false
358           pour selectionner la vegetation (par defaut) ou non
359
360-g grille  selectionne le type de grille qu'on veut utiliser.
361           L'effet de cette option est d'ecraser le fichier
362           $LMDGCM/libf/grid/fxyprim.h
363           avec le fichier
364           $LMDGCM/libf/grid/fxy_grille.h
365           grille peut prendre les valeurs:
366           1. reg pour la grille reguliere
367           2. sin pour avoir des points equidistants en sinus de la latitude
368           3. new pour pouvoir zoomer sur une partie du globe
369
370-O "optimisation fortran" ou les optimisations fortran sont les options de la
371            commande f77
372
373-include path
374           Dans le cas ou on a dans des sous programmes des fichiers
375           #include (cpp) qui se trouve sur des repertoires non references
376           par defaut
377
378-adjnt     Pour compiler la l'adjoint du code dynamique
379
380-filtre  filtre
381           Pour choisir le filtre en longitude dans les regions polaires.
382           "filtre" correspond au nom d'un repertoire se trouvant sur
383           $LMDGCM/libf. Le filtre standard du modele est "filtrez" qui peut
384           etre utilise aussi bien pour une grille reguliere que pour une
385           grille zoomee en longitude.
386
387-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
388          Pour rajouter un lien avec les librairies FORTRAN
389          libfile1.a, libfile2.a ... se trouvant respectivement sur les
390          repertoires dir1, dir2 ...
391          Si dirn est un repertoire dont le chemin est automatique (comme
392          par exemple /usr/lib ...) il n'est pas besoin de specifier -Ldirn.
393
394Auteur: Frederic Hourdin  (hourdin@lmd.jussieu.fr)
395eod
396exit
397
398########################################################################
399# Lecture des differentes options
400########################################################################
401
402    case -d:
403        set dim=$2 ; shift ; shift ; goto top
404                       
405    case -O:
406        set optim="$2" ; shift ; shift ; goto top
407
408     case -p
409        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
410
411     case -g
412        set grille="$2" ; shift ; shift ; goto top
413
414     case -c
415        set couple="$2" ; shift ; shift ; goto top
416
417     case -io
418        set io="$2" ; shift ; shift ; goto top
419
420     case -v
421        set veget="$2" ; shift ; shift ; goto top
422
423     case -psmile
424        set psmile="$2" 
425        if ( "$psmile" == 'true' ) then
426          set couple='true'
427        endif
428        shift ; shift ; goto top
429 
430     case -t
431        set ntrac=$2 ; shift ; shift ; goto top
432
433     case -include
434        set include="$include -I$2" ; shift ; shift ; goto top
435
436     case -adjnt
437        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
438        set optim="$optim -Dadj" ; shift ; goto top
439
440     case -filtre
441        set filtre=$2 ; shift ; shift ; goto top
442
443     case -link
444        set opt_link="$opt_link $2" ; shift ; shift ; goto top
445
446     case -debug
447        if $HP then
448           set optim=" -g "
449        else if $SUN then
450           setenv PARALLEL 2
451# Il faut rajouter l'option -dalign a -g pour pouvoir editer les liens
452# avec des programmes compiles avec -fast
453           set optim=" -g -dalign "
454           set optim90=" -fixed -g "
455           set optimtru90=" -free -g -C -dalign "
456        else if $CRAY then
457           set optim="$optim"" -g "
458           set optim90="$optim90"" -G1 "
459        else if $LINUX then
460           set optim="$optim"" -g -Mbounds -C "
461           set optim90="$optim90"" -g -Mbounds -C "
462        else
463           echo pas d option debug predefinie pour cette machine
464           exit
465        endif
466        shift ; goto top
467
468     default
469        set code="$1" ; shift ; goto top
470
471   endsw
472endif
473
474########################################################################
475# Definition des clefs CPP
476########################################################################
477
478set cppflags=''
479
480if $X8BRODIE then
481  set cppflags="$cppflags -DNC_DOUBLE -DBLAS -DSGEMV=DGEMV -DSGEMM=DGEMM"
482endif
483
484if ( $io == ioipsl ) then
485   set optim="$optim -DCPP_IOIPSL"
486   set optim90="$optim"
487   set optimtru90="$optimtru90 -DCPP_IOIPSL"
488endif
489
490if ( "$physique" == 'nophys' ) then
491   set phys="L_PHY= LIBPHY="
492else
493   set optim="$optim -DCPP_PHYS"
494   set optim90="$optim"
495   set optimtru90="$optimtru90 -DCPP_PHYS"
496endif
497
498set link_veget=" "
499if ( "$veget" == 'true' ) then
500   set optim="$optim -DCPP_VEGET"
501   set optim90="$optim"
502   set optimtru90="$optimtru90 -DCPP_VEGET"
503   set link_veget=" -lsechiba -lparameters -lstomate"
504   if ( $XNEC || $X6NEC || $X8BRODIE ) then
505      set link_veget=" -lsxsechiba -lsxparameters -lsxstomate"
506   endif
507endif
508
509if ( "$psmile" == 'true' ) then
510   set optim="$optim -DCPP_PSMILE"
511   set optim90="$optim90 -DCPP_PSMILE"
512   set optimtru90="$optimtru90 -DCPP_PSMILE"
513endif
514
515########################################################################
516# cas special sans physique
517########################################################################
518if ( "$physique" == 'nophys' ) then
519   set phys="L_PHY= LIBPHY="
520endif
521
522########################################################################
523# choix du nombre de traceur par defaut si il n'a pas ete choisi,
524# suivant la physique
525########################################################################
526
527if ( $ntrac == 0  ) then
528    if ( "$physique" == 'nophys' ) then
529        set ntrac=1
530    else if ( "$physique" == 'lmd' ) then
531        set ntrac=2
532    else if ( "$physique" == 'lmd_test_li' ) then
533        set ntrac=2
534    else if ( "$physique" == 'ec' ) then
535        set ntrac=1
536    else
537        set ntrac = 1
538    endif
539endif
540
541########################################################################
542#subtilites sur le nom de la librairie
543########################################################################
544
545\rm -f tmp ; touch tmp
546\rm -f tmp90 ; touch tmp90
547foreach i ( $optim )
548   echo $i | sed -e 's/\"//g' -e "s/\'//g" -e 's/-//g'  >> tmp
549end
550set suf=
551foreach i ( `sort tmp | uniq ` )
552   set suf=$suf$i
553end
554if ( ! $IBM ) then
555   set nomlib="$nomlib$suf"
556endif
557if ( $DEC ) then
558   set nomlib=DEC
559endif
560if ( $IBM ) then
561   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
562   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
563else if ( $SUN ) then
564   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
565   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
566else
567   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
568   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
569endif
570set nomlib=${nomlib}${physique}_${dim_}_t${ntrac}_$grille
571## M-A-F nomlib trop long sur CRAY pour ar
572if ( $CRAY ) then
573    set nomlib=F90_${dim_}_t${ntrac}
574endif
575if ( $NEC || $XNEC || $X6NEC || $X8BRODIE ) then
576    set nomlib=F90_${dim_}_t${ntrac}
577endif
578echo calcul de la dimension
579set dimc=`echo $dim | wc -w`
580
581if ( "$dimc" == "2" ) then
582set include="$include "'-I$(LIBF)/dyn2d '
583set dimh=$dim
584else
585set include="$include "'-I$(LIBF)/dyn3d '
586set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
587endif
588echo $dimc
589
590########################################################################
591# path pour les #include
592########################################################################
593
594if ( $XNEC ) then
595  set include="$include -I$NCDFINC -I$IOIPSLDIR"
596else
597  set include="$include -I$NCDFINC -I$IOIPSLDIR"
598endif
599echo $include
600
601########################################################################
602# Gestion des dimensions du modele.
603# on cree ou remplace le fichier des dimensions/nombre de traceur
604########################################################################
605
606cd $libf/grid
607if ( -f dimensions.h ) then
608echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
609echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
610echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
611echo  vous pouvez continuer en repondant oui.
612echo "Voulez-vous vraiment continuer?"
613if ( $< == "oui" ) then
614\rm -f $libf/grid/dimensions.h
615else
616exit
617endif
618endif
619
620cd dimension
621./makdim $ntrac $dim
622cat $libf/grid/dimensions.h
623
624cd $LMDGCM
625set libo=$libo/$nomlib
626if ( ! -d $libo )  then
627   mkdir $libo
628   cd $model
629endif
630
631########################################################################
632# Differentes dynamiques (3d, 2d, 1d)
633########################################################################
634
635set dimension=`echo $dim | wc -w`
636echo dimension $dimension
637if ( $dimension == 1 ) then
638echo pas de dynamique
639set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
640endif
641endif
642cd $model
643if ( $dimension == 3 ) then
644cd libf/grid
645\rm fxyprim.h
646cp -p fxy_${grille}.h fxyprim.h
647endif
648
649######################################################################
650#   Traitement special pour le nouveau rayonnement de Laurent Li.
651######################################################################
652
653if ( -f $libf/phy$physique/raddim.h ) then
654 if ( -f $libf/phy$physique/raddim.$dimh.h ) then
655  \rm -f $libf/phy$physique/raddim.h
656  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
657  echo $libf/phy$physique/raddim.$dimh.h
658  cat $libf/phy$physique/raddim.$dimh.h
659  cat $libf/phy$physique/raddim.h
660 else
661  echo On peut diminuer la taille de l executable en creant
662  echo le fichier $libf/phy$physique/raddim.$dimh.h
663  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
664 endif
665endif
666
667######################################################################
668# Gestion du filtre qui n'existe qu'en 3d.
669######################################################################
670
671if ( `expr $dimc \> 2` == 1 ) then
672   set filtre="FILTRE=$filtre"
673else
674   set filtre="FILTRE= L_FILTRE= "
675endif
676echo MACRO FILTRE $filtre
677
678echo $dimc
679
680########################################################################
681#  utilisation des vraies routines de couplage si on est en couple
682########################################################################
683if ( $couple == 'true' ) then
684  banner couple
685  pwd
686  if ( "$psmile" == 'true' ) then
687     if ( -f $libf/phy$physique/oasis.F ) then 
688        \rm $libf/phy$physique/oasis.F
689     endif
690     if ( ! -f $libf/phy$physique/oasis.F90 ) then
691       \cp $libf/phy$physique/oasis.psmile $libf/phy$physique/oasis.F90
692     endif
693     if ( `diff $libf/phy$physique/oasis.F90 $libf/phy$physique/oasis.psmile | wc -w` ) then
694       \cp $libf/phy$physique/oasis.psmile $libf/phy$physique/oasis.F90
695     endif
696  else
697     if ( -f $libf/phy$physique/oasis.F90 ) then
698       \rm $libf/phy$physique/oasis.F90
699     endif
700     if (! -f $libf/phy$physique/oasis.F ) then
701       \cp $libf/phy$physique/oasis.true $libf/phy$physique/oasis.F
702     else
703       if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true | wc -w` ) then
704#         \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy
705         \cp $libf/phy$physique/oasis.true $libf/phy$physique/oasis.F
706       endif
707     endif
708  endif
709else
710  if ( -f $libf/phy$physique/oasis.F90 ) then
711    \rm $libf/phy$physique/oasis.F90
712  endif
713  if (! -f $libf/phy$physique/oasis.F ) then
714    \cp $libf/phy$physique/oasis.dummy $libf/phy$physique/oasis.F
715  else
716    if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy | wc -w` ) then
717      \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true
718      \cp $libf/phy$physique/oasis.dummy $libf/phy$physique/oasis.F
719    endif
720  endif
721endif
722########################################################################
723#  Avant de lancer le make, on recree le makefile si necessaire
724########################################################################
725# c'est a dire dans 3 cas:
726# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
727#    derniere creation du makefile
728# 2. si le fichier contenant cette liste "liste_des_sources"
729#    n'existe pas.
730# 3. Si le makefile n'existe pas.
731########################################################################
732
733cd $model
734find libf -name '*.[Fh]' -print >! tmp77
735find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
736find libf -name '*.[Fh]90' -print >> tmp90
737
738if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
739     || `diff tmp90 liste_des_sources_f90 | wc -w` \
740     || ! -f makefile \
741     || ! -f liste_des_sources_f90 \
742     || ! -f liste_des_sources_f77 ) then
743        echo les fichiers suivants ont ete crees ou detruits
744        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
745        diff liste_des_sources_f77 tmp77
746        diff liste_des_sources_f90 tmp90
747        \cp tmp77 liste_des_sources_f77
748        \cp tmp90 liste_des_sources_f90
749        echo On recree le makefile
750        ./create_make_gcm >! tmp
751        \mv tmp makefile
752        echo Nouveau makefile cree.
753endif
754
755########################################################################
756#  Execution de la comande make
757########################################################################
758
759echo PHYSIQUE $phys
760echo dynamique $dyn $dimension
761echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
762echo PATH pour les fichiers INCLUDE $include
763echo OPLINK="$oplink"
764
765#################
766if $HP then
767#################
768   set f77='fort77 +OP'
769   set f90='jensaisrien'
770   set opt_link="$opt_link -lm"
771#################
772else  if $VPP then
773#################
774   set f77=frt
775   set f90=$f77
776   if ($couple == true) then
777     set opt_link="-Wg,-c $MODIPSLDIR/liboasis2.4_mpi2.a /usr/lang/mpi2/lib64/libmpi.a /usr/lang/mpi2/lib64/libmp.a -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
778     set oplink="-Wl,-t,-P,-dy "
779   else
780     set opt_link="-Wg,-c -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
781     set oplink="-Wl,-t,-dy "
782   endif
783   if ($veget == true) then
784     set opt_link="$opt_link $link_veget -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
785   endif
786#################
787else if $CRAY then
788#################
789   set f77=f90
790   set f90=f90
791#################
792else if $LINUX then
793#################
794   set f77=pgf90
795   set f90=pgf90
796   set opt_link=" -Mfree -L /usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$MODIPSLDIR $link_veget -L$NCDFLIB -lnetcdf -lioipsl -Wl,-Bstatic -L/usr/lib/gcc-lib/i386-linux/2.95.2/"
797#################
798else if $SUN then
799#################
800   set f77=f90
801   set f90=f90
802   set opt_link="-lf77compat -L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf "
803#################
804else if $NEC then
805#################
806   set f77=f90 -ftrace
807   set f90=f90 -ftrace
808   set opt_link="-L$MODIPSLDIR"
809   if ($veget == true) then
810     set opt_link="$opt_link $link_veget"
811   endif
812   if ($couple == true) then
813     set opt_link="$opt_link -lioipsl -loasis2.4_mpi2 -float0 -ew -P static $NCDFLIB "
814   else
815     set opt_link="$opt_link -L$MODIPSLDIR -lioipsl -float0 -ew -P static $NCDFLIB "
816   endif
817   set mod_loc_dir="./"
818#################
819else if $XNEC then
820#################
821   set f77="sxmpif90 -ftrace"
822   set f90="sxmpif90 -ftrace"
823   if $MODIPSL then
824     set opt_link="$opt_link -L$MODIPSLDIR"
825     if ($veget == true) then
826       set opt_link="$opt_link $link_veget"
827     endif
828     if ($couple == true) then
829       if ($psmile == true) then
830       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
831       else
832       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
833       endif
834     else
835       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
836     endif
837   else
838     if ($couple == true) then
839       set opt_link="-L$MODIPSLDIR"
840       set opt_link="$opt_link $link_veget -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
841     else
842       set opt_link=" -C hopt -float0 $optdbl -P static -L$MODIPSLDIR $link_veget -lsxioipsl $NCDFLIB "
843     endif
844   endif
845   set mod_loc_dir="./"
846##################
847else if $X6NEC then
848##################
849   set f77=sxmpif90
850   set f90=sxmpif90
851   if $MODIPSL then
852     set opt_link="$opt_link -L$MODIPSLDIR"
853     if ($veget == true) then
854       set opt_link="$opt_link -lsxsechiba -lsxparameters -lsxstomate"
855     endif
856     if ($couple == true) then
857        if ($psmile == true) then
858        set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
859        else
860        set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 -size_t64 $optdbl -P static $NCDFLIB "
861        endif
862     else
863       set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
864     endif
865   else
866     set opt_link=" -float0 -size_t64 $optdbl -P static -L$MODIPSLDIR -lsxsechiba -lsxparameters -lsxstomate -lsxioipsl $NCDFLIB "
867   endif
868   set mod_loc_dir="./"
869##################
870else if $X8BRODIE then
871##################
872   set f77=sxmpif90
873   set f90=sxmpif90
874   set opt_link="$opt_link -float0 -Wf,-A dbl4 -L$MODIPSLDIR -lblas"
875   set opt_link="$opt_link  $link_veget"
876   if $MODIPSL then
877#     set opt_link="$opt_link -float0 -Wf,-A dbl4 -L$MODIPSLDIR -lblas"
878     if ($veget == true) then
879#       set opt_link="$opt_link  $link_veget"
880     endif
881     if ($couple == true) then
882        if ($psmile == true) then
883        set opt_link="$opt_link -lsxioipsl $optdbl -P static $NCDFLIB "
884        else
885        set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 $optdbl -P static $NCDFLIB "
886        endif
887     else
888       set opt_link="$opt_link -lsxioipsl $optdbl -P static $NCDFLIB "
889     endif
890   else
891     set opt_link="$opt_link $optdbl -P static -lsxioipsl $NCDFLIB "
892   endif
893   set mod_loc_dir="./"
894#################
895else
896#################
897   set f77=f77
898   set f90=f90
899endif
900
901cd $model
902
903if $VPP then
904set make="gmake RANLIB=ls"
905else if $CRAY then
906set make="make RANLIB=ls"
907else if $NEC then
908set make="make RANLIB=ls"
909else if $LINUX then
910set make="make -k RANLIB=ranlib"
911else if $XNEC then
912set make="gmake RANLIB=ls"
913else if $X6NEC then
914set make="gmake RANLIB=ls"
915else if $X8BRODIE then
916set make="gmake RANLIB=ls"
917else
918set make="make RANLIB=ranlib"
919endif
920
921
922
923#
924# les deux test suivants sont "temporaires" pour pallier des "faiblesses" du
925# compilateur fortran Sun: f90: SC4.0 11 Sep 1995 FORTRAN 90 1.1
926#
927#if ($code == 'create_limit' && $SUN) then
928#   set link=f77
929#   set opt_link="-L$NCDFLIB -lnetcdf"
930#endif
931
932#if ($code == 'create_etat0' && $SUN) then
933#   if ( ! -f $libo/libdyn3d.a ) then
934#     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
935#     \rm $libf/grid/dimensions.h
936#     exit
937#   endif
938#   set optim=" -dalign "
939#   set optim90=" -dalign -fixed "
940#   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
941#   set link="$f90 $optim90"
942#   touch $LMDGCM/libf/dyn3d/startvar.F
943#   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
944#endif
945
946#
947# etat0_netcdf a besoin d'info de la physique
948# A revoir
949set include="$include"' -I$(LIBF)/phy'"$physique"
950#
951# le programme principal create_limit a besoin de l'info du module
952# startvar: on met donc libo dans les include pour Nec
953set include="$include"' -I$(LIBO)'
954
955
956#################################################################
957# Execution de la comande make... ENFIN!
958#################################################################
959
960if $VPP then
961  set optim90=" $optim90 -Am -M$libo"
962  set optimtru90="$optim90"
963 \cp $IOIPSLDIR/*.mod $libo
964else if $SUN then
965 set optim90=" $optim90 -M$libo -M$MODIPSLDIR "
966 set optimtru90=" $optimtru90 -M$libo -M$MODIPSLDIR "
967 set optim="$optim90"
968 \cp $IOIPSLDIR/*.mod $libo
969else if $NEC then
970 set optim90=" $optim90 -I$libo "
971else if $XNEC then
972 set optim90=" $optim90 -I$libo "
973 set optimtru90=" $optimtru90 -I$libo "
974else if $X6NEC then
975 set optim90=" $optim90 -I$libo "
976 set optimtru90=" $optimtru90 -I$libo "
977else if $X8BRODIE then
978 set optim90=" $optim90 -I$libo "
979 set optimtru90=" $optimtru90 -I$libo "
980else if $LINUX then
981 set optimtru90=" $optimtru90 -module $libo "
982 set optim90=" $optim90 -module $libo "
983 set optim="$optim90"
984 set mod_loc_dir=$libo
985 \cp /d3/fairhead/sechiba/ioipsl/*.mod $libo
986 \cp $IOIPSLDIR/*.mod $libo
987endif
988
989set link="$f90 $optim90"
990
991set ar=ar
992
993if $XNEC then
994  set link="sxld $opt_link"
995  set link="$f90 "
996#  set ar=sxar
997else if $X6NEC then
998  set link="sxld $opt_link"
999  set link="$f90 -Wl,-hlib_cyclic "
1000else if $X8BRODIE then
1001  set link="sxld $opt_link"
1002  set link="$f90 -Wl,-hlib_cyclic "
1003endif
1004
1005
1006cd $localdir
1007
1008echo $make -f $LMDGCM/makefile \
1009OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
1010OPTIM90="$optim90" \
1011OPTIMTRU90="$optimtru90" \
1012OPTIM="$optim$optimbis" \
1013INCLUDE="$include" \
1014$filtre \
1015LIBO=$libo \
1016$dyn \
1017$phys \
1018DIM=$dimc \
1019L_ADJNT="$adjnt" \
1020LOCAL_DIR="$localdir"  \
1021F77="$f77" \
1022F90="$f90" \
1023OPLINK="$oplink" \
1024LINK="$link" \
1025GCM="$LMDGCM" \
1026MOD_LOC_DIR=$mod_loc_dir \
1027MOD_SUFFIX=$mod_suffix \
1028AR=$ar \
1029PROG=$code
1030
1031$make -f $LMDGCM/makefile \
1032OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
1033OPTIM90="$optim90" \
1034OPTIMTRU90="$optimtru90" \
1035OPTIM="$optim$optimbis" \
1036INCLUDE="$include" \
1037$filtre \
1038LIBO=$libo \
1039$dyn \
1040$phys \
1041DIM=$dimc \
1042L_ADJNT="$adjnt" \
1043LOCAL_DIR="$localdir"  \
1044F77="$f77" \
1045F90="$f90" \
1046OPLINK="$oplink" \
1047LINK="$link" \
1048GCM="$LMDGCM" \
1049MOD_LOC_DIR=$mod_loc_dir \
1050MOD_SUFFIX=$mod_suffix \
1051AR=$ar \
1052PROG=$code
1053
1054\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.