Update to dynamicPolyRefinementFvMesh

Only one topo change iteration per time step. This is handled withing
dynamicPolyRefinementFvMesh class instead of polyhedralRefinement
(is a polyMeshModifier) in order to skip the unnecessary cell/point selection
step as well.
This commit is contained in:
Vuko Vukcevic 2018-02-06 13:51:01 +01:00
parent 819568c8d1
commit 6c693cb8d4
2 changed files with 12 additions and 0 deletions

View file

@ -86,6 +86,8 @@ Foam::dynamicPolyRefinementFvMesh::dynamicPolyRefinementFvMesh
).subDict(typeName + "Coeffs") ).subDict(typeName + "Coeffs")
), ),
refineInterval_(readLabel(refinementDict_.lookup("refineInterval"))), refineInterval_(readLabel(refinementDict_.lookup("refineInterval"))),
curTimeIndex_(-1),
refinementSelectionPtr_(refinementSelection::New(*this, refinementDict_)) refinementSelectionPtr_(refinementSelection::New(*this, refinementDict_))
{ {
// Add the topology modifier engine // Add the topology modifier engine
@ -127,12 +129,18 @@ bool Foam::dynamicPolyRefinementFvMesh::update()
// Performing refinement/unrefinement when: // Performing refinement/unrefinement when:
// 1. We are at the first time step // 1. We are at the first time step
// 2. Time step is a multiplier of specified refineInterval // 2. Time step is a multiplier of specified refineInterval
// 3. Only once per time step
if if
( (
time().timeIndex() > 0 time().timeIndex() > 0
&& time().timeIndex() % refineInterval_ == 0 && time().timeIndex() % refineInterval_ == 0
&& curTimeIndex_ < time().timeIndex()
) )
{ {
// Update current time index to skip multiple topo changes per single
// time step
curTimeIndex_ = time().timeIndex();
// Get reference to polyhedralRefinement polyMeshModifier // Get reference to polyhedralRefinement polyMeshModifier
polyhedralRefinement& polyRefModifier = polyhedralRefinement& polyRefModifier =
refCast<polyhedralRefinement>(topoChanger_[0]); refCast<polyhedralRefinement>(topoChanger_[0]);

View file

@ -65,6 +65,10 @@ class dynamicPolyRefinementFvMesh
//- Refinement interval //- Refinement interval
label refineInterval_; label refineInterval_;
//- Current time index (helper variable to skip multiple topo changes in
// a single time step)
label curTimeIndex_;
//- Refinement selection algorithm that has two jobs: //- Refinement selection algorithm that has two jobs:
// 1. Selects cells to refine from all cells // 1. Selects cells to refine from all cells
// 2. Selects split points that are ok to refine based on given set of // 2. Selects split points that are ok to refine based on given set of