source: LMDZ4/trunk/makegcm @ 768

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

Merge entre la version V3_conv et le HEAD
YM, JG, LF

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