source: LMDZ4/branches/V3_test/makegcm @ 722

Last change on this file since 722 was 722, checked in by Laurent Fairhead, 18 years ago

Modifs pour compilation Brodie
LF

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