source: trunk/LMDZ.COMMON/makegcm @ 2656

Last change on this file since 2656 was 646, checked in by emillour, 13 years ago

All GCMs: Minor improvement of the makegcm script.
Force outputs of the 'find' command to be
sorted (otherwise a same 'find' can sometimes yield results in a different
order, which in the present case triggers the rebuilding of the makefile
although it is not necessary).
EM

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