From 55b1c57275e230023e8e9ca93b6e61eae3c1799c Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Thu, 18 Jul 2019 15:54:55 +0200 Subject: [PATCH] ENH: adjust displacementLayered framework - add patch-point tracking to structured walk - provision for cylindrical interpolation scheme STYLE: more efficient use of bitSet --- .../displacementLayeredMotionMotionSolver.C | 285 +++++++++--------- .../displacementLayeredMotionMotionSolver.H | 43 ++- .../layeredSolver/pointEdgeStructuredWalk.C | 15 +- .../layeredSolver/pointEdgeStructuredWalk.H | 39 ++- .../layeredSolver/pointEdgeStructuredWalkI.H | 33 +- 5 files changed, 224 insertions(+), 191 deletions(-) diff --git a/src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C index a79511ba08..da93c3d292 100644 --- a/src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C +++ b/src/dynamicMesh/motionSolvers/displacement/layeredSolver/displacementLayeredMotionMotionSolver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2015 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2015-2019 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2016 OpenFOAM Foundation @@ -59,6 +59,26 @@ namespace Foam // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // +const Foam::coordSystem::cylindrical& +Foam::displacementLayeredMotionMotionSolver::getCylindrical +( + const label cellZoneI, + const dictionary& zoneDict +) +{ + auto iter = cylSystems_.cfind(cellZoneI); + + if (iter.found()) + { + return *(iter.val()); + } + + cylSystems_.set(cellZoneI, new coordSystem::cylindrical(zoneDict)); + + return *cylSystems_[cellZoneI]; +} + + void Foam::displacementLayeredMotionMotionSolver::calcZoneMask ( const label cellZoneI, @@ -66,68 +86,49 @@ void Foam::displacementLayeredMotionMotionSolver::calcZoneMask bitSet& isZoneEdge ) const { + isZonePoint.resize(mesh().nPoints()); + isZoneEdge.resize(mesh().nEdges()); + if (cellZoneI == -1) { - isZonePoint.setSize(mesh().nPoints()); isZonePoint = true; - - isZoneEdge.setSize(mesh().nEdges()); isZoneEdge = true; + return; } - else + + + isZonePoint.reset(); + isZoneEdge.reset(); + + const cellZone& cz = mesh().cellZones()[cellZoneI]; + + // Mark points, edges inside cellZone + for (const label celli : cz) { - const cellZone& cz = mesh().cellZones()[cellZoneI]; - - label nPoints = 0; - forAll(cz, i) - { - const labelList& cPoints = mesh().cellPoints(cz[i]); - forAll(cPoints, cPointi) - { - if (isZonePoint.set(cPoints[cPointi])) - { - ++nPoints; - } - } - } - syncTools::syncPointList - ( - mesh(), - isZonePoint, - orEqOp(), - 0 - ); - - - // Mark edge inside cellZone - label nEdges = 0; - forAll(cz, i) - { - const labelList& cEdges = mesh().cellEdges(cz[i]); - forAll(cEdges, cEdgeI) - { - if (isZoneEdge.set(cEdges[cEdgeI])) - { - ++nEdges; - } - } - } - syncTools::syncEdgeList - ( - mesh(), - isZoneEdge, - orEqOp(), - 0 - ); - - if (debug) - { - Info<< "On cellZone " << cz.name() - << " marked " << returnReduce(nPoints, sumOp