source: trunk/makegcm-titan-gnome @ 60

Last change on this file since 60 was 4, checked in by slebonnois, 14 years ago

Premiers chantiers ouverts (Seb),
ajouts des makegcm et create_make_gcm pour Titan et Venus

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