source: LMDZ4/branches/V3_test/makegcm @ 750

Last change on this file since 750 was 750, checked in by lsce, 18 years ago

ACo + JG : prise en compte des bons include (dyn3dpar) en mode parallele

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