Newer
Older
Henry Weller
committed
#----------------------------------*-sh-*--------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
# \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
Henry Weller
committed
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM.
#
# OpenFOAM is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
#
# File
# etc/config.sh/mpi
#
# Description
# Setup file for communications library (MPI) for OpenFOAM
Henry Weller
committed
# Sourced from OpenFOAM-<VERSION>/etc/bashrc
#
# For USERMPI, the user is responsible for supplying an appropriate
# wmake/rules/General/mplibUSERMPI file and managing all settings
#
Henry Weller
committed
#------------------------------------------------------------------------------
unset MPI_ARCH_PATH MPI_HOME
Henry Weller
committed
case "$WM_MPLIB" in
SYSTEMOPENMPI)
# Use the system installed openmpi, get library directory via mpicc
export FOAM_MPI=openmpi-system
# Undefine OPAL_PREFIX if set to one of the paths on foamOldDirs
if [ -z "$($foamClean "$OPAL_PREFIX" "$foamOldDirs")" ]
then
unset OPAL_PREFIX
fi
# Bit of a hack: strip off 'lib' and hope this is the prefix for openmpi
# include files and libraries.
libDir=$(mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/')
Henry Weller
committed
export MPI_ARCH_PATH="${libDir%/*}"
_foamAddLib $libDir
unset libDir
;;
OPENMPI)
export FOAM_MPI=openmpi-2.1.1
_foamEtc config.sh/openmpi # <- Adjustments (optional)
Henry Weller
committed
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
# Tell OpenMPI where to find its install directory
export OPAL_PREFIX=$MPI_ARCH_PATH
if [ "$FOAM_VERBOSE" -a "$PS1" ]
then
echo "Using OPENMPI:" 1>&2
echo " OPAL_PREFIX : $OPAL_PREFIX" 1>&2
echo " FOAM_MPI : $FOAM_MPI" 1>&2
fi
# Could be sourced from ThirdParty with incomplete environment
if command -v _foamAddLib > /dev/null 2>&1 # normal sourcing
then
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
_foamAddMan $MPI_ARCH_PATH/share/man
fi
Henry Weller
committed
;;
USERMPI)
# Use an arbitrary, user-specified mpi implementation
export FOAM_MPI=mpi-user
_foamEtc config.sh/mpi-user # <- Adjustments
;;
Henry Weller
committed
SYSTEMMPI)
export FOAM_MPI=mpi-system
_foamEtc config.sh/mpi-system # <- Adjustments (optional)
Henry Weller
committed
if [ -z "$MPI_ROOT" ]
then
echo 1>&2
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
Henry Weller
committed
echo " Please set the environment variable MPI_ROOT to point to" \
" the base folder for the system MPI in use." 1>&2
echo " Example:" 1>&2
echo 1>&2
echo " export MPI_ROOT=/opt/mpi" 1>&2
echo 1>&2
else
export MPI_ARCH_PATH=$MPI_ROOT
if [ -z "$MPI_ARCH_FLAGS" ]
then
echo 1>&2
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
Henry Weller
committed
echo " MPI_ARCH_FLAGS is not set. Example:" 1>&2
echo 1>&2
echo " export MPI_ARCH_FLAGS=\"-DOMPI_SKIP_MPICXX\"" 1>&2
echo 1>&2
fi
if [ -z "$MPI_ARCH_INC" ]
then
echo 1>&2
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
Henry Weller
committed
echo " MPI_ARCH_INC is not set. Example:" 1>&2
echo 1>&2
echo " export MPI_ARCH_INC=\"-isystem \$MPI_ROOT/include\"" 1>&2
echo 1>&2
fi
if [ -z "$MPI_ARCH_LIBS" ]
then
echo 1>&2
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
Henry Weller
committed
echo " MPI_ARCH_LIBS is not set. Example:" 1>&2
echo 1>&2
echo " export MPI_ARCH_LIBS=\"-L\$MPI_ROOT/lib -lmpi\"" 1>&2
echo 1>&2
fi
fi
;;
MPICH)
export FOAM_MPI=mpich-3.2
Henry Weller
committed
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
export MPI_HOME=$MPI_ARCH_PATH
Henry Weller
committed
# Could be sourced from ThirdParty with incomplete environment
if command -v _foamAddLib > /dev/null 2>&1 # normal sourcing
then
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
_foamAddMan $MPI_ARCH_PATH/share/man
fi
Henry Weller
committed
;;
MPICH-GM)
export FOAM_MPI=mpich-gm
export MPI_ARCH_PATH=/opt/mpi
export MPICH_PATH=$MPI_ARCH_PATH
export GM_LIB_PATH=/opt/gm/lib$WM_COMPILER_LIB_ARCH
Henry Weller
committed
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
_foamAddLib $GM_LIB_PATH
;;
HPMPI)
export FOAM_MPI=hpmpi
export MPI_HOME=/opt/hpmpi
export MPI_ARCH_PATH=$MPI_HOME
_foamAddPath $MPI_ARCH_PATH/bin
case $(uname -m) in
Henry Weller
committed
i686)
_foamAddLib $MPI_ARCH_PATH/lib/linux_ia32
;;
x86_64)
_foamAddLib $MPI_ARCH_PATH/lib/linux_amd64
;;
ia64)
_foamAddLib $MPI_ARCH_PATH/lib/linux_ia64
;;
*)
echo Unknown processor type $(uname -m) 1>&2
Henry Weller
committed
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
;;
esac
;;
MPI)
export FOAM_MPI=mpi
export MPI_ARCH_PATH=/opt/mpi
;;
FJMPI)
export FOAM_MPI=fjmpi
export MPI_ARCH_PATH=/opt/FJSVmpi2
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib/sparcv9
_foamAddLib /opt/FSUNf90/lib/sparcv9
_foamAddLib /opt/FJSVpnidt/lib
;;
QSMPI)
export FOAM_MPI=qsmpi
export MPI_ARCH_PATH=/usr/lib/mpi
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib
;;
SGIMPI)
# No trailing slash
[ "${MPI_ROOT%/}" = "${MPI_ROOT}" ] || MPI_ROOT="${MPI_ROOT%/}"
export FOAM_MPI="${MPI_ROOT##*/}"
export MPI_ARCH_PATH=$MPI_ROOT
if [ ! -d "$MPI_ROOT" -o -z "$MPI_ARCH_PATH" ]
then
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
Henry Weller
committed
echo " MPI_ROOT not a valid mpt installation directory or ending" \
" in a '/'." 1>&2
echo " Please set MPI_ROOT to the mpt installation directory." 1>&2
echo " MPI_ROOT currently set to '$MPI_ROOT'" 1>&2
fi
if [ "$FOAM_VERBOSE" -a "$PS1" ]
then
echo "Using SGI MPT:" 1>&2
echo " MPI_ROOT : $MPI_ROOT" 1>&2
echo " FOAM_MPI : $FOAM_MPI" 1>&2
fi
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib
;;
INTELMPI)
MPI_ROOT="${MPI_ROOT%/}" # No trailing slash
Henry Weller
committed
export FOAM_MPI="${MPI_ROOT##*/}"
export MPI_ARCH_PATH=$MPI_ROOT
if [ ! -d "$MPI_ROOT" -o -z "$MPI_ARCH_PATH" ]
then
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
Henry Weller
committed
echo " MPI_ROOT not a valid mpt installation directory or ending" \
" in a '/'." 1>&2
echo " Please set MPI_ROOT to the mpt installation directory." 1>&2
echo " MPI_ROOT currently set to '$MPI_ROOT'" 1>&2
fi
if [ "$FOAM_VERBOSE" -a "$PS1" ]
then
echo "Using INTEL MPI:" 1>&2
echo " MPI_ROOT : $MPI_ROOT" 1>&2
echo " FOAM_MPI : $FOAM_MPI" 1>&2
fi
_foamAddPath $MPI_ARCH_PATH/bin64
_foamAddLib $MPI_ARCH_PATH/lib64
;;
*)
export FOAM_MPI=dummy
;;
esac
# Add (non-dummy) MPI implementation
# - dummy MPI already added to LD_LIBRARY_PATH and has no external libraries
if [ "$FOAM_MPI" != dummy ] && type _foamAddLib > /dev/null 2>&1
Henry Weller
committed
then
if [ -n "$FOAM_EXT_LIBBIN" ] # External libraries (allowed to be unset)
then
_foamAddLib $FOAM_EXT_LIBBIN/$FOAM_MPI
fi
_foamAddLib $FOAM_LIBBIN/$FOAM_MPI
Henry Weller
committed
fi
# Minimum MPI buffer size (used by all except SGI MPI)
Henry Weller
committed
: ${minBufferSize:=20000000}
if [ "${MPI_BUFFER_SIZE:=$minBufferSize}" -lt $minBufferSize ]
then
MPI_BUFFER_SIZE=$minBufferSize
fi
export MPI_BUFFER_SIZE
# Cleanup environment
# ~~~~~~~~~~~~~~~~~~~
unset minBufferSize
#------------------------------------------------------------------------------