source: LMDZ4/branches/LMDZ4-dev/makelmdz_fcm @ 1157

Last change on this file since 1157 was 1154, checked in by lguez, 16 years ago

-- Added "NetCDF95" interface in "bibio".
-- NetCDF95 uses the module "typesizes", which is part of NetCDF, so we
exclude dependency on "typesizes" in "bld.cfg".
-- Added "assert_eq" and "assert" procedures, which are in the public
part of Numerical Recipes.
-- Added some interpolation and regridding utilities in "bibio".
-- Added the ability to read an ozone climatology from a NetCDF file.
-- Commented out unused variables and code in "etat0_netcdf".
-- Updated calls to NetCDF in "etat0_netcdf": from Fortran 77
interface to Fortran 90 interface.
-- Removed useless "deallocate" at the end of "etat0_netcdf".
-- Corrected some declarations not conforming to Fortran standard, such
as "integer*4", or obsolescent such as "character*4".
-- Replaced some calls to not-standard function "float" by calls to
"real".
-- On Brodie at IDRIS, the NetCDF library compiled with OpenMP should
be used. Changed path in "arch-SX8_BRODIE.path".
-- Added warning for incompatibility of debugging options and OpenMP
parallelization in "makelmdz_fcm".

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 10.9 KB
Line 
1#!/bin/csh
2#
3# $Header$
4#
5# FH : on ne crée plus le fichier arch.mk qui est supposé exister par
6# FH : ailleurs.
7# FH : ulterieurement, ce fichier sera pré-existant pour une série
8# FH : de configurations en versions optimisées et debug qui seront
9# FH : liés (ln -s) avec arch.mk en fonction de l'architecture.
10# FH : Pour le moment, cette version est en test et on peut créer les
11# FH : arch.mk en lançant une première fois makegcm.
12#
13set verbose echo
14########################################################################
15# options par defaut pour la commande make
16########################################################################
17
18set dim="96x72x19"
19set physique=lmd
20set filtre=filtrez
21set grille=reg
22set couple=false
23set veget=false
24set chimie=false
25set parallel=none
26set compil_mod=prod
27set io=ioipsl
28set LIBPREFIX=""
29set fcm_path=none
30
31set LMDGCM=`/bin/pwd`
32set LIBOGCM=$LMDGCM/libo
33set LIBFGCM=$LMDGCM/libf
34
35########################################################################
36#  Quelques initialisations de variables du shell.
37########################################################################
38
39set CPP_KEY="" 
40set INCLUDE=""
41set LIB=""
42set adjnt=""
43set COMPIL_FFLAGS="%PROD_FFLAGS"
44set PARA_FFLAGS=""
45set PARA_LD=""
46
47########################################################################
48# lecture des options de mymake
49########################################################################
50
51top:
52if ($#argv > 0) then
53    switch ($1:q)
54
55    case -h:
56cat <<fin
57manuel complet sur http://...
58Usage :
59makegcm [options] -m arch exec
60[-h]                       : manuel abrégé
61[-d [[IMx]JMx]LM]          : IM, JM, LM sont les dims en x, y, z (def: $dim)
62[-p PHYS]                  : compilation avec la physique libf/phyPHYS, (def: lmd)
63[-prod / -dev / -debug]    : compilation en mode production (default) / developpement / debug .
64[-c false/MPI1/MPI2]       : couplé océan : MPI1/MPI2/false (def: false)
65[-v false/true]            : avec ou sans végétation (def: false)
66[-chimie INCA/false]       : avec ou sans model de chimie INCA (def: false)
67[-parallel none/mpi/omp/mpi_omp] : parallelisation (default: none) : mpi, openmp ou mixte mpi_openmp
68[-g GRI]                   : conf. grille dans dyn3d/GRI_xy.h  (def: reg inclue un zoom)
69[-io IO]                   : choix d'une librairie I/O, experts (def: ioipsl)
70[-include INCLUDES]        : variables supplementaires pour include
71[-cpp CPP_KEY]             : cle cpp supplementaires
72[-adjnt]                   : adjoint, a remettre en route ...
73[-filtre NOMFILTRE]        : prend le filtre dans libf/NOMFILTRE (def: filtrez)
74[-link LINKS]              : liens optionels avec d'autres librairies
75[-fcm_path path]           : chemin pour fcm (def: le chemin est suppose deja exister dans le PATH)
76 -arch nom_arch            : nom de l'architecture cible
77 exec                      : exécutable généré
78fin
79        exit
80
81    case -d:
82        set dim=$2 ; shift ; shift ; goto top
83                       
84    case -O:
85        echo "option obsolete dans cette version intermediaire de makegcm"
86        exit
87
88     case -p
89        set physique="$2" ;  shift ; shift ; goto top
90
91     case -g
92        set grille="$2" ; shift ; shift ; goto top
93
94     case -c
95        set couple="$2" ; shift ; shift ; goto top
96
97     case -prod
98        set compil_mod="prod" ; shift ; goto top
99
100     case -dev
101       set compil_mod="dev" ; shift ; goto top
102
103     case -debug
104       set compil_mod="debug" ; shift ; goto top
105
106     case -io
107        set io="$2" ; shift ; shift ; goto top
108
109     case -v
110        set veget="$2" ; shift ; shift ; goto top
111
112     case -chimie
113        set chimie="$2" ; shift ; shift ; goto top
114
115     case -parallel
116        set parallel="$2" ; shift ; shift ; goto top
117 
118     case -include
119        set INCLUDE="$INCLUDE -I$2" ; shift ; shift ; goto top
120
121     case -cpp
122        set CPP_KEY="$CPP_KEY $2" ; shift ; shift ; goto top
123
124     case -adjnt
125        echo 'otpion a reactiver ';exit
126        set opt_dep="$opt_dep adjnt" ; set adjnt="-ladjnt -ldyn3d "
127        set optim="$optim -Dadj" ; shift ; goto top
128
129
130     case -filtre
131        set filtre=$2 ; shift ; shift ; goto top
132
133     case -link
134        set LIB="$LIB $2" ; shift ; shift ; goto top
135
136     case -fcm_path
137       set fcm_path=$2 ; shift ; shift ; goto top
138
139     case -arch
140       set arch=$2 ; shift ; shift ; goto top
141
142     default
143        set code="$1" ; shift ; goto top
144
145   endsw
146endif
147
148###############################################################
149# mettre le chemin du fcm dans le path
150###############################################################
151if  ( "$fcm_path" != 'none' ) then
152    setenv PATH ${fcm_path}:${PATH}
153endif
154
155echo "Chemin du fcm utlise :" 
156which fcm
157
158###############################################################
159# lecture des chemins propres à l'architecture de la machine #
160###############################################################
161
162rm -f ./arch.path
163ln -s ./arch/arch-${arch}.path ./arch.path
164source arch.path
165
166########################################################################
167# Definition des clefs CPP, des chemins des includes et modules
168#  et des libraries
169########################################################################
170
171if ( "$compil_mod" == 'prod' ) then
172  set COMPIL_FFLAGS="%PROD_FFLAGS"
173else if ( "$compil_mod" == 'dev' ) then
174  set COMPIL_FFLAGS="%DEV_FFLAGS"
175else if ( "$compil_mod" == 'debug' ) then
176  set COMPIL_FFLAGS="%DEBUG_FFLAGS"
177endif
178
179if ( "$physique" == 'nophys' ) then
180   
181else
182   #Default planet type is Earth
183   set CPP_KEY="$CPP_KEY CPP_EARTH"
184endif
185
186if ( "$chimie" == 'INCA' ) then
187   set CPP_KEY="$CPP_KEY INCA"
188   set INCLUDE="$INCLUDE -I${INCA_INCDIR}"
189   set LIB="$LIB -L${INCA_LIBDIR} -lchimie"
190endif
191
192if ( "$couple" != 'false' ) then
193   set CPP_KEY="$CPP_KEY CPP_COUPLE"
194   set INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
195   set LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
196endif
197
198if ( "$parallel" == 'mpi' ) then
199   set CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
200   set PARA_FFLAGS="%MPI_FFLAGS"
201   set PARA_LD="%MPI_LD"
202else if ("$parallel" == 'omp' ) then
203   set CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
204   set PARA_FFLAGS="%OMP_FFLAGS"
205   set PARA_LD="%OMP_LD"
206else if ("$parallel" == 'mpi_omp' ) then
207   set CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
208   set PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
209   set PARA_LD="%MPI_LD %OMP_LD"
210endif
211
212if ( ( "$parallel" == 'omp' || "$parallel" == 'mpi_omp' ) \
213   && ( "$compil_mod" == 'debug' ) ) then
214    echo 'Usually, parallelization with OpenMP requires some optimization.'
215    echo 'We suggest switching to "-dev".'
216    exit 1
217    ##set COMPIL_FFLAGS="%DEV_FFLAGS"
218endif
219
220if ( "$veget" == 'true' ) then
221   set CPP_KEY="$CPP_KEY CPP_VEGET"
222   set INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
223   set LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
224endif
225
226if ( $io == ioipsl ) then
227   set CPP_KEY="$CPP_KEY CPP_IOIPSL"
228   set INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
229   set LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
230endif
231
232set INCLUDE="$INCLUDE -I${NETCDF_INCDIR}"
233set LIB="$LIB -L${NETCDF_LIBDIR} -lnetcdf"
234
235########################################################################
236# calcul du nombre de dimensions
237########################################################################
238
239
240set dim_full=$dim
241set dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
242set dimc=`echo $dim | wc -w`
243
244echo calcul de la dimension
245echo dim $dim
246echo dimc $dimc
247
248
249########################################################################
250# Gestion des dimensions du modele.
251# on cree ou remplace le fichier des dimensions
252########################################################################
253
254cd $LIBFGCM/grid/dimension
255./makdim $dim
256cat $LIBFGCM/grid/dimensions.h
257cd $LMDGCM
258
259
260########################################################################
261# Differentes dynamiques (3d, 2d, 1d)
262########################################################################
263
264set dimension=`echo $dim | wc -w`
265echo dimension $dimension
266
267if ( $dimension != 3 ) then
268  echo "Probleme dans les dimensions de la dynamique !!"
269  echo "Non reactive pour l'instant !!!"
270endif
271
272if ( $dimension == 3 ) then
273  cd $LIBFGCM/grid
274  \rm fxyprim.h
275  cp -p fxy_${grille}.h fxyprim.h
276endif
277
278######################################################################
279#   Traitement special pour le nouveau rayonnement de Laurent Li.
280#   ---> YM desactive pour le traitemement en parallele
281######################################################################
282
283#if ( -f $libf/phy$physique/raddim.h ) then
284# if ( -f $libf/phy$physique/raddim.$dimh.h ) then
285#  \rm -f $libf/phy$physique/raddim.h
286#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
287#  echo $libf/phy$physique/raddim.$dimh.h
288#  cat $libf/phy$physique/raddim.h
289# else
290#  echo On peut diminuer la taille de l executable en creant
291#  echo le fichier $libf/phy$physique/raddim.$dimh.h
292#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
293# endif
294#endif
295
296######################################################################
297# Gestion du filtre qui n'existe qu'en 3d.
298######################################################################
299
300if ( `expr $dimc \> 2` == 1 ) then
301   set filtre="FILTRE=$filtre"
302else
303   set filtre="FILTRE= L_FILTRE= "
304endif
305echo MACRO FILTRE $filtre
306
307echo $dimc
308
309
310
311######################################################################
312# Creation du suffixe de la configuration
313######################################################################
314
315
316set SUFF_NAME=_${dim_full}
317set SUFF_NAME=${SUFF_NAME}_phy${physique}
318
319if ( "$parallel" != 'none' ) then
320  set SUFF_NAME=${SUFF_NAME}_para
321  set DYN=dyn${dimc}dpar
322else
323  set SUFF_NAME=${SUFF_NAME}_seq
324  set DYN=dyn${dimc}d
325endif
326
327if ( $veget == "true" ) then
328  set SUFF_NAME=${SUFF_NAME}_orch
329endif
330
331if ( $couple != "false" ) then
332  set SUFF_NAME=${SUFF_NAME}_couple
333endif
334
335if ( $chimie == 'INCA' ) then
336  set SUFF_NAME=${SUFF_NAME}_inca
337endif
338
339cd $LMDGCM
340set config_fcm="config.fcm"
341rm -f $config_fcm
342touch $config_fcm
343rm -f bin/${code}${SUFF_NAME}.e
344rm -f arch.fcm
345
346echo "%ARCH          $arch"          >> $config_fcm
347echo "%INCDIR        $INCLUDE"       >> $config_fcm 
348echo "%LIB           $LIB"           >> $config_fcm
349echo "%ROOT_PATH     $PWD"           >> $config_fcm
350echo "%LIBF          $LIBFGCM"       >> $config_fcm
351echo "%LIBO          $LIBOGCM"       >> $config_fcm
352echo "%DYN           $DYN"           >> $config_fcm
353echo "%PHYS          phy${physique}" >> $config_fcm
354echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
355echo "%EXEC          $code"          >> $config_fcm
356echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
357echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
358echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
359echo "%PARA_LD       $PARA_LD"       >> $config_fcm
360
361
362
363ln -s arch/arch-${arch}.fcm arch.fcm
364rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
365./build_gcm
366
367rm -f tmp_src
368rm -f config
369ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
370ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
371#\rm -f $libf/grid/dimensions.h
Note: See TracBrowser for help on using the repository browser.