diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml
index d522660cc4..9a0e8d26bf 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml
@@ -12,7 +12,7 @@
animateable="0">
- Specifies the filename for the OpenFOAM Reader
+ Specifies the filename for the OpenFOAM Reader
@@ -32,25 +32,25 @@
-
+
-
+
-
+
@@ -132,6 +132,9 @@
default_values="0"
animateable="0">
+
+ Extrapolate internalField to wall and empty patches
+
@@ -141,6 +144,9 @@
number_of_elements="1"
default_values="0"
animateable="0">
+
+ Searches the polyMesh/sets/ directory
+
@@ -151,6 +157,10 @@
number_of_elements="1"
default_values="0"
animateable="0">
+
+ ZoneMesh information is used to find {cell,face,point}Zones.
+ The polyMesh/ directory is only checked on startup.
+
@@ -162,6 +172,9 @@
default_values="0"
animateable="0">
+
+ Show patch names in render window.
+
@@ -172,6 +185,9 @@
default_values="1"
animateable="0">
+
+ Cache the fvMesh in memory.
+
@@ -182,6 +198,9 @@
default_values="0"
animateable="0">
+
+ A simple way cause a reader GUI modification.
+
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
index 2ad4f68cb0..70a6230bfe 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx
@@ -71,7 +71,7 @@ vtkPV3FoamReader::vtkPV3FoamReader()
UpdateGUI = 0;
- RegionSelection = vtkDataArraySelection::New();
+ PartSelection = vtkDataArraySelection::New();
VolFieldSelection = vtkDataArraySelection::New();
PointFieldSelection = vtkDataArraySelection::New();
LagrangianFieldSelection = vtkDataArraySelection::New();
@@ -85,7 +85,7 @@ vtkPV3FoamReader::vtkPV3FoamReader()
);
SelectionObserver->SetClientData(this);
- RegionSelection->AddObserver
+ PartSelection->AddObserver
(
vtkCommand::ModifiedEvent,
this->SelectionObserver
@@ -128,14 +128,14 @@ vtkPV3FoamReader::~vtkPV3FoamReader()
}
- RegionSelection->RemoveObserver(this->SelectionObserver);
+ PartSelection->RemoveObserver(this->SelectionObserver);
VolFieldSelection->RemoveObserver(this->SelectionObserver);
PointFieldSelection->RemoveObserver(this->SelectionObserver);
LagrangianFieldSelection->RemoveObserver(this->SelectionObserver);
SelectionObserver->Delete();
- RegionSelection->Delete();
+ PartSelection->Delete();
VolFieldSelection->Delete();
PointFieldSelection->Delete();
LagrangianFieldSelection->Delete();
@@ -427,46 +427,46 @@ int vtkPV3FoamReader::GetTimeStep()
// ----------------------------------------------------------------------
-// Region selection list control
+// Parts selection list control
-vtkDataArraySelection* vtkPV3FoamReader::GetRegionSelection()
+vtkDataArraySelection* vtkPV3FoamReader::GetPartSelection()
{
- vtkDebugMacro(<<"GetRegionSelection");
- return RegionSelection;
+ vtkDebugMacro(<<"GetPartSelection");
+ return PartSelection;
}
-int vtkPV3FoamReader::GetNumberOfRegionArrays()
+int vtkPV3FoamReader::GetNumberOfPartArrays()
{
- vtkDebugMacro(<<"GetNumberOfRegionArrays");
- return RegionSelection->GetNumberOfArrays();
+ vtkDebugMacro(<<"GetNumberOfPartArrays");
+ return PartSelection->GetNumberOfArrays();
}
-const char* vtkPV3FoamReader::GetRegionArrayName(int index)
+const char* vtkPV3FoamReader::GetPartArrayName(int index)
{
- vtkDebugMacro(<<"GetRegionArrayName");
- return RegionSelection->GetArrayName(index);
+ vtkDebugMacro(<<"GetPartArrayName");
+ return PartSelection->GetArrayName(index);
}
-int vtkPV3FoamReader::GetRegionArrayStatus(const char* name)
+int vtkPV3FoamReader::GetPartArrayStatus(const char* name)
{
- vtkDebugMacro(<<"GetRegionArrayStatus");
- return RegionSelection->ArrayIsEnabled(name);
+ vtkDebugMacro(<<"GetPartArrayStatus");
+ return PartSelection->ArrayIsEnabled(name);
}
-void vtkPV3FoamReader::SetRegionArrayStatus(const char* name, int status)
+void vtkPV3FoamReader::SetPartArrayStatus(const char* name, int status)
{
- vtkDebugMacro(<<"SetRegionArrayStatus");
+ vtkDebugMacro(<<"SetPartArrayStatus");
if (status)
{
- RegionSelection->EnableArray(name);
+ PartSelection->EnableArray(name);
}
else
{
- RegionSelection->DisableArray(name);
+ PartSelection->DisableArray(name);
}
}
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h
index 88fbae9b31..fde87527de 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h
@@ -88,12 +88,12 @@ public:
int GetTimeStep();
// Description:
- // Region selection list control
- vtkDataArraySelection* GetRegionSelection();
- int GetNumberOfRegionArrays();
- int GetRegionArrayStatus(const char* name);
- void SetRegionArrayStatus(const char* name, int status);
- const char* GetRegionArrayName(int index);
+ // Parts selection list control
+ vtkDataArraySelection* GetPartSelection();
+ int GetNumberOfPartArrays();
+ int GetPartArrayStatus(const char* name);
+ void SetPartArrayStatus(const char* name, int status);
+ const char* GetPartArrayName(int index);
// Description:
// volField selection list control
@@ -191,7 +191,7 @@ private:
//- Dummy variable/switch for invoke a reader update
int UpdateGUI;
- vtkDataArraySelection* RegionSelection;
+ vtkDataArraySelection* PartSelection;
vtkDataArraySelection* VolFieldSelection;
vtkDataArraySelection* PointFieldSelection;
vtkDataArraySelection* LagrangianFieldSelection;
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files
index 4bb4f69970..9699e3c71e 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files
@@ -7,5 +7,6 @@ vtkPV3FoamMeshSet.C
vtkPV3FoamMeshVolume.C
vtkPV3FoamMeshZone.C
vtkPV3FoamUpdateInfo.C
+vtkPV3FoamUtilities.C
LIB = $(FOAM_LIBBIN)/libvtkPV3Foam
diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
index 9595e37ff7..11a28847b3 100644
--- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
+++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C
@@ -31,20 +31,13 @@ License
#include "fvMesh.H"
#include "Time.H"
#include "patchZones.H"
-#include "IFstream.H"
// VTK includes
-#include "vtkCharArray.h"
#include "vtkDataArraySelection.h"
-#include "vtkDataSet.h"
-#include "vtkFieldData.h"
#include "vtkMultiBlockDataSet.h"
#include "vtkRenderer.h"
#include "vtkTextActor.h"
#include "vtkTextProperty.h"
-#include "vtkPolyData.h"
-#include "vtkUnstructuredGrid.h"
-#include "vtkInformation.h"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@@ -55,122 +48,42 @@ defineTypeNameAndDebug(Foam::vtkPV3Foam, 0);
#include "vtkPV3FoamAddToSelection.H"
#include "vtkPV3FoamUpdateInfoFields.H"
-void Foam::vtkPV3Foam::AddToBlock
-(
- vtkMultiBlockDataSet* output,
- const selectionInfo& selector,
- const label datasetNo,
- vtkDataSet* dataset,
- const string& blockName
-)
-{
- const int blockNo = selector.block();
-
- vtkDataObject* blockDO = output->GetBlock(blockNo);
- vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
- if (blockDO && !block)
- {
- FatalErrorIn("Foam::vtkPV3Foam::AddToBlock")
- << "Block already has a vtkDataSet assigned to it" << nl << endl;
- return;
- }
-
- if (!block)
- {
- block = vtkMultiBlockDataSet::New();
- output->SetBlock(blockNo, block);
- block->Delete();
- }
-
- if (block)
- {
- if (debug)
- {
- Info<< "block[" << blockNo << "] has "
- << block->GetNumberOfBlocks()
- << " datasets prior to adding set " << datasetNo
- << " with name: " << blockName << endl;
- }
-
- // when assigning dataset 0, also name the parent block
- if (!datasetNo && selector.name())
- {
- output->GetMetaData(blockNo)->Set
- (
- vtkCompositeDataSet::NAME(),
- selector.name()
- );
- }
- }
-
-
- block->SetBlock(datasetNo, dataset);
-
- if (blockName.size())
- {
- block->GetMetaData(datasetNo)->Set
- (
- vtkCompositeDataSet::NAME(), blockName.c_str()
- );
- }
-
-}
-
-
-vtkDataSet* Foam::vtkPV3Foam::GetDataSetFromBlock
-(
- vtkMultiBlockDataSet* output,
- const selectionInfo& selector,
- const label datasetNo
-)
-{
- const int blockNo = selector.block();
-
- vtkDataObject* blockDO = output->GetBlock(blockNo);
- vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
- if (block)
- {
- return vtkDataSet::SafeDownCast(block->GetBlock(datasetNo));
- }
-
- return 0;
-}
-
-
-Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets
-(
- vtkMultiBlockDataSet* output,
- const selectionInfo& selector
-)
-{
- const int blockNo = selector.block();
-
- vtkDataObject* blockDO = output->GetBlock(blockNo);
- vtkMultiBlockDataSet* block = vtkMultiBlockDataSet::SafeDownCast(blockDO);
- if (block)
- {
- return block->GetNumberOfBlocks();
- }
-
- return 0;
-}
-
-
void Foam::vtkPV3Foam::resetCounters()
{
- // Reset region ids and sizes
- regionInfoVolume_.reset();
- regionInfoPatches_.reset();
- regionInfoLagrangian_.reset();
- regionInfoCellZones_.reset();
- regionInfoFaceZones_.reset();
- regionInfoPointZones_.reset();
- regionInfoCellSets_.reset();
- regionInfoFaceSets_.reset();
- regionInfoPointSets_.reset();
+ // Reset mesh part ids and sizes
+ partInfoVolume_.reset();
+ partInfoPatches_.reset();
+ partInfoLagrangian_.reset();
+ partInfoCellZones_.reset();
+ partInfoFaceZones_.reset();
+ partInfoPointZones_.reset();
+ partInfoCellSets_.reset();
+ partInfoFaceSets_.reset();
+ partInfoPointSets_.reset();
}
+void Foam::vtkPV3Foam::reduceMemory()
+{
+ forAll(regionPolyDecomp_, i)
+ {
+ regionPolyDecomp_[i].clear();
+ }
+
+ forAll(zonePolyDecomp_, i)
+ {
+ zonePolyDecomp_[i].clear();
+ }
+
+ forAll(csetPolyDecomp_, i)
+ {
+ csetPolyDecomp_[i].clear();
+ }
+}
+
+
+
+
int Foam::vtkPV3Foam::setTime(const double& requestedTime)
{
if (debug)
@@ -231,242 +144,51 @@ int Foam::vtkPV3Foam::setTime(const double& requestedTime)
}
-void Foam::vtkPV3Foam::updateRegionStatus()
+void Foam::vtkPV3Foam::updateMeshPartsStatus()
{
if (debug)
{
- Info<< " Foam::vtkPV3Foam::updateRegionStatus" << endl;
+ Info<< " Foam::vtkPV3Foam::updateMeshPartsStatus" << endl;
}
- vtkDataArraySelection* regionSelection = reader_->GetRegionSelection();
- const label nSelect = regionSelection->GetNumberOfArrays();
- if (regionStatus_.size() != nSelect)
+ vtkDataArraySelection* selection = reader_->GetPartSelection();
+ label nElem = selection->GetNumberOfArrays();
+
+ if (partStatus_.size() != nElem)
{
- regionStatus_.setSize(nSelect);
- regionStatus_ = false;
+ partStatus_.setSize(nElem);
+ partStatus_ = false;
meshChanged_ = true;
}
// this needs fixing if we wish to re-use the datasets
- regionDataset_.setSize(nSelect);
- regionDataset_ = -1;
+ partDataset_.setSize(nElem);
+ partDataset_ = -1;
- // Read the selected cell regions, zones, patches and add to region list
- forAll(regionStatus_, regionId)
+ // Read the selected mesh parts (zones, patches ...) and add to list
+ forAll(partStatus_, partId)
{
- int setting = regionSelection->GetArraySetting(regionId);
+ const int setting = selection->GetArraySetting(partId);
- if (regionStatus_[regionId] != setting)
+ if (partStatus_[partId] != setting)
{
- regionStatus_[regionId] = setting;
+ partStatus_[partId] = setting;
meshChanged_ = true;
}
if (debug)
{
- Info<< " region[" << regionId << "] = "
- << regionStatus_[regionId]
- << " : " << regionSelection->GetArrayName(regionId) << endl;
+ Info<< " part[" << partId << "] = "
+ << partStatus_[partId]
+ << " : " << selection->GetArrayName(partId) << endl;
}
}
if (debug)
{
- Info<< " Foam::vtkPV3Foam::updateRegionStatus" << endl;
+ Info<< " Foam::vtkPV3Foam::updateMeshPartsStatus" << endl;
}
}
-Foam::wordHashSet Foam::vtkPV3Foam::getSelected
-(
- vtkDataArraySelection* select
-)
-{
- int nElem = select->GetNumberOfArrays();
- wordHashSet selections(2*nElem);
-
- for (int elemI=0; elemI < nElem; ++elemI)
- {
- if (select->GetArraySetting(elemI))
- {
- word name(getFirstWord(select->GetArrayName(elemI)));
- selections.insert(name);
- }
- }
-
- return selections;
-}
-
-
-Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
-(
- vtkDataArraySelection* select,
- const bool firstWord
-)
-{
- stringList selections(select->GetNumberOfArrays());
- label nElem = 0;
-
- if (debug)
- {
- Info<< "available(";
- forAll(selections, elemI)
- {
- Info<< " \"" << select->GetArrayName(elemI) << "\"";
- }
- Info<< " )\n"
- << "selected(";
- }
-
- forAll(selections, elemI)
- {
- if (select->GetArraySetting(elemI))
- {
- if (firstWord)
- {
- selections[nElem] = getFirstWord
- (
- select->GetArrayName(elemI)
- );
- }
- else
- {
- selections[nElem] = select->GetArrayName(elemI);
- }
-
- if (debug)
- {
- Info<< " " << selections[nElem];
- }
-
- ++nElem;
- }
- }
-
- if (debug)
- {
- Info<< " )" << endl;
- }
-
- selections.setSize(nElem);
- return selections;
-}
-
-
-Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
-(
- vtkDataArraySelection* select,
- const selectionInfo& selector,
- const bool firstWord
-)
-{
- stringList selections(selector.size());
- label nElem = 0;
-
- if (debug)
- {
- Info<< "available(";
- for
- (
- int elemI = selector.start();
- elemI < selector.end();
- ++elemI
- )
- {
- Info<< " \"" << select->GetArrayName(elemI) << "\"";
- }
-
- Info<< " )\n"
- << "selected(";
- }
-
- for
- (
- int elemI = selector.start();
- elemI < selector.end();
- ++elemI
- )
- {
- if (select->GetArraySetting(elemI))
- {
- if (firstWord)
- {
- selections[nElem] = getFirstWord
- (
- select->GetArrayName(elemI)
- );
- }
- else
- {
- selections[nElem] = select->GetArrayName(elemI);
- }
-
- if (debug)
- {
- Info<< " " << selections[nElem];
- }
-
- ++nElem;
- }
- }
-
- if (debug)
- {
- Info<< " )" << endl;
- }
-
- selections.setSize(nElem);
- return selections;
-}
-
-
-void Foam::vtkPV3Foam::setSelectedArrayEntries
-(
- vtkDataArraySelection* select,
- const stringList& selections
-)
-{
- if (debug > 1)
- {
- Info<< " Foam::vtkPV3Foam::setSelectedArrayEntries" << endl;
- }
- const label nEntries = select->GetNumberOfArrays();
-
- // Reset all current entries to 'not selected'
- select->DisableAllArrays();
-
- // Loop through entries, setting values from selectedEntries
- forAll(selections, elemI)
- {
- if (debug > 1)
- {
- Info<< "selections[" << elemI << "] = " << selections[elemI]
- << endl;
- }
-
- for (label i=0; iGetArrayName(i);
-
- if (arrayName == selections[elemI])
- {
- if (debug > 1)
- {
- Info<< "enabling array: " << arrayName << " Index = "
- << i
- << endl;
- }
-
- select->EnableArray(arrayName.c_str());
- break;
- }
- }
- }
- if (debug > 1)
- {
- Info<< " Foam::vtkPV3Foam::setSelectedArrayEntries" << endl;
- }
-}
-
-
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::vtkPV3Foam::vtkPV3Foam
@@ -482,15 +204,15 @@ Foam::vtkPV3Foam::vtkPV3Foam
timeIndex_(-1),
meshChanged_(true),
fieldsChanged_(true),
- regionInfoVolume_("unzoned"),
- regionInfoPatches_("patches"),
- regionInfoLagrangian_("lagrangian"),
- regionInfoCellZones_("cellZone"),
- regionInfoFaceZones_("faceZone"),
- regionInfoPointZones_("pointZone"),
- regionInfoCellSets_("cellSet"),
- regionInfoFaceSets_("faceSet"),
- regionInfoPointSets_("pointSet")
+ partInfoVolume_("unzoned"),
+ partInfoPatches_("patches"),
+ partInfoLagrangian_("lagrangian"),
+ partInfoCellZones_("cellZone"),
+ partInfoFaceZones_("faceZone"),
+ partInfoPointZones_("pointZone"),
+ partInfoCellSets_("cellSet"),
+ partInfoFaceSets_("faceSet"),
+ partInfoPointSets_("pointSet")
{
if (debug)
{
@@ -569,29 +291,25 @@ void Foam::vtkPV3Foam::updateInfo()
resetCounters();
- vtkDataArraySelection* regionSelection = reader_->GetRegionSelection();
+ vtkDataArraySelection* partSelection = reader_->GetPartSelection();
- stringList selectedEntries;
// enable 'internalMesh' on the first call
- if (regionSelection->GetNumberOfArrays() == 0 && !meshPtr_)
+ // or preserve the enabled selections
+ stringList enabledEntries;
+ if (!partSelection->GetNumberOfArrays() && !meshPtr_)
{
- selectedEntries.setSize(1);
- selectedEntries[0] = "internalMesh";
+ enabledEntries.setSize(1);
+ enabledEntries[0] = "internalMesh";
}
else
{
- // preserve the enabled selections
- selectedEntries = getSelectedArrayEntries
- (
- regionSelection,
- false
- );
+ enabledEntries = getSelectedArrayEntries(partSelection);
}
- // Clear current region list/array
- regionSelection->RemoveAllArrays();
+ // Clear current mesh parts list
+ partSelection->RemoveAllArrays();
- // Update region array - add Lagrangian at the bottom
+ // Update mesh parts list - add Lagrangian at the bottom
updateInfoInternalMesh();
updateInfoPatches();
updateInfoSets();
@@ -599,11 +317,7 @@ void Foam::vtkPV3Foam::updateInfo()
updateInfoLagrangian();
// restore the enabled selections
- setSelectedArrayEntries
- (
- regionSelection,
- selectedEntries
- );
+ setSelectedArrayEntries(partSelection, enabledEntries);
if (meshChanged_)
{
@@ -696,14 +410,14 @@ void Foam::vtkPV3Foam::Update
}
reader_->UpdateProgress(0.1);
- // Set up region selection(s)
- updateRegionStatus();
+ // Set up mesh parts selection(s)
+ updateMeshPartsStatus();
// Update the Foam mesh
updateFoamMesh();
reader_->UpdateProgress(0.2);
- // Convert meshes
+ // Convert meshes - start port0 at block=0
int blockNo = 0;
convertMeshVolume(output, blockNo);
@@ -724,6 +438,7 @@ void Foam::vtkPV3Foam::Update
convertMeshPointSets(output, blockNo);
}
+ // restart port1 at block=0
blockNo = 0;
convertMeshLagrangian(lagrangianOutput, blockNo);
@@ -733,6 +448,10 @@ void Foam::vtkPV3Foam::Update
convertVolFields(output);
convertPointFields(output);
convertLagrangianFields(lagrangianOutput);
+ reader_->UpdateProgress(0.95);
+
+ // reclaim some memory
+ reduceMemory();
reader_->UpdateProgress(1.0);
meshChanged_ = fieldsChanged_ = false;
@@ -789,11 +508,10 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer)
removePatchNames(renderer);
// get the display patches, strip off any suffix
- const stringList selectedPatches = getSelectedArrayEntries
+ wordHashSet selectedPatches = getSelected
(
- reader_->GetRegionSelection(),
- regionInfoPatches_,
- true
+ reader_->GetPartSelection(),
+ partInfoPatches_
);
if (!selectedPatches.size())
@@ -828,68 +546,60 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer)
const polyPatch& pp = pbMesh[patchI];
// Only include the patch if it is selected
- bool isSelected = false;
- forAll(selectedPatches, elemI)
+ if (!selectedPatches.found(pp.name()))
{
- if (pp.name() == selectedPatches[elemI])
+ continue;
+ }
+
+ const labelListList& edgeFaces = pp.edgeFaces();
+ const vectorField& n = pp.faceNormals();
+
+ boolList featEdge(pp.nEdges(), false);
+
+ forAll(edgeFaces, edgeI)
+ {
+ const labelList& eFaces = edgeFaces[edgeI];
+
+ if (eFaces.size() != 2)
{
- isSelected = true;
- break;
+ featEdge[edgeI] = true;
+ }
+ else if (mag(n[eFaces[0]] & n[eFaces[1]]) < 0.5)
+ {
+ featEdge[edgeI] = true;
}
}
- if (isSelected)
+ // Do topological analysis of patch, find disconnected regions
+ patchZones pZones(pp, featEdge);
+
+ nZones[patchI] = pZones.nZones();
+
+ labelList zoneNFaces(pZones.nZones(), 0);
+
+ // Save start of information for current patch
+ label patchStart = zoneCentre.size();
+
+ // Create storage for additional zone centres
+ forAll(zoneNFaces, zoneI)
{
- const labelListList& edgeFaces = pp.edgeFaces();
- const vectorField& n = pp.faceNormals();
+ zoneCentre.append(vector::zero);
+ }
- boolList featEdge(pp.nEdges(), false);
+ // Do averaging per individual zone
+ forAll(pp, faceI)
+ {
+ label zoneI = pZones[faceI];
+ zoneCentre[patchStart+zoneI] += pp[faceI].centre(pp.points());
+ zoneNFaces[zoneI]++;
+ }
- forAll(edgeFaces, edgeI)
- {
- const labelList& eFaces = edgeFaces[edgeI];
-
- if (eFaces.size() != 2)
- {
- featEdge[edgeI] = true;
- }
- else if (mag(n[eFaces[0]] & n[eFaces[1]]) < 0.5)
- {
- featEdge[edgeI] = true;
- }
- }
-
- // Do topological analysis of patch. Determine disconnected regions
- patchZones pZones(pp, featEdge);
-
- nZones[patchI] = pZones.nZones();
-
- labelList zoneNFaces(pZones.nZones(), 0);
-
- // Save start of information for current patch
- label patchStart = zoneCentre.size();
-
- // Create storage for additional zone centres
- forAll(zoneNFaces, zoneI)
- {
- zoneCentre.append(vector::zero);
- }
-
- // Do averaging per individual zone
-
- forAll(pp, faceI)
- {
- label zoneI = pZones[faceI];
- zoneCentre[patchStart+zoneI] += pp[faceI].centre(pp.points());
- zoneNFaces[zoneI]++;
- }
-
- for (label i=0; i dbPtr_;
-
- //- Foam mesh
- fvMesh* meshPtr_;
-
- //- Number of meshes
- // TODO - for info only - only set up to process ONE mesh
- int nMesh_;
-
- //- The time index
- int timeIndex_;
-
- //- Track changes in mesh geometry
- bool meshChanged_;
-
- //- Track changes in fields
- bool fieldsChanged_;
-
- //- Cell-centre labels used as additional points for decomposed cells
- labelList addPointCellLabels_;
-
- //- Label of original cell for decomposed cells (internal mesh)
- labelList superCells_;
-
- //- Label of original cell for decomposed cells (cellZone meshes)
- List zoneSuperCells_;
-
- //- Label of original cell for decomposed cells (cellSet meshes)
- List csetSuperCells_;
-
- //- List of patch names
- List patchTextActorsPtrs_;
-
-
- //- Selected geometrical pieces
- // [0] = internal mesh, patches, zones, sets, lagrangian
- boolList regionStatus_;
-
- //- Selected regions indices in each respective block
- labelList regionDataset_;
-
-
// Private classes
- //- bookkeeping for the GUI checklists and the multi-block organization
- class selectionInfo
+ //- Bookkeeping for GUI checklists and the multi-block organization
+ class partInfo
{
const char *name_;
int block_;
@@ -163,7 +116,7 @@ class vtkPV3Foam
public:
- selectionInfo(const char *name, const int blockNo=0)
+ partInfo(const char *name, const int blockNo=0)
:
name_(name),
block_(blockNo),
@@ -224,19 +177,121 @@ class vtkPV3Foam
}
};
- // Private data
+ //- bookkeeping for polyhedral cell decomposition
+ // hide in extra pointMap (cellSet/cellZone) for now
+ class polyDecomp
+ {
+ labelList superCells_;
+ labelList addPointCellLabels_;
+ labelList pointMap_;
- //- First instance and size of various regions
- selectionInfo regionInfoVolume_;
- selectionInfo regionInfoPatches_;
- selectionInfo regionInfoLagrangian_;
- selectionInfo regionInfoCellZones_;
- selectionInfo regionInfoFaceZones_;
- selectionInfo regionInfoPointZones_;
- selectionInfo regionInfoCellSets_;
- selectionInfo regionInfoFaceSets_;
- selectionInfo regionInfoPointSets_;
+ public:
+ polyDecomp()
+ {}
+
+ //- Label of original cell for decomposed cells
+ labelList& superCells()
+ {
+ return superCells_;
+ }
+
+ //- Label of original cell for decomposed cells
+ const labelList& superCells() const
+ {
+ return superCells_;
+ }
+
+ //- Cell-centre labels for additional points of decomposed cells
+ labelList& addPointCellLabels()
+ {
+ return addPointCellLabels_;
+ }
+
+ //- Cell-centre labels for additional points of decomposed cells
+ const labelList& addPointCellLabels() const
+ {
+ return addPointCellLabels_;
+ }
+
+ //- Point labels for subsetted meshes
+ labelList& pointMap()
+ {
+ return pointMap_;
+ }
+
+ //- Point labels for subsetted meshes
+ const labelList& pointMap() const
+ {
+ return pointMap_;
+ }
+
+
+ //- Clear
+ void clear()
+ {
+ superCells_.clear();
+ addPointCellLabels_.clear();
+ pointMap_.clear();
+ }
+ };
+
+
+ // Private Data
+
+ //- Access to the controlling vtkPV3FoamReader
+ vtkPV3FoamReader* reader_;
+
+ //- Foam time control
+ autoPtr