FlameSlave |
October 2, 2019 04:37 |
Parallel dual mesh interpolation
Hi everyone,
I am currently trying to transfer fields between two coexisting regions within one case. The two regions overlap perfectly and have the same resolution. I am using MeshToMesh to map the desired fields back and forth. When I initialize with
Code:
// create interpolation object for charge density mapping
meshToMesh interpolatorObj_(electricRegion, fluidRegion, meshToMesh::imDirect, false);
it runs fine in serial. However, when going to parallel using mpirun I get a segmentation fault error when initializing the meshToMesh object:
Code:
[1] [4] #0 Foam::error::printStack(Foam::Ostream&)[5] #0 Foam::error::printStack(Foam::Ostream&)#0[3] #0 Foam::error::printStack(Foam::Ostream&) Foam::error::printStack(Foam::Ostream&)[6] #0 Foam::error::printStack(Foam::Ostream&)[0] #0 Foam::error::printStack(Foam::Ostream&)[7] #0 Foam::error::printStack(Foam::Ostream&)[2] #0 Foam::error::printStack(Foam::Ostream&) at ??:?
[1] #1 Foam::sigSegv::sigHandler(int) at ??:?
at ??:?
[4] #1 Foam::sigSegv::sigHandler(int)[5] #1 Foam::sigSegv::sigHandler(int) at ??:?
[0] #1 Foam::sigSegv::sigHandler(int) at ??:?
[3] #1 Foam::sigSegv::sigHandler(int) at ??:?
at ??:?
[2] #1 Foam::sigSegv::sigHandler(int)[7] #1 Foam::sigSegv::sigHandler(int) at ??:?
[6] #1 Foam::sigSegv::sigHandler(int) at ??:?
[1] #2 ? at ??:?
[0] #2 ? at ??:?
[4] #2 ? at ??:?
at ??:?
[5] #2 ?[3] #2 ? at ??:?
[2] #2 ? in "/lib/x86_64-linux-gnu/libc.so.6"
[1] #3 cfree in "/lib/x86_64-linux-gnu/libc.so.6"
[0] #3 cfree at ??:?
[7] #2 ? at ??:?
[6] #2 ? in "/lib/x86_64-linux-gnu/libc.so.6"
[5] #3 cfree in "/lib/x86_64-linux-gnu/libc.so.6"
[4] #3 cfree in "/lib/x86_64-linux-gnu/libc.so.6"
[2] #3 cfree in "/lib/x86_64-linux-gnu/libc.so.6"
[1] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const in "/lib/x86_64-linux-gnu/libc.so.6"
[3] #3 cfree in "/lib/x86_64-linux-gnu/libc.so.6"
[0] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const in "/lib/x86_64-linux-gnu/libc.so.6"
[7] #3 cfree in "/lib/x86_64-linux-gnu/libc.so.6"
[6] #3 cfree in "/lib/x86_64-linux-gnu/libc.so.6"
[5] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const in "/lib/x86_64-linux-gnu/libc.so.6"
[4] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const in "/lib/x86_64-linux-gn at ??:?
[1] #5 Foam::meshToMesh::calculate(Foam::word const&)u/l in "/lib/xibc.so.6"86_64-linux-gnu
/libc.so.6"
[2] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const[7] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const in "/lib/x86_64-linux-gnu/libc.so.6"
[3] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const in "/lib/x86_64-linux-gnu/libc.so.6"
[6] #4 Foam::meshToMesh::distributeAndMergeCells(Foam::mapDistribute const&, Foam::polyMesh const&, Foam::globalIndex const&, Foam::Field<Foam::Vector<double> >&, Foam::List<Foam::face>&, Foam::List<int>&, Foam::List<int>&, Foam::List<int>&) const at ??:?
[0] #5 Foam::meshToMesh::calculate(Foam::word const&) at ??:?
[4] #5 Foam::meshToMesh::calculate(Foam::word const&) at ??:?
[5] #5 Foam::meshToMesh::calculate(Foam::word const&) at ??:?
[1] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[2] #5 Foam::meshToMesh::calculate(Foam::word const&) at ??:?
[7] #5 Foam::meshToMesh::calculate(Foam::word const&) at ??:?
[6] #5 Foam::meshToMesh::calculate(Foam::word const&) at ??:?
[3] #5 Foam::meshToMesh::calculate(Foam::word const&) at ??:?
[0] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[4] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[2] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[1] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool) at ??:?
[7] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[6] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[3] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[5] #6 Foam::meshToMesh::constructNoCuttingPatches(Foam::word const&, Foam::word const&, bool) at ??:?
[4] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool) at ??:?
[0] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool) at ??:?
[2] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool) at ??:?
[1] #8 at ??:?
[5] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool) at ??:?
[7] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool) at ??:?
[3] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool) at ??:?
[6] #7 Foam::meshToMesh::meshToMesh(Foam::polyMesh const&, Foam::polyMesh const&, Foam::meshToMesh::interpolationMethod const&, bool)? at ??:?
I have used the following steps to set up my case, similarly to the cht multi region case:
- blockMesh with two cellZones declared in the blockMeshDict .
- Now, I call splitMeshRegion -overwrite to obtain the regions
- Next, I manually rename the boundary conditions of the second mesh (Electric) in all polyMesh/boundary and cellToRegions files to have the same name as the first one (in blockMeshDict they were different initially to avoid conflict).
- For parallel only, I call decomposePar -allRegions. I have already tried both scotch and simple with the same decomposition for both meshes on 8 cores.
All these steps above run fine but the parallel case causes me some headache. Debugging it, I was able to locate the point of crashing in meshToMesh::distributeAndMergeCells which is a parallel-specific function in meshToMeshParallelOps.C. However, I have no idea what's causing it. Does anyone have an idea what might be the problem here or has even encountered something similar before?
Thanks!
|