source: LMDZ4/trunk/makegcm @ 664

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

La cle CPP_COUPLE n'etait pas definie PC/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.7 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="-O0 "
221   set optim90="-O0 "
222#   set optimtru90=" -fast -c -Mfree -module $MODIPSLDIR "
223   set optimtru90="-O0 -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 ( "$couple" == 'true' ) then
495   set optim="$optim -DCPP_COUPLE"
496   set optim90="$optim90 -DCPP_COUPLE"
497   set optimtru90="$optimtru90 -DCPP_COUPLE"
498endif
499
500if ( "$psmile" == 'true' ) then
501   set optim="$optim -DCPP_PSMILE"
502   set optim90="$optim90 -DCPP_PSMILE"
503   set optimtru90="$optimtru90 -DCPP_PSMILE"
504endif
505
506if ( "$parallel" == 'true' ) then
507   set optim="$optim -DCPP_PARALLEL"
508   set optim90="$optim90 -DCPP_PARALLEL"
509   set optimtru90="$optimtru90 -DCPP_PARALLEL"
510endif
511
512########################################################################
513# cas special sans physique
514########################################################################
515if ( "$physique" == 'nophys' ) then
516   set phys="L_PHY= LIBPHY="
517endif
518
519########################################################################
520# choix du nombre de traceur par defaut si il n'a pas ete choisi,
521# suivant la physique
522########################################################################
523
524if ( $ntrac == 0  ) then
525    if ( "$physique" == 'nophys' ) then
526        set ntrac=1
527    else if ( "$physique" == 'lmd' ) then
528        set ntrac=2
529    else if ( "$physique" == 'lmd_test_li' ) then
530        set ntrac=2
531    else if ( "$physique" == 'ec' ) then
532        set ntrac=1
533    else
534        set ntrac = 1
535    endif
536endif
537
538########################################################################
539#subtilites sur le nom de la librairie
540########################################################################
541
542\rm -f tmp ; touch tmp
543\rm -f tmp90 ; touch tmp90
544foreach i ( $optim )
545   echo $i | sed -e 's/\"//g' -e "s/\'//g" -e 's/-//g'  >> tmp
546end
547set suf=
548foreach i ( `sort tmp | uniq ` )
549   set suf=$suf$i
550end
551if ( ! $IBM ) then
552   set nomlib="$nomlib$suf"
553endif
554if ( $DEC ) then
555   set nomlib=DEC
556endif
557if ( $IBM ) then
558   set dim=`echo $dim | sed -en 's/[^0-9]/ /g'`
559   set dim_=`echo $dim | sed -en 's/[^0-9]/_/g'`
560else if ( $SUN ) then
561   set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
562   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
563else
564   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
565   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
566endif
567set nomlib=${nomlib}${physique}_${dim_}_t${ntrac}_$grille
568## M-A-F nomlib trop long sur CRAY pour ar
569if ( $CRAY ) then
570    set nomlib=F90_${dim_}_t${ntrac}
571endif
572if ( $NEC || $XNEC || $X6NEC) then
573    set nomlib=F90_${dim_}_t${ntrac}
574endif
575echo calcul de la dimension
576set dimc=`echo $dim | wc -w`
577
578if ( "$dimc" == "2" ) then
579set include="$include "'-I$(LIBF)/dyn2d '
580set dimh=$dim
581else
582set include="$include "'-I$(LIBF)/dyn3d '
583set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
584endif
585echo $dimc
586
587########################################################################
588# path pour les #include
589########################################################################
590
591if ( $XNEC ) then
592  set include="$include -I$NCDFINC -I$IOIPSLDIR"
593else
594  set include="$include -I$NCDFINC -I$IOIPSLDIR"
595endif
596echo $include
597
598########################################################################
599# Gestion des dimensions du modele.
600# on cree ou remplace le fichier des dimensions/nombre de traceur
601########################################################################
602
603cd $libf/grid
604if ( -f dimensions.h ) then
605echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
606echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
607echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
608echo  vous pouvez continuer en repondant oui.
609echo "Voulez-vous vraiment continuer?"
610if ( $< == "oui" ) then
611\rm -f $libf/grid/dimensions.h
612else
613exit
614endif
615endif
616
617cd dimension
618./makdim $ntrac $dim
619cat $libf/grid/dimensions.h
620
621cd $LMDGCM
622set libo=$libo/$nomlib
623if ( ! -d $libo )  then
624   mkdir $libo
625   cd $model
626endif
627
628########################################################################
629# Differentes dynamiques (3d, 2d, 1d)
630########################################################################
631
632set dimension=`echo $dim | wc -w`
633echo dimension $dimension
634if ( $dimension == 1 ) then
635echo pas de dynamique
636set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique "
637endif
638endif
639cd $model
640if ( $dimension == 3 ) then
641cd libf/grid
642\rm fxyprim.h
643cp -p fxy_${grille}.h fxyprim.h
644endif
645
646######################################################################
647#   Traitement special pour le nouveau rayonnement de Laurent Li.
648######################################################################
649
650if ( -f $libf/phy$physique/raddim.h ) then
651 if ( -f $libf/phy$physique/raddim.$dimh.h ) then
652  \rm -f $libf/phy$physique/raddim.h
653  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
654  echo $libf/phy$physique/raddim.$dimh.h
655  cat $libf/phy$physique/raddim.$dimh.h
656  cat $libf/phy$physique/raddim.h
657 else
658  echo On peut diminuer la taille de l executable en creant
659  echo le fichier $libf/phy$physique/raddim.$dimh.h
660  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
661 endif
662endif
663
664######################################################################
665# Gestion du filtre qui n'existe qu'en 3d.
666######################################################################
667
668if ( `expr $dimc \> 2` == 1 ) then
669   set filtre="FILTRE=$filtre"
670else
671   set filtre="FILTRE= L_FILTRE= "
672endif
673echo MACRO FILTRE $filtre
674
675echo $dimc
676
677########################################################################
678#  utilisation des vraies routines de couplage si on est en couple
679########################################################################
680if ( $couple == 'true' ) then
681  banner couple
682  pwd
683  if ( "$psmile" == 'true' ) then
684     if ( -f $libf/phy$physique/oasis.F ) then 
685        \rm $libf/phy$physique/oasis.F
686     endif
687     if ( ! -f $libf/phy$physique/oasis.F90 ) then
688       \cp $libf/phy$physique/oasis.psmile $libf/phy$physique/oasis.F90
689     endif
690     if ( `diff $libf/phy$physique/oasis.F90 $libf/phy$physique/oasis.psmile | wc -w` ) then
691       \cp $libf/phy$physique/oasis.psmile $libf/phy$physique/oasis.F90
692     endif
693  else
694     if ( -f $libf/phy$physique/oasis.F90 ) then
695       \rm $libf/phy$physique/oasis.F90
696     endif
697     if (! -f $libf/phy$physique/oasis.F ) then
698       \cp $libf/phy$physique/oasis.true $libf/phy$physique/oasis.F
699     else
700       if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true | wc -w` ) then
701#         \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy
702         \cp $libf/phy$physique/oasis.true $libf/phy$physique/oasis.F
703       endif
704     endif
705  endif
706else
707  if ( -f $libf/phy$physique/oasis.F90 ) then
708    \rm $libf/phy$physique/oasis.F90
709  endif
710  if (! -f $libf/phy$physique/oasis.F ) then
711    \cp $libf/phy$physique/oasis.dummy $libf/phy$physique/oasis.F
712  else
713    if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy | wc -w` ) then
714      \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true
715      \cp $libf/phy$physique/oasis.dummy $libf/phy$physique/oasis.F
716    endif
717  endif
718endif
719########################################################################
720#  Avant de lancer le make, on recree le makefile si necessaire
721########################################################################
722########################################################################
723# c'est a dire dans 3 cas:
724# 1. si la liste des fichiers .F et .h a ete modifiee depuis la
725#    derniere creation du makefile
726# 2. si le fichier contenant cette liste "liste_des_sources"
727#    n'existe pas.
728# 3. Si le makefile n'existe pas.
729########################################################################
730##########################################
731# On adapte d'abord certains include à F90
732##########################################
733sed -e 's/^c/\!/' $libf/grid/dimensions.h >! $libf/grid/dimensions90.tmp
734if ( ! -f $libf/grid/dimensions90.h || `diff $libf/grid/dimensions90.tmp $libf/grid/dimensions90.h | wc -w` ) then
735      \mv $libf/grid/dimensions90.tmp $libf/grid/dimensions90.h
736endif
737awk '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
738# 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
739if ( ! -f $libf/dyn3d/paramet90.h || `diff $libf/dyn3d/paramet90.tmp $libf/dyn3d/paramet90.h | wc -w` ) then
740      \mv $libf/dyn3d/paramet90.tmp $libf/dyn3d/paramet90.h
741endif
742awk '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
743#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
744if ( ! -f $libf/dyn3d/control.inc  || `diff $libf/dyn3d/control.tmp $libf/dyn3d/control.inc | wc -w` ) then
745      \mv $libf/dyn3d/control.tmp $libf/dyn3d/control.inc
746endif
747awk '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
748if ( ! -f $libf/phylmd/YOMCST.inc  || `diff $libf/phylmd/YOMCST.tmp $libf/phylmd/YOMCST.inc | wc -w` ) then
749      \mv $libf/phylmd/YOMCST.tmp $libf/phylmd/YOMCST.inc
750endif
751awk '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
752if ( ! -f $libf/phylmd/clesphys.inc  || `diff $libf/phylmd/clesphys.tmp $libf/phylmd/clesphys.inc | wc -w` ) then
753      \mv $libf/phylmd/clesphys.tmp $libf/phylmd/clesphys.inc
754endif
755#sed -e 's/^c/\!/' $libf/dyn3dpar/paramet.h >! $libf/dyn3dpar/paramet90.h
756##########################################
757cd $model
758find libf -name '*.[Fh]' -print >! tmp77
759find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90
760find libf -name '*.[Fh]90' -print >> tmp90
761
762if (    `diff tmp77 liste_des_sources_f77 | wc -w` \
763     || `diff tmp90 liste_des_sources_f90 | wc -w` \
764     || ! -f makefile \
765     || ! -f liste_des_sources_f90 \
766     || ! -f liste_des_sources_f77 ) then
767        echo les fichiers suivants ont ete crees ou detruits
768        echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90
769        diff liste_des_sources_f77 tmp77
770        diff liste_des_sources_f90 tmp90
771        \cp tmp77 liste_des_sources_f77
772        \cp tmp90 liste_des_sources_f90
773        echo On recree le makefile
774        ./create_make_gcm >! tmp
775        \mv tmp makefile
776        echo Nouveau makefile cree.
777endif
778
779########################################################################
780#  Execution de la comande make
781########################################################################
782
783echo PHYSIQUE $phys
784echo dynamique $dyn $dimension
785echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code
786echo PATH pour les fichiers INCLUDE $include
787echo OPLINK="$oplink"
788
789#################
790if $HP then
791#################
792   set f77='fort77 +OP'
793   set f90='jensaisrien'
794   set opt_link="$opt_link -lm"
795#################
796else  if $VPP then
797#################
798   set f77=frt
799   set f90=$f77
800   if ($couple == true) then
801     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"
802     set oplink="-Wl,-t,-P,-dy "
803   else
804     set opt_link="-Wg,-c -L$MODIPSLDIR -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
805     set oplink="-Wl,-t,-dy "
806   endif
807   if ($veget == true) then
808     set opt_link="$opt_link $link_veget -lioipsl /usr/local/lib/lib64/libnetcdf_cc_31.a"
809   endif
810#################
811else if $CRAY then
812#################
813   set f77=f90
814   set f90=f90
815#################
816else if $LINUX then
817#################
818   set f77=pgf90
819   set f90=pgf90
820   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/"
821#################
822else if $SUN then
823#################
824   set f77=f90
825   set f90=f90
826   set opt_link="-lf77compat -L$MODIPSLDIR $link_veget -lioipsl -L$NCDFLIB -lnetcdf "
827#################
828else if $NEC then
829#################
830   set f77=f90 -ftrace
831   set f90=f90 -ftrace
832   set opt_link="-L$MODIPSLDIR"
833   if ($veget == true) then
834     set opt_link="$opt_link $link_veget"
835   endif
836   if ($couple == true) then
837     set opt_link="$opt_link -lioipsl -loasis2.4_mpi2 -float0 -ew -P static $NCDFLIB "
838   else
839     set opt_link="$opt_link -L$MODIPSLDIR -lioipsl -float0 -ew -P static $NCDFLIB "
840   endif
841   set mod_loc_dir="./"
842#################
843else if $XNEC then
844#################
845   set f77="sxmpif90 -ftrace"
846   set f90="sxmpif90 -ftrace"
847   if $MODIPSL then
848     set opt_link="-L$MODIPSLDIR"
849     if ($veget == true) then
850       set opt_link="$opt_link $link_veget"
851     endif
852     if ($couple == true) then
853       if ($psmile == true) then
854       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
855       else
856       set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
857       endif
858     else
859       set opt_link="$opt_link -lsxioipsl -float0 $optdbl -P static $NCDFLIB "
860     endif
861   else
862     if ($couple == true) then
863       set opt_link="-L$MODIPSLDIR"
864       set opt_link="$opt_link $link_veget -lsxioipsl -loasis2.4_mpi2 -float0 $optdbl -P static $NCDFLIB "
865     else
866       set opt_link=" -C hopt -float0 $optdbl -P static -L$MODIPSLDIR $link_veget -lsxioipsl $NCDFLIB "
867     endif
868   endif
869   set mod_loc_dir="./"
870##################
871else if $X6NEC then
872##################
873   set f77=sxmpif90
874   set f90=sxmpif90
875   if $MODIPSL then
876     set opt_link="-L$MODIPSLDIR"
877     if ($veget == true) then
878       set opt_link="$opt_link -lsxsechiba -lsxparameters -lsxstomate"
879     endif
880     if ($couple == true) then
881        if ($psmile == true) then
882        set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
883        else
884        set opt_link="$opt_link -lsxioipsl -loasis2.4_mpi2 -float0 -size_t64 $optdbl -P static $NCDFLIB "
885        endif
886     else
887       set opt_link="$opt_link -lsxioipsl -float0 -size_t64 $optdbl -P static $NCDFLIB "
888     endif
889   else
890     set opt_link=" -float0 -size_t64 $optdbl -P static -L$MODIPSLDIR -lsxsechiba -lsxparameters -lsxstomate -lsxioipsl $NCDFLIB "
891   endif
892   set mod_loc_dir="./"
893#################
894else
895#################
896   set f77=f77
897   set f90=f90
898endif
899
900cd $model
901
902if $VPP then
903set make="gmake RANLIB=ls"
904else if $CRAY then
905set make="make RANLIB=ls"
906else if $NEC then
907set make="make RANLIB=ls"
908else if $LINUX then
909set make="make -k RANLIB=ranlib"
910else if $XNEC then
911set make="gmake RANLIB=ls"
912else if $X6NEC then
913set make="gmake RANLIB=ls"
914else
915set make="make RANLIB=ranlib"
916endif
917
918
919
920
921#
922# etat0_netcdf a besoin d'info de la physique
923# A revoir
924set include="$include"' -I$(LIBF)/phy'"$physique"
925#
926# le programme principal create_limit a besoin de l'info du module
927# startvar: on met donc libo dans les include pour Nec
928set include="$include"' -I$(LIBO)'
929
930
931#################################################################
932# Execution de la comande make... ENFIN!
933#################################################################
934
935if $VPP then
936  set optim90=" $optim90 -Am -M$libo"
937  set optimtru90="$optim90"
938 \cp $IOIPSLDIR/*.mod $libo
939else if $SUN then
940 set optim90=" $optim90 -M$libo -M$MODIPSLDIR "
941 set optimtru90=" $optimtru90 -M$libo -M$MODIPSLDIR "
942 set optim="$optim90"
943 \cp $IOIPSLDIR/*.mod $libo
944else if $NEC then
945 set optim90=" $optim90 -I$libo "
946else if $XNEC then
947 set optim90=" $optim90 -I$libo "
948 set optimtru90=" $optimtru90 -I$libo "
949else if $X6NEC then
950 set optim90=" $optim90 -I$libo "
951 set optimtru90=" $optimtru90 -I$libo "
952else if $LINUX then
953 set optimtru90=" $optimtru90 -module $libo "
954 set optim90=" $optim90 -module $libo "
955 set optim="$optim90"
956 set mod_loc_dir=$libo
957 \cp /d3/fairhead/sechiba/ioipsl/*.mod $libo
958 \cp $IOIPSLDIR/*.mod $libo
959endif
960
961set link="$f90 $optim90"
962
963set ar=ar
964
965if $XNEC then
966  set link="sxld $opt_link"
967  set link="$f90 "
968#  set ar=sxar
969else if $X6NEC then
970  set link="sxld $opt_link"
971  set link="$f90 "
972endif
973
974
975cd $localdir
976
977echo $make -f $LMDGCM/makefile \
978OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
979OPTIM90="$optim90" \
980OPTIMTRU90="$optimtru90" \
981OPTIM="$optim$optimbis" \
982INCLUDE="$include" \
983$filtre \
984LIBO=$libo \
985$dyn \
986$phys \
987DIM=$dimc \
988L_ADJNT="$adjnt" \
989LOCAL_DIR="$localdir"  \
990F77="$f77" \
991F90="$f90" \
992OPLINK="$oplink" \
993LINK="$link" \
994GCM="$LMDGCM" \
995MOD_LOC_DIR=$mod_loc_dir \
996MOD_SUFFIX=$mod_suffix \
997AR=$ar \
998PROG=$code
999
1000$make -f $LMDGCM/makefile \
1001OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
1002OPTIM90="$optim90" \
1003OPTIMTRU90="$optimtru90" \
1004OPTIM="$optim$optimbis" \
1005INCLUDE="$include" \
1006$filtre \
1007LIBO=$libo \
1008$dyn \
1009$phys \
1010DIM=$dimc \
1011L_ADJNT="$adjnt" \
1012LOCAL_DIR="$localdir"  \
1013F77="$f77" \
1014F90="$f90" \
1015OPLINK="$oplink" \
1016LINK="$link" \
1017GCM="$LMDGCM" \
1018MOD_LOC_DIR=$mod_loc_dir \
1019MOD_SUFFIX=$mod_suffix \
1020AR=$ar \
1021PROG=$code
1022
1023\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.