source: LMDZ5/trunk/makelmdz_fcm @ 1690

Last change on this file since 1690 was 1680, checked in by Ehouarn Millour, 12 years ago
  • bug correction in filtreg_p.F on array boundaries (was a problem only in cases where BLAS was not used).
  • modified "makelmdz_fcm" script: added '-mem' option to trigger using "dyn3dmem" dynamics instead of (default) "dyn3dpar".

EM

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