source: trunk/LMDZ.COMMON/makelmdz_fcm @ 847

Last change on this file since 847 was 847, checked in by aslmd, 12 years ago

LMDZ.COMMON. Corrected bugs with using variable cp in parallel. Corrected bugs related to problems when no tracers are used. Updated makelmdz_fcm with the latest version and added a few lines necessary for generic physics. Added a build_gcm script in csh. Updated AMD64_CICLAD compilation settings. Uploaded arch files to make the model work with ifort on ciclad.

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