mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
CONFIG: rationalize mpi config tuning (#1910)
- prefix FOAM_MPI and library directories with 'sys-' for system
versions for uniform identication.
WM_MPLIB | libdir (FOAM_MPI) | old naming |
SYSTEMMPI | sys-mpi | mpi |
SYSTEMOPENMPI | sys-openmpi | openmpi-system |
- prefix preferences with 'prefs.' to make them more easily
identifiable, and update bin/tools/create-mpi-config accordingly
Old name: config.{csh,sh}/openmpi
New name: config.{csh,sh}/prefs.openmpi
- additional mpi preferences now available:
* prefs.intelmpi
* prefs.mpich
...
CONFIG: added hook for EASYBUILDMPI (eb-mpi), somewhat like USERMPI
- EasyBuild uses mpicc when compiling, so no explicit wmake rules are
used
ENH: support different major versions for system openmpi
- for example, with
WM_MPLIB=SYSTEMOPENMPI2
defines FOAM_MPI=sys-openmpi2 and thus creates lib/sys-openmpi2
ENH: centralize handling of mpi as 'mpi-rules'
Before:
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
ifeq (,$(FOAM_MPI_LIBBIN))
FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
endif
After:
include $(GENERAL_RULES)/mpi-rules
- also allows variants such as SYSTEMOPENMPI2 to be handled separately
This commit is contained in:
@ -18,338 +18,404 @@
|
||||
# Description
|
||||
# Setup for MPI communications library for OpenFOAM
|
||||
#
|
||||
# User adjustments are possible in these files:
|
||||
# - config.sh/openmpi-system
|
||||
# - config.sh/openmpi
|
||||
# - config.sh/mpi-user
|
||||
# - config.sh/mpi-system
|
||||
#
|
||||
# For USERMPI, the user is responsible for supplying an appropriate
|
||||
# wmake/rules/General/mplibUSERMPI file and managing all settings
|
||||
#
|
||||
# For INTELMPI, note that the (I_MPI_CC, I_MPI_CCX) environment variables
|
||||
# define the underlying compiler to be used
|
||||
#
|
||||
# User adjustments are controlled by these types of files:
|
||||
# - config.sh/prefs.intelmpi
|
||||
# - config.sh/prefs.mpich
|
||||
# - config.sh/prefs.mpich-gm
|
||||
# - config.sh/prefs.msmpi
|
||||
# - config.sh/prefs.mvapich2
|
||||
# - config.sh/prefs.openmpi
|
||||
# - config.sh/prefs.sys-mpi
|
||||
# - config.sh/prefs.sys-openmpi
|
||||
# - config.sh/prefs.user-mpi
|
||||
#
|
||||
# Note
|
||||
# All pre-v2012 names (without the 'prefs.' prefix) are ignored.
|
||||
#
|
||||
# Environment
|
||||
# MPI_BUFFER_SIZE overrides 'mpiBufferSize' (controlDict entry).
|
||||
# Eg, export MPI_BUFFER_SIZE=20000000
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
unset MPI_ARCH_PATH MPI_HOME
|
||||
export FOAM_MPI=dummy # Fallback value
|
||||
unset _foamMpiVersion # Track mpi (major) version as required
|
||||
|
||||
# Location for ThirdParty installations
|
||||
_foamMpiPrefixDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER"
|
||||
_foamMpiWarning="openfoam (etc/config.sh/mpi) => " # Prefix for warnings
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
case "$WM_MPLIB" in
|
||||
SYSTEMOPENMPI*)
|
||||
# The system installed openmpi, locations discovery via mpicc.
|
||||
export FOAM_MPI=openmpi-system
|
||||
|
||||
# The system openmpi, discover locations via <mpicc>
|
||||
# Preserve major version for the naming
|
||||
SYSTEMOPENMPI | SYSTEMOPENMPI[1-9])
|
||||
# Preserve major version for the naming
|
||||
_foamMpiVersion="${WM_MPLIB##*MPI}"
|
||||
|
||||
export FOAM_MPI="sys-openmpi${_foamMpiVersion}"
|
||||
|
||||
# Undefine OPAL_PREFIX if set to one of the paths on foamOldDirs
|
||||
if [ -z "$($foamClean -env=OPAL_PREFIX "$foamOldDirs")" ]
|
||||
then
|
||||
unset OPAL_PREFIX
|
||||
fi
|
||||
_foamEtc -config openmpi-system # <- Adjustments (optional)
|
||||
_foamEtc -config prefs.sys-openmpi ## Optional adjustments
|
||||
|
||||
# Respect MPI_ARCH_PATH if set to valid directory (eg, user adjustments)
|
||||
# MPI_ARCH_PATH (prefs) if a valid dir, or discover via <mpicc>
|
||||
if [ -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
_foamAddLibAuto $MPI_ARCH_PATH
|
||||
_foamAddLibAuto "$MPI_ARCH_PATH"
|
||||
else
|
||||
# Slight hack: strip off 'lib' to get presumed prefix for include and libs
|
||||
# Slight hack: strip off 'lib' to get prefix directory
|
||||
libDir=$(mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/')
|
||||
|
||||
export MPI_ARCH_PATH="${libDir%/*}"
|
||||
_foamAddLib $libDir
|
||||
export MPI_ARCH_PATH="${libDir%/*}" # prefix from libdir
|
||||
_foamAddLib "$libDir"
|
||||
unset libDir
|
||||
fi
|
||||
|
||||
# TDB: extra openmpi major qualifier on name?
|
||||
## if [ "$FOAM_MPI" = "sys-openmpi" ]
|
||||
## then
|
||||
## _foamMpiVersion="${MPI_ARCH_PATH##*mpi}"
|
||||
## case "$_foamMpiVersion" in
|
||||
## ([1-9])
|
||||
## FOAM_MPI="${FOAM_MPI}${_foamMpiVersion}"
|
||||
## ;;
|
||||
## esac
|
||||
## fi
|
||||
;;
|
||||
|
||||
|
||||
OPENMPI)
|
||||
export FOAM_MPI=openmpi-4.0.3
|
||||
_foamEtc -config openmpi # <- Adjustments (optional)
|
||||
_foamEtc -config prefs.openmpi ## Optional adjustments
|
||||
|
||||
# Respect MPI_ARCH_PATH if set to valid directory (eg, user adjustments)
|
||||
# MPI_ARCH_PATH (prefs) if a valid dir, or ThirdParty location
|
||||
if [ ! -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
|
||||
export MPI_ARCH_PATH="$_foamMpiPrefixDir/$FOAM_MPI"
|
||||
fi
|
||||
|
||||
# Inform openmpi where to find its install directory
|
||||
export OPAL_PREFIX=$MPI_ARCH_PATH
|
||||
|
||||
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
|
||||
then
|
||||
echo "Using $WM_MPLIB" 1>&2
|
||||
echo " FOAM_MPI : $FOAM_MPI" 1>&2
|
||||
echo " OPAL_PREFIX : $MPI_ARCH_PATH" 1>&2
|
||||
fi
|
||||
export OPAL_PREFIX="$MPI_ARCH_PATH"
|
||||
|
||||
# Could be sourced from ThirdParty with incomplete environment
|
||||
if command -v _foamAddLibAuto >/dev/null # Normal sourcing
|
||||
then
|
||||
_foamAddPath $MPI_ARCH_PATH/bin
|
||||
_foamAddMan $MPI_ARCH_PATH/share/man
|
||||
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH
|
||||
_foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddMan "$MPI_ARCH_PATH"/share/man
|
||||
_foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
|
||||
fi
|
||||
;;
|
||||
|
||||
|
||||
# Arbitrary, user-specified mpi implementation
|
||||
# - used by spack, which populates appropriate wmake rules
|
||||
USERMPI)
|
||||
# Arbitrary, user-specified mpi implementation
|
||||
export FOAM_MPI=mpi-user
|
||||
_foamEtc -config mpi-user # <- Adjustments (optional)
|
||||
export FOAM_MPI=user-mpi
|
||||
_foamEtc -config prefs.user-mpi ## Optional adjustments
|
||||
;;
|
||||
|
||||
|
||||
# EasyBuild handles everything via <mpicc>
|
||||
EASYBUILDMPI)
|
||||
export FOAM_MPI=eb-mpi
|
||||
;;
|
||||
|
||||
|
||||
SYSTEMMPI)
|
||||
export FOAM_MPI=mpi-system
|
||||
_foamEtc -config mpi-system # <- Adjustments (optional)
|
||||
export FOAM_MPI=sys-mpi
|
||||
_foamEtc -config prefs.sys-mpi ## Optional adjustments
|
||||
|
||||
if [ -z "$MPI_ROOT" ]
|
||||
# MPI_ARCH_PATH (prefs) or MPI_ROOT (inherited), in that order
|
||||
if [ -n "$MPI_ARCH_PATH" ]
|
||||
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
|
||||
export MPI_ROOT="$MPI_ARCH_PATH"
|
||||
elif [ -n "$MPI_ROOT" ]
|
||||
then
|
||||
export MPI_ARCH_PATH="$MPI_ROOT"
|
||||
fi
|
||||
|
||||
_foamMpiWarning="${_foamMpiWarning}system MPI: "
|
||||
if [ ! -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
echo "${_foamMpiWarning}has invalid MPI_ROOT" 1>&2
|
||||
echo "Please set correctly. For example," 1>&2
|
||||
echo ' export MPI_ROOT="/opt/mpi"' 1>&2
|
||||
echo 1>&2
|
||||
else
|
||||
export MPI_ARCH_PATH=$MPI_ROOT
|
||||
_foamMpiWarning="${_foamMpiWarning}has unset "
|
||||
|
||||
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
|
||||
[ -n "$MPI_ARCH_FLAGS" ] || {
|
||||
exec 1>&2
|
||||
echo "${_foamMpiWarning}MPI_ARCH_FLAGS"
|
||||
echo "Please set correctly. For example,"
|
||||
echo ' export MPI_ARCH_FLAGS="-DOMPI_SKIP_MPICXX"'
|
||||
echo
|
||||
}
|
||||
[ -n "$MPI_ARCH_INC" ] || {
|
||||
exec 1>&2
|
||||
echo "${_foamMpiWarning}MPI_ARCH_INC"
|
||||
echo "Please set correctly. For example,"
|
||||
echo ' export MPI_ARCH_INC="-isystem $MPI_ROOT/include"'
|
||||
echo
|
||||
}
|
||||
[ -n "$MPI_ARCH_LIBS" ] || {
|
||||
exec 1>&2
|
||||
echo "${_foamMpiWarning}MPI_ARCH_LIBS"
|
||||
echo "Please set correctly. For example,"
|
||||
echo ' export MPI_ARCH_LIBS="-L$MPI_ROOT/lib -lmpi'
|
||||
echo
|
||||
}
|
||||
fi
|
||||
;;
|
||||
|
||||
|
||||
MPICH)
|
||||
export FOAM_MPI=mpich-3.3
|
||||
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
|
||||
export MPI_HOME=$MPI_ARCH_PATH
|
||||
_foamEtc -config prefs.mpich ## Optional adjustments
|
||||
|
||||
# MPI_ARCH_PATH (prefs) if a valid dir, or use ThirdParty location
|
||||
if [ ! -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
export MPI_ARCH_PATH="$_foamMpiPrefixDir/$FOAM_MPI"
|
||||
fi
|
||||
|
||||
export MPI_HOME="$MPI_ARCH_PATH"
|
||||
|
||||
# Could be sourced from ThirdParty with incomplete environment
|
||||
if command -v _foamAddLibAuto >/dev/null # Normal sourcing
|
||||
then
|
||||
_foamAddPath $MPI_ARCH_PATH/bin
|
||||
_foamAddMan $MPI_ARCH_PATH/share/man
|
||||
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH
|
||||
_foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddMan "$MPI_ARCH_PATH"/share/man
|
||||
_foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
|
||||
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
|
||||
_foamEtc -config prefs.mpich-gm ## Optional adjustments
|
||||
|
||||
_foamAddPath $MPI_ARCH_PATH/bin
|
||||
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH
|
||||
_foamAddLib $GM_LIB_PATH
|
||||
# MPI_ARCH_PATH (prefs) if a valid dir, or system location
|
||||
if [ ! -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
export MPI_ARCH_PATH=/opt/mpi
|
||||
fi
|
||||
|
||||
export MPICH_PATH="$MPI_ARCH_PATH"
|
||||
export GM_LIB_PATH="$MPICH_PATH/lib$WM_COMPILER_LIB_ARCH"
|
||||
|
||||
_foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddLib "$MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH"
|
||||
_foamAddLib "$GM_LIB_PATH"
|
||||
;;
|
||||
|
||||
MVA2MPI) # MVAMPICH2
|
||||
|
||||
# MVAPICH2, renamed to contain 'MPI' in its name
|
||||
MVA2MPI)
|
||||
export FOAM_MPI=mvapich2-2.3
|
||||
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
|
||||
_foamEtc -config prefs.mvapich2 ## Optional adjustments
|
||||
|
||||
# MPI_ARCH_PATH (prefs) if a valid dir, or ThirdParty location
|
||||
if [ ! -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
export MPI_ARCH_PATH="$_foamMpiPrefixDir/$FOAM_MPI"
|
||||
fi
|
||||
|
||||
# Could be sourced from ThirdParty with incomplete environment
|
||||
if command -v _foamAddLibAuto >/dev/null # Normal sourcing
|
||||
then
|
||||
_foamAddPath $MPI_ARCH_PATH/bin
|
||||
_foamAddMan $MPI_ARCH_PATH/share/man
|
||||
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH
|
||||
_foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddMan "$MPI_ARCH_PATH"/share/man
|
||||
_foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
|
||||
fi
|
||||
;;
|
||||
|
||||
|
||||
CRAY-MPICH)
|
||||
export FOAM_MPI=cray-mpich
|
||||
export MPI_ARCH_PATH=$MPICH_DIR
|
||||
|
||||
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
|
||||
then
|
||||
echo "Using $WM_MPLIB" 1>&2
|
||||
echo " FOAM_MPI : $FOAM_MPI" 1>&2
|
||||
echo " MPICH_DIR : $MPI_ARCH_PATH" 1>&2
|
||||
fi
|
||||
export MPI_ARCH_PATH="$MPICH_DIR"
|
||||
|
||||
[ -d "$MPI_ARCH_PATH" ] || {
|
||||
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
|
||||
echo " Not a valid $WM_MPLIB installation directory." 1>&2
|
||||
echo " Please set MPICH_DIR properly" 1>&2
|
||||
echo " Currently using '$MPI_ARCH_PATH'" 1>&2
|
||||
echo "%{_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
|
||||
echo " => ${MPI_ARCH_PATH:-unset}" 1>&2
|
||||
echo "Please set MPICH_DIR correctly" 1>&2
|
||||
}
|
||||
|
||||
# _foamAddPath $MPI_ARCH_PATH/bin
|
||||
_foamAddLib $MPI_ARCH_PATH/lib
|
||||
# _foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddLib "$MPI_ARCH_PATH"/lib
|
||||
;;
|
||||
|
||||
|
||||
HPMPI)
|
||||
export FOAM_MPI=hpmpi
|
||||
export MPI_HOME=/opt/hpmpi
|
||||
export MPI_ARCH_PATH=$MPI_HOME
|
||||
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
|
||||
;;
|
||||
unset libDir
|
||||
case "$(uname -m)" in
|
||||
x86_64) libDir=lib/linux_amd64 ;;
|
||||
i686) libDir=lib/linux_ia32 ;;
|
||||
ia64) libDir=lib/linux_ia64 ;;
|
||||
esac
|
||||
|
||||
if [ -n "$libDir" ]
|
||||
then
|
||||
_foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddLib "$MPI_ARCH_PATH/$libDir"
|
||||
else
|
||||
echo "openfoam: ($(uname -m)) - unsupported HP-MPI processor type" 1>&2
|
||||
fi
|
||||
unset libDir
|
||||
;;
|
||||
|
||||
|
||||
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
|
||||
_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
|
||||
_foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddLib "$MPI_ARCH_PATH"/lib
|
||||
;;
|
||||
|
||||
|
||||
SGIMPI)
|
||||
# No trailing slash
|
||||
: "${MPI_ROOT:=/dummy}"
|
||||
MPI_ROOT="${MPI_ROOT%/}" # Remove trailing slash
|
||||
|
||||
export MPI_ARCH_PATH="${MPI_ROOT%/}" # Remove trailing slash
|
||||
export FOAM_MPI="${MPI_ARCH_PATH##*/}"
|
||||
export FOAM_MPI="${MPI_ROOT##*/}"
|
||||
export MPI_ARCH_PATH="$MPI_ROOT"
|
||||
|
||||
[ -d "$MPI_ARCH_PATH" ] || {
|
||||
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
|
||||
echo " Not a valid $WM_MPLIB installation directory." 1>&2
|
||||
echo " Please set MPI_ROOT properly (usually via the mpt module)" 1>&2
|
||||
echo " Currently using '$MPI_ARCH_PATH'" 1>&2
|
||||
echo "%{_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
|
||||
echo " => ${MPI_ARCH_PATH:-unset}" 1>&2
|
||||
echo "Please set MPI_ROOT correctly" 1>&2
|
||||
}
|
||||
|
||||
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
|
||||
then
|
||||
echo "Using $WM_MPLIB" 1>&2
|
||||
echo " FOAM_MPI : $FOAM_MPI" 1>&2
|
||||
echo " MPI_ROOT : $MPI_ARCH_PATH" 1>&2
|
||||
fi
|
||||
|
||||
_foamAddPath $MPI_ARCH_PATH/bin
|
||||
_foamAddLib $MPI_ARCH_PATH/lib
|
||||
_foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddLib "$MPI_ARCH_PATH"/lib
|
||||
;;
|
||||
|
||||
|
||||
INTELMPI*)
|
||||
_foamEtc -config prefs.intelmpi ## Optional adjustments
|
||||
|
||||
if [ -n "$I_MPI_ROOT" ]
|
||||
then
|
||||
# I_MPI_ROOT: The Intel MPI Library installation directory
|
||||
# I_MPI_ROOT: Intel MPI Library installation directory
|
||||
MPI_ARCH_PATH="${I_MPI_ROOT}" # Remove trailing slash
|
||||
|
||||
MPI_ARCH_PATH="${I_MPI_ROOT%/}" # Remove trailing slash
|
||||
FOAM_MPI="${MPI_ARCH_PATH##*/}"
|
||||
|
||||
# If subdirectory is version number only, prefix with 'impi-'
|
||||
case "$FOAM_MPI" in ([0-9]*) FOAM_MPI="impi-$FOAM_MPI";; esac
|
||||
|
||||
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
|
||||
then
|
||||
echo "Using $WM_MPLIB" 1>&2
|
||||
echo " FOAM_MPI : $FOAM_MPI" 1>&2
|
||||
echo " I_MPI_ROOT : $MPI_ARCH_PATH" 1>&2
|
||||
fi
|
||||
else
|
||||
elif [ -n "$MPI_ROOT" ]
|
||||
then
|
||||
# MPI_ROOT: General specification
|
||||
MPI_ARCH_PATH="${MPI_ROOT%/}" # Remove trailing slash
|
||||
FOAM_MPI="${MPI_ARCH_PATH##*/}"
|
||||
MPI_ARCH_PATH="${MPI_ROOT}"
|
||||
|
||||
# If subdirectory is version number only, prefix with 'impi-'
|
||||
case "$FOAM_MPI" in ([0-9]*) FOAM_MPI="impi-$FOAM_MPI";; esac
|
||||
|
||||
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
|
||||
then
|
||||
echo "Using $WM_MPLIB" 1>&2
|
||||
echo " FOAM_MPI : $FOAM_MPI" 1>&2
|
||||
echo " MPI_ROOT : $MPI_ARCH_PATH" 1>&2
|
||||
fi
|
||||
elif [ -n "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
# MPI_ARCH_PATH: Set I_MPI_ROOT accordingly
|
||||
export I_MPI_ROOT="$MPI_ARCH_PATH"
|
||||
fi
|
||||
|
||||
[ -d "$MPI_ARCH_PATH" ] || {
|
||||
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2
|
||||
echo " Not a valid $WM_MPLIB installation directory." 1>&2
|
||||
echo " Please set I_MPI_ROOT or MPI_ROOT properly." 1>&2
|
||||
echo " Currently using '$MPI_ARCH_PATH'" 1>&2
|
||||
}
|
||||
|
||||
if [ -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
# Remove trailing slash
|
||||
MPI_ARCH_PATH="${MPI_ARCH_PATH%/}"
|
||||
|
||||
# Subdir name is FOAM_MPI name
|
||||
FOAM_MPI="${MPI_ARCH_PATH##*/}"
|
||||
|
||||
# If subdir is version number only, prefix with 'impi-'
|
||||
case "$FOAM_MPI" in ([0-9]*) FOAM_MPI="impi-$FOAM_MPI";; esac
|
||||
else
|
||||
echo "${_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
|
||||
echo " => ${MPI_ARCH_PATH:-unset}" 1>&2
|
||||
echo "Please set I_MPI_ROOT or MPI_ROOT correctly." 1>&2
|
||||
fi
|
||||
|
||||
export FOAM_MPI MPI_ARCH_PATH
|
||||
|
||||
_foamAddPath "$MPI_ARCH_PATH/intel64/bin"
|
||||
_foamAddLib "$MPI_ARCH_PATH/intel64/lib"
|
||||
_foamAddPath "$MPI_ARCH_PATH"/intel64/bin
|
||||
_foamAddLib "$MPI_ARCH_PATH"/intel64/lib
|
||||
;;
|
||||
|
||||
|
||||
MSMPI)
|
||||
export FOAM_MPI=msmpi
|
||||
_foamEtc -config mpi-msmpi # <- Adjustments (optional)
|
||||
_foamEtc -config prefs.msmpi ## Optional adjustments
|
||||
|
||||
# Respect MPI_ARCH_PATH if set to a valid directory (eg, user adjustments)
|
||||
# MPI_ARCH_PATH (prefs) if a valid dir, or ThirdParty location
|
||||
if [ ! -d "$MPI_ARCH_PATH" ]
|
||||
then
|
||||
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
|
||||
export MPI_ARCH_PATH="$_foamMpiPrefixDir/$FOAM_MPI"
|
||||
fi
|
||||
|
||||
# _foamAddPath "$MPI_ARCH_PATH/bin"
|
||||
_foamAddLib "$MPI_ARCH_PATH/lib/x64"
|
||||
# _foamAddPath "$MPI_ARCH_PATH"/bin
|
||||
_foamAddLib "$MPI_ARCH_PATH"/lib/x64
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
|
||||
# Add (non-dummy) MPI implementation
|
||||
# - dummy MPI already in lib-path and has no external libraries
|
||||
if [ "$FOAM_MPI" != dummy ] && command -v _foamAddLib >/dev/null
|
||||
#------------------------------------------------------------------------------
|
||||
# Final
|
||||
|
||||
# Ensure MPI_ARCH_PATH is marked for export
|
||||
[ -n "$MPI_ARCH_PATH" ] && export MPI_ARCH_PATH
|
||||
|
||||
|
||||
# A real (non-dummy) MPI
|
||||
if [ "$FOAM_MPI" != dummy ]
|
||||
then
|
||||
if [ -n "$FOAM_EXT_LIBBIN" ] # External libraries (allowed to be unset)
|
||||
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
|
||||
then
|
||||
_foamAddLib $FOAM_EXT_LIBBIN/$FOAM_MPI
|
||||
echo "Using mpi type : $WM_MPLIB" 1>&2
|
||||
echo " FOAM_MPI : $FOAM_MPI" 1>&2
|
||||
echo " prefix : ${MPI_ARCH_PATH:-unset}" 1>&2
|
||||
fi
|
||||
|
||||
# OpenFOAM library interface to (non-dummy) MPI
|
||||
if command -v _foamAddLib >/dev/null
|
||||
then
|
||||
if [ -n "$FOAM_EXT_LIBBIN" ]
|
||||
then
|
||||
# External libraries (can be unset)
|
||||
_foamAddLib "$FOAM_EXT_LIBBIN/$FOAM_MPI"
|
||||
fi
|
||||
_foamAddLib "$FOAM_LIBBIN/$FOAM_MPI"
|
||||
fi
|
||||
_foamAddLib $FOAM_LIBBIN/$FOAM_MPI
|
||||
fi
|
||||
|
||||
# Alternative to 'mpiBufferSize' controlDict entry
|
||||
#export MPI_BUFFER_SIZE=20000000
|
||||
|
||||
# Cleanup
|
||||
unset _foamMpiPrefixDir _foamMpiVersion _foamMpiWarning
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user