- permit SYSTEMMPI user adjustments via etc/config.{csh,sh}/mpi-system This can be a convenient place for setting up SYSTEMMPI for OpenFOAM without adjusting bashrc, prefs.sh ... - add a USERMPI type. This represents any generic mpi implementation. The user is responsible for supplying an appropriate wmake/rules/General/mplibUSERMPI file and managing all settings. This type of setup can be useful in combination with specific build systems (SPACK, EASYBUILD, etc) or module systems for which the MPI variant is part of the installed configuration.
290 lines
8.5 KiB
Bash
290 lines
8.5 KiB
Bash
#----------------------------------*-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.
|
|
#------------------------------------------------------------------------------
|
|
# 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
|
|
# 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
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
unset MPI_ARCH_PATH MPI_HOME FOAM_MPI_LIBBIN
|
|
|
|
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/')
|
|
|
|
export MPI_ARCH_PATH="${libDir%/*}"
|
|
_foamAddLib $libDir
|
|
unset libDir
|
|
;;
|
|
|
|
OPENMPI)
|
|
export FOAM_MPI=openmpi-2.0.2
|
|
_foamEtc config.sh/openmpi # <- Adjustments (optional)
|
|
|
|
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 type _foamAddLib > /dev/null 2>&1
|
|
then
|
|
_foamAddPath $MPI_ARCH_PATH/bin
|
|
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
|
|
_foamAddMan $MPI_ARCH_PATH/share/man
|
|
fi
|
|
;;
|
|
|
|
USERMPI)
|
|
# Use an arbitrary, user-specified mpi implementation
|
|
export FOAM_MPI=mpi-user
|
|
_foamEtc config.sh/mpi-user # <- Adjustments
|
|
;;
|
|
|
|
SYSTEMMPI)
|
|
export FOAM_MPI=mpi-system
|
|
_foamEtc config.sh/mpi-system # <- Adjustments (optional)
|
|
|
|
if [ -z "$MPI_ROOT" ]
|
|
then
|
|
echo 1>&2
|
|
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
|
|
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
|
|
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
|
|
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
|
|
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
|
|
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
|
|
export MPI_HOME=$MPI_ARCH_PATH
|
|
|
|
# Could be sourced from ThirdParty with incomplete environment
|
|
if type _foamAddLib > /dev/null 2>&1
|
|
then
|
|
_foamAddPath $MPI_ARCH_PATH/bin
|
|
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
|
|
_foamAddMan $MPI_ARCH_PATH/share/man
|
|
fi
|
|
;;
|
|
|
|
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
|
|
|
|
_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
|
|
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
|
|
;;
|
|
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
|
|
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
|
|
|
|
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
|
|
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
|
|
then
|
|
_foamAddLib $FOAM_LIBBIN/$FOAM_MPI:$FOAM_EXT_LIBBIN/$FOAM_MPI
|
|
fi
|
|
|
|
|
|
# Set the minimum MPI buffer size (used by all platforms except SGI MPI)
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
: ${minBufferSize:=20000000}
|
|
|
|
if [ "${MPI_BUFFER_SIZE:=$minBufferSize}" -lt $minBufferSize ]
|
|
then
|
|
MPI_BUFFER_SIZE=$minBufferSize
|
|
fi
|
|
export MPI_BUFFER_SIZE
|
|
|
|
|
|
# Cleanup environment
|
|
# ~~~~~~~~~~~~~~~~~~~
|
|
unset minBufferSize
|
|
|
|
#------------------------------------------------------------------------------
|