source: LMDZ4/branches/LMDZ4-dev/makegcm @ 1132

Last change on this file since 1132 was 1114, checked in by jghattas, 15 years ago

Creation du module infotrac:

  • contient les variables de advtrac.h
  • contient la subroutine iniadvtrac renommer en infotrac_init
  • le nombre des traceurs est lu dans tracer.def en dynamique (ou par default ou recu par INCA)
  • ce module est utilise dans la dynamique et la physique
  • contient aussi la variable nbtr qui avant etait stockee dans dimphy

Le fichier advtrac.h n'existe plus.
La compilation ne prend plus en compte le nombre de traceur.

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