source: trunk/makegcm-venus-gnome @ 16

Last change on this file since 16 was 4, checked in by slebonnois, 14 years ago

Premiers chantiers ouverts (Seb),
ajouts des makegcm et create_make_gcm pour Titan et Venus

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