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

Last change on this file since 1229 was 1229, checked in by idelkadi, 15 years ago
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 31.9 KB
RevLine 
[524]1#!/bin/csh
2#
[1185]3# $Id: makegcm 1229 2009-08-17 15:11:37Z idelkadi $
[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
[1206]31if ( $FC_LINUX == g95 ) then
[1185]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"
[1229]554#   set link_veget=" -lsechiba -lparameters -lstomate -lorglob -lparallel"
555   set link_veget=" -lsechiba -lparameters -lstomate"
[768]556   if ( $XNEC || $X8BRODIE || $X6NEC) then
[1229]557#      set link_veget=" -lsxsechiba -lsxparameters -lsxstomate -lsxorglob -lsxparallel"
558      set link_veget=" -lsxsechiba -lsxparameters -lsxstomate "
[524]559   endif
560endif
561
[1018]562if ( "$chimie" == 'INCA' ) then
[768]563    set cppflags="$cppflags -DINCA" 
564    set libchimie=" -L$INCALIB -lchimie"
565    set opt_link="$opt_link  -L$INCALIB -lchimie"
[669]566endif
567   
[664]568if ( "$couple" == 'true' ) then
[768]569   set cppflags="$cppflags -DCPP_COUPLE"
[664]570endif
571
[768]572set FLAG_PARA=''
[632]573if ( "$parallel" == 'true' ) then
[768]574   set cppflags="$cppflags -DCPP_PARA"
575   set FLAG_PARA='par'
[632]576endif
577
[768]578set optim="$optim $cppflags"
579set optim90="$optim90 $cppflags"
580set optimtru90="$optimtru90 $cppflags"
581
582
[524]583########################################################################
584# cas special sans physique
585########################################################################
586if ( "$physique" == 'nophys' ) then
587   set phys="L_PHY= LIBPHY="
588endif
589
590########################################################################
591#subtilites sur le nom de la librairie
592########################################################################
593
594\rm -f tmp ; touch tmp
595\rm -f tmp90 ; touch tmp90
596foreach i ( $optim )
597   echo $i | sed -e 's/\"//g' -e "s/\'//g" -e 's/-//g'  >> tmp
598end
599set suf=
600foreach i ( `sort tmp | uniq ` )
601   set suf=$suf$i
602end
603if ( ! $IBM ) then
604   set nomlib="$nomlib$suf"
605endif
606if ( $DEC ) then
607   set nomlib=DEC
608endif
609if ( $IBM ) then
610   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
611   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
612else if ( $SUN ) then
613   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
614   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
615else
[882]616   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
617   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'`
[524]618endif
[1114]619set nomlib=${nomlib}${physique}_${dim_}_$grille
[524]620## M-A-F nomlib trop long sur CRAY pour ar
621if ( $CRAY ) then
[1114]622    set nomlib=F90_${dim_}
[524]623endif
[768]624if ( $NEC || $XNEC || $X6NEC || $X8BRODIE ) then
[1114]625    set nomlib=F90_${dim_}_'phy'${physique}${FLAG_PARA}
[524]626endif
627echo calcul de la dimension
628set dimc=`echo $dim | wc -w`
629
630if ( "$dimc" == "2" ) then
631set include="$include "'-I$(LIBF)/dyn2d '
632set dimh=$dim
633else
[768]634set include="$include "'-I$(LIBF)/dyn3d${FLAG_PARA} '
[524]635set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
636endif
637echo $dimc
638
639########################################################################
640# path pour les #include
641########################################################################
642
643if ( $XNEC ) then
644  set include="$include -I$NCDFINC -I$IOIPSLDIR"
645else
646  set include="$include -I$NCDFINC -I$IOIPSLDIR"
647endif
648echo $include
649
650########################################################################
651# Gestion des dimensions du modele.
[1114]652# on cree ou remplace le fichier des dimensions
[524]653########################################################################
654
655cd $libf/grid
656if ( -f dimensions.h ) then
657echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
658echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
659echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
660echo  vous pouvez continuer en repondant oui.
661echo "Voulez-vous vraiment continuer?"
662if ( $< == "oui" ) then
663\rm -f $libf/grid/dimensions.h
664else
665exit
666endif
667endif
668
669cd dimension
[1114]670./makdim $dim
[524]671cat $libf/grid/dimensions.h
672
673cd $LMDGCM
674set libo=$libo/$nomlib
675if ( ! -d $libo )  then
676   mkdir $libo
677   cd $model
678endif
679
680########################################################################
681# Differentes dynamiques (3d, 2d, 1d)
682########################################################################
683
684set dimension=`echo $dim | wc -w`
685echo dimension $dimension
686if ( $dimension == 1 ) then
687echo pas de dynamique
688set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
689endif
690endif
691cd $model
692if ( $dimension == 3 ) then
693cd libf/grid
694\rm fxyprim.h
695cp -p fxy_${grille}.h fxyprim.h
696endif
697
698######################################################################
699#   Traitement special pour le nouveau rayonnement de Laurent Li.
700######################################################################
701
[1140]702#if ( -f $libf/phy$physique/raddim.h ) then
703# if ( -f $libf/phy$physique/raddim.$dimh.h ) then
704#  \rm -f $libf/phy$physique/raddim.h
705#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
706#  echo $libf/phy$physique/raddim.$dimh.h
707#  cat $libf/phy$physique/raddim.$dimh.h
708#  cat $libf/phy$physique/raddim.h
709# else
710#  echo On peut diminuer la taille de l executable en creant
711#  echo le fichier $libf/phy$physique/raddim.$dimh.h
712#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
713# endif
714#endif
[524]715
716######################################################################
717# Gestion du filtre qui n'existe qu'en 3d.
718######################################################################
719
720if ( `expr $dimc \> 2` == 1 ) then
721   set filtre="FILTRE=$filtre"
722else
723   set filtre="FILTRE= L_FILTRE= "
724endif
725echo MACRO FILTRE $filtre
726
727echo $dimc
728
729########################################################################
730#  Avant de lancer le make, on recree le makefile si necessaire
731########################################################################
[632]732########################################################################
[524]733# c'est a dire dans 3 cas:
734# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
735#    derniere creation du makefile
736# 2. si le fichier contenant cette liste "liste_des_sources"
737#    n'existe pas.
738# 3. Si le makefile n'existe pas.
739########################################################################
[632]740##########################################
741# On adapte d'abord certains include à F90
742##########################################
743##########################################
[524]744cd $model
745find libf -name '*.[Fh]' -print >! tmp77
746find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
747find libf -name '*.[Fh]90' -print >> tmp90
748
749if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
750     || `diff tmp90 liste_des_sources_f90 | wc -w` \
751     || ! -f makefile \
752     || ! -f liste_des_sources_f90 \
753     || ! -f liste_des_sources_f77 ) then
754        echo les fichiers suivants ont ete crees ou detruits
755        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
756        diff liste_des_sources_f77 tmp77
757        diff liste_des_sources_f90 tmp90
758        \cp tmp77 liste_des_sources_f77
759        \cp tmp90 liste_des_sources_f90
760        echo On recree le makefile
761        ./create_make_gcm >! tmp
762        \mv tmp makefile
763        echo Nouveau makefile cree.
764endif
765
766########################################################################
767#  Execution de la comande make
768########################################################################
769
770echo PHYSIQUE $phys
771echo dynamique $dyn $dimension
772echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
773echo PATH pour les fichiers INCLUDE $include
774echo OPLINK="$oplink"
775
776#################
777if $HP then
778#################
779   set f77='fort77 +OP'
780   set f90='jensaisrien'
781   set opt_link="$opt_link -lm"
782#################
783else  if $VPP then
784#################
785   set f77=frt
786   set f90=$f77
787   if ($couple == true) then
788     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"
789     set oplink="-Wl,-t,-P,-dy "
790   else
791     set opt_link="-Wg,-c -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
792     set oplink="-Wl,-t,-dy "
793   endif
794   if ($veget == true) then
795     set opt_link="$opt_link $link_veget -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
796   endif
797#################
798else if $CRAY then
799#################
800   set f77=f90
801   set f90=f90
802#################
803else if $LINUX then
804#################
[676]805#   set f77=pgf90
806#   set f90=pgf90
807   set f77=$FC_LINUX
808   set f90=$FC_LINUX
809   if ( $FC_LINUX == 'pgf90' ) then
[1140]810     if ( $io == "ioipsl" ) then
811       set opt_link=" -L$MODIPSLDIR $link_veget -L$NCDFLIB -lioipsl -lnetcdf "
812     else
813       set opt_link=" -L$MODIPSLDIR $link_veget -L$NCDFLIB -lnetcdf "
814     endif
[676]815   else if ($FC_LINUX == 'g95') then
[1140]816     if ( $io == "ioipsl" ) then
817       set opt_link="-L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf -lioipsl -lnetcdf "
818     else
819       set opt_link="-L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf -lnetcdf "
820     endif
[676]821   else
822     set opt_link=" "
823   endif
[524]824#################
825else if $SUN then
826#################
827   set f77=f90
828   set f90=f90
[1140]829   if ( $io == "ioipsl" ) then
830     set opt_link="-lf77compat -L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf "
831   else
832     set opt_link="-lf77compat -L$MODIPSLDIR $link_veget -L$NCDFLIB -lnetcdf "
833   endif
[524]834#################
835else if $NEC then
836#################
837   set f77=f90 -ftrace
838   set f90=f90 -ftrace
839   set opt_link="-L$MODIPSLDIR"
840   if ($veget == true) then
841     set opt_link="$opt_link $link_veget"
842   endif
843   if ($couple == true) then
844     set opt_link="$opt_link -lioipsl -loasis2.4_mpi2 -float0 -ew -P static $NCDFLIB "
845   else
846     set opt_link="$opt_link -L$MODIPSLDIR -lioipsl -float0 -ew -P static $NCDFLIB "
847   endif
848   set mod_loc_dir="./"
849#################
850else if $XNEC then
851#################
852   set f77="sxmpif90 -ftrace"
853   set f90="sxmpif90 -ftrace"
854   if $MODIPSL then
855     set opt_link="-L$MODIPSLDIR"
856     if ($veget == true) then
857       set opt_link="$opt_link $link_veget"
858     endif
859     if ($couple == true) then
[621]860       if ($psmile == true) then
861       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
862       else
[524]863       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
864       endif
865     else
866       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
867     endif
868   else
869     if ($couple == true) then
870       set opt_link="-L$MODIPSLDIR"
871       set opt_link="$opt_link $link_veget -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
872     else
873       set opt_link=" -C hopt -float0 $optdbl -P static -L$MODIPSLDIR $link_veget -lsxioipsl $NCDFLIB "
[541]874     endif
[524]875   endif
876   set mod_loc_dir="./"
877##################
878else if $X6NEC then
879##################
880   set f77=sxmpif90
881   set f90=sxmpif90
882   if $MODIPSL then
[768]883     set opt_link="$opt_link -L$MODIPSLDIR"
[524]884     if ($veget == true) then
[768]885       set opt_link="$opt_link $link_veget"
[524]886     endif
887     if ($couple == true) then
[621]888        if ($psmile == true) then
889        set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
890        else
891        set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 -size_t64 $optdbl -P static $NCDFLIB "
892        endif
[524]893     else
894       set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
895     endif
896   else
[669]897#     set opt_link=" -float0 -size_t64 $optdbl -P static -L$MODIPSLDIR -lsxsechiba -lsxparameters -lsxstomate -lsxioipsl $NCDFLIB "
[768]898     set opt_link=" $opt_link -float0 -size_t64 $optdbl -P static -L$MODIPSLDIR -lsxioipsl $NCDFLIB "
[669]899
[524]900   endif
901   set mod_loc_dir="./"
[768]902##################
903else if $X8BRODIE then
904##################
905   set f77=sxmpif90
906   set f90=sxmpif90
907   if $MODIPSL then
908     set opt_link="$opt_link -float0 -Wf,-A dbl4 -L$MODIPSLDIR -lblas"
909     if ($veget == true) then
910       set opt_link="$opt_link $link_veget"
911     endif
912     if ($couple == true) then
[787]913       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
[768]914     else
915       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
916     endif
917   else
918#     set opt_link=" -float0 $optdbl -P static -L$MODIPSLDIR -lsxsechiba -lsxparameters -lsxstomate -lsxioipsl $NCDFLIB "
[787]919     set opt_link=" -float0 $optdbl -P static -L$MODIPSLDIR -lsxioipsl $NCDFLIB -lblas"
[768]920
921   endif
922   set mod_loc_dir="./"
[524]923#################
924else
925#################
926   set f77=f77
927   set f90=f90
928endif
929
930cd $model
931
932if $VPP then
933set make="gmake RANLIB=ls"
934else if $CRAY then
935set make="make RANLIB=ls"
936else if $NEC then
937set make="make RANLIB=ls"
938else if $LINUX then
939set make="make -k RANLIB=ranlib"
940else if $XNEC then
941set make="gmake RANLIB=ls"
942else if $X6NEC then
943set make="gmake RANLIB=ls"
[768]944else if $X8BRODIE then
945set make="gmake RANLIB=ls"
[524]946else
947set make="make RANLIB=ranlib"
948endif
949
950
951
952
953#
954# etat0_netcdf a besoin d'info de la physique
955# A revoir
956set include="$include"' -I$(LIBF)/phy'"$physique"
957#
958# le programme principal create_limit a besoin de l'info du module
959# startvar: on met donc libo dans les include pour Nec
960set include="$include"' -I$(LIBO)'
961
962
963#################################################################
964# Execution de la comande make... ENFIN!
965#################################################################
966
967if $VPP then
968  set optim90=" $optim90 -Am -M$libo"
969  set optimtru90="$optim90"
970 \cp $IOIPSLDIR/*.mod $libo
971else if $SUN then
972 set optim90=" $optim90 -M$libo -M$MODIPSLDIR "
973 set optimtru90=" $optimtru90 -M$libo -M$MODIPSLDIR "
974 set optim="$optim90"
975 \cp $IOIPSLDIR/*.mod $libo
976else if $NEC then
977 set optim90=" $optim90 -I$libo "
978else if $XNEC then
979 set optim90=" $optim90 -I$libo "
980 set optimtru90=" $optimtru90 -I$libo "
981else if $X6NEC then
982 set optim90=" $optim90 -I$libo "
983 set optimtru90=" $optimtru90 -I$libo "
[768]984else if $X8BRODIE then
985 set optim90=" $optim90 -I$libo "
986 set optimtru90=" $optimtru90 -I$libo "
[524]987else if $LINUX then
[676]988 if ( $FC_LINUX == "pgf90" ) then
989   set optimtru90=" $optimtru90 -module $libo "
990   set optim90=" $optim90 -module $libo "
991 else if ( $FC_LINUX == 'g95' ) then
992   set optimtru90=" $optimtru90 -fmod=$libo  "
993   set optim90=" $optim90 -fmod=$libo  "
994 endif
[524]995 set optim="$optim90"
996 set mod_loc_dir=$libo
[768]997# \cp /d3/fairhead/sechiba/ioipsl/*.mod $libo
998# \cp $IOIPSLDIR/*.mod $libo
[524]999endif
1000
1001set link="$f90 $optim90"
1002
1003set ar=ar
1004
1005if $XNEC then
1006  set link="sxld $opt_link"
1007  set link="$f90 "
1008#  set ar=sxar
1009else if $X6NEC then
1010  set link="sxld $opt_link"
[768]1011  set link="$f90 -Wl,-hlib_cyclic "
1012else if $X8BRODIE then
1013  set link="sxld $opt_link"
1014  set link="$f90 -Wl,-hlib_cyclic "
[524]1015endif
1016
1017
1018cd $localdir
1019
1020echo $make -f $LMDGCM/makefile \
1021OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
1022OPTIM90="$optim90" \
1023OPTIMTRU90="$optimtru90" \
1024OPTIM="$optim$optimbis" \
1025INCLUDE="$include" \
1026$filtre \
1027LIBO=$libo \
1028$dyn \
1029$phys \
1030DIM=$dimc \
[768]1031FLAG_PARA="$FLAG_PARA"\
[524]1032L_ADJNT="$adjnt" \
[669]1033L_CHIMIE="$libchimie" \
[524]1034LOCAL_DIR="$localdir"  \
1035F77="$f77" \
1036F90="$f90" \
1037OPLINK="$oplink" \
1038LINK="$link" \
1039GCM="$LMDGCM" \
1040MOD_LOC_DIR=$mod_loc_dir \
1041MOD_SUFFIX=$mod_suffix \
1042AR=$ar \
1043PROG=$code
1044
1045$make -f $LMDGCM/makefile \
1046OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
1047OPTIM90="$optim90" \
1048OPTIMTRU90="$optimtru90" \
1049OPTIM="$optim$optimbis" \
1050INCLUDE="$include" \
1051$filtre \
1052LIBO=$libo \
1053$dyn \
1054$phys \
1055DIM=$dimc \
[768]1056FLAG_PARA="$FLAG_PARA"\
[524]1057L_ADJNT="$adjnt" \
[669]1058L_CHIMIE="$libchimie" \
[524]1059LOCAL_DIR="$localdir"  \
1060F77="$f77" \
1061F90="$f90" \
1062OPLINK="$oplink" \
1063LINK="$link" \
1064GCM="$LMDGCM" \
1065MOD_LOC_DIR=$mod_loc_dir \
1066MOD_SUFFIX=$mod_suffix \
1067AR=$ar \
1068PROG=$code
1069
1070\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.