source: LMDZ4/trunk/makegcm @ 669

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

Modifications pour simplifier la compilation de la chimie
LF

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