ENH: syncTools: added sync of set of edges

This commit is contained in:
mattijs
2011-11-30 17:54:37 +00:00
parent 2d0d6ab959
commit de4e6996a3
2 changed files with 117 additions and 1 deletions

View File

@ -145,6 +145,18 @@ public:
const TransformOp& top
);
//- Synchronize values on selected mesh edges.
template <class T, class CombineOp, class TransformOp>
static void syncEdgeList
(
const polyMesh&,
const labelList& meshEdges,
List<T>&,
const CombineOp& cop,
const T& nullValue,
const TransformOp& top
);
//- Synchronize values on boundary faces only.
template <class T, class CombineOp, class TransformOp>
static void syncBoundaryFaceList
@ -265,7 +277,7 @@ public:
);
}
//- Synchronize values on all mesh edges.
//- Synchronize locations on all mesh edges.
template <class CombineOp>
static void syncEdgePositions
(
@ -285,6 +297,51 @@ public:
);
}
//- Synchronize values on selected mesh edges.
template <class T, class CombineOp>
static void syncEdgeList
(
const polyMesh& mesh,
const labelList& meshEdges,
List<T>& l,
const CombineOp& cop,
const T& nullValue
)
{
syncEdgeList
(
mesh,
meshEdges,
l,
cop,
nullValue,
mapDistribute::transform()
);
}
//- Synchronize locations on selected mesh edges.
template <class CombineOp>
static void syncEdgePositions
(
const polyMesh& mesh,
const labelList& meshEdges,
List<point>& l,
const CombineOp& cop,
const point& nullValue
)
{
syncEdgeList
(
mesh,
meshEdges,
l,
cop,
nullValue,
mapDistribute::transformPosition()
);
}
// Synchronise face-wise data

View File

@ -1251,6 +1251,65 @@ void Foam::syncTools::syncEdgeList
//}
template <class T, class CombineOp, class TransformOp>
void Foam::syncTools::syncEdgeList
(
const polyMesh& mesh,
const labelList& meshEdges,
List<T>& edgeValues,
const CombineOp& cop,
const T& nullValue,
const TransformOp& top
)
{
if (edgeValues.size() != meshEdges.size())
{
FatalErrorIn
(
"syncTools<class T, class CombineOp>::syncEdgeList"
"(const polyMesh&, List<T>&, const CombineOp&, const T&)"
) << "Number of values " << edgeValues.size()
<< " is not equal to the number of meshEdges "
<< meshEdges.size() << abort(FatalError);
}
const globalMeshData& gd = mesh.globalData();
const indirectPrimitivePatch& cpp = gd.coupledPatch();
const Map<label>& mpm = gd.coupledPatchMeshEdgeMap();
List<T> cppFld(cpp.nEdges(), nullValue);
forAll(meshEdges, i)
{
label edgeI = meshEdges[i];
Map<label>::const_iterator iter = mpm.find(edgeI);
if (iter != mpm.end())
{
cppFld[iter()] = edgeValues[i];
}
}
globalMeshData::syncData
(
cppFld,
gd.globalEdgeSlaves(),
gd.globalEdgeTransformedSlaves(),
gd.globalEdgeSlavesMap(),
gd.globalTransforms(),
cop,
top
);
forAll(meshEdges, i)
{
label edgeI = meshEdges[i];
Map<label>::const_iterator iter = mpm.find(edgeI);
if (iter != mpm.end())
{
edgeValues[i] = cppFld[iter()];
}
}
}
template <class T, class CombineOp, class TransformOp>
void Foam::syncTools::syncBoundaryFaceList
(