source: LMDZ4/trunk/makegcm @ 652

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

Correction du bug sur l'ozone (unite, calcul). On peut retrouver le
bug, qui est présent dans les simulations IPCC 2005, en positionnant
le flag bug_ozone à true dans physiq.def.
MPL/LF

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