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

Last change on this file since 1205 was 1185, checked in by Ehouarn Millour, 15 years ago

Reinstate pgf90 compiler and options in makegcm (was lost with revision 1176).
EM

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