source: LMDZ4/trunk/makegcm @ 671

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

Petites modifs pour bien integrer la chimie
LF

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