COMP: non-group-local communicator for MS-MPI (mingw)

- partial revert for 13740de427 (#2158)

  MS-MPI does not currently have a MPI_Comm_create_group(),
  so keep using MPI_Comm_create() there.

  Only affects multi-world simulations.

CONFIG: retain dummy version of libPstream.dll

- retain as libPstream.dll-dummy so that it is available for
  manual replacement of the regular libPstream.dll (#2290)

  Keep extra copy of libPstream.dll as libPstream.dll-msmpi
  (for example) for manual replacement.
This commit is contained in:
Mark Olesen 2021-12-16 14:38:57 +01:00
parent c2368e3775
commit 83243cf01e
2 changed files with 62 additions and 19 deletions

View File

@ -6,7 +6,7 @@
# \\ / A nd | www.openfoam.com
# \\/ M anipulation |
#------------------------------------------------------------------------------
# Copyright (C) 2020 OpenCFD Ltd.
# Copyright (C) 2020-2021 OpenCFD Ltd.
#------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
@ -256,16 +256,25 @@ echo "Third-party libraries in platforms/$targetPlatform$compOptions" >| "$tmpTa
echo "Copy common files" 1>&2
rsync -a --exclude .gitignore COPYING META-INFO README.md bin etc "$tmpTarget"
if [ -n "$FOAM_CONFIG_ETC" ]
# Remove branch info (probably spurious)
if [ -f "$tmpTarget/META-INFO/build-info" ]
then
etcDir="${FOAM_CONFIG_ETC##*/}"
if [ "$WM_PROJECT_DIR/$etcDir" = "$FOAM_CONFIG_ETC" ]
then
echo "Copy additional config dir: $etcDir" 1>&2
rsync -a "$etcDir" "$tmpTarget"
else
sed -i -e '/^branch=/d' "$tmpTarget/META-INFO/build-info"
fi
# One-level only?
configEtcDir="${FOAM_CONFIG_ETC##*/}"
if [ -n "$configEtcDir" ]
then
case "$FOAM_CONFIG_ETC" in
("$configEtcDir" | "$WM_PROJECT_DIR/$configEtcDir")
echo "Copy config dir: $configEtcDir" 1>&2
rsync -a "$configEtcDir" "$tmpTarget"
;;
(*)
echo "Do not know how to copy additional config dir: $FOAM_CONFIG_ETC" 1>&2
fi
;;
esac
else
echo "No additional config dir" 1>&2
fi
@ -295,12 +304,27 @@ rsync -a "$root"/bin/*.exe "$root"/lib/*.dll "$binDir"
# Pstream .dll into bin directory
other="$root/lib/$FOAM_MPI"
if [ -d "$other" ] && [ -n "$FOAM_MPI" ]
if [ -d "$other" ] && [ -n "$FOAM_MPI" ] && [ "$FOAM_MPI" != dummy ]
then
echo "Copy ($FOAM_MPI) libPstream.dll -> platforms bin/" 1>&2
echo "Copy ($FOAM_MPI) *.dll -> platforms bin/" 1>&2
rsync -a "$other"/*.dll "$binDir"
ending="$(echo "$FOAM_MPI" | tr '[:upper:]' '[:lower:]' | sed -e 's/[^A-Za-z].*//')"
[ -n "$ending" ] || continue
for name in libPstream.dll
do
if [ -f "$other/$name" ]
then
# Keep duplicate for manual replacement if needed
newName="$name-$ending"
echo " [copy] $FOAM_MPI/$name -> $newName" 1>&2
cp -p "$other/$name" "$binDir/$newName"
fi
done
fi
# Various dummy (stub) libraries
other="$root/lib/dummy"
if [ -d "$other" ]
@ -308,16 +332,25 @@ then
echo "Copy (dummy) *.dll -> platforms bin/" 1>&2
for fullpath in "$other"/*.dll
do
[ -f "$fullpath" ] || continue;
name="${fullpath##*/}"
if [ -f "$fullpath" ]
if [ -f "$binDir/$name" ]
then
if [ -f "$binDir/$name" ]
then
echo " [skip dummy/$name]" 1>&2
else
echo " dummy/$name" 1>&2
cp -p "$fullpath" "$binDir"
fi
case "$name" in
(libPstream*)
# Keep for manual replacement if needed
newName="$name-dummy"
echo " [copy] dummy/$name -> $newName" 1>&2
cp -p "$fullpath" "$binDir/$newName"
;;
(*)
echo " [skip] dummy/$name" 1>&2
;;
esac
else
echo " dummy/$name" 1>&2
cp -p "$fullpath" "$binDir"
fi
done
fi

View File

@ -1216,6 +1216,15 @@ void Foam::UPstream::allocatePstreamCommunicator
&PstreamGlobals::MPIGroups_[index]
);
#if defined(MSMPI_VER)
// ms-mpi (10.0 and others?) does not have MPI_Comm_create_group
MPI_Comm_create
(
PstreamGlobals::MPICommunicators_[parentIndex],
PstreamGlobals::MPIGroups_[index],
&PstreamGlobals::MPICommunicators_[index]
);
#else
// Create new communicator for this group
MPI_Comm_create_group
(
@ -1224,6 +1233,7 @@ void Foam::UPstream::allocatePstreamCommunicator
Pstream::msgType(),
&PstreamGlobals::MPICommunicators_[index]
);
#endif
if (PstreamGlobals::MPICommunicators_[index] == MPI_COMM_NULL)
{