source: LMDZ4/trunk/makegcm @ 632

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

Rajout d'une option

-parallel false|true

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