On Tue, Dec 04, 2007 at 07:12:41PM +0000, Garth N. Wells wrote:
Kristian Oelgaard wrote:
Quoting DOLFIN <dolfin@xxxxxxxxxx>:
I think this changeset broke PyDOLFIN
tialized -MT _dolfin_la-dolfin_wrap.lo -MD -MP -MF
.deps/_dolfin_la-dolfin_wrap.Tpo -c dolfin_wrap.cpp -fPIC -DPIC -o
.libs/_dolfin_la-dolfin_wrap.o
./../src/kernel/mesh/dolfin/MeshFunction.h: In member function 'void
dolfin::MeshFunction<T>::broadcast() const [with T = int]':
dolfin_wrap.cpp:80706: instantiated from here
./../src/kernel/mesh/dolfin/MeshFunction.h:184: error: no matching function for
call to 'dolfin::MPIMeshCommunicator::broadcast(const dolfin::MeshFunction<int>&)'
./../src/kernel/mesh/dolfin/MPIMeshCommunicator.h:35: note: candidates are:
static void dolfin::MPIMeshCommunicator::broadcast(const dolfin::Mesh&)
./../src/kernel/mesh/dolfin/MPIMeshCommunicator.h:41: note:
static void dolfin::MPIMeshCommunicator::broadcast(const
dolfin::MeshFunction<unsigned int>&)
This should be fixed now.
I added member functions to MeshFunction for broadcast and receive which
were wrappers for MPIMeshCommunicator::broadcast(..)/receive(..),
analogous to Mesh::broadcast()/receive(). The problem is that
MeshFunction is a templated class.
To keep a consistent interface, I see two options:
a) Create specialisations of MeshFunction::broadcast()/receive(); or
b) Remove the Mesh::broadcast()/receive() wrapper functions and call
MPIMeshComminicator::broadcast(..)/receive(..) directly.
Option (b) that you implemented looks good.