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