source: LMDZ4/branches/IPSL-CM4_IPCC_branch/makegcm @ 628

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

Modif pour compatibilité avec OASIS3 AC
LF

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