source: LMDZ4/branches/LMDZ4_V2_patch/makegcm @ 1322

Last change on this file since 1322 was 757, checked in by lsce, 17 years ago

mise a jour de makegcm et create_make_gcm pour prendre en compte la chimie lors des compilations couplees avec le modele inca - ACo

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