source: LMDZ4/trunk/makegcm @ 647

Last change on this file since 647 was 647, checked in by lmdzadmin, 20 years ago

Remplacement des commandes sed créant différents fichiers include F90
par des commandes awk, les sed passant mal à l'IDRIS et au CEA
LF

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 30.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
18set psmile=false
[632]19set parallel=false
[524]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
[647]32set LMDGCM="`pwd`"
33setenv LIBOGCM $LMDGCM/libo
[524]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 "
[603]222#   set optimtru90=" -fast -c -Mfree -module $MODIPSLDIR "
223   set optimtru90=" -fast -c -Mfree "
[524]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"
[529]246   set mod_loc_dir="./"
[524]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"
[529]254   set mod_loc_dir="./"
[524]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
[632]342-parallel  false|true
343           pour selectionner le mode parallele ou non (false par defaut)
344
[524]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
[621]412        set psmile="$2" 
413        if ( "$psmile" == 'true' ) then
414          set couple='true'
415        endif
416        shift ; shift ; goto top
[632]417
418     case -parallel
419        set parallel="$2" ; shift ; shift ; goto top
[524]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
[621]494if ( "$psmile" == 'true' ) then
495   set optim="$optim -DCPP_PSMILE"
496   set optim90="$optim90 -DCPP_PSMILE"
497   set optimtru90="$optimtru90 -DCPP_PSMILE"
498endif
[524]499
[632]500if ( "$parallel" == 'true' ) then
501   set optim="$optim -DCPP_PARALLEL"
502   set optim90="$optim90 -DCPP_PARALLEL"
503   set optimtru90="$optimtru90 -DCPP_PARALLEL"
504endif
505
[524]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
[573]612./makdim $ntrac $dim
[524]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
[621]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
[524]699  endif
700else
[621]701  if ( -f $libf/phy$physique/oasis.F90 ) then
702    \rm $libf/phy$physique/oasis.F90
[524]703  endif
[621]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
[524]712endif
713########################################################################
714#  Avant de lancer le make, on recree le makefile si necessaire
715########################################################################
[632]716########################################################################
[524]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########################################################################
[632]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
[647]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
[632]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
[647]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
[644]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
[647]741#sed -e 's/^c/\!/' $libf/dyn3dpar/paramet.h >! $libf/dyn3dpar/paramet90.h
[632]742##########################################
[524]743cd $model
744find libf -name '*.[Fh]' -print >! tmp77
745find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
746find libf -name '*.[Fh]90' -print >> tmp90
747
748if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
749     || `diff tmp90 liste_des_sources_f90 | wc -w` \
750     || ! -f makefile \
751     || ! -f liste_des_sources_f90 \
752     || ! -f liste_des_sources_f77 ) then
753        echo les fichiers suivants ont ete crees ou detruits
754        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
755        diff liste_des_sources_f77 tmp77
756        diff liste_des_sources_f90 tmp90
757        \cp tmp77 liste_des_sources_f77
758        \cp tmp90 liste_des_sources_f90
759        echo On recree le makefile
760        ./create_make_gcm >! tmp
761        \mv tmp makefile
762        echo Nouveau makefile cree.
763endif
764
765########################################################################
766#  Execution de la comande make
767########################################################################
768
769echo PHYSIQUE $phys
770echo dynamique $dyn $dimension
771echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
772echo PATH pour les fichiers INCLUDE $include
773echo OPLINK="$oplink"
774
775#################
776if $HP then
777#################
778   set f77='fort77 +OP'
779   set f90='jensaisrien'
780   set opt_link="$opt_link -lm"
781#################
782else  if $VPP then
783#################
784   set f77=frt
785   set f90=$f77
786   if ($couple == true) then
787     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"
788     set oplink="-Wl,-t,-P,-dy "
789   else
790     set opt_link="-Wg,-c -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
791     set oplink="-Wl,-t,-dy "
792   endif
793   if ($veget == true) then
794     set opt_link="$opt_link $link_veget -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
795   endif
796#################
797else if $CRAY then
798#################
799   set f77=f90
800   set f90=f90
801#################
802else if $LINUX then
803#################
804   set f77=pgf90
805   set f90=pgf90
806   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/"
807#################
808else if $SUN then
809#################
810   set f77=f90
811   set f90=f90
812   set opt_link="-lf77compat -L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf "
813#################
814else if $NEC then
815#################
816   set f77=f90 -ftrace
817   set f90=f90 -ftrace
818   set opt_link="-L$MODIPSLDIR"
819   if ($veget == true) then
820     set opt_link="$opt_link $link_veget"
821   endif
822   if ($couple == true) then
823     set opt_link="$opt_link -lioipsl -loasis2.4_mpi2 -float0 -ew -P static $NCDFLIB "
824   else
825     set opt_link="$opt_link -L$MODIPSLDIR -lioipsl -float0 -ew -P static $NCDFLIB "
826   endif
827   set mod_loc_dir="./"
828#################
829else if $XNEC then
830#################
831   set f77="sxmpif90 -ftrace"
832   set f90="sxmpif90 -ftrace"
833   if $MODIPSL then
834     set opt_link="-L$MODIPSLDIR"
835     if ($veget == true) then
836       set opt_link="$opt_link $link_veget"
837     endif
838     if ($couple == true) then
[621]839       if ($psmile == true) then
840       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
841       else
[524]842       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
843       endif
844     else
845       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
846     endif
847   else
848     if ($couple == true) then
849       set opt_link="-L$MODIPSLDIR"
850       set opt_link="$opt_link $link_veget -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
851     else
852       set opt_link=" -C hopt -float0 $optdbl -P static -L$MODIPSLDIR $link_veget -lsxioipsl $NCDFLIB "
[541]853     endif
[524]854   endif
855   set mod_loc_dir="./"
856##################
857else if $X6NEC then
858##################
859   set f77=sxmpif90
860   set f90=sxmpif90
861   if $MODIPSL then
862     set opt_link="-L$MODIPSLDIR"
863     if ($veget == true) then
864       set opt_link="$opt_link -lsxsechiba -lsxparameters -lsxstomate"
865     endif
866     if ($couple == true) then
[621]867        if ($psmile == true) then
868        set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
869        else
870        set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 -size_t64 $optdbl -P static $NCDFLIB "
871        endif
[524]872     else
873       set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
874     endif
875   else
876     set opt_link=" -float0 -size_t64 $optdbl -P static -L$MODIPSLDIR -lsxsechiba -lsxparameters -lsxstomate -lsxioipsl $NCDFLIB "
877   endif
878   set mod_loc_dir="./"
879#################
880else
881#################
882   set f77=f77
883   set f90=f90
884endif
885
886cd $model
887
888if $VPP then
889set make="gmake RANLIB=ls"
890else if $CRAY then
891set make="make RANLIB=ls"
892else if $NEC then
893set make="make RANLIB=ls"
894else if $LINUX then
895set make="make -k RANLIB=ranlib"
896else if $XNEC then
897set make="gmake RANLIB=ls"
898else if $X6NEC then
899set make="gmake RANLIB=ls"
900else
901set make="make RANLIB=ranlib"
902endif
903
904
905
906
907#
908# etat0_netcdf a besoin d'info de la physique
909# A revoir
910set include="$include"' -I$(LIBF)/phy'"$physique"
911#
912# le programme principal create_limit a besoin de l'info du module
913# startvar: on met donc libo dans les include pour Nec
914set include="$include"' -I$(LIBO)'
915
916
917#################################################################
918# Execution de la comande make... ENFIN!
919#################################################################
920
921if $VPP then
922  set optim90=" $optim90 -Am -M$libo"
923  set optimtru90="$optim90"
924 \cp $IOIPSLDIR/*.mod $libo
925else if $SUN then
926 set optim90=" $optim90 -M$libo -M$MODIPSLDIR "
927 set optimtru90=" $optimtru90 -M$libo -M$MODIPSLDIR "
928 set optim="$optim90"
929 \cp $IOIPSLDIR/*.mod $libo
930else if $NEC then
931 set optim90=" $optim90 -I$libo "
932else if $XNEC then
933 set optim90=" $optim90 -I$libo "
934 set optimtru90=" $optimtru90 -I$libo "
935else if $X6NEC then
936 set optim90=" $optim90 -I$libo "
937 set optimtru90=" $optimtru90 -I$libo "
938else if $LINUX then
[603]939 set optimtru90=" $optimtru90 -module $libo "
[524]940 set optim90=" $optim90 -module $libo "
941 set optim="$optim90"
942 set mod_loc_dir=$libo
943 \cp /d3/fairhead/sechiba/ioipsl/*.mod $libo
944 \cp $IOIPSLDIR/*.mod $libo
945endif
946
947set link="$f90 $optim90"
948
949set ar=ar
950
951if $XNEC then
952  set link="sxld $opt_link"
953  set link="$f90 "
954#  set ar=sxar
955else if $X6NEC then
956  set link="sxld $opt_link"
957  set link="$f90 "
958endif
959
960
961cd $localdir
962
963echo $make -f $LMDGCM/makefile \
964OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
965OPTIM90="$optim90" \
966OPTIMTRU90="$optimtru90" \
967OPTIM="$optim$optimbis" \
968INCLUDE="$include" \
969$filtre \
970LIBO=$libo \
971$dyn \
972$phys \
973DIM=$dimc \
974L_ADJNT="$adjnt" \
975LOCAL_DIR="$localdir"  \
976F77="$f77" \
977F90="$f90" \
978OPLINK="$oplink" \
979LINK="$link" \
980GCM="$LMDGCM" \
981MOD_LOC_DIR=$mod_loc_dir \
982MOD_SUFFIX=$mod_suffix \
983AR=$ar \
984PROG=$code
985
986$make -f $LMDGCM/makefile \
987OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
988OPTIM90="$optim90" \
989OPTIMTRU90="$optimtru90" \
990OPTIM="$optim$optimbis" \
991INCLUDE="$include" \
992$filtre \
993LIBO=$libo \
994$dyn \
995$phys \
996DIM=$dimc \
997L_ADJNT="$adjnt" \
998LOCAL_DIR="$localdir"  \
999F77="$f77" \
1000F90="$f90" \
1001OPLINK="$oplink" \
1002LINK="$link" \
1003GCM="$LMDGCM" \
1004MOD_LOC_DIR=$mod_loc_dir \
1005MOD_SUFFIX=$mod_suffix \
1006AR=$ar \
1007PROG=$code
1008
1009\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.