source: LMDZ4/trunk/makegcm @ 1194

Last change on this file since 1194 was 1146, checked in by Laurent Fairhead, 15 years ago

Réintegration dans le tronc des modifications issues de la branche LMDZ-dev
comprises entre la révision 1074 et 1145
Validation: une simulation de 1 jour en séquentiel sur PC donne les mêmes
résultats entre la trunk et la dev
LF

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