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

Last change on this file since 1250 was 1250, checked in by yann meurdesoif, 15 years ago

Optimisations SX9

YM

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