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:
Mark Olesen
2020-11-11 09:34:07 +01:00
parent 26ec9b5a17
commit c91fc6f41c
45 changed files with 722 additions and 536 deletions

View File

@ -2,13 +2,7 @@
PROJECT_INC = PROJECT_INC =
PROJECT_LIBS = PROJECT_LIBS =
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) include $(GENERAL_RULES)/mpi-rules
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
/* Default is PROJECT LIB/mpi target */
ifeq (,$(FOAM_MPI_LIBBIN))
FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
endif
EXE_INC = \ EXE_INC = \
-I.. \ -I.. \

View File

@ -1,5 +1,4 @@
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) include $(GENERAL_RULES)/mpi-rules
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
EXE_INC = $(PFLAGS) $(PINC) $(c++LESSWARN) EXE_INC = $(PFLAGS) $(PINC) $(c++LESSWARN)
EXE_LIBS = $(PLIBS) EXE_LIBS = $(PLIBS)

View File

@ -41,7 +41,7 @@ printHelp() {
usage: ${0##*/} options usage: ${0##*/} options
options: options:
-dry-run Report but do not write config files -dry-run, -n Report but do not write config files
-no-mpicc Bypass any use of mpicc -no-mpicc Bypass any use of mpicc
-query-openmpi Report installation directory for system openmpi -query-openmpi Report installation directory for system openmpi
-write-openmpi Query system openmpi and write config files -write-openmpi Query system openmpi and write config files
@ -75,7 +75,7 @@ die()
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Options # Options
unset optDryRun unset optDryRun
useMpicc=true withMpicc="mpicc"
# Get installation directory for system openmpi # Get installation directory for system openmpi
# - from "mpicc --showme:link" # - from "mpicc --showme:link"
@ -83,17 +83,19 @@ useMpicc=true
# #
# The mpicc content looks like this: # The mpicc content looks like this:
# ---- # ----
# -pthread -L/usr/lib64/mpi/gcc/openmpi/lib64 -lmpi # ... -L/usr/lib64/mpi/gcc/openmpi/lib64 -lmpi
# ... -L/usr/lib64/mpi/gcc/openmpi2/lib64 -lmpi
# ... -L/usr/lib64/openmpi/lib -lmpi
# ---- # ----
query_system_openmpi() query_system_openmpi()
{ {
unset arch_path unset arch_path
if [ "$useMpicc" = true ] if [ -n "$withMpicc" ]
then then
arch_path=$(mpicc --showme:link 2>/dev/null | sed -e 's#^.*-L\([^ ]*\).*#\1#') arch_path=$(mpicc --showme:link 2>/dev/null | sed -e 's/^.*-L\([^ ]*\).*/\1/')
arch_path="${arch_path%/*}" arch_path="${arch_path%/*}" # prefix from libdir
if [ -n "$arch_path" ] if [ -n "$arch_path" ]
then then
@ -112,14 +114,16 @@ query_system_openmpi()
fi fi
# Include is under /usr/lib... (eg, debian, openSUSE) # Include is under /usr/lib... (eg, debian, openSUSE)
# Note this cannot handle (openmpi | openmpi1 | openmpi2 | ...) include directories
# unless we also try to grab information out of PATH or LD_LIBRARY_PATH
for testdir in \ for testdir in \
/usr/lib/"${DEB_TARGET_MULTIARCH:+${DEB_TARGET_MULTIARCH}/}"openmpi/include \ /usr/lib/"${DEB_TARGET_MULTIARCH:+${DEB_TARGET_MULTIARCH}/}"openmpi \
/usr/lib64/mpi/gcc/openmpi/include \ /usr/lib64/mpi/gcc/openmpi \
; ;
do do
if [ -e "$testdir/mpi.h" ] if [ -e "$testdir/include/mpi.h" ]
then then
echo "${testdir%/*}" echo "$testdir"
return 0 # Clean exit return 0 # Clean exit
fi fi
done done
@ -137,6 +141,16 @@ query_system_openmpi()
fi fi
done done
# Partial env from RedHat "module load mpi/openmpi-x86_64"
#
## MPI_COMPILER=openmpi-x86_64
## MPI_HOME=/usr/lib64/openmpi
## MPI_BIN=/usr/lib64/openmpi/bin
## MPI_LIB=/usr/lib64/openmpi/lib
## MPI_INCLUDE=/usr/include/openmpi-x86_64
## MPI_SUFFIX=_openmpi
# Failed (should not happen) # Failed (should not happen)
# - report '/usr', but with error code 2 # - report '/usr', but with error code 2
echo "/usr" echo "/usr"
@ -151,60 +165,68 @@ create_files()
{ {
[ -n "$FOAM_MPI" ] || die "FOAM_MPI not set" [ -n "$FOAM_MPI" ] || die "FOAM_MPI not set"
# MPI-name without trailing major version
mpiName="${FOAM_MPI%[0-9]}"
# The prefs name
prefsName="prefs.$mpiName"
if [ -d "$MPI_ARCH_PATH" ] if [ -d "$MPI_ARCH_PATH" ]
then then
echo "Define $FOAM_MPI with $MPI_ARCH_PATH" 1>&2 echo "Define $FOAM_MPI with $MPI_ARCH_PATH" 1>&2
case "$FOAM_MPI" in case "$mpiName" in
(openmpi-system) (sys-openmpi | openmpi-system)
configDir="etc/config.sh"
if [ "$optDryRun" = true ] # POSIX shell
prefsFile="etc/config.sh/$prefsName"
if [ -d "${prefsFile%/*}" ] || [ -n "$optDryRun" ]
then then
cat << CONTENT 1>&2 (
dry-run: $configDir/$FOAM_MPI if [ -n "$optDryRun" ]
then
exec 1>&2
else
exec 1> "$prefsFile"
fi
echo "${optDryRun}Write $prefsFile" 1>&2
cat << CONTENT
# $prefsFile
# #
# Packaging configured value for $FOAM_MPI # Packaging configured value for $FOAM_MPI
export MPI_ARCH_PATH="$MPI_ARCH_PATH"
CONTENT
elif [ -d "$configDir" ]
then
echo "Write $configDir/$FOAM_MPI" 1>&2
cat << CONTENT > "$configDir/$FOAM_MPI"
# $configDir/$FOAM_MPI
#
# Packaging configured value for $FOAM_MPI
export MPI_ARCH_PATH="$MPI_ARCH_PATH" export MPI_ARCH_PATH="$MPI_ARCH_PATH"
#---- #----
CONTENT CONTENT
)
else else
echo "Cannot write $configDir/$FOAM_MPI - no directory" 1>&2 echo "Cannot write $prefsFile - no directory" 1>&2
fi fi
configDir="etc/config.csh"
if [ "$optDryRun" = true ] # C-shell
prefsFile="etc/config.csh/$prefsName"
if [ -d "${prefsFile%/*}" ] || [ -n "$optDryRun" ]
then then
cat << CONTENT 1>&2 (
dry-run: $configDir/$FOAM_MPI if [ -n "$optDryRun" ]
then
exec 1>&2
else
exec 1> "$prefsFile"
fi
echo "${optDryRun}Write $prefsFile" 1>&2
cat << CONTENT
# $prefsFile
# #
# Packaging configured value for $FOAM_MPI # Packaging configured value for $FOAM_MPI
setenv MPI_ARCH_PATH "$MPI_ARCH_PATH"
CONTENT
elif [ -d "$configDir" ]
then
echo "Write $configDir/$FOAM_MPI" 1>&2
cat << CONTENT > "$configDir/$FOAM_MPI"
# $configDir/$FOAM_MPI
#
# Packaging configured value for $FOAM_MPI
setenv MPI_ARCH_PATH "$MPI_ARCH_PATH" setenv MPI_ARCH_PATH "$MPI_ARCH_PATH"
#---- #----
CONTENT CONTENT
)
else else
echo "Cannot write $configDir/$FOAM_MPI - no directory" 1>&2 echo "Cannot write $prefsFile - no directory" 1>&2
fi fi
;; ;;
esac esac
@ -212,10 +234,7 @@ CONTENT
echo "Warning: $FOAM_MPI with bad MPI_ARCH_PATH: $MPI_ARCH_PATH" 1>&2 echo "Warning: $FOAM_MPI with bad MPI_ARCH_PATH: $MPI_ARCH_PATH" 1>&2
# TBD - remove old/bad entries? # TBD - remove old/bad entries?
# #
# for file in "etc/config.sh/$FOAM_MPI" "etc/config.csh/$FOAM_MPI" # rm -f "etc/config.sh/$prefsName" "etc/config.csh/$prefsName"
# do
# [ -f "$file" ] && rm -f "$file"
# done
fi fi
} }
@ -226,19 +245,12 @@ CONTENT
while [ "$#" -gt 0 ] while [ "$#" -gt 0 ]
do do
case "$1" in case "$1" in
-h | -help* | --help*) '') true ;; # Discard empty arguments
printHelp -h | -help* | --help*) printHelp ;;
;; -n | -dry-run) optDryRun="(dry-run) " ;;
'')
# Discard empty arguments
;;
-dry-run)
optDryRun=true
;;
-no-mpicc) -no-mpicc)
unset useMpicc unset withMpicc
;; ;;
-query-openmpi | -query-system-openmpi) -query-openmpi | -query-system-openmpi)
@ -249,8 +261,7 @@ do
-write-openmpi | -write-system-openmpi) -write-openmpi | -write-system-openmpi)
if MPI_ARCH_PATH=$(query_system_openmpi) if MPI_ARCH_PATH=$(query_system_openmpi)
then then
FOAM_MPI="openmpi-system" FOAM_MPI="sys-openmpi" create_files
create_files
else else
die "Failed query for system openmpi" die "Failed query for system openmpi"
fi fi

View File

@ -91,7 +91,8 @@ export WM_COMPILE_OPTION=Opt
# [WM_MPLIB] - MPI implementation: # [WM_MPLIB] - MPI implementation:
# = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM | # = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM |
# HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI # HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI
# Also possible to use INTELMPI-xyz etc and define your own wmake rule # Specify SYSTEMOPENMPI1, SYSTEMOPENMPI2 for internal tracking (if desired)
# Can also use INTELMPI-xyz etc and define your own wmake rule
export WM_MPLIB=SYSTEMOPENMPI export WM_MPLIB=SYSTEMOPENMPI

View File

@ -6,20 +6,22 @@
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2011-2016 OpenFOAM Foundation
# Copyright (C) 2020 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, licensed under GNU General Public License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
# <http://www.gnu.org/licenses/>.
# #
# File # File
# config.csh/example/openmpi # config.csh/example/prefs.openmpi
# - sourced by OpenFOAM-*/etc/config.csh/mpi
# #
# Description # Description
# Example of fine tuning openmpi settings for OpenFOAM # Tuning example for openmpi (C-shell)
#
# Copy to etc/config.csh (or ~/.OpenFOAM/config.csh) and it will be
# sourced by OpenFOAM-*/etc/config.csh/mpi
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
setenv FOAM_MPI openmpi-3.0.0 setenv FOAM_MPI openmpi-4.0.5
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -18,314 +18,364 @@
# Description # Description
# Setup for MPI communications library for OpenFOAM # Setup for MPI communications library for OpenFOAM
# #
# User adjustments are possible in these files:
# - config.csh/openmpi-system
# - config.csh/openmpi
# - config.csh/mpi-user
# - config.csh/mpi-system
#
# For USERMPI, the user is responsible for supplying an appropriate # For USERMPI, the user is responsible for supplying an appropriate
# wmake/rules/General/mplibUSERMPI file and managing all settings # wmake/rules/General/mplibUSERMPI file and managing all settings
# #
# For INTELMPI, note that the (I_MPI_CC, I_MPI_CCX) environment variables # For INTELMPI, note that the (I_MPI_CC, I_MPI_CCX) environment variables
# define the underlying compiler to be used # define the underlying compiler to be used
# #
# User adjustments are controlled by these types of files:
# - config.csh/prefs.intelmpi
# - config.csh/prefs.mpich
# - config.csh/prefs.mpich-gm
# - config.csh/prefs.mvapich2
# - config.csh/prefs.openmpi
# - config.csh/prefs.sys-mpi
# - config.csh/prefs.sys-openmpi
# - config.csh/prefs.user-mpi
#
# Note
# All pre-v2012 names (without the 'prefs.' prefix) are ignored.
#
# User adjustments may set MPI_ARCH_PATH to an empty string,
# but are not permitted to unset it.
#
# Environment
# MPI_BUFFER_SIZE overrides 'mpiBufferSize' (controlDict entry).
# Eg, setenv MPI_BUFFER_SIZE 20000000
#
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
unsetenv MPI_ARCH_PATH MPI_HOME unsetenv MPI_HOME
setenv FOAM_MPI dummy # Fallback value setenv FOAM_MPI dummy # Fallback value
setenv MPI_ARCH_PATH # Empty, but defined
set _foamMpiVersion # Track mpi (major) version as required
# Location for ThirdParty installations
set _foamMpiPrefixDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER"
set _foamMpiWarning="openfoam (etc/config.csh/mpi) => " # Prefix for warnings
#------------------------------------------------------------------------------
switch ("$WM_MPLIB") switch ("$WM_MPLIB")
case SYSTEMOPENMPI*:
# The system installed openmpi, locations discovery via mpicc.
setenv FOAM_MPI openmpi-system
_foamEtc -config openmpi-system # <- Adjustments (optional)
# Respect MPI_ARCH_PATH if set to valid directory (eg, user adjustments) # The system openmpi, discover locations via <mpicc>
if (! $?MPI_ARCH_PATH ) setenv MPI_ARCH_PATH case SYSTEMOPENMPI[1-9]:
# Preserve major version for the naming
set _foamMpiVersion=`echo "$WM_MPLIB" | sed -e 's/^.*MPI//'`
#[fallthrough]
case SYSTEMOPENMPI:
setenv FOAM_MPI "sys-openmpi${_foamMpiVersion}"
_foamEtc -config prefs.sys-openmpi ## Optional adjustments
# MPI_ARCH_PATH (prefs) if a valid dir, or discover via <mpicc>
if ( -d "$MPI_ARCH_PATH" ) then if ( -d "$MPI_ARCH_PATH" ) then
_foamAddLibAuto $MPI_ARCH_PATH _foamAddLibAuto "$MPI_ARCH_PATH"
else else
# Slight hack: strip off 'lib' to get presumed prefix for include and libs # Slight hack: strip off 'lib' to get prefix directory
set libDir=`mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/'` set libDir=`mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/'`
setenv MPI_ARCH_PATH "${libDir:h}" setenv MPI_ARCH_PATH "${libDir:h}" # prefix from libdir
_foamAddLib $libDir _foamAddLib "$libDir"
unset libDir unset libDir
endif endif
# TDB: extra openmpi major qualifier on name?
## if ( "$FOAM_MPI" == "sys-openmpi" ) then
## set _foamMpiVersion=`echo "$MPI_ARCH_PATH" | sed -e 's/^.*mpi//'`
## switch ("$_foamMpiVersion")
## case [1-9]:
## setenv FOAM_MPI "${FOAM_MPI}${_foamMpiVersion}"
## breaksw
## endsw
## endif
breaksw breaksw
case OPENMPI: case OPENMPI:
setenv FOAM_MPI openmpi-4.0.3 setenv 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 (! $?MPI_ARCH_PATH ) setenv MPI_ARCH_PATH if ( ! -d "$MPI_ARCH_PATH" ) then
if (! -d "$MPI_ARCH_PATH" ) then setenv MPI_ARCH_PATH "$_foamMpiPrefixDir/$FOAM_MPI"
setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI
endif endif
# Inform openmpi where to find its install directory # Inform openmpi where to find its install directory
setenv OPAL_PREFIX $MPI_ARCH_PATH setenv OPAL_PREFIX "$MPI_ARCH_PATH"
if ($?FOAM_VERBOSE && $?prompt) then _foamAddPath "$MPI_ARCH_PATH"/bin
echo "Using $WM_MPLIB" _foamAddMan "$MPI_ARCH_PATH"/share/man
echo " FOAM_MPI : $FOAM_MPI" _foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
echo " OPAL_PREFIX : $MPI_ARCH_PATH"
endif
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddMan $MPI_ARCH_PATH/share/man
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH
breaksw breaksw
# Arbitrary, user-specified mpi implementation
# - used by spack, which populates appropriate wmake rules
case USERMPI: case USERMPI:
# Arbitrary, user-specified mpi implementation setenv FOAM_MPI user-mpi
setenv FOAM_MPI mpi-user _foamEtc -config prefs.user-mpi ## Optional adjustments
_foamEtc -config mpi-user # <- Adjustments (optional)
breaksw breaksw
# EasyBuild handles everything via <mpicc>
case EASYBUILDMPI:
setenv FOAM_MPI eb-mpi
breaksw
case SYSTEMMPI: case SYSTEMMPI:
setenv FOAM_MPI mpi-system setenv FOAM_MPI sys-mpi
_foamEtc -config mpi-system # <- Adjustments (optional) _foamEtc -config prefs.sys-mpi ## Optional adjustments
if ( ! $?MPI_ROOT ) then # MPI_ARCH_PATH (prefs) or MPI_ROOT (inherited), in that order
echo if ( "$MPI_ARCH_PATH" != "" ) then
echo "Warning in $WM_PROJECT_DIR/etc/config.csh/mpi:" setenv MPI_ROOT "$MPI_ARCH_PATH"
echo " Please set the environment variable MPI_ROOT to point to" \ else if ( $?MPI_ROOT ) then
" the base folder for the system MPI in use." setenv MPI_ARCH_PATH "$MPI_ROOT"
echo " Example:" endif
echo
echo " setenv MPI_ROOT /opt/mpi" set _foamMpiWarning="${_foamMpiWarning}system MPI: "
if ( ! -d "$MPI_ARCH_PATH" ) then
echo "${_foamMpiWarning}has invalid MPI_ROOT"
echo "Please set correctly. For example,"
echo ' setenv MPI_ROOT "/opt/mpi"'
echo echo
else else
setenv MPI_ARCH_PATH $MPI_ROOT set _foamMpiWarning="${_foamMpiWarning}has unset "
if ( ! $?MPI_ARCH_FLAGS ) then if ( ! $?MPI_ARCH_FLAGS ) then
echo echo "${_foamMpiWarning}MPI_ARCH_FLAGS"
echo "Warning in $WM_PROJECT_DIR/etc/config.csh/mpi:" echo "Please set correctly. For example,"
echo " MPI_ARCH_FLAGS is not set. Example:" echo ' setenv MPI_ARCH_FLAGS "-DOMPI_SKIP_MPICXX"'
echo
echo ' setenv MPI_ARCH_FLAGS "-DOMPI_SKIP_MPICXX"'
echo echo
endif endif
if ( ! $?MPI_ARCH_INC ) then if ( ! $?MPI_ARCH_INC ) then
echo echo "${_foamMpiWarning}MPI_ARCH_INC"
echo "Warning in $WM_PROJECT_DIR/etc/config.csh/mpi:" echo "Please set correctly. For example,"
echo " MPI_ARCH_INC is not set. Example:" echo ' setenv MPI_ARCH_INC "-isystem $MPI_ROOT/include"'
echo
echo ' setenv MPI_ARCH_INC "-isystem $MPI_ROOT/include"'
echo echo
endif endif
if ( ! $?MPI_ARCH_LIBS ) then if ( ! $?MPI_ARCH_LIBS ) then
echo echo "${_foamMpiWarning}MPI_ARCH_LIBS"
echo "Warning in $WM_PROJECT_DIR/etc/config.csh/mpi:" echo "Please set correctly. For example,"
echo " MPI_ARCH_LIBS is not set. Example:" echo ' setenv MPI_ARCH_LIBS "-L$MPI_ROOT/lib -lmpi"'
echo
echo ' setenv MPI_ARCH_LIBS "-L$MPI_ROOT/lib -lmpi"'
echo echo
endif endif
endif endif
breaksw breaksw
case MPICH: case MPICH:
setenv FOAM_MPI mpich-3.3 setenv FOAM_MPI mpich-3.3
setenv MPI_ARCH_PATH $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI _foamEtc -config prefs.mpich ## Optional adjustments
setenv MPI_HOME $MPI_ARCH_PATH
_foamAddPath $MPI_ARCH_PATH/bin # MPI_ARCH_PATH (prefs) if a valid dir, or use ThirdParty location
_foamAddMan $MPI_ARCH_PATH/share/man if ( ! -d "$MPI_ARCH_PATH" ) then
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH setenv MPI_ARCH_PATH "$_foamMpiPrefixDir/$FOAM_MPI"
endif
setenv MPI_HOME "$MPI_ARCH_PATH"
_foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddMan "$MPI_ARCH_PATH"/share/man
_foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
breaksw breaksw
case MPICH-GM: case MPICH-GM:
setenv FOAM_MPI mpich-gm setenv FOAM_MPI mpich-gm
setenv MPI_ARCH_PATH /opt/mpi _foamEtc -config prefs.mpich-gm ## Optional adjustments
setenv MPICH_PATH $MPI_ARCH_PATH
setenv GM_LIB_PATH /opt/gm/lib$WM_COMPILER_LIB_ARCH
_foamAddPath $MPI_ARCH_PATH/bin # MPI_ARCH_PATH (prefs) if a valid dir, or system location
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH if ( ! -d "$MPI_ARCH_PATH" ) then
_foamAddLib $GM_LIB_PATH setenv MPI_ARCH_PATH /opt/mpi
endif
setenv MPICH_PATH "$MPI_ARCH_PATH"
setenv 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"
breaksw breaksw
case MVA2MPI: # MVAMPICH2
# MVAPICH2, renamed to contain 'MPI' in its name
case MVA2MPI:
setenv FOAM_MPI mvapich2-2.3 setenv FOAM_MPI mvapich2-2.3
_foamEtc -config prefs.mvapich2 ## Optional adjustments
_foamAddPath $MPI_ARCH_PATH/bin # MPI_ARCH_PATH (prefs) if a valid dir, or ThirdParty location
_foamAddMan $MPI_ARCH_PATH/share/man if ( ! -d "$MPI_ARCH_PATH" ) then
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH setenv MPI_ARCH_PATH "$_foamMpiPrefixDir/$FOAM_MPI"
endif
_foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddMan "$MPI_ARCH_PATH"/share/man
_foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
breaksw breaksw
case CRAY-MPICH: case CRAY-MPICH:
if ( ! $?MPICH_DIR ) setenv MPICH_DIR /dev/null
setenv FOAM_MPI cray-mpich setenv FOAM_MPI cray-mpich
setenv MPI_ARCH_PATH $MPICH_DIR if ( ! $?MPICH_DIR ) setenv MPICH_DIR /dummy
setenv MPI_ARCH_PATH "$MPICH_DIR"
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using $WM_MPLIB"
echo " FOAM_MPI : $FOAM_MPI"
echo " MPICH_DIR : $MPI_ARCH_PATH"
endif
if ( ! -d "$MPI_ARCH_PATH" ) then if ( ! -d "$MPI_ARCH_PATH" ) then
echo "Warning in $WM_PROJECT_DIR/etc/config.csh/mpi:" echo "%{_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
echo " Not a valid $WM_MPLIB installation directory." echo " => $MPI_ARCH_PATH"
echo " Please set MPICH_DIR properly." echo "Please set MPICH_DIR correctly"
echo " Currently using '$MPI_ARCH_PATH'"
endif endif
# _foamAddPath $MPI_ARCH_PATH/bin # _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib $MPI_ARCH_PATH/lib _foamAddLib "$MPI_ARCH_PATH"/lib
breaksw breaksw
case HPMPI: case HPMPI:
setenv FOAM_MPI hpmpi setenv FOAM_MPI hpmpi
setenv MPI_HOME /opt/hpmpi setenv MPI_HOME /opt/hpmpi
setenv MPI_ARCH_PATH $MPI_HOME setenv MPI_ARCH_PATH "$MPI_HOME"
_foamAddPath $MPI_ARCH_PATH/bin
set libDir=""
switch (`uname -m`) switch (`uname -m`)
case i686:
_foamAddLib $MPI_ARCH_PATH/lib/linux_ia32
breaksw
case x86_64: case x86_64:
_foamAddLib $MPI_ARCH_PATH/lib/linux_amd64 set libDir=lib/linux_amd64
breaksw
case i686:
set libDir=lib/linux_ia32
breaksw breaksw
case ia64: case ia64:
_foamAddLib $MPI_ARCH_PATH/lib/linux_ia64 set libDir=lib/linux_ia64
breaksw
default:
echo Unknown processor type `uname -m` for Linux
breaksw breaksw
endsw endsw
if ( "${libDir}" != "" ) then
_foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib "$MPI_ARCH_PATH/$libDir"
else
echo "openfoam: (`uname -m`) - unsupported HP-MPI processor type"
endif
unset libDir
breaksw breaksw
case MPI: case MPI:
setenv FOAM_MPI mpi setenv FOAM_MPI mpi
setenv MPI_ARCH_PATH /opt/mpi setenv MPI_ARCH_PATH /opt/mpi
breaksw breaksw
case FJMPI: case FJMPI:
setenv FOAM_MPI fjmpi setenv FOAM_MPI fjmpi
setenv MPI_ARCH_PATH /opt/FJSVmpi2 setenv MPI_ARCH_PATH /opt/FJSVmpi2
_foamAddPath $MPI_ARCH_PATH/bin _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib $MPI_ARCH_PATH/lib/sparcv9 _foamAddLib "$MPI_ARCH_PATH"/lib/sparcv9
_foamAddLib /opt/FSUNf90/lib/sparcv9 _foamAddLib /opt/FSUNf90/lib/sparcv9
_foamAddLib /opt/FJSVpnidt/lib _foamAddLib /opt/FJSVpnidt/lib
breaksw breaksw
case QSMPI: case QSMPI:
setenv FOAM_MPI qsmpi setenv FOAM_MPI qsmpi
setenv MPI_ARCH_PATH /usr/lib/mpi setenv MPI_ARCH_PATH /usr/lib/mpi
_foamAddPath $MPI_ARCH_PATH/bin _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib $MPI_ARCH_PATH/lib _foamAddLib "$MPI_ARCH_PATH"/lib
breaksw breaksw
case SGIMPI: case SGIMPI:
if ( ! $?MPI_ROOT ) setenv MPI_ROOT /dummy if ( ! $?MPI_ROOT ) setenv MPI_ROOT /dummy
if ( "${MPI_ROOT:h}/" == "$MPI_ROOT" ) then
if ( ! -d "$MPI_ROOT" ) then setenv MPI_ROOT "${MPI_ROOT:h}" # Remove trailing slash
echo "Warning in $WM_PROJECT_DIR/etc/config.csh/mpi:"
echo " Not a valid $WM_MPLIB installation directory."
echo " Please set MPI_ROOT properly (usually via the mpt module)"
echo " Currently using '$MPI_ARCH_PATH'"
endif endif
if ( "${MPI_ROOT:h}/" == $MPI_ROOT ) then setenv FOAM_MPI "${MPI_ROOT:t}"
setenv MPI_ROOT ${MPI_ROOT:h} setenv MPI_ARCH_PATH "$MPI_ROOT"
endif
setenv FOAM_MPI ${MPI_ROOT:t}
setenv MPI_ARCH_PATH $MPI_ROOT
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using $WM_MPLIB"
echo " FOAM_MPI : $FOAM_MPI"
echo " MPI_ROOT : $MPI_ARCH_PATH"
endif
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib
breaksw
case INTELMPI*:
if ( $?I_MPI_ROOT ) then
# I_MPI_ROOT: The Intel MPI Library installation directory
# Remove trailing slash
if ( "${I_MPI_ROOT:h}/" == $I_MPI_ROOT ) then
setenv I_MPI_ROOT ${I_MPI_ROOT:h}
endif
setenv MPI_ARCH_PATH $I_MPI_ROOT
setenv FOAM_MPI ${MPI_ARCH_PATH:t}
# If subdirectory is version number only, prefix with 'impi-'
switch ("$FOAM_MPI")
case [0-9]*:
setenv FOAM_MPI "impi-$FOAM_MPI"
breaksw
endsw
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using $WM_MPLIB"
echo " FOAM_MPI : $FOAM_MPI"
echo " I_MPI_ROOT : $MPI_ARCH_PATH"
endif
else if ( $?MPI_ROOT ) then
# MPI_ROOT: General specification
# Remove trailing slash
if ( "${MPI_ROOT:h}/" == $MPI_ROOT ) then
setenv MPI_ROOT ${MPI_ROOT:h}
endif
setenv MPI_ARCH_PATH $MPI_ROOT
setenv FOAM_MPI ${MPI_ARCH_PATH:t}
# If subdirectory is version number only, prefix with 'impi-'
switch ("$FOAM_MPI")
case [0-9]*:
setenv FOAM_MPI "impi-$FOAM_MPI"
breaksw
endsw
if ($?FOAM_VERBOSE && $?prompt) then
echo "Using $WM_MPLIB"
echo " FOAM_MPI : $FOAM_MPI"
echo " MPI_ROOT : $MPI_ARCH_PATH"
endif
else
setenv MPI_ARCH_PATH /dummy
endif
if ( ! -d "$MPI_ARCH_PATH" ) then if ( ! -d "$MPI_ARCH_PATH" ) then
echo "Warning in $WM_PROJECT_DIR/etc/config.csh/mpi:" echo "%{_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
echo " Not a valid $WM_MPLIB installation directory." echo " => $MPI_ARCH_PATH"
echo " Please set I_MPI_ROOT or MPI_ROOT properly." echo "Please set MPI_ROOT correctly"
echo " Currently using '$MPI_ARCH_PATH'"
endif endif
_foamAddPath "$MPI_ARCH_PATH/intel64/bin" _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib "$MPI_ARCH_PATH/intel64/lib" _foamAddLib "$MPI_ARCH_PATH"/lib
breaksw breaksw
case INTELMPI*:
_foamEtc -config prefs.intelmpi ## Optional adjustments
if ( $?I_MPI_ROOT ) then
# I_MPI_ROOT: Intel MPI Library installation directory
setenv MPI_ARCH_PATH "${I_MPI_ROOT}"
else if ( $?MPI_ROOT ) then
# MPI_ROOT: General specification
setenv MPI_ARCH_PATH "$MPI_ROOT"
else if ( "$MPI_ARCH_PATH" != "" ) then
# MPI_ARCH_PATH: Set I_MPI_ROOT accordingly
export I_MPI_ROOT="$MPI_ARCH_PATH"
endif
if ( -d "$MPI_ARCH_PATH" ) then
# Remove trailing slash
if ( "${MPI_ARCH_PATH:h}/" == "$MPI_ARCH_PATH" ) then
setenv MPI_ARCH_PATH "${MPI_ARCH_PATH:h}"
endif
# Subdir name is FOAM_MPI name
setenv FOAM_MPI "${MPI_ARCH_PATH:t}"
# If subdir is version number only, prefix with 'impi-'
switch ("$FOAM_MPI")
case [0-9]*:
setenv FOAM_MPI "impi-$FOAM_MPI"
breaksw
endsw
else
echo "${_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
echo " => ${MPI_ARCH_PATH}" 1>&2
echo "Please set I_MPI_ROOT or MPI_ROOT correctly."
endif
_foamAddPath "$MPI_ARCH_PATH"/intel64/bin
_foamAddLib "$MPI_ARCH_PATH"/intel64/lib
breaksw
endsw endsw
# Add (non-dummy) MPI implementation #------------------------------------------------------------------------------
# - dummy MPI already in lib-path and has no external libraries # Final
# A real (non-dummy) MPI
if ( "$FOAM_MPI" != dummy ) then if ( "$FOAM_MPI" != dummy ) then
if ( $?FOAM_EXT_LIBBIN ) then # External libraries (allowed to be unset) if ($?FOAM_VERBOSE && $?prompt) then
_foamAddLib ${FOAM_EXT_LIBBIN}/${FOAM_MPI} echo "Using mpi type : $WM_MPLIB"
echo " FOAM_MPI : $FOAM_MPI"
if ( "${MPI_ARCH_PATH}" == "" ) then
echo " prefix : unset"
else
echo " prefix : $MPI_ARCH_PATH"
endif
endif endif
_foamAddLib ${FOAM_LIBBIN}/${FOAM_MPI}
# OpenFOAM library interface to (non-dummy) MPI
if ( $?FOAM_EXT_LIBBIN ) then
# External libraries (can be unset)
_foamAddLib "${FOAM_EXT_LIBBIN}/${FOAM_MPI}"
endif
_foamAddLib "${FOAM_LIBBIN}/${FOAM_MPI}"
endif endif
# Alternative to 'mpiBufferSize' controlDict entry
#setenv MPI_BUFFER_SIZE 20000000 # Cleanup
unset _foamMpiPrefixDir _foamMpiWarning _foamMpiVersion
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -6,20 +6,22 @@
# \\/ M anipulation | # \\/ M anipulation |
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2011-2016 OpenFOAM Foundation
# Copyright (C) 2020 OpenCFD Ltd.
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# License # License
# This file is part of OpenFOAM, licensed under GNU General Public License # This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
# <http://www.gnu.org/licenses/>.
# #
# File # File
# config.sh/example/openmpi # config.sh/example/prefs.openmpi
# - sourced by OpenFOAM-*/etc/config.sh/mpi
# #
# Description # Description
# Example of fine tuning openmpi settings for OpenFOAM # Tuning example for openmpi (POSIX shell).
#
# Copy to etc/config.sh (or ~/.OpenFOAM/config.sh) and it will be
# sourced by OpenFOAM-*/etc/config.sh/mpi
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
export FOAM_MPI=openmpi-3.0.0 export FOAM_MPI=openmpi-4.0.5
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -18,338 +18,404 @@
# Description # Description
# Setup for MPI communications library for OpenFOAM # 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 # For USERMPI, the user is responsible for supplying an appropriate
# wmake/rules/General/mplibUSERMPI file and managing all settings # wmake/rules/General/mplibUSERMPI file and managing all settings
# #
# For INTELMPI, note that the (I_MPI_CC, I_MPI_CCX) environment variables # For INTELMPI, note that the (I_MPI_CC, I_MPI_CCX) environment variables
# define the underlying compiler to be used # 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 unset MPI_ARCH_PATH MPI_HOME
export FOAM_MPI=dummy # Fallback value 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 case "$WM_MPLIB" in
SYSTEMOPENMPI*)
# The system installed openmpi, locations discovery via mpicc. # The system openmpi, discover locations via <mpicc>
export FOAM_MPI=openmpi-system # 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 # Undefine OPAL_PREFIX if set to one of the paths on foamOldDirs
if [ -z "$($foamClean -env=OPAL_PREFIX "$foamOldDirs")" ] if [ -z "$($foamClean -env=OPAL_PREFIX "$foamOldDirs")" ]
then then
unset OPAL_PREFIX unset OPAL_PREFIX
fi 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" ] if [ -d "$MPI_ARCH_PATH" ]
then then
_foamAddLibAuto $MPI_ARCH_PATH _foamAddLibAuto "$MPI_ARCH_PATH"
else 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/') libDir=$(mpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/')
export MPI_ARCH_PATH="${libDir%/*}" export MPI_ARCH_PATH="${libDir%/*}" # prefix from libdir
_foamAddLib $libDir _foamAddLib "$libDir"
unset libDir unset libDir
fi 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) OPENMPI)
export FOAM_MPI=openmpi-4.0.3 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" ] if [ ! -d "$MPI_ARCH_PATH" ]
then then
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI export MPI_ARCH_PATH="$_foamMpiPrefixDir/$FOAM_MPI"
fi fi
# Inform openmpi where to find its install directory # Inform openmpi where to find its install directory
export OPAL_PREFIX=$MPI_ARCH_PATH 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
# Could be sourced from ThirdParty with incomplete environment # Could be sourced from ThirdParty with incomplete environment
if command -v _foamAddLibAuto >/dev/null # Normal sourcing if command -v _foamAddLibAuto >/dev/null # Normal sourcing
then then
_foamAddPath $MPI_ARCH_PATH/bin _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddMan $MPI_ARCH_PATH/share/man _foamAddMan "$MPI_ARCH_PATH"/share/man
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH _foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
fi fi
;; ;;
# Arbitrary, user-specified mpi implementation
# - used by spack, which populates appropriate wmake rules
USERMPI) USERMPI)
# Arbitrary, user-specified mpi implementation export FOAM_MPI=user-mpi
export FOAM_MPI=mpi-user _foamEtc -config prefs.user-mpi ## Optional adjustments
_foamEtc -config mpi-user # <- Adjustments (optional)
;; ;;
# EasyBuild handles everything via <mpicc>
EASYBUILDMPI)
export FOAM_MPI=eb-mpi
;;
SYSTEMMPI) SYSTEMMPI)
export FOAM_MPI=mpi-system export FOAM_MPI=sys-mpi
_foamEtc -config mpi-system # <- Adjustments (optional) _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 then
echo 1>&2 export MPI_ROOT="$MPI_ARCH_PATH"
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2 elif [ -n "$MPI_ROOT" ]
echo " Please set the environment variable MPI_ROOT to point to" \ then
" the base folder for the system MPI in use." 1>&2 export MPI_ARCH_PATH="$MPI_ROOT"
echo " Example:" 1>&2 fi
echo 1>&2
echo " export MPI_ROOT=/opt/mpi" 1>&2 _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 echo 1>&2
else else
export MPI_ARCH_PATH=$MPI_ROOT _foamMpiWarning="${_foamMpiWarning}has unset "
if [ -z "$MPI_ARCH_FLAGS" ] [ -n "$MPI_ARCH_FLAGS" ] || {
then exec 1>&2
echo 1>&2 echo "${_foamMpiWarning}MPI_ARCH_FLAGS"
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2 echo "Please set correctly. For example,"
echo " MPI_ARCH_FLAGS is not set. Example:" 1>&2 echo ' export MPI_ARCH_FLAGS="-DOMPI_SKIP_MPICXX"'
echo 1>&2 echo
echo " export MPI_ARCH_FLAGS=\"-DOMPI_SKIP_MPICXX\"" 1>&2 }
echo 1>&2 [ -n "$MPI_ARCH_INC" ] || {
fi exec 1>&2
echo "${_foamMpiWarning}MPI_ARCH_INC"
if [ -z "$MPI_ARCH_INC" ] echo "Please set correctly. For example,"
then echo ' export MPI_ARCH_INC="-isystem $MPI_ROOT/include"'
echo 1>&2 echo
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2 }
echo " MPI_ARCH_INC is not set. Example:" 1>&2 [ -n "$MPI_ARCH_LIBS" ] || {
echo 1>&2 exec 1>&2
echo " export MPI_ARCH_INC=\"-isystem \$MPI_ROOT/include\"" 1>&2 echo "${_foamMpiWarning}MPI_ARCH_LIBS"
echo 1>&2 echo "Please set correctly. For example,"
fi echo ' export MPI_ARCH_LIBS="-L$MPI_ROOT/lib -lmpi'
echo
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 fi
;; ;;
MPICH) MPICH)
export FOAM_MPI=mpich-3.3 export FOAM_MPI=mpich-3.3
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI _foamEtc -config prefs.mpich ## Optional adjustments
export MPI_HOME=$MPI_ARCH_PATH
# 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 # Could be sourced from ThirdParty with incomplete environment
if command -v _foamAddLibAuto >/dev/null # Normal sourcing if command -v _foamAddLibAuto >/dev/null # Normal sourcing
then then
_foamAddPath $MPI_ARCH_PATH/bin _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddMan $MPI_ARCH_PATH/share/man _foamAddMan "$MPI_ARCH_PATH"/share/man
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH _foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
fi fi
;; ;;
MPICH-GM) MPICH-GM)
export FOAM_MPI=mpich-gm export FOAM_MPI=mpich-gm
export MPI_ARCH_PATH=/opt/mpi _foamEtc -config prefs.mpich-gm ## Optional adjustments
export MPICH_PATH=$MPI_ARCH_PATH
export GM_LIB_PATH=/opt/gm/lib$WM_COMPILER_LIB_ARCH
_foamAddPath $MPI_ARCH_PATH/bin # MPI_ARCH_PATH (prefs) if a valid dir, or system location
_foamAddLib $MPI_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH if [ ! -d "$MPI_ARCH_PATH" ]
_foamAddLib $GM_LIB_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 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 # Could be sourced from ThirdParty with incomplete environment
if command -v _foamAddLibAuto >/dev/null # Normal sourcing if command -v _foamAddLibAuto >/dev/null # Normal sourcing
then then
_foamAddPath $MPI_ARCH_PATH/bin _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddMan $MPI_ARCH_PATH/share/man _foamAddMan "$MPI_ARCH_PATH"/share/man
_foamAddLibAuto $MPI_ARCH_PATH lib$WM_COMPILER_LIB_ARCH _foamAddLibAuto "$MPI_ARCH_PATH" "lib$WM_COMPILER_LIB_ARCH"
fi fi
;; ;;
CRAY-MPICH) CRAY-MPICH)
export FOAM_MPI=cray-mpich export FOAM_MPI=cray-mpich
export MPI_ARCH_PATH=$MPICH_DIR 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
[ -d "$MPI_ARCH_PATH" ] || { [ -d "$MPI_ARCH_PATH" ] || {
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2 echo "%{_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
echo " Not a valid $WM_MPLIB installation directory." 1>&2 echo " => ${MPI_ARCH_PATH:-unset}" 1>&2
echo " Please set MPICH_DIR properly" 1>&2 echo "Please set MPICH_DIR correctly" 1>&2
echo " Currently using '$MPI_ARCH_PATH'" 1>&2
} }
# _foamAddPath $MPI_ARCH_PATH/bin # _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib $MPI_ARCH_PATH/lib _foamAddLib "$MPI_ARCH_PATH"/lib
;; ;;
HPMPI) HPMPI)
export FOAM_MPI=hpmpi export FOAM_MPI=hpmpi
export MPI_HOME=/opt/hpmpi export MPI_HOME=/opt/hpmpi
export MPI_ARCH_PATH=$MPI_HOME export MPI_ARCH_PATH="$MPI_HOME"
_foamAddPath $MPI_ARCH_PATH/bin unset libDir
case "$(uname -m)" in
case $(uname -m) in x86_64) libDir=lib/linux_amd64 ;;
i686) i686) libDir=lib/linux_ia32 ;;
_foamAddLib $MPI_ARCH_PATH/lib/linux_ia32 ia64) libDir=lib/linux_ia64 ;;
;;
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 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) MPI)
export FOAM_MPI=mpi export FOAM_MPI=mpi
export MPI_ARCH_PATH=/opt/mpi export MPI_ARCH_PATH=/opt/mpi
;; ;;
FJMPI) FJMPI)
export FOAM_MPI=fjmpi export FOAM_MPI=fjmpi
export MPI_ARCH_PATH=/opt/FJSVmpi2 export MPI_ARCH_PATH=/opt/FJSVmpi2
_foamAddPath $MPI_ARCH_PATH/bin _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib $MPI_ARCH_PATH/lib/sparcv9 _foamAddLib "$MPI_ARCH_PATH"/lib/sparcv9
_foamAddLib /opt/FSUNf90/lib/sparcv9 _foamAddLib /opt/FSUNf90/lib/sparcv9
_foamAddLib /opt/FJSVpnidt/lib _foamAddLib /opt/FJSVpnidt/lib
;; ;;
QSMPI) QSMPI)
export FOAM_MPI=qsmpi export FOAM_MPI=qsmpi
export MPI_ARCH_PATH=/usr/lib/mpi export MPI_ARCH_PATH=/usr/lib/mpi
_foamAddPath $MPI_ARCH_PATH/bin _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib $MPI_ARCH_PATH/lib _foamAddLib "$MPI_ARCH_PATH"/lib
;; ;;
SGIMPI) SGIMPI)
# No trailing slash : "${MPI_ROOT:=/dummy}"
MPI_ROOT="${MPI_ROOT%/}" # Remove trailing slash MPI_ROOT="${MPI_ROOT%/}" # Remove trailing slash
export MPI_ARCH_PATH="${MPI_ROOT%/}" # Remove trailing slash export FOAM_MPI="${MPI_ROOT##*/}"
export FOAM_MPI="${MPI_ARCH_PATH##*/}" export MPI_ARCH_PATH="$MPI_ROOT"
[ -d "$MPI_ARCH_PATH" ] || { [ -d "$MPI_ARCH_PATH" ] || {
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2 echo "%{_foamMpiWarning}invalid $WM_MPLIB directory" 1>&2
echo " Not a valid $WM_MPLIB installation directory." 1>&2 echo " => ${MPI_ARCH_PATH:-unset}" 1>&2
echo " Please set MPI_ROOT properly (usually via the mpt module)" 1>&2 echo "Please set MPI_ROOT correctly" 1>&2
echo " Currently using '$MPI_ARCH_PATH'" 1>&2
} }
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] _foamAddPath "$MPI_ARCH_PATH"/bin
then _foamAddLib "$MPI_ARCH_PATH"/lib
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
;; ;;
INTELMPI*) INTELMPI*)
_foamEtc -config prefs.intelmpi ## Optional adjustments
if [ -n "$I_MPI_ROOT" ] if [ -n "$I_MPI_ROOT" ]
then 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 elif [ -n "$MPI_ROOT" ]
FOAM_MPI="${MPI_ARCH_PATH##*/}" then
# 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
# MPI_ROOT: General specification # MPI_ROOT: General specification
MPI_ARCH_PATH="${MPI_ROOT%/}" # Remove trailing slash MPI_ARCH_PATH="${MPI_ROOT}"
FOAM_MPI="${MPI_ARCH_PATH##*/}"
# If subdirectory is version number only, prefix with 'impi-' elif [ -n "$MPI_ARCH_PATH" ]
case "$FOAM_MPI" in ([0-9]*) FOAM_MPI="impi-$FOAM_MPI";; esac then
# MPI_ARCH_PATH: Set I_MPI_ROOT accordingly
if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ] export I_MPI_ROOT="$MPI_ARCH_PATH"
then
echo "Using $WM_MPLIB" 1>&2
echo " FOAM_MPI : $FOAM_MPI" 1>&2
echo " MPI_ROOT : $MPI_ARCH_PATH" 1>&2
fi
fi fi
[ -d "$MPI_ARCH_PATH" ] || {
echo "Warning in $WM_PROJECT_DIR/etc/config.sh/mpi:" 1>&2 if [ -d "$MPI_ARCH_PATH" ]
echo " Not a valid $WM_MPLIB installation directory." 1>&2 then
echo " Please set I_MPI_ROOT or MPI_ROOT properly." 1>&2 # Remove trailing slash
echo " Currently using '$MPI_ARCH_PATH'" 1>&2 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 export FOAM_MPI MPI_ARCH_PATH
_foamAddPath "$MPI_ARCH_PATH/intel64/bin" _foamAddPath "$MPI_ARCH_PATH"/intel64/bin
_foamAddLib "$MPI_ARCH_PATH/intel64/lib" _foamAddLib "$MPI_ARCH_PATH"/intel64/lib
;; ;;
MSMPI) MSMPI)
export FOAM_MPI=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" ] if [ ! -d "$MPI_ARCH_PATH" ]
then then
export MPI_ARCH_PATH=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER/$FOAM_MPI export MPI_ARCH_PATH="$_foamMpiPrefixDir/$FOAM_MPI"
fi fi
# _foamAddPath "$MPI_ARCH_PATH/bin" # _foamAddPath "$MPI_ARCH_PATH"/bin
_foamAddLib "$MPI_ARCH_PATH/lib/x64" _foamAddLib "$MPI_ARCH_PATH"/lib/x64
;; ;;
esac esac
# Add (non-dummy) MPI implementation #------------------------------------------------------------------------------
# - dummy MPI already in lib-path and has no external libraries # Final
if [ "$FOAM_MPI" != dummy ] && command -v _foamAddLib >/dev/null
# 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 then
if [ -n "$FOAM_EXT_LIBBIN" ] # External libraries (allowed to be unset) if [ -n "$FOAM_VERBOSE" ] && [ -n "$PS1" ]
then 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 fi
_foamAddLib $FOAM_LIBBIN/$FOAM_MPI
fi fi
# Alternative to 'mpiBufferSize' controlDict entry
#export MPI_BUFFER_SIZE=20000000 # Cleanup
unset _foamMpiPrefixDir _foamMpiVersion _foamMpiWarning
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -91,7 +91,8 @@ setenv WM_COMPILE_OPTION Opt
# [WM_MPLIB] - MPI implementation: # [WM_MPLIB] - MPI implementation:
# = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM | # = SYSTEMOPENMPI | OPENMPI | SYSTEMMPI | MPI | MPICH | MPICH-GM |
# HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI # HPMPI | CRAY-MPICH | FJMPI | QSMPI | SGIMPI | INTELMPI | USERMPI
# Also possible to use INTELMPI-xyz etc and define your own wmake rule # Specify SYSTEMOPENMPI1, SYSTEMOPENMPI2 for internal tracking (if desired)
# Can also use INTELMPI-xyz etc and define your own wmake rule
setenv WM_MPLIB SYSTEMOPENMPI setenv WM_MPLIB SYSTEMOPENMPI

View File

@ -1,10 +1,4 @@
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) include $(GENERAL_RULES)/mpi-rules
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
/* Default is PROJECT LIB/mpi target */
ifeq (,$(FOAM_MPI_LIBBIN))
FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
endif
EXE_INC = $(PFLAGS) $(PINC) $(c++LESSWARN) EXE_INC = $(PFLAGS) $(PINC) $(c++LESSWARN)

View File

@ -1,14 +1,8 @@
/* /*
* NB: mplib PINC must appear after PTSCOTCH_INC_DIR to ensure we * NB: PINC must appear after PTSCOTCH_INC_DIR to ensure we do not
* do not accidentally get a ptscotch header from the MPI distribution. * accidentally get a ptscotch header from the MPI distribution
*/ */
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) include $(GENERAL_RULES)/mpi-rules
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
/* Default is PROJECT LIB/mpi target */
ifeq (,$(strip $(FOAM_MPI_LIBBIN)))
FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
endif
EXE_INC = \ EXE_INC = \
-I$(PTSCOTCH_INC_DIR) \ -I$(PTSCOTCH_INC_DIR) \

View File

@ -1,5 +1,4 @@
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) include $(GENERAL_RULES)/mpi-rules
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
EXE_INC = \ EXE_INC = \
-I$(ZOLTAN_INC_DIR) \ -I$(ZOLTAN_INC_DIR) \

View File

@ -1,8 +1,7 @@
#-------------------------------*- makefile -*--------------------------------- #------------------------------------------------------------------------------
# ADIOS2 includes/libraries # ADIOS2 includes/libraries
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) include $(GENERAL_RULES)/mpi-rules
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
# May need to strip off rpath ... # May need to strip off rpath ...

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# Use openmpi mpicc to obtain settings - mpicc must be available
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = $(shell mpicc --showme:compile)
PLIBS = $(shell mpicc --showme:link)
#------------------------------------------------------------------------------

View File

@ -0,0 +1,32 @@
#------------------------------------------------------------------------------
# MPI rules
PFLAGS =
PINC =
PLIBS =
# The stem name. Eg, SYSTEMOPENMPI4 -> SYSTEMOPENMPI
MPLIB_STEMNAME = $(shell echo "$(WM_MPLIB)" | sed -e 's/[-.0-9]*$$//')
ifneq ("$(MPLIB_STEMNAME)","$(WM_MPLIB)")
sinclude $(GENERAL_RULES)/mplib$(MPLIB_STEMNAME)
sinclude $(DEFAULT_RULES)/mplib$(MPLIB_STEMNAME)
ifneq ("$(RULES)","$(DEFAULT_RULES)")
sinclude $(RULES)/mplib$(MPLIB_STEMNAME)
endif
endif
ifneq ("","$(WM_MPLIB)")
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
ifneq ("$(RULES)","$(DEFAULT_RULES)")
sinclude $(RULES)/mplib$(WM_MPLIB)
endif
endif
# Default target MPI libdir is PROJECT lib/<mpi-name>
ifeq (,$(FOAM_MPI_LIBBIN))
FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
endif
#------------------------------------------------------------------------------

View File

@ -1 +0,0 @@
no-mpi

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# HPMPI rules (i386)
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi
#------------------------------------------------------------------------------

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# HPMPI rules (ia64)
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia64 -lmpi
#------------------------------------------------------------------------------

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# HPMPI rules (x86_64)
PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi
#------------------------------------------------------------------------------

View File

@ -0,0 +1,8 @@
#------------------------------------------------------------------------------
# INTELMPI rules (x86_64)
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1 +1,6 @@
#------------------------------------------------------------------------------
# Cray MPICH is MPICH
include $(GENERAL_RULES)/mplibMPICH include $(GENERAL_RULES)/mplibMPICH
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/include PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi -lrt PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi -lrt
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpich -L$(GM_LIB_PATH) -lgm PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpich -L$(GM_LIB_PATH) -lgm
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/include PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/include PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi PLIBS = -L$(MPI_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = PFLAGS =
PINC = -isystem $(MPI_ARCH_PATH)/include PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,3 +1,7 @@
#------------------------------------------------------------------------------
PFLAGS = -DSGIMPI -DMPI_NO_CPPBIND PFLAGS = -DSGIMPI -DMPI_NO_CPPBIND
PINC = -isystem $(MPI_ARCH_PATH)/include PINC = -isystem $(MPI_ARCH_PATH)/include
PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi
#------------------------------------------------------------------------------

View File

@ -1,5 +1,8 @@
# Use the system installed mpi - depends on specific environment variables #------------------------------------------------------------------------------
# System installed mpi - depends on specific environment variables
PFLAGS = $(MPI_ARCH_FLAGS) PFLAGS = $(MPI_ARCH_FLAGS)
PINC = $(MPI_ARCH_INC) PINC = $(MPI_ARCH_INC)
PLIBS = $(MPI_ARCH_LIBS) PLIBS = $(MPI_ARCH_LIBS)
#------------------------------------------------------------------------------

View File

@ -1,5 +1,6 @@
# Use the system installed openmpi - mpicc must be installed #------------------------------------------------------------------------------
# Use openmpi mpicc to obtain settings - mpicc must be available
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX include $(GENERAL_RULES)/mpi-mpicc-openmpi
PINC = $(shell mpicc --showme:compile)
PLIBS = $(shell mpicc --showme:link) #------------------------------------------------------------------------------

View File

@ -1,7 +1,8 @@
#------------------------------------------------------------------------------
# Empty flags for not compiling/linking MPI # Empty flags for not compiling/linking MPI
PFLAGS = PFLAGS =
PINC = PINC =
PLIBS = PLIBS =
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-x86_64-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX include $(GENERAL_RULES)/mplib-x86_64-INTELMPI
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-x86_64-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX include $(GENERAL_RULES)/mplib-x86_64-INTELMPI
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX include $(GENERAL_RULES)/mplib-x86_64-INTELMPI
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-x86_64-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX include $(GENERAL_RULES)/mplib-x86_64-INTELMPI
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-x86_64-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi

View File

@ -1,3 +1 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX include $(GENERAL_RULES)/mplib-x86_64-INTELMPI
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-ia32-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-ia32-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-ia64-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia64 -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-ia64-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia64 -lmpi

View File

@ -1,3 +0,0 @@
PFLAGS = -DMPICH_SKIP_MPICXX -DOMPI_SKIP_MPICXX
PINC = -isystem $(MPI_ARCH_PATH)/intel64/include
PLIBS = -L$(MPI_ARCH_PATH)/intel64/lib -lmpi

View File

@ -1,3 +1 @@
PFLAGS = include $(GENERAL_RULES)/mplib-ia32-HPMPI
PINC = -isystem $(MPI_ARCH_PATH)/include -D_MPICC_H
PLIBS = -L$(MPI_ARCH_PATH)/lib/linux_ia32 -lmpi