source: LMDZ4/trunk/makegcm @ 554

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

Convergence avec la version d'Olivia Coindreau incluant:

  • le offline
  • les thermiques
  • mellor & yamada dans la couche limite

LF

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