source: LMDZ4/tags/LMDZ4_V1/makegcm @ 3872

Last change on this file since 3872 was 627, checked in by (none), 19 years ago

This commit was manufactured by cvs2svn to create tag 'LMDZ4_V1'.

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