From d6f7fd09397b0daba921a028f69b86ffe21b1941 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 1 Aug 2012 15:52:42 +0100 Subject: [PATCH] ENH: targetVolumeToCell: added mask --- .../mesh/manipulation/topoSet/topoSetDict | 6 +-- .../targetVolumeToCell/targetVolumeToCell.C | 44 ++++++++++++------- .../targetVolumeToCell/targetVolumeToCell.H | 9 ++-- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/applications/utilities/mesh/manipulation/topoSet/topoSetDict b/applications/utilities/mesh/manipulation/topoSet/topoSetDict index be90a8fb80..7a2049c686 100644 --- a/applications/utilities/mesh/manipulation/topoSet/topoSetDict +++ b/applications/utilities/mesh/manipulation/topoSet/topoSetDict @@ -171,13 +171,13 @@ FoamFile // insidePoint (1 2 3); // point inside region to select // } // -// // Cells underneath plane such that volume is reached. Can be used -// // in setFields. +// // Cells underneath plane such that volume is reached. E.g. for use +// // in setFields to set the level given a wanted volume. // source targetVolumeToCell; // sourceInfo // { // volume 2e-05; -// normal (1 1 1); +// normal (0 1 0); // usually in direction of gravity // } // // diff --git a/src/meshTools/sets/cellSources/targetVolumeToCell/targetVolumeToCell.C b/src/meshTools/sets/cellSources/targetVolumeToCell/targetVolumeToCell.C index c64c29e1e6..a80688a184 100644 --- a/src/meshTools/sets/cellSources/targetVolumeToCell/targetVolumeToCell.C +++ b/src/meshTools/sets/cellSources/targetVolumeToCell/targetVolumeToCell.C @@ -27,6 +27,7 @@ License #include "polyMesh.H" #include "globalMeshData.H" #include "plane.H" +#include "cellSet.H" #include "addToRunTimeSelectionTable.H" @@ -74,6 +75,7 @@ Foam::scalar Foam::targetVolumeToCell::volumeOfSet Foam::label Foam::targetVolumeToCell::selectCells ( const scalar normalComp, + const PackedBoolList& maskSet, PackedBoolList& selected ) const { @@ -86,7 +88,7 @@ Foam::label Foam::targetVolumeToCell::selectCells { const point& cc = mesh_.cellCentres()[cellI]; - if ((cc&n_) < normalComp) + if (maskSet[cellI] && ((cc&n_) < normalComp)) { selected[cellI] = true; nSelected++; @@ -103,14 +105,25 @@ void Foam::targetVolumeToCell::combine(topoSet& set, const bool add) const // Select no cells return; } - else if (gSum(mesh_.cellVolumes()) < vol_) + + + PackedBoolList maskSet(mesh_.nCells(), 1); + label nTotCells = mesh_.globalData().nTotalCells(); + if (maskSetName_.size()) { - // Select all cells - forAll(mesh_.cellVolumes(), cellI) + // Read cellSet + Info<< " Operating on subset defined by cellSet " << maskSetName_ + << endl; + + maskSet = 0; + cellSet subset(mesh_, maskSetName_); + + forAllConstIter(cellSet, subset, iter) { - addOrDelete(set, cellI, add); + maskSet[iter.key()] = 1; } - return; + + nTotCells = returnReduce(subset.size(), sumOp