source: LMDZ4/trunk/makegcm @ 644

Last change on this file since 644 was 644, checked in by Laurent Fairhead, 20 years ago

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