source: LMDZ4/trunk/makegcm @ 676

Last change on this file since 676 was 676, checked in by Laurent Fairhead, 19 years ago

Pour compatibilité g95
LF

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