source: LMDZ4/trunk/makegcm @ 1018

Last change on this file since 1018 was 1018, checked in by lsce, 16 years ago
  • Modification dans la compilation avec INCA.

JG

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