diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml index 07620fd849b9590f0c18a8e70d86dc868719bb7f..d522660cc4110cd70c04cb5e66cb088f2b7366d5 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml @@ -1,191 +1,189 @@ <ServerManagerConfiguration> - <ProxyGroup name="sources"> - <SourceProxy - - name="PV3FoamReader" - class="vtkPV3FoamReader"> - - <!-- File name - compulsory --> - <StringVectorProperty - name="FileName" - command="SetFileName" - number_of_elements="1"> - <FileListDomain - name="files"/> - </StringVectorProperty> - -<!-- Time info sent to animation controls (top of window) --> - - <DoubleVectorProperty - name="TimestepValues" - information_only="1"> - <TimeStepsInformationHelper/> - <Documentation> - Available timestep values. - </Documentation> - </DoubleVectorProperty> - - <DoubleVectorProperty - name="TimeRange" - information_only="1"> - <TimeRangeInformationHelper/> - </DoubleVectorProperty> - -<!-- ExtrapolateWalls check box --> - <IntVectorProperty - name="ExtrapolateWalls" - command="SetExtrapolateWalls" - number_of_elements="1" - default_values="0"> - <BooleanDomain - name="bool"/> - </IntVectorProperty> - -<!-- Include sets check box --> - <IntVectorProperty - name="IncludeSets" - command="SetIncludeSets" - number_of_elements="1" - default_values="0"> - <BooleanDomain - name="bool"/> - </IntVectorProperty> - -<!-- Include zones check box --> - <IntVectorProperty - name="IncludeZones" - command="SetIncludeZones" - number_of_elements="1" - default_values="0"> - <BooleanDomain - name="bool"/> - </IntVectorProperty> - -<!-- Show patch names check box --> - <IntVectorProperty - name="ShowPatchNames" - command="SetShowPatchNames" - number_of_elements="1" - default_values="0"> - <BooleanDomain name="bool"/> - </IntVectorProperty> - -<!-- Available regions array --> - <StringVectorProperty - name="RegionArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper - attribute_name="Region"/> - </StringVectorProperty> - <StringVectorProperty - name="RegionStatus" - command="SetRegionArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="RegionArrayInfo"> - <ArraySelectionDomain - name="array_list"> - <RequiredProperties> - <Property name="RegionArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - -<!-- Available volFields array --> - <StringVectorProperty - name="VolFieldArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper - attribute_name="VolField"/> - </StringVectorProperty> - <StringVectorProperty - name="VolFieldStatus" - command="SetVolFieldArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="VolFieldArrayInfo"> - <ArraySelectionDomain - name="array_list"> - <RequiredProperties> - <Property name="VolFieldArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - -<!-- Available pointFields array --> - <StringVectorProperty - name="PointFieldArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper - attribute_name="PointField"/> - </StringVectorProperty> - <StringVectorProperty - name="PointFieldStatus" - command="SetPointFieldArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="PointFieldArrayInfo"> - <ArraySelectionDomain - name="array_list"> - <RequiredProperties> - <Property name="PointFieldArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - -<!-- Available Lagrangian fields array --> - <StringVectorProperty - name="LagrangianFieldArrayInfo" - information_only="1"> - <ArraySelectionInformationHelper - attribute_name="LagrangianField"/> - </StringVectorProperty> - <StringVectorProperty - name="LagrangianFieldStatus" - command="SetLagrangianFieldArrayStatus" - number_of_elements="0" - repeat_command="1" - number_of_elements_per_command="2" - element_types="2 0" - information_property="LagrangianFieldArrayInfo"> - <ArraySelectionDomain - name="array_list"> - <RequiredProperties> - <Property name="LagrangianFieldArrayInfo" - function="ArrayList"/> - </RequiredProperties> - </ArraySelectionDomain> - </StringVectorProperty> - -<!-- Cache mesh check box --> - <IntVectorProperty - name="CacheMesh" - command="SetCacheMesh" - number_of_elements="1" - default_values="1"> - <BooleanDomain - name="bool"/> - </IntVectorProperty> - -<!-- Update GUI check box --> - <IntVectorProperty - name="UpdateGUI" - command="SetUpdateGUI" - number_of_elements="1" - default_values="0"> - <BooleanDomain - name="bool"/> - </IntVectorProperty> - - </SourceProxy> - </ProxyGroup> + <ProxyGroup name="sources"> + <SourceProxy + name="PV3FoamReader" + class="vtkPV3FoamReader"> + + <!-- File name - compulsory --> + <StringVectorProperty + name="FileName" + command="SetFileName" + number_of_elements="1" + animateable="0"> + <FileListDomain name="files"/> + <Documentation> + Specifies the filename for the OpenFOAM Reader + </Documentation> + </StringVectorProperty> + + <!-- Time info sent to animation controls (top of window) --> + <DoubleVectorProperty + name="TimestepValues" + information_only="1"> + <TimeStepsInformationHelper/> + <Documentation> + Available timestep values + </Documentation> + </DoubleVectorProperty> + + <DoubleVectorProperty + name="TimeRange" + information_only="1"> + <TimeRangeInformationHelper/> + </DoubleVectorProperty> + + <!-- Available Region array --> + <StringVectorProperty + name="RegionArrayInfo" + information_only="1"> + <ArraySelectionInformationHelper attribute_name="Region"/> + </StringVectorProperty> + <StringVectorProperty + name="RegionStatus" + label="Mesh Parts" + command="SetRegionArrayStatus" + number_of_elements="0" + repeat_command="1" + number_of_elements_per_command="2" + element_types="2 0" + information_property="RegionArrayInfo" + animateable="0"> + <ArraySelectionDomain name="array_list"> + <RequiredProperties> + <Property name="RegionArrayInfo" function="ArrayList"/> + </RequiredProperties> + </ArraySelectionDomain> + </StringVectorProperty> + + <!-- Available volFields array --> + <StringVectorProperty + name="VolFieldArrayInfo" + information_only="1"> + <ArraySelectionInformationHelper attribute_name="VolField"/> + </StringVectorProperty> + <StringVectorProperty + name="VolFieldStatus" + label="Volume Fields" + command="SetVolFieldArrayStatus" + number_of_elements="0" + repeat_command="1" + number_of_elements_per_command="2" + element_types="2 0" + information_property="VolFieldArrayInfo" + animateable="0"> + <ArraySelectionDomain name="array_list"> + <RequiredProperties> + <Property name="VolFieldArrayInfo" function="ArrayList"/> + </RequiredProperties> + </ArraySelectionDomain> + </StringVectorProperty> + + <!-- Available Lagrangian fields array --> + <StringVectorProperty + name="LagrangianFieldArrayInfo" + information_only="1"> + <ArraySelectionInformationHelper attribute_name="LagrangianField"/> + </StringVectorProperty> + <StringVectorProperty + name="LagrangianFieldStatus" + label="Lagrangian Fields" + command="SetLagrangianFieldArrayStatus" + number_of_elements="0" + repeat_command="1" + number_of_elements_per_command="2" + element_types="2 0" + information_property="LagrangianFieldArrayInfo" + animateable="0"> + <ArraySelectionDomain name="array_list"> + <RequiredProperties> + <Property name="LagrangianFieldArrayInfo" function="ArrayList"/> + </RequiredProperties> + </ArraySelectionDomain> + </StringVectorProperty> + + <!-- Available pointFields array --> + <StringVectorProperty + name="PointFieldArrayInfo" + information_only="1"> + <ArraySelectionInformationHelper attribute_name="PointField"/> + </StringVectorProperty> + <StringVectorProperty + name="PointFieldStatus" + label="Point Fields" + command="SetPointFieldArrayStatus" + number_of_elements="0" + repeat_command="1" + number_of_elements_per_command="2" + element_types="2 0" + information_property="PointFieldArrayInfo" + animateable="0"> + <ArraySelectionDomain name="array_list"> + <RequiredProperties> + <Property name="PointFieldArrayInfo" function="ArrayList"/> + </RequiredProperties> + </ArraySelectionDomain> + </StringVectorProperty> + + <!-- Extrapolate Walls check-box --> + <IntVectorProperty + name="ExtrapolateWalls" + command="SetExtrapolateWalls" + number_of_elements="1" + default_values="0" + animateable="0"> + <BooleanDomain name="bool"/> + </IntVectorProperty> + + <!-- Include Sets check-box --> + <IntVectorProperty + name="IncludeSets" + command="SetIncludeSets" + number_of_elements="1" + default_values="0" + animateable="0"> + <BooleanDomain name="bool"/> + </IntVectorProperty> + + <!-- Include Zones check-box --> + <IntVectorProperty + name="IncludeZones" + command="SetIncludeZones" + number_of_elements="1" + default_values="0" + animateable="0"> + <BooleanDomain name="bool"/> + </IntVectorProperty> + + <!-- Show Patch Names check-box --> + <IntVectorProperty + name="ShowPatchNames" + command="SetShowPatchNames" + number_of_elements="1" + default_values="0" + animateable="0"> + <BooleanDomain name="bool"/> + </IntVectorProperty> + + <!-- Cache Mesh check-box --> + <IntVectorProperty + name="CacheMesh" + command="SetCacheMesh" + number_of_elements="1" + default_values="1" + animateable="0"> + <BooleanDomain name="bool"/> + </IntVectorProperty> + + <!-- Update GUI check box --> + <IntVectorProperty + name="UpdateGUI" + command="SetUpdateGUI" + number_of_elements="1" + default_values="0" + animateable="0"> + <BooleanDomain name="bool"/> + </IntVectorProperty> + + </SourceProxy> + </ProxyGroup> </ServerManagerConfiguration> diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx index fc12c30b8ac144bf0e916f94a22762c79c532400..2ad4f68cb01494fe722f034872b39e7a4137d2c0 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx @@ -59,11 +59,10 @@ vtkPV3FoamReader::vtkPV3FoamReader() this->GetExecutive()->SetOutputData(1, lagrangian); lagrangian->Delete(); - TimeStep = 0; TimeStepRange[0] = 0; TimeStepRange[1] = 0; - CacheMesh = 0; + CacheMesh = 1; ExtrapolateWalls = 0; IncludeSets = 0; @@ -181,7 +180,7 @@ int vtkPV3FoamReader::RequestInformation } else { - foamData_->UpdateInformation(); + foamData_->updateInfo(); } int nTimeSteps = 0; @@ -349,6 +348,15 @@ int vtkPV3FoamReader::RequestData foamData_->Update(output, lagrangianOutput); + if (ShowPatchNames) + { + addPatchNamesToView(); + } + else + { + removePatchNamesFromView(); + } + #endif return 1; @@ -408,7 +416,13 @@ void vtkPV3FoamReader::PrintSelf(ostream& os, vtkIndent indent) os<< indent << "Time step range: " << this->TimeStepRange[0] << " - " << this->TimeStepRange[1] << "\n"; - os<< indent << "Time step: " << this->TimeStep << endl; + os<< indent << "Time step: " << this->GetTimeStep() << endl; +} + + +int vtkPV3FoamReader::GetTimeStep() +{ + return foamData_ ? foamData_->timeIndex() : -1; } @@ -446,7 +460,6 @@ int vtkPV3FoamReader::GetRegionArrayStatus(const char* name) void vtkPV3FoamReader::SetRegionArrayStatus(const char* name, int status) { vtkDebugMacro(<<"SetRegionArrayStatus"); - if (status) { RegionSelection->EnableArray(name); diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h index 77985be212595224b427fb7c173b3ec6c2d947c0..88fbae9b313ae429e534c9411227fbbd71bb8451 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h @@ -21,20 +21,16 @@ #ifndef __vtkPV3FoamReader_h #define __vtkPV3FoamReader_h -#include "vtkMultiBlockDataSetAlgorithm.h" - // Foam forward declarations namespace Foam { class vtkPV3Foam; } +// VTK includes +#include "vtkMultiBlockDataSetAlgorithm.h" + // VTK forward declarations -class vtkUnstructuredGrid; -class vtkPoints; -class vtkIntArray; -class vtkFloatArray; -class vtkDoubleArray; class vtkDataArraySelection; class vtkCallbackCommand; @@ -44,41 +40,31 @@ class VTK_IO_EXPORT vtkPV3FoamReader public vtkMultiBlockDataSetAlgorithm { public: + vtkTypeRevisionMacro(vtkPV3FoamReader,vtkMultiBlockDataSetAlgorithm); + void PrintSelf(ostream&, vtkIndent); static vtkPV3FoamReader* New(); - vtkTypeRevisionMacro - ( - vtkPV3FoamReader, - vtkMultiBlockDataSetAlgorithm - ); - - void PrintSelf - ( - ostream& os, - vtkIndent indent - ); + // Description: + // Get the current timestep and the timestep range. + vtkGetVector2Macro(TimeStepRange, int); // Description: // Set/Get the filename. vtkSetStringMacro(FileName); vtkGetStringMacro(FileName); - // Time control - // Set/Get the timestep and the timestep range - vtkSetMacro(TimeStep, int); - vtkGetMacro(TimeStep, int); - vtkSetVector2Macro(TimeStepRange, int); - vtkGetVector2Macro(TimeStepRange, int); - + // Description: // GUI update control vtkSetMacro(UpdateGUI, int); vtkGetMacro(UpdateGUI, int); + // Description: // FOAM mesh caching control vtkSetMacro(CacheMesh, int); vtkGetMacro(CacheMesh, int); + // Description: // FOAM extrapolate internal values onto the walls vtkSetMacro(ExtrapolateWalls, int); vtkGetMacro(ExtrapolateWalls, int); @@ -87,42 +73,53 @@ public: vtkSetMacro(IncludeSets, int); vtkGetMacro(IncludeSets, int); + // Description: // FOAM read zones control vtkSetMacro(IncludeZones, int); vtkGetMacro(IncludeZones, int); + // Description: // FOAM display patch names control vtkSetMacro(ShowPatchNames, int); vtkGetMacro(ShowPatchNames, int); + // Description: + // Get the current timestep + int GetTimeStep(); + + // Description: // Region selection list control vtkDataArraySelection* GetRegionSelection(); - int GetNumberOfRegionArrays(); - const char* GetRegionArrayName(int index); - int GetRegionArrayStatus(const char* name); + int GetNumberOfRegionArrays(); + int GetRegionArrayStatus(const char* name); void SetRegionArrayStatus(const char* name, int status); + const char* GetRegionArrayName(int index); + // Description: // volField selection list control vtkDataArraySelection* GetVolFieldSelection(); - int GetNumberOfVolFieldArrays(); - const char* GetVolFieldArrayName(int index); - int GetVolFieldArrayStatus(const char* name); + int GetNumberOfVolFieldArrays(); + int GetVolFieldArrayStatus(const char* name); void SetVolFieldArrayStatus(const char* name, int status); + const char* GetVolFieldArrayName(int index); + // Description: // pointField selection list control vtkDataArraySelection* GetPointFieldSelection(); - int GetNumberOfPointFieldArrays(); - int GetPointFieldArrayStatus(const char* name); + int GetNumberOfPointFieldArrays(); + int GetPointFieldArrayStatus(const char* name); void SetPointFieldArrayStatus(const char* name, int status); const char* GetPointFieldArrayName(int index); + // Description: // lagrangianField selection list control vtkDataArraySelection* GetLagrangianFieldSelection(); - int GetNumberOfLagrangianFieldArrays(); - int GetLagrangianFieldArrayStatus(const char* name); + int GetNumberOfLagrangianFieldArrays(); + int GetLagrangianFieldArrayStatus(const char* name); void SetLagrangianFieldArrayStatus(const char* name, int status); const char* GetLagrangianFieldArrayName(int index); + // Description: // Callback registered with the SelectionObserver // for all the selection lists static void SelectionModifiedCallback @@ -138,35 +135,44 @@ public: protected: + //- Construct null vtkPV3FoamReader(); - ~vtkPV3FoamReader(); - char* FileName; + //- Destructor + ~vtkPV3FoamReader(); - virtual int RequestData + //- Return information about mesh, times, etc without loading anything + virtual int RequestInformation ( vtkInformation*, vtkInformationVector**, vtkInformationVector* ); - virtual int RequestInformation + //- Get the mesh/fields for a particular time + //- Destructor + virtual int RequestData ( vtkInformation*, vtkInformationVector**, vtkInformationVector* ); + //- Fill in additional port information virtual int FillOutputPortInformation(int, vtkInformation*); - // The observer to modify this object when the array selections - // are modified + // The observer to modify this object when array selections are modified vtkCallbackCommand* SelectionObserver; + char* FileName; + private: - vtkPV3FoamReader(const vtkPV3FoamReader&); // Not implemented. - void operator=(const vtkPV3FoamReader&); // Not implemented. + //- Disallow default bitwise copy construct + vtkPV3FoamReader(const vtkPV3FoamReader&); + + //- Disallow default bitwise assignment + void operator=(const vtkPV3FoamReader&); //- Add patch names to the view void addPatchNamesToView(); @@ -174,9 +180,7 @@ private: //- Remove patch names from the view void removePatchNamesFromView(); - int TimeStep; int TimeStepRange[2]; - int CacheMesh; int ExtrapolateWalls; @@ -184,7 +188,7 @@ private: int IncludeZones; int ShowPatchNames; - //- Dummy variable/switch for provoking a reader update + //- Dummy variable/switch for invoke a reader update int UpdateGUI; vtkDataArraySelection* RegionSelection; @@ -192,7 +196,7 @@ private: vtkDataArraySelection* PointFieldSelection; vtkDataArraySelection* LagrangianFieldSelection; - //- Cached data for output port0 + //- Cached data for output port0 (experimental!) vtkMultiBlockDataSet* output0_; //BTX diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files index 8fb98bc9adf477fa961ae2880a98fff9cf5b801e..4bb4f69970e1898d90a3c0ddf209d73f75e27abf 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/Make/files @@ -1,11 +1,11 @@ vtkPV3Foam.C -vtkPV3FoamAddVolumeMesh.C -vtkPV3FoamAddLagrangianMesh.C -vtkPV3FoamAddPatchMesh.C -vtkPV3FoamAddZoneMesh.C -vtkPV3FoamAddSetMesh.C -vtkPV3FoamUpdateInformation.C -vtkPV3FoamConvertMesh.C -vtkPV3FoamConvertFields.C +vtkPV3FoamFields.C +vtkPV3FoamMesh.C +vtkPV3FoamMeshLagrangian.C +vtkPV3FoamMeshPatch.C +vtkPV3FoamMeshSet.C +vtkPV3FoamMeshVolume.C +vtkPV3FoamMeshZone.C +vtkPV3FoamUpdateInfo.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 2d6e5756ce9396cb168ae7f35a6ea36a148dc576..9595e37ff7a9c9ecd2a259f9974f0d783ebd1ee8 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C @@ -25,13 +25,12 @@ License \*---------------------------------------------------------------------------*/ #include "vtkPV3Foam.H" +#include "vtkPV3FoamReader.h" // Foam includes -#include "Time.H" #include "fvMesh.H" -#include "IOobjectList.H" +#include "Time.H" #include "patchZones.H" -#include "vtkPV3FoamReader.h" #include "IFstream.H" // VTK includes @@ -54,8 +53,7 @@ defineTypeNameAndDebug(Foam::vtkPV3Foam, 0); // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // #include "vtkPV3FoamAddToSelection.H" -#include "vtkPV3FoamUpdateInformationFields.H" - +#include "vtkPV3FoamUpdateInfoFields.H" void Foam::vtkPV3Foam::AddToBlock ( @@ -161,19 +159,19 @@ Foam::label Foam::vtkPV3Foam::GetNumberOfDataSets void Foam::vtkPV3Foam::resetCounters() { // Reset region ids and sizes - selectInfoVolume_.reset(); - selectInfoPatches_.reset(); - selectInfoLagrangian_.reset(); - selectInfoCellZones_.reset(); - selectInfoFaceZones_.reset(); - selectInfoPointZones_.reset(); - selectInfoCellSets_.reset(); - selectInfoFaceSets_.reset(); - selectInfoPointSets_.reset(); + regionInfoVolume_.reset(); + regionInfoPatches_.reset(); + regionInfoLagrangian_.reset(); + regionInfoCellZones_.reset(); + regionInfoFaceZones_.reset(); + regionInfoPointZones_.reset(); + regionInfoCellSets_.reset(); + regionInfoFaceSets_.reset(); + regionInfoPointSets_.reset(); } -bool Foam::vtkPV3Foam::setTime(const double& requestedTime) +int Foam::vtkPV3Foam::setTime(const double& requestedTime) { if (debug) { @@ -186,17 +184,12 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime) // Get times list instantList Times = runTime.times(); - bool found = false; - int nearestIndex = Time::findClosestTimeIndex(Times, requestedTime); + int foundIndex = Time::findClosestTimeIndex(Times, requestedTime); + int nearestIndex = foundIndex; - if (nearestIndex == -1) + if (foundIndex < 0) { nearestIndex = 0; - found = false; - } - else - { - found = true; } // see what has changed @@ -213,16 +206,17 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime) if (meshPtr_->readUpdate() != polyMesh::UNCHANGED) { meshChanged_ = true; - reader_->UpdateProgress(0.05); - - // patches, zones etc might have changed - UpdateInformation(); } } else { meshChanged_ = true; } + + reader_->UpdateProgress(0.05); + + // this seems to be needed for catching Lagrangian fields + updateInfo(); } if (debug) @@ -233,91 +227,109 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime) << " fieldsChanged=" << fieldsChanged_ << endl; } - return found; + return foundIndex; } -void Foam::vtkPV3Foam::updateSelectedRegions() +void Foam::vtkPV3Foam::updateRegionStatus() { if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateSelectedRegions" << endl; + Info<< "<beg> Foam::vtkPV3Foam::updateRegionStatus" << endl; } - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); - - const label nSelect = arraySelection->GetNumberOfArrays(); - - if (selectedRegions_.size() != nSelect) + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); + const label nSelect = regionSelection->GetNumberOfArrays(); + if (regionStatus_.size() != nSelect) { - selectedRegions_.setSize(nSelect); - selectedRegions_ = 0; + regionStatus_.setSize(nSelect); + regionStatus_ = false; meshChanged_ = true; } - selectedRegionDatasetIds_.setSize(nSelect); + // this needs fixing if we wish to re-use the datasets + regionDataset_.setSize(nSelect); + regionDataset_ = -1; // Read the selected cell regions, zones, patches and add to region list - forAll (selectedRegions_, regionId) + forAll(regionStatus_, regionId) { - int setting = arraySelection->GetArraySetting(regionId); + int setting = regionSelection->GetArraySetting(regionId); - if (selectedRegions_[regionId] != setting) + if (regionStatus_[regionId] != setting) { - selectedRegions_[regionId] = setting; + regionStatus_[regionId] = setting; meshChanged_ = true; } - selectedRegionDatasetIds_[regionId] = -1; - if (debug) { Info<< " region[" << regionId << "] = " - << selectedRegions_[regionId] - << " : " << arraySelection->GetArrayName(regionId) << endl; + << regionStatus_[regionId] + << " : " << regionSelection->GetArrayName(regionId) << endl; } } if (debug) { - Info<< "<end> Foam::vtkPV3Foam::updateSelectedRegions" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateRegionStatus" << 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* arraySelection, + vtkDataArraySelection* select, const bool firstWord ) { - stringList selections(arraySelection->GetNumberOfArrays()); + stringList selections(select->GetNumberOfArrays()); label nElem = 0; if (debug) { Info<< "available("; - forAll (selections, elemI) + forAll(selections, elemI) { - Info<< " \"" << arraySelection->GetArrayName(elemI) << "\""; + Info<< " \"" << select->GetArrayName(elemI) << "\""; } Info<< " )\n" << "selected("; } - forAll (selections, elemI) + forAll(selections, elemI) { - if (arraySelection->GetArraySetting(elemI)) + if (select->GetArraySetting(elemI)) { if (firstWord) { selections[nElem] = getFirstWord ( - arraySelection->GetArrayName(elemI) + select->GetArrayName(elemI) ); } else { - selections[nElem] = arraySelection->GetArrayName(elemI); + selections[nElem] = select->GetArrayName(elemI); } if (debug) @@ -341,7 +353,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, + vtkDataArraySelection* select, const selectionInfo& selector, const bool firstWord ) @@ -359,7 +371,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ++elemI ) { - Info<< " \"" << arraySelection->GetArrayName(elemI) << "\""; + Info<< " \"" << select->GetArrayName(elemI) << "\""; } Info<< " )\n" @@ -373,18 +385,18 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries ++elemI ) { - if (arraySelection->GetArraySetting(elemI)) + if (select->GetArraySetting(elemI)) { if (firstWord) { selections[nElem] = getFirstWord ( - arraySelection->GetArrayName(elemI) + select->GetArrayName(elemI) ); } else { - selections[nElem] = arraySelection->GetArrayName(elemI); + selections[nElem] = select->GetArrayName(elemI); } if (debug) @@ -408,7 +420,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries void Foam::vtkPV3Foam::setSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, + vtkDataArraySelection* select, const stringList& selections ) { @@ -416,13 +428,13 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries { Info<< "<beg> Foam::vtkPV3Foam::setSelectedArrayEntries" << endl; } - const label nEntries = arraySelection->GetNumberOfArrays(); + const label nEntries = select->GetNumberOfArrays(); // Reset all current entries to 'not selected' - arraySelection->DisableAllArrays(); + select->DisableAllArrays(); // Loop through entries, setting values from selectedEntries - forAll (selections, elemI) + forAll(selections, elemI) { if (debug > 1) { @@ -432,7 +444,7 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries for (label i=0; i<nEntries; i++) { - string arrayName = arraySelection->GetArrayName(i); + string arrayName = select->GetArrayName(i); if (arrayName == selections[elemI]) { @@ -443,7 +455,7 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries << endl; } - arraySelection->EnableArray(arrayName.c_str()); + select->EnableArray(arrayName.c_str()); break; } } @@ -466,20 +478,19 @@ Foam::vtkPV3Foam::vtkPV3Foam reader_(reader), dbPtr_(NULL), meshPtr_(NULL), - selectInfoVolume_("unzoned"), - selectInfoPatches_("patches"), - selectInfoLagrangian_("lagrangian"), - selectInfoCellZones_("cellZone"), - selectInfoFaceZones_("faceZone"), - selectInfoPointZones_("pointZone"), - selectInfoCellSets_("cellSet"), - selectInfoFaceSets_("faceSet"), - selectInfoPointSets_("pointSet"), - patchTextActorsPtrs_(0), nMesh_(0), timeIndex_(-1), meshChanged_(true), - fieldsChanged_(true) + fieldsChanged_(true), + regionInfoVolume_("unzoned"), + regionInfoPatches_("patches"), + regionInfoLagrangian_("lagrangian"), + regionInfoCellZones_("cellZone"), + regionInfoFaceZones_("faceZone"), + regionInfoPointZones_("pointZone"), + regionInfoCellSets_("cellSet"), + regionInfoFaceSets_("faceSet"), + regionInfoPointSets_("pointSet") { if (debug) { @@ -528,11 +539,7 @@ Foam::vtkPV3Foam::vtkPV3Foam dbPtr_().functionObjects().off(); - // Set initial cloud name - // TODO - TEMPORARY MEASURE UNTIL CAN PROCESS MULTIPLE CLOUDS - cloudName_ = ""; - - UpdateInformation(); + updateInfo(); } @@ -551,22 +558,22 @@ Foam::vtkPV3Foam::~vtkPV3Foam() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::vtkPV3Foam::UpdateInformation() +void Foam::vtkPV3Foam::updateInfo() { if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::UpdateInformation" - << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "] TimeStep=" - << reader_->GetTimeStep() << endl; + Info<< "<beg> Foam::vtkPV3Foam::updateInfo" + << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "] timeIndex=" + << timeIndex_ << endl; } resetCounters(); - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); stringList selectedEntries; // enable 'internalMesh' on the first call - if (arraySelection->GetNumberOfArrays() == 0 && !meshPtr_) + if (regionSelection->GetNumberOfArrays() == 0 && !meshPtr_) { selectedEntries.setSize(1); selectedEntries[0] = "internalMesh"; @@ -576,33 +583,25 @@ void Foam::vtkPV3Foam::UpdateInformation() // preserve the enabled selections selectedEntries = getSelectedArrayEntries ( - arraySelection, + regionSelection, false ); } // Clear current region list/array - arraySelection->RemoveAllArrays(); + regionSelection->RemoveAllArrays(); - // Update region array - updateInformationInternalMesh(); - updateInformationLagrangian(); - updateInformationPatches(); - - if (reader_->GetIncludeSets()) - { - updateInformationSets(); - } - - if (reader_->GetIncludeZones()) - { - updateInformationZones(); - } + // Update region array - add Lagrangian at the bottom + updateInfoInternalMesh(); + updateInfoPatches(); + updateInfoSets(); + updateInfoZones(); + updateInfoLagrangian(); // restore the enabled selections setSelectedArrayEntries ( - arraySelection, + regionSelection, selectedEntries ); @@ -611,24 +610,20 @@ void Foam::vtkPV3Foam::UpdateInformation() fieldsChanged_ = true; } - // Update volField array - updateInformationFields<fvPatchField, volMesh> + // Update volume, point and lagrangian fields + updateInfoFields<fvPatchField, volMesh> ( reader_->GetVolFieldSelection() ); - - // Update pointField array - updateInformationFields<pointPatchField, pointMesh> + updateInfoFields<pointPatchField, pointMesh> ( reader_->GetPointFieldSelection() ); - - // Update lagrangian field array - updateInformationLagrangianFields(); + updateInfoLagrangianFields(); if (debug) { - Info<< "<end> Foam::vtkPV3Foam::UpdateInformation" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateInfo" << endl; } } @@ -702,7 +697,7 @@ void Foam::vtkPV3Foam::Update reader_->UpdateProgress(0.1); // Set up region selection(s) - updateSelectedRegions(); + updateRegionStatus(); // Update the Foam mesh updateFoamMesh(); @@ -793,27 +788,23 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer) // Remove any patch names previously added to the renderer removePatchNames(renderer); - if (debug) - { - Info<< "<beg> Foam::vtkPV3Foam::addPatchNames" << endl; - } - // get the display patches, strip off any suffix const stringList selectedPatches = getSelectedArrayEntries ( reader_->GetRegionSelection(), - selectInfoPatches_, + regionInfoPatches_, true ); - if (debug) + if (!selectedPatches.size()) { - Info<<"... add patches: " << selectedPatches << endl; + return; } - if (!selectedPatches.size()) + if (debug) { - return; + Info<< "<beg> Foam::vtkPV3Foam::addPatchNames" << nl + <<"... add patches: " << selectedPatches << endl; } const polyBoundaryMesh& pbMesh = meshPtr_->boundaryMesh(); @@ -977,11 +968,6 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer) void Foam::vtkPV3Foam::removePatchNames(vtkRenderer* renderer) { - if (debug) - { - Info<< "removePatchNames()" << endl; - } - forAll(patchTextActorsPtrs_, patchI) { renderer->RemoveViewProp(patchTextActorsPtrs_[patchI]); diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H index f78ba346b4bff3f3101743721a217a0b3ed7adfb..3907348cc0348feb70f53f0c6e85b92d58b19f09 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H @@ -32,23 +32,22 @@ SourceFiles vtkPV3Foam.C vtkPV3Foam.H vtkPV3FoamI.H - vtkPV3FoamAddLagrangianMesh.C - vtkPV3FoamAddPatchMesh.C - vtkPV3FoamAddSetMesh.C + vtkPV3FoamFields.C + vtkPV3FoamMesh.C + vtkPV3FoamMeshLagrangian.C + vtkPV3FoamMeshPatch.C + vtkPV3FoamMeshSet.C + vtkPV3FoamMeshVolume.C + vtkPV3FoamMeshZone.C + vtkPV3FoamFaceField.H + vtkPV3FoamLagrangianFields.H + vtkPV3FoamPatchField.H + vtkPV3FoamPointFields.H + vtkPV3FoamPoints.H + vtkPV3FoamUpdateInfo.C + vtkPV3FoamUpdateInfoFields.H + vtkPV3FoamVolFields.H vtkPV3FoamAddToSelection.H - vtkPV3FoamAddVolumeMesh.C - vtkPV3FoamAddZoneMesh.C - vtkPV3FoamConvertFields.C - vtkPV3FoamConvertFaceField.H - vtkPV3FoamConvertLagrangianFields.H - vtkPV3FoamConvertMesh.C - vtkPV3FoamConvertPatchFaceField.H - vtkPV3FoamConvertPatchPointField.H - vtkPV3FoamConvertPointFields.H - vtkPV3FoamConvertVolFields.H - vtkPV3FoamInsertNextPoint.H - vtkPV3FoamUpdateInformation.C - vtkPV3FoamUpdateInformationFields.H // Needed by VTK: vtkDataArrayTemplateImplicit.txx @@ -104,9 +103,55 @@ class List; class vtkPV3Foam { -public: + // Private data + + //- Access to the controlling vtkPV3FoamReader + vtkPV3FoamReader* reader_; + + //- Foam time control + autoPtr<Time> 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_; - // Public data + //- 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<labelList> zoneSuperCells_; + + //- Label of original cell for decomposed cells (cellSet meshes) + List<labelList> csetSuperCells_; + + //- List of patch names + List<vtkTextActor*> 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 @@ -177,87 +222,20 @@ public: { size_ += n; } - - friend Ostream& operator<<(Ostream& os, const selectionInfo& s) - { - os << "selector: " << s.name_ - << " (block " << s.block_ << ") " - << " = " << s.start_ << " + " << s.size_; - return os; - } - }; - -private: - // Private data - //- Access to the controlling vtkPV3FoamReader - vtkPV3FoamReader* reader_; - - //- Foam time control - autoPtr<Time> dbPtr_; - - //- Foam mesh - fvMesh* meshPtr_; - //- First instance and size of various regions - selectionInfo selectInfoVolume_; - selectionInfo selectInfoPatches_; - selectionInfo selectInfoLagrangian_; - selectionInfo selectInfoCellZones_; - selectionInfo selectInfoFaceZones_; - selectionInfo selectInfoPointZones_; - selectionInfo selectInfoCellSets_; - selectionInfo selectInfoFaceSets_; - selectionInfo selectInfoPointSets_; - - //- Selected regions - // [0] = internal mesh, then lagrangian, patches, zones, sets - boolList selectedRegions_; - - //- Selected regions indices in each respective block - labelList selectedRegionDatasetIds_; - - //- Labels of cell-centres used as additional points when decomposing - // polyhedra - labelList addPointCellLabels_; - - //- Label of original cell for decomposed cells - // - internal mesh - labelList superCells_; - - //- Label of original cell for decomposed cells - // - cellZone meshes - List<labelList> zoneSuperCells_; - - //- Label of original cell for decomposed cells - // - cellSet meshes - List<labelList> csetSuperCells_; - - //- List of patch names - List<vtkTextActor*> patchTextActorsPtrs_; - - - // Dataset sizes - - //- Number of meshes - // TODO - for info only - only set up to process ONE mesh - int nMesh_; - - //- Cloud name to be processed - // TODO - currently only set up to process ONE cloud - word cloudName_; - - //- The time index - int timeIndex_; - - //- Track changes in mesh geometry - bool meshChanged_; - - //- Track changes in fields - bool fieldsChanged_; + selectionInfo regionInfoVolume_; + selectionInfo regionInfoPatches_; + selectionInfo regionInfoLagrangian_; + selectionInfo regionInfoCellZones_; + selectionInfo regionInfoFaceZones_; + selectionInfo regionInfoPointZones_; + selectionInfo regionInfoCellSets_; + selectionInfo regionInfoFaceSets_; + selectionInfo regionInfoPointSets_; // Private Member Functions @@ -296,44 +274,41 @@ private: // Update information helper functions //- Update the regions selected in the GUI - void updateSelectedRegions(); + void updateRegionStatus(); //- Internal mesh info - void updateInformationInternalMesh(); + void updateInfoInternalMesh(); //- Lagrangian info - void updateInformationLagrangian(); + void updateInfoLagrangian(); //- Patch info - void updateInformationPatches(); + void updateInfoPatches(); //- Set info - void updateInformationSets(); + void updateInfoSets(); + + //- Zone info + void updateInfoZones(); //- Read zone names for zoneType from file wordList readZoneNames(const word& zoneType); - //- Zone info - void updateInformationZones(); - //- Add to paraview array selection template<class Type> label addToSelection ( - vtkDataArraySelection *arraySelection, + vtkDataArraySelection*, const IOobjectList&, const string& suffix=string::null ); //- Field info template<template<class> class patchType, class meshType> - void updateInformationFields - ( - vtkDataArraySelection *fieldSelection - ); + void updateInfoFields(vtkDataArraySelection*); //- Lagrangian field info - void updateInformationLagrangianFields(); + void updateInfoLagrangianFields(); // Update helper functions @@ -384,64 +359,48 @@ private: // Add mesh functions //- Add internal mesh/cell set meshes - void addVolumeMesh + vtkUnstructuredGrid* volumeVTKMesh ( const fvMesh&, - vtkUnstructuredGrid*, labelList& superCells ); //- Add Lagrangian mesh - void addLagrangianMesh + vtkPolyData* lagrangianVTKMesh ( const fvMesh&, - vtkPolyData* + const word& cloudName ); //- Add patch mesh - void addPatchMesh - ( - const polyPatch&, - vtkPolyData* - ); + vtkPolyData* patchVTKMesh(const polyPatch&); //- Add face zone mesh - void addFaceZoneMesh + vtkPolyData* faceZoneVTKMesh ( const fvMesh&, - const labelList& faceLabels, - vtkPolyData* + const labelList& faceLabels ); //- Add point zone - void addPointZoneMesh - ( - const fvMesh&, - const labelList& pointLabels, - vtkPolyData* - ); - - //- Add cell set mesh - void addCellSetMesh + vtkPolyData* pointZoneVTKMesh ( const fvMesh&, - vtkUnstructuredGrid* + const labelList& pointLabels ); //- Add face set mesh - void addFaceSetMesh + vtkPolyData* faceSetVTKMesh ( const fvMesh&, - const faceSet&, - vtkPolyData* + const faceSet& ); //- Add point mesh - void addPointSetMesh + vtkPolyData* pointSetVTKMesh ( const fvMesh&, - const pointSet&, - vtkPolyData* + const pointSet& ); // Field conversion functions @@ -461,8 +420,8 @@ private: template<class GeoField> label addObjectsToSelection ( - vtkDataArraySelection* fieldSelection, - const IOobjectList& objects, + vtkDataArraySelection*, + const IOobjectList&, const string& suffix=string::null ); @@ -474,14 +433,13 @@ private: void convertVolFields ( const fvMesh&, - const volPointInterpolation& pInterp, + const volPointInterpolation&, const PtrList<PrimitivePatchInterpolation<primitivePatch> >&, - const IOobjectList& objects, - vtkDataArraySelection* fieldSelection, + const IOobjectList&, vtkMultiBlockDataSet* output ); - //- Volume field - all types except scalar + //- Volume field template<class Type> void convertVolField ( @@ -494,7 +452,7 @@ private: //- Patch field template<class Type> - void convertPatchFaceField + void convertPatchField ( const word& name, const Field<Type>&, @@ -531,13 +489,12 @@ private: template<class Type> void convertLagrangianFields ( - const fvMesh&, - const IOobjectList& objects, - vtkDataArraySelection *fieldSelection, - vtkMultiBlockDataSet* output + const IOobjectList&, + vtkMultiBlockDataSet* output, + const label datasetNo ); - //- Lagrangian field - all types except scalar + //- Lagrangian field template<class Type> void convertLagrangianField ( @@ -551,29 +508,29 @@ private: template<class Type> void convertPointFields ( - const fvMesh& mesh, - const IOobjectList& objects, - vtkDataArraySelection *fieldSelection, + const fvMesh&, + const pointMesh&, + const IOobjectList&, vtkMultiBlockDataSet* output ); - //- Point fields - all types except scalar + //- Point fields template<class Type> void convertPointField ( - const GeometricField<Type, pointPatchField, pointMesh>& ptf, - const GeometricField<Type, fvPatchField, volMesh>& tf, + const GeometricField<Type, pointPatchField, pointMesh>&, + const GeometricField<Type, fvPatchField, volMesh>&, vtkMultiBlockDataSet* output, const selectionInfo&, const label datasetNo ); - //- Patch point field - all types except scalar + //- Patch point field template<class Type> void convertPatchPointField ( const word& name, - const Field<Type>& tf, + const Field<Type>&, vtkMultiBlockDataSet* output, const selectionInfo&, const label datasetNo @@ -585,17 +542,27 @@ private: //- Extract up to the first non-word characters inline static word getFirstWord(const char*); + //- Subset an IOobjectList based on a hashSet + static void subsetObjectList + ( + IOobjectList&, + const wordHashSet& + ); + + //- Store the current selection(s) + static wordHashSet getSelected(vtkDataArraySelection*); + //- Store the current selection(s) static stringList getSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, + vtkDataArraySelection*, const bool firstWord=false ); //- Store the current selection(s) for a sub-selection static stringList getSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, + vtkDataArraySelection*, const selectionInfo&, const bool firstWord=false ); @@ -603,8 +570,8 @@ private: //- Set selection(s) static void setSelectedArrayEntries ( - vtkDataArraySelection* arraySelection, - const stringList& selectedEntries + vtkDataArraySelection*, + const stringList& ); @@ -640,7 +607,7 @@ public: // Member Functions //- Update - void UpdateInformation(); + void updateInfo(); void Update ( @@ -658,10 +625,15 @@ public: //- Remove patch names from the display void removePatchNames(vtkRenderer* renderer); - //- set the runTime to the requested time - // sets to "constant" on error - bool setTime(const double& requestedTime); + //- set the runTime to the requested time, returns the timeIndex + // sets to "constant" on error and returns -1 + int setTime(const double& requestedTime); + //- The current time index + int timeIndex() const + { + return timeIndex_; + } // Access diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H index 08a316268637a9e6c93a87804443a2410cb89127..7b9b0113acb5096bca3800c045b43c47e21c8115 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddToSelection.H @@ -28,6 +28,7 @@ License #define vtkPV3FoamAddToSelection_H // FOAM includes +#include "IOobjectList.H" #include "SortableList.H" // VTK includes @@ -38,7 +39,7 @@ License template<class Type> Foam::label Foam::vtkPV3Foam::addToSelection ( - vtkDataArraySelection *arraySelection, + vtkDataArraySelection *select, const IOobjectList& objectLst, const string& suffix ) @@ -57,7 +58,7 @@ Foam::label Foam::vtkPV3Foam::addToSelection { objectNames.sort(); - forAll (objectNames, objI) + forAll(objectNames, objI) { if (debug) { @@ -67,14 +68,14 @@ Foam::label Foam::vtkPV3Foam::addToSelection if (suffix.size()) { - arraySelection->AddArray + select->AddArray ( (objectNames[objI] + suffix).c_str() ); } else { - arraySelection->AddArray + select->AddArray ( objectNames[objI].c_str() ); diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFields.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFields.C deleted file mode 100644 index 543fc63eb0ba23f4d0b58333c69bec87983043f3..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFields.C +++ /dev/null @@ -1,233 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Description - -\*---------------------------------------------------------------------------*/ - -#include "vtkPV3Foam.H" - -// Foam includes -#include "IOobjectList.H" -#include "vtkPV3FoamReader.h" - -// VTK includes -#include "vtkDataArraySelection.h" -#include "vtkPolyData.h" -#include "vtkUnstructuredGrid.h" - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -#include "vtkPV3FoamConvertVolFields.H" -#include "vtkPV3FoamConvertPointFields.H" -#include "vtkPV3FoamConvertLagrangianFields.H" - - -void Foam::vtkPV3Foam::convertVolFields -( - vtkMultiBlockDataSet* output -) -{ - if (debug) - { - Info<< "<beg> Foam::vtkPV3Foam::convertVolFields" << endl; - printMemory(); - } - - const fvMesh& mesh = *meshPtr_; - - // Construct interpolation on the raw mesh - pointMesh pMesh(mesh); - - // Search for list of objects for this time - IOobjectList objects(mesh, dbPtr_().timeName()); - - vtkDataArraySelection* arraySelection = reader_->GetVolFieldSelection(); - - // Convert volume fields - if (debug) - { - Info<< "converting Foam volume fields" << endl; - } - - volPointInterpolation pInterp(mesh, pMesh); - - PtrList<PrimitivePatchInterpolation<primitivePatch> > - ppInterpList(mesh.boundaryMesh().size()); - - forAll(ppInterpList, i) - { - ppInterpList.set - ( - i, - new PrimitivePatchInterpolation<primitivePatch> - ( - mesh.boundaryMesh()[i] - ) - ); - } - - convertVolFields<Foam::scalar> - ( - mesh, pInterp, ppInterpList, objects, arraySelection, output - ); - convertVolFields<Foam::vector> - ( - mesh, pInterp, ppInterpList, objects, arraySelection, output - ); - convertVolFields<Foam::sphericalTensor> - ( - mesh, pInterp, ppInterpList, objects, arraySelection, output - ); - convertVolFields<Foam::symmTensor> - ( - mesh, pInterp, ppInterpList, objects, arraySelection, output - ); - convertVolFields<Foam::tensor> - ( - mesh, pInterp, ppInterpList, objects, arraySelection, output - ); - - if (debug) - { - Info<< "<end> Foam::vtkPV3Foam::convertVolFields" << endl; - printMemory(); - } -} - - -void Foam::vtkPV3Foam::convertPointFields -( - vtkMultiBlockDataSet* output -) -{ - if (debug) - { - Info<< "<beg> Foam::vtkPV3Foam::convertPointFields" << endl; - printMemory(); - } - - const fvMesh& mesh = *meshPtr_; - - // Search for list of objects for this time - IOobjectList objects(mesh, dbPtr_().timeName()); - - vtkDataArraySelection* arraySelection = reader_->GetPointFieldSelection(); - - convertPointFields<Foam::scalar> - ( - mesh, objects, arraySelection, output - ); - convertPointFields<Foam::vector> - ( - mesh, objects, arraySelection, output - ); - convertPointFields<Foam::sphericalTensor> - ( - mesh, objects, arraySelection, output - ); - convertPointFields<Foam::symmTensor> - ( - mesh, objects, arraySelection, output - ); - convertPointFields<Foam::tensor> - ( - mesh, objects, arraySelection, output - ); - - if (debug) - { - Info<< "<end> Foam::vtkPV3Foam::convertPointFields" << endl; - printMemory(); - } -} - - -void Foam::vtkPV3Foam::convertLagrangianFields -( - vtkMultiBlockDataSet* output -) -{ - if (debug) - { - Info<< "<beg> Foam::vtkPV3Foam::convertLagrangianFields" << endl; - printMemory(); - } - - const fvMesh& mesh = *meshPtr_; - - // Search for list of objects for this time - //- TODO - currently hard-coded to ONE cloud - IOobjectList objects - ( - mesh, - dbPtr_().timeName(), - "lagrangian"/cloudName_ - ); - - vtkDataArraySelection* arraySelection = - reader_->GetLagrangianFieldSelection(); - - // Convert Lagrangian fields - if (debug) - { - Info<< "converting Lagrangian fields - " - << selectInfoLagrangian_ << endl; - } - - convertLagrangianFields<Foam::label> - ( - mesh, objects, arraySelection, output - ); - - convertLagrangianFields<Foam::scalar> - ( - mesh, objects, arraySelection, output - ); - convertLagrangianFields<Foam::vector> - ( - mesh, objects, arraySelection, output - ); - convertLagrangianFields<Foam::sphericalTensor> - ( - mesh, objects, arraySelection, output - ); - convertLagrangianFields<Foam::symmTensor> - ( - mesh, objects, arraySelection, output - ); - convertLagrangianFields<Foam::tensor> - ( - mesh, objects, arraySelection, output - ); - - if (debug) - { - Info<< "<end> Foam::vtkPV3Foam::convertLagrangianFields" << endl; - printMemory(); - } -} - - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H deleted file mode 100644 index b77fadaa9d5971804b51274925b6476ab925b050..0000000000000000000000000000000000000000 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertLagrangianFields.H +++ /dev/null @@ -1,151 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM; if not, write to the Free Software Foundation, - Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -InClass - vtkPV3Foam - -\*---------------------------------------------------------------------------*/ - -#ifndef vtkPV3FoamConvertLagrangianFields_H -#define vtkPV3FoamConvertLagrangianFields_H - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template<class Type> -void Foam::vtkPV3Foam::convertLagrangianFields -( - const fvMesh& mesh, - const IOobjectList& objects, - vtkDataArraySelection* fieldSelection, - vtkMultiBlockDataSet* output -) -{ - const selectionInfo& selector = selectInfoLagrangian_; - - IOobjectList fieldObjects - ( - objects.lookupClass - ( - IOField<Type>::typeName - ) - ); - - label nFields = fieldSelection->GetNumberOfArrays(); - for (label i=0; i<nFields; i++) - { - const word fieldName = fieldSelection->GetArrayName(i); - - if - ( - !fieldSelection->GetArraySetting(i) - || !fieldObjects.found(fieldName)) - { - continue; - } - - IOField<Type> iotf - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - "lagrangian"/cloudName_, - mesh, - IOobject::MUST_READ - ) - ); - - - // Convert Lagrangian points - for - ( - int regionId = selector.start(); - regionId < selector.end(); - ++regionId - ) - { - if (selectedRegions_[regionId]) - { - convertLagrangianField - ( - iotf, output, selector, - selectedRegionDatasetIds_[regionId] - ); - } - } - } -} - - -template<class Type> -void Foam::vtkPV3Foam::convertLagrangianField -( - const IOField<Type>& tf, - vtkMultiBlockDataSet* output, - const selectionInfo& selector, - const label datasetNo -) -{ - const label nComp = pTraits<Type>::nComponents; - - vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast - ( - GetDataSetFromBlock(output, selector, datasetNo) - ); - - vtkFloatArray *pointData = vtkFloatArray::New(); - pointData->SetNumberOfTuples(tf.size()); - pointData->SetNumberOfComponents(nComp); - pointData->Allocate(nComp*tf.size()); - pointData->SetName(tf.name().c_str()); - - if (debug) - { - Info<< "converting Lagrangian <Type>Field: " << tf.name() << nl - << "tf.size() = " << tf.size() << nl - << "nComp = " << nComp << endl; - } - - float vec[nComp]; - - forAll(tf, i) - { - for (direction d=0; d<nComp; d++) - { - vec[d] = component(tf[i], d); - } - - pointData->InsertTuple(i, vec); - } - - vtkmesh->GetPointData()->AddArray(pointData); - pointData->Delete(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFaceField.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H similarity index 80% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFaceField.H rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H index 114aab667a5f9347b799b53e8274f0495ede37c4..7ab511a5215d5cd306d1a3de87c2877f78e414c2 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertFaceField.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFaceField.H @@ -27,8 +27,8 @@ InClass \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamConvertFaceField_H -#define vtkPV3FoamConvertFaceField_H +#ifndef vtkPV3FoamFaceField_H +#define vtkPV3FoamFaceField_H // VTK includes #include "vtkCellData.h" @@ -60,13 +60,24 @@ void Foam::vtkPV3Foam::convertFaceField const labelList& faceNeigh = mesh.faceNeighbour(); vtkFloatArray *cellData = vtkFloatArray::New(); - cellData->SetNumberOfTuples(faceLabels.size()); - cellData->SetNumberOfComponents(nComp); - cellData->Allocate(nComp*faceLabels.size()); - cellData->SetName(tf.name().c_str()); + cellData->SetNumberOfTuples( faceLabels.size() ); + cellData->SetNumberOfComponents( nComp ); + cellData->Allocate( nComp*faceLabels.size() ); + cellData->SetName( tf.name().c_str() ); + + if (debug) + { + Info<< "convert convertFaceField: " + << tf.name() + << " size = " << tf.size() + << " nComp=" << nComp + << " nTuples = " << faceLabels.size() << endl; + } float vec[nComp]; + // for interior faces: average owner/neighbour + // for boundary faces: owner forAll(faceLabels, faceI) { const label faceNo = faceLabels[faceI]; @@ -119,13 +130,24 @@ void Foam::vtkPV3Foam::convertFaceField const labelList& faceNeigh = mesh.faceNeighbour(); vtkFloatArray *cellData = vtkFloatArray::New(); - cellData->SetNumberOfTuples(fSet.size()); - cellData->SetNumberOfComponents(nComp); - cellData->Allocate(nComp*fSet.size()); - cellData->SetName(tf.name().c_str()); + cellData->SetNumberOfTuples( fSet.size() ); + cellData->SetNumberOfComponents( nComp ); + cellData->Allocate( nComp*fSet.size() ); + cellData->SetName( tf.name().c_str() ); + + if (debug) + { + Info<< "convert convertFaceField: " + << tf.name() + << " size = " << tf.size() + << " nComp=" << nComp + << " nTuples = " << fSet.size() << endl; + } float vec[nComp]; + // for interior faces: average owner/neighbour + // for boundary faces: owner label faceI = 0; forAllConstIter(faceSet, fSet, iter) { @@ -157,7 +179,6 @@ void Foam::vtkPV3Foam::convertFaceField cellData->Delete(); } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C new file mode 100644 index 0000000000000000000000000000000000000000..bff8d615291b0af7a10c2dd6907cdae2812043d0 --- /dev/null +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C @@ -0,0 +1,332 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + +\*---------------------------------------------------------------------------*/ + +#include "vtkPV3Foam.H" + +// Foam includes +#include "IOobjectList.H" +#include "vtkPV3FoamReader.h" + +// VTK includes +#include "vtkDataArraySelection.h" +#include "vtkPolyData.h" +#include "vtkUnstructuredGrid.h" + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +#include "vtkPV3FoamVolFields.H" +#include "vtkPV3FoamPointFields.H" +#include "vtkPV3FoamLagrangianFields.H" + + +void Foam::vtkPV3Foam::subsetObjectList +( + IOobjectList& objects, + const wordHashSet& selected +) +{ + // hash all the selected field names + if (!selected.size()) + { + objects.clear(); + } + + // only keep selected fields + forAllIter(IOobjectList, objects, iter) + { + if (!selected.found(iter()->name())) + { + objects.erase(iter); + } + } +} + + +void Foam::vtkPV3Foam::convertVolFields +( + vtkMultiBlockDataSet* output +) +{ + wordHashSet selectedFields = getSelected + ( + reader_->GetVolFieldSelection() + ); + + if (!selectedFields.size()) + { + return; + } + + const fvMesh& mesh = *meshPtr_; + + // Get objects (fields) for this time - only keep selected fields + IOobjectList objects(mesh, dbPtr_().timeName()); + subsetObjectList(objects, selectedFields); + + if (!objects.size()) + { + return; + } + + if (debug) + { + Info<< "<beg> Foam::vtkPV3Foam::convertVolFields" << nl + << "converting Foam volume fields" << endl; + forAllConstIter(IOobjectList, objects, iter) + { + Info<< " " << iter()->name() + << " == " << iter()->objectPath() << nl; + } + printMemory(); + } + + // Construct interpolation on the raw mesh + pointMesh pMesh(mesh); + volPointInterpolation pInterp(mesh, pMesh); + + PtrList<PrimitivePatchInterpolation<primitivePatch> > + ppInterpList(mesh.boundaryMesh().size()); + + forAll(ppInterpList, i) + { + ppInterpList.set + ( + i, + new PrimitivePatchInterpolation<primitivePatch> + ( + mesh.boundaryMesh()[i] + ) + ); + } + + + convertVolFields<scalar> + ( + mesh, pInterp, ppInterpList, objects, output + ); + convertVolFields<vector> + ( + mesh, pInterp, ppInterpList, objects, output + ); + convertVolFields<sphericalTensor> + ( + mesh, pInterp, ppInterpList, objects, output + ); + convertVolFields<symmTensor> + ( + mesh, pInterp, ppInterpList, objects, output + ); + convertVolFields<tensor> + ( + mesh, pInterp, ppInterpList, objects, output + ); + + if (debug) + { + Info<< "<end> Foam::vtkPV3Foam::convertVolFields" << endl; + printMemory(); + } +} + + +void Foam::vtkPV3Foam::convertPointFields +( + vtkMultiBlockDataSet* output +) +{ + wordHashSet selectedFields = getSelected + ( + reader_->GetPointFieldSelection() + ); + + if (!selectedFields.size()) + { + return; + } + + const fvMesh& mesh = *meshPtr_; + + // Get objects (fields) for this time - only keep selected fields + IOobjectList objects(mesh, dbPtr_().timeName()); + + subsetObjectList(objects, selectedFields); + + if (!objects.size()) + { + return; + } + + if (debug) + { + Info<< "<beg> Foam::vtkPV3Foam::convertPointFields" << nl + << "converting Foam volume fields" << endl; + forAllConstIter(IOobjectList, objects, iter) + { + Info<< " " << iter()->name() + << " == " << iter()->objectPath() << nl; + } + printMemory(); + } + + // Construct interpolation on the raw mesh + pointMesh pMesh(mesh); + + + convertPointFields<scalar> + ( + mesh, pMesh, objects, output + ); + convertPointFields<vector> + ( + mesh, pMesh, objects, output + ); + convertPointFields<sphericalTensor> + ( + mesh, pMesh, objects, output + ); + convertPointFields<symmTensor> + ( + mesh, pMesh, objects, output + ); + convertPointFields<tensor> + ( + mesh, pMesh, objects, output + ); + + if (debug) + { + Info<< "<end> Foam::vtkPV3Foam::convertPointFields" << endl; + printMemory(); + } +} + + +void Foam::vtkPV3Foam::convertLagrangianFields +( + vtkMultiBlockDataSet* output +) +{ + wordHashSet selectedFields = getSelected + ( + reader_->GetLagrangianFieldSelection() + ); + + if (!selectedFields.size()) + { + return; + } + + const fvMesh& mesh = *meshPtr_; + selectionInfo& selector = regionInfoLagrangian_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); + + if (debug) + { + Info<< "<beg> Foam::vtkPV3Foam::convertLagrangianFields" << endl; + printMemory(); + } + + for + ( + int regionId = selector.start(); + regionId < selector.end(); + ++regionId + ) + { + const label datasetNo = regionDataset_[regionId]; + + if (!regionStatus_[regionId] || datasetNo < 0) + { + continue; + } + + word cloudName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); + + // Get the Lagrangian fields for this time and this cloud + // but only keep selected fields + IOobjectList objects + ( + mesh, + dbPtr_().timeName(), + "lagrangian"/cloudName + ); + subsetObjectList(objects, selectedFields); + + if (!objects.size()) + { + continue; + } + + if (debug) + { + Info<< "converting Foam lagrangian fields" << nl; + forAllConstIter(IOobjectList, objects, iter) + { + Info<< " " << iter()->name() + << " == " << iter()->objectPath() << nl; + } + } + + convertLagrangianFields<label> + ( + objects, output, datasetNo + ); + convertLagrangianFields<scalar> + ( + objects, output, datasetNo + ); + convertLagrangianFields<vector> + ( + objects, output, datasetNo + ); + convertLagrangianFields<sphericalTensor> + ( + objects, output, datasetNo + ); + convertLagrangianFields<symmTensor> + ( + objects, output, datasetNo + ); + convertLagrangianFields<tensor> + ( + objects, output, datasetNo + ); + } + + if (debug) + { + Info<< "<end> Foam::vtkPV3Foam::convertLagrangianFields" << endl; + printMemory(); + } +} + + +// ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchPointField.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H similarity index 63% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchPointField.H rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H index a793958218a2084299fc9a4fd50b85bb9d9078f4..6a6056086bea5c9ff155bc4f201b3298665f49b4 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchPointField.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamLagrangianFields.H @@ -27,19 +27,42 @@ InClass \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamConvertPatchPointField_H -#define vtkPV3FoamConvertPatchPointField_H - -// VTK includes -#include "vtkPointData.h" +#ifndef vtkPV3FoamLagrangianFields_H +#define vtkPV3FoamLagrangianFields_H // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<class Type> -void Foam::vtkPV3Foam::convertPatchPointField +void Foam::vtkPV3Foam::convertLagrangianFields +( + const IOobjectList& objects, + vtkMultiBlockDataSet* output, + const label datasetNo +) +{ + const selectionInfo& selector = regionInfoLagrangian_; + + // field subset based on type + IOobjectList fieldObjects + ( + objects.lookupClass + ( + IOField<Type>::typeName + ) + ); + + forAllIter(IOobjectList, fieldObjects, iter) + { + IOField<Type> tf(*iter()); + convertLagrangianField(tf, output, selector, datasetNo); + } +} + + +template<class Type> +void Foam::vtkPV3Foam::convertLagrangianField ( - const word& name, - const Field<Type>& pptf, + const IOField<Type>& tf, vtkMultiBlockDataSet* output, const selectionInfo& selector, const label datasetNo @@ -53,18 +76,27 @@ void Foam::vtkPV3Foam::convertPatchPointField ); vtkFloatArray *pointData = vtkFloatArray::New(); - pointData->SetNumberOfTuples(pptf.size()); - pointData->SetNumberOfComponents(nComp); - pointData->Allocate(nComp*pptf.size()); - pointData->SetName(name.c_str()); + pointData->SetNumberOfTuples( tf.size() ); + pointData->SetNumberOfComponents( nComp ); + pointData->Allocate( nComp*tf.size() ); + pointData->SetName( tf.name().c_str() ); - float vec[nComp]; + if (debug) + { + Info<< "convert LagrangianField: " + << tf.name() + << " size = " << tf.size() + << " nComp=" << nComp + << " nTuples = " << tf.size() << endl; + } - forAll(pptf, i) + float vec[nComp]; + forAll(tf, i) { + const Type& t = tf[i]; for (direction d=0; d<nComp; d++) { - vec[d] = component(pptf[i], d); + vec[d] = component(t, d); } pointData->InsertTuple(i, vec); diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertMesh.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C similarity index 50% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertMesh.C rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C index acd0ed5f0380fbd54392558d3f225998f722b2f2..3c5cc6fa933b154c84f0a046e833f5435ba2d9f0 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMesh.C @@ -56,13 +56,14 @@ void Foam::vtkPV3Foam::convertMeshVolume } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoVolume_; + selectionInfo& selector = regionInfoVolume_; - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; - // Create the internal mesh and add as dataset 0 + // Create the internalMesh + // TODO: multiple regions for ( int regionId = selector.start(); @@ -70,34 +71,33 @@ void Foam::vtkPV3Foam::convertMeshVolume ++regionId ) { - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId]) { continue; } - // word selectName = getFirstWord - // ( - // arraySelection->GetArrayName(regionId) - // ); - if (debug) { Info<< "Creating VTK internalMesh" << endl; } - const label datasetId = 0; - - vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New(); - addVolumeMesh(mesh, vtkmesh, superCells_); + vtkUnstructuredGrid* vtkmesh = volumeVTKMesh + ( + mesh, + superCells_ + ); - AddToBlock(output, selector, datasetId, vtkmesh, "internalMesh"); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); + if (vtkmesh) + { + AddToBlock(output, selector, datasetNo, vtkmesh, "internalMesh"); + vtkmesh->Delete(); - created = true; + regionDataset_[regionId] = datasetNo++; + } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } @@ -123,13 +123,14 @@ void Foam::vtkPV3Foam::convertMeshLagrangian } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoLagrangian_; + selectionInfo& selector = regionInfoLagrangian_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; - // Create a single Lagrangian mesh and add as dataset 0 + // Create Lagrangian meshes for ( int regionId = selector.start(); @@ -137,29 +138,28 @@ void Foam::vtkPV3Foam::convertMeshLagrangian ++regionId ) { - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId]) { continue; } - if (debug) - { - Info<< "Creating VTK Lagrangian mesh" << endl; - } - - const label datasetId = 0; - - vtkPolyData* vtkmesh = vtkPolyData::New(); - addLagrangianMesh(mesh, vtkmesh); + word cloudName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); - AddToBlock(output, selector, datasetId, vtkmesh, cloudName_); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); + vtkPolyData* vtkmesh = lagrangianVTKMesh(mesh, cloudName); + if (vtkmesh) + { + AddToBlock(output, selector, datasetNo, vtkmesh, cloudName); + vtkmesh->Delete(); - created = true; + regionDataset_[regionId] = datasetNo++; + } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } @@ -185,18 +185,17 @@ void Foam::vtkPV3Foam::convertMeshPatches } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoPatches_; - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); + selectionInfo& selector = regionInfoPatches_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; if (selector.size()) { const polyBoundaryMesh& patches = mesh.boundaryMesh(); - // Create the patches and add as dataset ... for ( int regionId = selector.start(); @@ -204,52 +203,41 @@ void Foam::vtkPV3Foam::convertMeshPatches ++regionId ) { - if (!selectedRegions_[regionId]) - { - continue; - } - - word selectName = getFirstWord + word patchName = getFirstWord ( - arraySelection->GetArrayName(regionId) + regionSelection->GetArrayName(regionId) ); - const label patchId = patches.findPatchID(selectName); + label patchId = patches.findPatchID(patchName); - if (debug) + if (!regionStatus_[regionId] || patchId < 0) { - Info<< "Creating VTK mesh for patch: " << selectName - << " region index: " << regionId << endl; + continue; } - const label datasetId = GetNumberOfDataSets(output, selector); - - vtkPolyData* vtkmesh = vtkPolyData::New(); - addPatchMesh - ( - patches[patchId], - vtkmesh - ); + if (debug) + { + Info<< "Creating VTK mesh for patch: " << patchName + << " patch index: " << patchId << endl; + } - AddToBlock - ( - output, selector, datasetId, vtkmesh, - selectName + ":patch" - ); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); + vtkPolyData* vtkmesh = patchVTKMesh(patches[patchId]); + if (vtkmesh) + { + AddToBlock(output, selector, datasetNo, vtkmesh, patchName); + vtkmesh->Delete(); - created = true; + regionDataset_[regionId] = datasetNo++; + } } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } - - if (debug) { Info<< "<end> Foam::vtkPV3Foam::convertMeshPatches" << endl; @@ -271,23 +259,32 @@ void Foam::vtkPV3Foam::convertMeshCellZones } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoCellZones_; + selectionInfo& selector = regionInfoCellZones_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; - // Create the cell zone(s) and add as DataSet(CELLZONE, 0..n) if (selector.size()) { - const cellZoneMesh& czMesh = mesh.cellZones(); + const cellZoneMesh& zMesh = mesh.cellZones(); - // use the zoneId directly instead of the name - for (int zoneI=0; zoneI < selector.size(); ++zoneI) + for + ( + int regionId = selector.start(); + regionId < selector.end(); + ++regionId + ) { - const int regionId = selector.start() + zoneI; + word zoneName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); + + label zoneId = zMesh.findZoneID(zoneName); - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId] || zoneId < 0) { continue; } @@ -295,43 +292,41 @@ void Foam::vtkPV3Foam::convertMeshCellZones if (debug) { Info<< "Creating VTK mesh for cellZone: " - << zoneI << endl; + << zoneId << endl; } fvMeshSubset subsetter(mesh); - subsetter.setLargeCellSubset(czMesh[zoneI]); + subsetter.setLargeCellSubset(zMesh[zoneId]); - const label datasetId = GetNumberOfDataSets(output, selector); - - vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New(); - - addVolumeMesh + vtkUnstructuredGrid* vtkmesh = volumeVTKMesh ( subsetter.subMesh(), - vtkmesh, - zoneSuperCells_[datasetId] + zoneSuperCells_[datasetNo] ); - // renumber - superCells must contain global cell ids - inplaceRenumber - ( - subsetter.cellMap(), - zoneSuperCells_[datasetId] - ); - - AddToBlock - ( - output, selector, datasetId, vtkmesh, - czMesh.names()[zoneI] + ":cellZone" - ); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); - - created = true; + if (vtkmesh) + { + // renumber - superCells must contain global cell ids + inplaceRenumber + ( + subsetter.cellMap(), + zoneSuperCells_[datasetNo] + ); + + AddToBlock + ( + output, selector, datasetNo, vtkmesh, + zMesh[zoneId].name() + ":cellZone" + ); + vtkmesh->Delete(); + + regionDataset_[regionId] = datasetNo++; + } } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } @@ -357,12 +352,12 @@ void Foam::vtkPV3Foam::convertMeshCellSets } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoCellSets_; - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); + selectionInfo& selector = regionInfoCellSets_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; // Create the cell sets and add as dataset if (selector.size()) @@ -373,57 +368,55 @@ void Foam::vtkPV3Foam::convertMeshCellSets regionId < selector.end(); ++regionId) { - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId]) { continue; } - word selectName = getFirstWord + word selectedName = getFirstWord ( - arraySelection->GetArrayName(regionId) + regionSelection->GetArrayName(regionId) ); if (debug) { - Info<< "Creating VTK mesh for cellSet: " << selectName + Info<< "Creating VTK mesh for cellSet: " << selectedName << " region index: " << regionId << endl; } - const cellSet cSet(mesh, selectName); + const cellSet cSet(mesh, selectedName); fvMeshSubset subsetter(mesh); subsetter.setLargeCellSubset(cSet); - const label datasetId = GetNumberOfDataSets(output, selector); - - vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New(); - - addVolumeMesh + vtkUnstructuredGrid* vtkmesh = volumeVTKMesh ( subsetter.subMesh(), - vtkmesh, - csetSuperCells_[datasetId] - ); - - // renumber - superCells must contain global cell ids - inplaceRenumber - ( - subsetter.cellMap(), - csetSuperCells_[datasetId] + csetSuperCells_[datasetNo] ); - AddToBlock - ( - output, selector, datasetId, vtkmesh, - selectName + ":cellSet" - ); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); - - created = true; + if (vtkmesh) + { + // renumber - superCells must contain global cell ids + inplaceRenumber + ( + subsetter.cellMap(), + csetSuperCells_[datasetNo] + ); + + AddToBlock + ( + output, selector, datasetNo, vtkmesh, + selectedName + ":cellSet" + ); + vtkmesh->Delete(); + + regionDataset_[regionId] = datasetNo++; + } } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } @@ -449,58 +442,65 @@ void Foam::vtkPV3Foam::convertMeshFaceZones } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoFaceZones_; + selectionInfo& selector = regionInfoFaceZones_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; - // Create the cell zone(s) and add as datasets + // Create the cell zone(s) if (selector.size()) { - const faceZoneMesh& fzMesh = mesh.faceZones(); + const faceZoneMesh& zMesh = mesh.faceZones(); - // use the zoneId directly instead of the name - for (int zoneI=0; zoneI < selector.size(); ++zoneI) + for + ( + int regionId = selector.start(); + regionId < selector.end(); + ++regionId + ) { - const int regionId = selector.start() + zoneI; + word zoneName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); + + const label zoneId = zMesh.findZoneID(zoneName); - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId] || zoneId < 0) { continue; } if (debug) { - Info<< "Creating VTK mesh for faceZone: " - << zoneI << endl; + Info<< "Creating VTK mesh for faceZone[" << zoneId + << "] " << zoneName << endl; } - const label datasetId = GetNumberOfDataSets(output, selector); - - vtkPolyData* vtkmesh = vtkPolyData::New(); - - addFaceZoneMesh + vtkPolyData* vtkmesh = faceZoneVTKMesh ( mesh, - fzMesh[zoneI], - vtkmesh + zMesh[zoneId] ); - AddToBlock - ( - output, selector, datasetId, vtkmesh, - fzMesh.names()[zoneI] + ":faceZone" - ); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); - - created = true; + if (vtkmesh) + { + AddToBlock + ( + output, selector, datasetNo, vtkmesh, + zMesh[zoneId].name() + ":faceZone" + ); + vtkmesh->Delete(); + + regionDataset_[regionId] = datasetNo++; + } } } - - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } @@ -526,12 +526,12 @@ void Foam::vtkPV3Foam::convertMeshFaceSets } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoFaceSets_; - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); + selectionInfo& selector = regionInfoFaceSets_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; // Create the face sets and add as dataset if (selector.size()) @@ -543,47 +543,46 @@ void Foam::vtkPV3Foam::convertMeshFaceSets ++regionId ) { - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId]) { continue; } - word selectName = getFirstWord + word selectedName = getFirstWord ( - arraySelection->GetArrayName(regionId) + regionSelection->GetArrayName(regionId) ); if (debug) { - Info<< "Creating VTK mesh for faceSet: " << selectName + Info<< "Creating VTK mesh for faceSet: " << selectedName << " region index: " << regionId << endl; } - const faceSet fSet(mesh, selectName); - - const label datasetId = GetNumberOfDataSets(output, selector); + const faceSet fSet(mesh, selectedName); - vtkPolyData* vtkmesh = vtkPolyData::New(); - addFaceSetMesh + vtkPolyData* vtkmesh = faceSetVTKMesh ( mesh, - fSet, - vtkmesh + fSet ); - AddToBlock - ( - output, selector, datasetId, vtkmesh, - selectName + ":faceSet" - ); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); - - created = true; + if (vtkmesh) + { + AddToBlock + ( + output, selector, datasetNo, vtkmesh, + selectedName + ":faceSet" + ); + vtkmesh->Delete(); + + regionDataset_[regionId] = datasetNo++; + } } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } @@ -609,62 +608,58 @@ void Foam::vtkPV3Foam::convertMeshPointZones } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoPointZones_; + selectionInfo& selector = regionInfoPointZones_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; - // Create the point sets and add as dataset if (selector.size()) { - const pointZoneMesh& pzMesh = mesh.pointZones(); + const pointZoneMesh& zMesh = mesh.pointZones(); - // use the zoneId directly instead of the name - for (int zoneI=0; zoneI < selector.size(); ++zoneI) + for + ( + int regionId = selector.start(); + regionId < selector.end(); + ++regionId + ) { - const int regionId = selector.start() + zoneI; + word zoneName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); + + label zoneId = zMesh.findZoneID(zoneName); - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId] || zoneId < 0) { continue; } - if (debug) + vtkPolyData* vtkmesh = pointZoneVTKMesh(mesh, zMesh[zoneId]); + + if (vtkmesh) { - Info<< "Creating VTK mesh for pointZone: " - << zoneI << endl; + AddToBlock + ( + output, selector, datasetNo, vtkmesh, + zMesh[zoneId].name() + ":pointZone" + ); + vtkmesh->Delete(); + + regionDataset_[regionId] = datasetNo++; } - - const label datasetId = GetNumberOfDataSets(output, selector); - - vtkPolyData* vtkmesh = vtkPolyData::New(); - - addPointZoneMesh - ( - mesh, - pzMesh[zoneI], - vtkmesh - ); - - AddToBlock - ( - output, selector, datasetId, vtkmesh, - pzMesh.names()[zoneI] + ":pointZone" - ); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); - - created = true; } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } - if (debug) { Info<< "<end> Foam::vtkPV3Foam::convertMeshPointZones" << endl; @@ -687,14 +682,13 @@ void Foam::vtkPV3Foam::convertMeshPointSets } const fvMesh& mesh = *meshPtr_; - selectionInfo& selector = selectInfoPointSets_; - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); + selectionInfo& selector = regionInfoPointSets_; + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - // set output block and note if anything was added + // set output block, restart at dataset 0 selector.block(blockNo); - bool created = false; + label datasetNo = 0; - // Create the point sets and add as dataset if (selector.size()) { for @@ -704,47 +698,41 @@ void Foam::vtkPV3Foam::convertMeshPointSets ++regionId ) { - if (!selectedRegions_[regionId]) + if (!regionStatus_[regionId]) { continue; } - word selectName = getFirstWord + word selectedName = getFirstWord ( - arraySelection->GetArrayName(regionId) + regionSelection->GetArrayName(regionId) ); - if (debug) { - Info<< "Creating VTK mesh for pointSet: " << selectName + Info<< "Creating VTK mesh for pointSet: " << selectedName << " region index: " << regionId << endl; } - const pointSet pSet(mesh, selectName); - - const label datasetId = GetNumberOfDataSets(output, selector); + const pointSet pSet(mesh, selectedName); - vtkPolyData* vtkmesh = vtkPolyData::New(); - addPointSetMesh - ( - mesh, - pSet, - vtkmesh - ); - AddToBlock - ( - output, selector, datasetId, vtkmesh, - selectName + ":pointSet" - ); - selectedRegionDatasetIds_[regionId] = datasetId; - vtkmesh->Delete(); - - created = true; + vtkPolyData* vtkmesh = pointSetVTKMesh(mesh, pSet); + if (vtkmesh) + { + AddToBlock + ( + output, selector, datasetNo, vtkmesh, + selectedName + ":pointSet" + ); + vtkmesh->Delete(); + + regionDataset_[regionId] = datasetNo++; + } } } - if (created) + // was anything added? + if (datasetNo) { ++blockNo; } diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddLagrangianMesh.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshLagrangian.C similarity index 55% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddLagrangianMesh.C rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshLagrangian.C index d4463109a9cf82f8596884c1ac67a9527d15e9a2..d1b0492235c56aa1d63717439bba31f062a4b650 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddLagrangianMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshLagrangian.C @@ -31,81 +31,68 @@ Description // Foam includes #include "Cloud.H" #include "fvMesh.H" -#include "passiveParticle.H" -#include "vtkPV3FoamInsertNextPoint.H" #include "IOobjectList.H" +#include "passiveParticle.H" +#include "vtkPV3FoamPoints.H" // VTK includes -#include "vtkCellArray.h" +#include "vtkPoints.h" #include "vtkPolyData.h" -#include "vtkUnstructuredGrid.h" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::vtkPV3Foam::addLagrangianMesh +vtkPolyData* Foam::vtkPV3Foam::lagrangianVTKMesh ( const fvMesh& mesh, - vtkPolyData *vtkmesh + const word& cloudName ) { + vtkPolyData* vtkmesh = NULL; + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addLagrangianMesh - timePath " - << mesh.time().timePath()/"lagrangian" << endl; + Info<< "<beg> Foam::vtkPV3Foam::lagrangianVTKMesh - timePath " + << mesh.time().timePath()/"lagrangian"/cloudName << endl; printMemory(); } - fileNameList cloudDirs + IOobjectList sprayObjs ( - readDir(mesh.time().timePath()/"lagrangian", fileName::DIRECTORY) + mesh, + mesh.time().timeName(), + "lagrangian"/cloudName ); - if (debug && cloudDirs.size()) + IOobject* positionsPtr = sprayObjs.lookup("positions"); + if (positionsPtr) { - Info<< "... check cloudDirs: " << cloudDirs << endl; - } - - bool foundCloud = false; - forAll(cloudDirs, i) - { - IOobjectList sprayObjs - ( - mesh, - mesh.time().timeName(), - "lagrangian"/cloudDirs[i] - ); - - IOobject* positionsPtr = sprayObjs.lookup("positions"); + Cloud<passiveParticle> parcels(mesh, cloudName, false); - if (positionsPtr && !foundCloud) + if (debug) { - foundCloud = true; - - Cloud<passiveParticle> parcels(mesh, cloudDirs[i], false); - - if (debug) - { - Info<< "cloud with " << parcels.size() << " parcels" << endl; - } - - vtkPoints* vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(parcels.size()); + Info<< "cloud with " << parcels.size() << " parcels" << endl; + } - forAllConstIter(Cloud<passiveParticle>, parcels, elmnt) - { - vtkPV3FoamInsertNextPoint(vtkpoints, elmnt().position()); - } + vtkmesh = vtkPolyData::New(); + vtkPoints* vtkpoints = vtkPoints::New(); + vtkpoints->Allocate( parcels.size() ); - vtkmesh->SetPoints(vtkpoints); - vtkpoints->Delete(); + forAllConstIter(Cloud<passiveParticle>, parcels, iter) + { + vtkPV3FoamInsertNextPoint(vtkpoints, iter().position()); } + + vtkmesh->SetPoints(vtkpoints); + vtkpoints->Delete(); } if (debug) { - Info<< "<end> Foam::vtkPV3Foam::addLagrangianMesh" << endl; + Info<< "<end> Foam::vtkPV3Foam::lagrangianVTKMesh" << endl; printMemory(); } + + return vtkmesh; } diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddPatchMesh.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshPatch.C similarity index 84% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddPatchMesh.C rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshPatch.C index 7c8a586ebabd084c9fd96147edb51c00239b11ba..bacaa0f63d01724660e68655768b7033f7e21903 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddPatchMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshPatch.C @@ -31,7 +31,7 @@ Description // Foam includes #include "polyPatch.H" #include "primitivePatch.H" -#include "vtkPV3FoamInsertNextPoint.H" +#include "vtkPV3FoamPoints.H" // VTK includes #include "vtkCellArray.h" @@ -40,15 +40,16 @@ Description // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::vtkPV3Foam::addPatchMesh +vtkPolyData* Foam::vtkPV3Foam::patchVTKMesh ( - const polyPatch& p, - vtkPolyData *vtkmesh + const polyPatch& p ) { + vtkPolyData* vtkmesh = vtkPolyData::New(); + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addPatchMesh - " << p.name() << endl; + Info<< "<beg> Foam::vtkPV3Foam::patchVTKMesh - " << p.name() << endl; printMemory(); } @@ -56,7 +57,7 @@ void Foam::vtkPV3Foam::addPatchMesh const Foam::pointField& points = p.localPoints(); vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(points.size()); + vtkpoints->Allocate( points.size() ); forAll(points, i) { vtkPV3FoamInsertNextPoint(vtkpoints, points[i]); @@ -69,14 +70,14 @@ void Foam::vtkPV3Foam::addPatchMesh // Add faces as polygons const faceList& faces = p.localFaces(); - vtkCellArray * vtkcells = vtkCellArray::New(); - vtkcells->Allocate(faces.size()); + vtkCellArray* vtkcells = vtkCellArray::New(); + vtkcells->Allocate( faces.size() ); forAll(faces, faceI) { const face& f = faces[faceI]; vtkIdType nodeIds[f.size()]; - forAll (f, fp) + forAll(f, fp) { nodeIds[fp] = f[fp]; } @@ -88,9 +89,11 @@ void Foam::vtkPV3Foam::addPatchMesh if (debug) { - Info<< "<end> Foam::vtkPV3Foam::addPatchMesh - " << p.name() << endl; + Info<< "<end> Foam::vtkPV3Foam::patchVTKMesh - " << p.name() << endl; printMemory(); } + + return vtkmesh; } diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddSetMesh.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshSet.C similarity index 80% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddSetMesh.C rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshSet.C index 18835fe427f38c36d7a9aa1ac13f6a47af54fb9b..c64c3ec692d8235890ad655a51a1e3be73b0b243 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddSetMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshSet.C @@ -31,7 +31,7 @@ Description // Foam includes #include "faceSet.H" #include "pointSet.H" -#include "vtkPV3FoamInsertNextPoint.H" +#include "vtkPV3FoamPoints.H" // VTK includes #include "vtkPoints.h" @@ -40,16 +40,17 @@ Description // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::vtkPV3Foam::addFaceSetMesh +vtkPolyData* Foam::vtkPV3Foam::faceSetVTKMesh ( const fvMesh& mesh, - const faceSet& fSet, - vtkPolyData* vtkmesh + const faceSet& fSet ) { + vtkPolyData* vtkmesh = vtkPolyData::New(); + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addFaceSetMesh" << endl; + Info<< "<beg> Foam::vtkPV3Foam::faceSetVTKMesh" << endl; printMemory(); } @@ -65,13 +66,13 @@ void Foam::vtkPV3Foam::addFaceSetMesh primitiveFacePatch p(patchFaces, mesh.points()); - // The balance of this routine should be identical to addPatchMesh + // The balance of this routine should be identical to patchVTKMesh // Convert Foam mesh vertices to VTK const pointField& points = p.localPoints(); vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(points.size()); + vtkpoints->Allocate( points.size() ); forAll(points, i) { vtkPV3FoamInsertNextPoint(vtkpoints, points[i]); @@ -83,13 +84,14 @@ void Foam::vtkPV3Foam::addFaceSetMesh const faceList& faces = p.localFaces(); vtkCellArray* vtkcells = vtkCellArray::New(); - vtkcells->Allocate(p.size()); + vtkcells->Allocate( faces.size() ); + forAll(faces, faceI) { const face& f = faces[faceI]; vtkIdType nodeIds[f.size()]; - forAll (f, fp) + forAll(f, fp) { nodeIds[fp] = f[fp]; } @@ -101,29 +103,32 @@ void Foam::vtkPV3Foam::addFaceSetMesh if (debug) { - Info<< "<end> Foam::vtkPV3Foam::addFaceSetMesh" << endl; + Info<< "<end> Foam::vtkPV3Foam::faceSetVTKMesh" << endl; printMemory(); } + + return vtkmesh; } -void Foam::vtkPV3Foam::addPointSetMesh +vtkPolyData* Foam::vtkPV3Foam::pointSetVTKMesh ( const fvMesh& mesh, - const pointSet& pSet, - vtkPolyData* vtkmesh + const pointSet& pSet ) { + vtkPolyData* vtkmesh = vtkPolyData::New(); + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addPointSetMesh" << endl; + Info<< "<beg> Foam::vtkPV3Foam::pointSetVTKMesh" << endl; printMemory(); } const pointField& meshPoints = mesh.points(); vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(pSet.size()); + vtkpoints->Allocate( pSet.size() ); forAllConstIter(pointSet, pSet, iter) { @@ -135,9 +140,12 @@ void Foam::vtkPV3Foam::addPointSetMesh if (debug) { - Info<< "<end> Foam::vtkPV3Foam::addPointSetMesh" << endl; + Info<< "<end> Foam::vtkPV3Foam::pointSetVTKMesh" << endl; printMemory(); } + + return vtkmesh; } + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddVolumeMesh.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshVolume.C similarity index 85% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddVolumeMesh.C rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshVolume.C index 292fb8d2a0964cd6f75582ea356d67b59e00dbae..333a9dc1063a8d607e5cc9f1bf88db22f2708c3a 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddVolumeMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshVolume.C @@ -26,35 +26,30 @@ Description \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamAddVolumeMesh_H -#define vtkPV3FoamAddVolumeMesh_H - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - #include "vtkPV3Foam.H" // Foam includes #include "fvMesh.H" #include "cellModeller.H" -#include "vtkPV3FoamInsertNextPoint.H" +#include "vtkPV3FoamPoints.H" // VTK includes #include "vtkCellArray.h" #include "vtkUnstructuredGrid.h" - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::vtkPV3Foam::addVolumeMesh +vtkUnstructuredGrid* Foam::vtkPV3Foam::volumeVTKMesh ( const fvMesh& mesh, - vtkUnstructuredGrid* vtkmesh, labelList& superCells ) { + vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::New(); + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addVolumeMesh" << endl; + Info<< "<beg> Foam::vtkPV3Foam::volumeVTKMesh" << endl; printMemory(); } @@ -124,10 +119,10 @@ void Foam::vtkPV3Foam::addVolumeMesh if (debug) { - Info<<"mesh.nCells() = " << mesh.nCells() << nl - <<"mesh.nPoints() = " << mesh.nPoints() << nl - <<"nAddCells = " << nAddCells << nl - <<"nAddPoints = " << nAddPoints << endl; + Info<<" mesh nCells = " << mesh.nCells() << nl + <<" nPoints = " << mesh.nPoints() << nl + <<" nAddCells = " << nAddCells << nl + <<" nAddPoints = " << nAddPoints << endl; } superCells.setSize(mesh.nCells() + nAddCells); @@ -139,7 +134,7 @@ void Foam::vtkPV3Foam::addVolumeMesh // Convert Foam mesh vertices to VTK vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(mesh.nPoints() + nAddPoints); + vtkpoints->Allocate( mesh.nPoints() + nAddPoints ); const Foam::pointField& points = mesh.points(); @@ -154,21 +149,21 @@ void Foam::vtkPV3Foam::addVolumeMesh Info<< "... converting cells" << endl; } - vtkmesh->Allocate(mesh.nCells() + nAddCells); + vtkmesh->Allocate( mesh.nCells() + nAddCells ); // Set counters for additional points and additional cells - label api = 0, aci = 0; + label addPointI = 0, addCellI = 0; // Create storage for points - needed for mapping from Foam to VTK // data types - max 'order' = hex = 8 points vtkIdType nodeIds[8]; - forAll(cellShapes, celli) + forAll(cellShapes, cellI) { - const cellShape& cellShape = cellShapes[celli]; + const cellShape& cellShape = cellShapes[cellI]; const cellModel& cellModel = cellShape.model(); - superCells[aci++] = celli; + superCells[addCellI++] = cellI; if (cellModel == tet) { @@ -265,16 +260,16 @@ void Foam::vtkPV3Foam::addVolumeMesh // Polyhedral cell. Decompose into tets + prisms. // Mapping from additional point to cell - addPointCellLabels_[api] = celli; + addPointCellLabels_[addPointI] = cellI; // Insert the new vertex from the cell-centre - label newVertexLabel = mesh.nPoints() + api; - vtkPV3FoamInsertNextPoint(vtkpoints, mesh.C()[celli]); + label newVertexLabel = mesh.nPoints() + addPointI; + vtkPV3FoamInsertNextPoint(vtkpoints, mesh.C()[cellI]); // Whether to insert cell in place of original or not. bool substituteCell = true; - const labelList& cFaces = mesh.cells()[celli]; + const labelList& cFaces = mesh.cells()[cellI]; forAll(cFaces, cFaceI) { @@ -293,13 +288,13 @@ void Foam::vtkPV3Foam::addVolumeMesh if (substituteCell) { - thisCellI = celli; + thisCellI = cellI; substituteCell = false; } else { - thisCellI = mesh.nCells() + aci; - superCells[aci++] = celli; + thisCellI = mesh.nCells() + addCellI; + superCells[addCellI++] = cellI; } nodeIds[0] = f[0]; @@ -323,13 +318,13 @@ void Foam::vtkPV3Foam::addVolumeMesh if (substituteCell) { - thisCellI = celli; + thisCellI = cellI; substituteCell = false; } else { - thisCellI = mesh.nCells() + aci; - superCells[aci++] = celli; + thisCellI = mesh.nCells() + addCellI; + superCells[addCellI++] = cellI; } nodeIds[0] = f[0]; @@ -345,7 +340,7 @@ void Foam::vtkPV3Foam::addVolumeMesh } } - api++; + addPointI++; } } @@ -354,14 +349,11 @@ void Foam::vtkPV3Foam::addVolumeMesh if (debug) { - Info<< "<end> Foam::vtkPV3Foam::addVolumeMesh" << endl; + Info<< "<end> Foam::vtkPV3Foam::volumeVTKMesh" << endl; printMemory(); } -} - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif + return vtkmesh; +} // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddZoneMesh.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshZone.C similarity index 76% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddZoneMesh.C rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshZone.C index 9c52624f0f9ad7019d92e70a3fceb1718e3de5cc..12533e44bc8939c734a8a82362057e662a214a42 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamAddZoneMesh.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamMeshZone.C @@ -29,7 +29,7 @@ Description #include "vtkPV3Foam.H" // Foam includes -#include "vtkPV3FoamInsertNextPoint.H" +#include "vtkPV3FoamPoints.H" // VTK includes #include "vtkPoints.h" @@ -39,20 +39,21 @@ Description // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::vtkPV3Foam::addFaceZoneMesh +vtkPolyData* Foam::vtkPV3Foam::faceZoneVTKMesh ( const fvMesh& mesh, - const labelList& faceLabels, - vtkPolyData* vtkmesh + const labelList& faceLabels ) { + vtkPolyData* vtkmesh = vtkPolyData::New(); + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addFaceZoneMesh" << endl; + Info<< "<beg> Foam::vtkPV3Foam::faceZoneVTKMesh" << endl; printMemory(); } - // Construct primitivePatch of faces in fSet. + // Construct primitivePatch of faces in faceZone const faceList& meshFaces = mesh.faces(); faceList patchFaces(faceLabels.size()); @@ -63,31 +64,34 @@ void Foam::vtkPV3Foam::addFaceZoneMesh primitiveFacePatch p(patchFaces, mesh.points()); - // The balance of this routine should be identical to addPatchMesh + // The balance of this routine should be identical to patchVTKMesh // Convert Foam mesh vertices to VTK const pointField& points = p.localPoints(); - vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(p.size()); + vtkPoints* vtkpoints = vtkPoints::New(); + vtkpoints->Allocate( points.size() ); forAll(points, i) { vtkPV3FoamInsertNextPoint(vtkpoints, points[i]); } + vtkmesh->SetPoints(vtkpoints); vtkpoints->Delete(); + // Add faces as polygons const faceList& faces = p.localFaces(); vtkCellArray* vtkcells = vtkCellArray::New(); - vtkcells->Allocate(points.size()); + vtkcells->Allocate( faces.size() ); + forAll(faces, faceI) { const face& f = faces[faceI]; vtkIdType nodeIds[f.size()]; - forAll (f, fp) + forAll(f, fp) { nodeIds[fp] = f[fp]; } @@ -99,30 +103,33 @@ void Foam::vtkPV3Foam::addFaceZoneMesh if (debug) { - Info<< "<end> Foam::vtkPV3Foam::addFaceZoneMesh" << endl; + Info<< "<end> Foam::vtkPV3Foam::faceZoneVTKMesh" << endl; printMemory(); } + + return vtkmesh; } -void Foam::vtkPV3Foam::addPointZoneMesh +vtkPolyData* Foam::vtkPV3Foam::pointZoneVTKMesh ( const fvMesh& mesh, - const labelList& pointLabels, - vtkPolyData* vtkmesh + const labelList& pointLabels ) { + vtkPolyData* vtkmesh = vtkPolyData::New(); + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addPointZoneMesh" << endl; + Info<< "<beg> Foam::vtkPV3Foam::pointZoneVTKMesh" << endl; printMemory(); } const pointField& meshPoints = mesh.points(); vtkPoints *vtkpoints = vtkPoints::New(); - vtkpoints->Allocate(pointLabels.size()); + vtkpoints->Allocate( pointLabels.size() ); forAll(pointLabels, pointI) { @@ -134,9 +141,11 @@ void Foam::vtkPV3Foam::addPointZoneMesh if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::addPointZoneMesh" << endl; + Info<< "<beg> Foam::vtkPV3Foam::pointZoneVTKMesh" << endl; printMemory(); } + + return vtkmesh; } // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchFaceField.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H similarity index 63% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchFaceField.H rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H index af0fde5e21db913a599b06f0438ab3edb555fd4c..aa7fea32535e91868205711a5feda2bede0cc3fb 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPatchFaceField.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPatchField.H @@ -27,19 +27,20 @@ InClass \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamConvertPatchFaceField_H -#define vtkPV3FoamConvertPatchFaceField_H +#ifndef vtkPV3FoamPatchField_H +#define vtkPV3FoamPatchField_H // VTK includes #include "vtkCellData.h" #include "vtkFloatArray.h" #include "vtkMultiBlockDataSet.h" +#include "vtkPointData.h" #include "vtkPolyData.h" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<class Type> -void Foam::vtkPV3Foam::convertPatchFaceField +void Foam::vtkPV3Foam::convertPatchField ( const word& name, const Field<Type>& ptf, @@ -55,14 +56,13 @@ void Foam::vtkPV3Foam::convertPatchFaceField GetDataSetFromBlock(output, selector, datasetNo) ); - vtkFloatArray *cellData = vtkFloatArray::New(); - cellData->SetNumberOfTuples(ptf.size()); - cellData->SetNumberOfComponents(nComp); - cellData->Allocate(nComp*ptf.size()); - cellData->SetName(name.c_str()); + vtkFloatArray* cellData = vtkFloatArray::New(); + cellData->SetNumberOfTuples( ptf.size() ); + cellData->SetNumberOfComponents( nComp ); + cellData->Allocate( nComp*ptf.size() ); + cellData->SetName( name.c_str() ); float vec[nComp]; - forAll(ptf, i) { const Type& t = ptf[i]; @@ -79,6 +79,46 @@ void Foam::vtkPV3Foam::convertPatchFaceField } +// as above, but with PointData() +template<class Type> +void Foam::vtkPV3Foam::convertPatchPointField +( + const word& name, + const Field<Type>& pptf, + vtkMultiBlockDataSet* output, + const selectionInfo& selector, + const label datasetNo +) +{ + const label nComp = pTraits<Type>::nComponents; + + vtkPolyData* vtkmesh = vtkPolyData::SafeDownCast + ( + GetDataSetFromBlock(output, selector, datasetNo) + ); + + vtkFloatArray *pointData = vtkFloatArray::New(); + pointData->SetNumberOfTuples( pptf.size() ); + pointData->SetNumberOfComponents( nComp ); + pointData->Allocate( nComp*pptf.size() ); + pointData->SetName( name.c_str() ); + + float vec[nComp]; + forAll(pptf, i) + { + const Type& t = pptf[i]; + for (direction d=0; d<nComp; d++) + { + vec[d] = component(t, d); + } + + pointData->InsertTuple(i, vec); + } + + vtkmesh->GetPointData()->AddArray(pointData); + pointData->Delete(); +} + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPointFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H similarity index 65% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPointFields.H rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H index dbbe22d6637bc99dad5eeaee3479b46ff41e91d3..eece2609d7b75453104cea4c5cab921f627b9c67 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertPointFields.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPointFields.H @@ -27,8 +27,8 @@ InClass \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamConvertPointFields_H -#define vtkPV3FoamConvertPointFields_H +#ifndef vtkPV3FoamPointFields_H +#define vtkPV3FoamPointFields_H // Foam includes #include "interpolatePointToCell.H" @@ -39,11 +39,12 @@ template<class Type> void Foam::vtkPV3Foam::convertPointFields ( const fvMesh& mesh, + const pointMesh& pMesh, const IOobjectList& objects, - vtkDataArraySelection* fieldSelection, vtkMultiBlockDataSet* output ) { + // field subset based on type IOobjectList fieldObjects ( objects.lookupClass @@ -52,20 +53,12 @@ void Foam::vtkPV3Foam::convertPointFields ) ); - label nFields = fieldSelection->GetNumberOfArrays(); const polyBoundaryMesh& patches = mesh.boundaryMesh(); + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - for (label i=0; i<nFields; i++) + forAllIter(IOobjectList, fieldObjects, iter) { - const word fieldName = fieldSelection->GetArrayName(i); - - if - ( - !fieldSelection->GetArraySetting(i) - || !fieldObjects.found(fieldName)) - { - continue; - } + word fieldName = iter()->name(); if (debug) { @@ -73,17 +66,9 @@ void Foam::vtkPV3Foam::convertPointFields << fieldName << endl; } - pointMesh pMesh(mesh); - GeometricField<Type, pointPatchField, pointMesh> ptf ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ - ), + *iter(), pMesh ); @@ -93,14 +78,14 @@ void Foam::vtkPV3Foam::convertPointFields // for ( - int regionId = selectInfoVolume_.start(); - regionId < selectInfoVolume_.end(); + int regionId = regionInfoVolume_.start(); + regionId < regionInfoVolume_.end(); ++regionId ) { - const label datasetId = selectedRegionDatasetIds_[regionId]; + const label datasetNo = regionDataset_[regionId]; - if (!selectedRegions_[regionId] || datasetId < 0) + if (!regionStatus_[regionId] || datasetNo < 0) { continue; } @@ -110,36 +95,42 @@ void Foam::vtkPV3Foam::convertPointFields ptf, GeometricField<Type, fvPatchField, volMesh>::null(), output, - selectInfoVolume_, - datasetId + regionInfoVolume_, + datasetNo ); } - // // Convert patches - if activated // - label regionId = selectInfoPatches_.start(); - forAll (patches, patchI) + for + ( + int regionId = regionInfoPatches_.start(); + regionId < regionInfoPatches_.end(); + ++regionId + ) { - if (patches[patchI].size()) + word patchName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); + + const label datasetNo = regionDataset_[regionId]; + const label patchId = patches.findPatchID(patchName); + + if (!regionStatus_[regionId] || datasetNo < 0 || patchId < 0) { - const label datasetId = selectedRegionDatasetIds_[regionId]; - - if (selectedRegions_[regionId] && datasetId >= 0) - { - - convertPatchPointField - ( - fieldName, - ptf.boundaryField()[patchI].patchInternalField()(), - output, - selectInfoPatches_, - datasetId - ); - } - regionId++; + continue; } + + convertPatchPointField + ( + fieldName, + ptf.boundaryField()[patchId].patchInternalField()(), + output, + regionInfoPatches_, + datasetNo + ); } } } @@ -157,37 +148,48 @@ void Foam::vtkPV3Foam::convertPointField { const label nComp = pTraits<Type>::nComponents; - vtkUnstructuredGrid* internalMesh = vtkUnstructuredGrid::SafeDownCast + vtkUnstructuredGrid* vtkmesh = vtkUnstructuredGrid::SafeDownCast ( GetDataSetFromBlock(output, selector, datasetNo) ); vtkFloatArray *pointData = vtkFloatArray::New(); - pointData->SetNumberOfTuples(ptf.size() + addPointCellLabels_.size()); - pointData->SetNumberOfComponents(nComp); - pointData->Allocate(nComp*ptf.size()); - pointData->SetName(tf.name().c_str()); + pointData->SetNumberOfTuples( ptf.size() + addPointCellLabels_.size() ); + pointData->SetNumberOfComponents( nComp ); + pointData->Allocate( nComp*(ptf.size() + addPointCellLabels_.size()) ); + pointData->SetName( tf.name().c_str() ); - float vec[nComp]; + if (debug) + { + Info<< "convert convertPointField: " + << tf.name() + << " size = " << ptf.size() + << " nComp=" << nComp + << " nTuples = " << (ptf.size() + addPointCellLabels_.size()) + << endl; + } + + float vec[nComp]; forAll(ptf, i) { + const Type& t = ptf[i]; for (direction d=0; d<nComp; d++) { - vec[d] = component(ptf[i], d); + vec[d] = component(t, d); } pointData->InsertTuple(i, vec); } + // continue insertion from here label i = ptf.size(); if (&tf != &GeometricField<Type, fvPatchField, volMesh>::null()) { forAll(addPointCellLabels_, api) { - Type t = tf[addPointCellLabels_[api]]; - + const Type& t = tf[addPointCellLabels_[api]]; for (direction d=0; d<nComp; d++) { vec[d] = component(t, d); @@ -211,11 +213,10 @@ void Foam::vtkPV3Foam::convertPointField } } - internalMesh->GetPointData()->AddArray(pointData); + vtkmesh->GetPointData()->AddArray(pointData); pointData->Delete(); } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamInsertNextPoint.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPoints.H similarity index 72% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamInsertNextPoint.H rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPoints.H index a7bab440d3ec8f936fe9d7ad8c8e99365d6b8091..101fb8d62b24109d90b66c355baf0cd7ce5a7646 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamInsertNextPoint.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamPoints.H @@ -27,8 +27,8 @@ InClass \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamInsertNextPoint_H -#define vtkPV3FoamInsertNextPoint_H +#ifndef vtkPV3FoamPoints_H +#define vtkPV3FoamPoints_H // VTK includes #include "vtkPoints.h" @@ -44,6 +44,34 @@ inline void vtkPV3FoamInsertNextPoint points->InsertNextPoint(p.x(), p.y(), p.z()); } +#if 0 +// this should be faster, but didn't get it working ... +inline void vtkPV3FoamSetPoint +( + vtkPoints *points, + const Foam::label id, + const Foam::point& p +) +{ + points->SetPoint(id, p.x(), p.y(), p.z()); +} + + +// Convert Foam mesh vertices to VTK +inline vtkPoints* vtkPV3FoamVTKPoints(const Foam::pointField& points) +{ + vtkPoints *vtkpoints = vtkPoints::New(); + vtkpoints->SetNumberOfPoints(points.size()); + forAll(points, i) + { + const Foam::point& p = points[i]; + vtkpoints->SetPoint(i, p.x(), p.y(), p.z()); + } + + return vtkpoints; +} + +#endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformation.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C similarity index 61% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformation.C rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C index 3f18047ced05de76a2dcaa00c9502478df4ef429..4319a8b5195b4912fbc9a773174958271a0acae6 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformation.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfo.C @@ -38,7 +38,7 @@ License // local headers #include "vtkPV3FoamAddToSelection.H" -#include "vtkPV3FoamUpdateInformationFields.H" +#include "vtkPV3FoamUpdateInfoFields.H" // VTK includes #include "vtkDataArraySelection.h" @@ -107,7 +107,7 @@ Foam::wordList Foam::vtkPV3Foam::readZoneNames(const word& zoneType) zonesEntries zones(ioObj); zoneNames.setSize(zones.size()); - forAll (zones, zoneI) + forAll(zones, zoneI) { zoneNames[zoneI] = zones[zoneI].keyword(); } @@ -117,14 +117,14 @@ Foam::wordList Foam::vtkPV3Foam::readZoneNames(const word& zoneType) } -void Foam::vtkPV3Foam::updateInformationInternalMesh() +void Foam::vtkPV3Foam::updateInfoInternalMesh() { if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateInformationInternalMesh" << endl; + Info<< "<beg> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; } - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); // Determine number of meshes available HashTable<const fvMesh*> meshObjects = dbPtr_().lookupClass<const fvMesh>(); @@ -132,100 +132,85 @@ void Foam::vtkPV3Foam::updateInformationInternalMesh() // Determine regions (internal mesh and patches...) //- Add internal mesh as first entry - selectInfoVolume_ = arraySelection->GetNumberOfArrays(); - arraySelection->AddArray("internalMesh"); - selectInfoVolume_ += 1; + regionInfoVolume_ = regionSelection->GetNumberOfArrays(); + regionSelection->AddArray("internalMesh"); + regionInfoVolume_ += 1; if (debug) { // just for debug info - getSelectedArrayEntries(arraySelection); + getSelectedArrayEntries(regionSelection); - Info<< "<end> Foam::vtkPV3Foam::updateInformationInternalMesh" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateInfoInternalMesh" << endl; } } -void Foam::vtkPV3Foam::updateInformationLagrangian() +void Foam::vtkPV3Foam::updateInfoLagrangian() { if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateInformationLagrangian" << nl + Info<< "<beg> Foam::vtkPV3Foam::updateInfoLagrangian" << nl << " " << dbPtr_->timePath()/"lagrangian" << endl; } - vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); - // Search for list of lagrangian objects for this time fileNameList cloudDirs ( readDir(dbPtr_->timePath()/"lagrangian", fileName::DIRECTORY) ); - selectInfoLagrangian_ = arraySelection->GetNumberOfArrays(); + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); + regionInfoLagrangian_ = regionSelection->GetNumberOfArrays(); - if (cloudDirs.size()) + int nClouds = 0; + forAll(cloudDirs, cloudI) { - arraySelection->AddArray("lagrangian"); - selectInfoLagrangian_ += 1; - - Info<< "... added cloudDirs\n"; + // Add cloud to GUI list + regionSelection->AddArray + ( + (cloudDirs[cloudI] + " - lagrangian").c_str() + ); - if (cloudDirs.size() > 1) - { - WarningIn("void Foam::vtkPV3Foam::updateInformationLagrangian()") - << "Multiple lagrangian clouds identified. Currently only able " - << "to process ONE cloud: " << cloudDirs[0] - << endl; - } - // Set cloud name to first cloud found - // TODO - multiple clouds - cloudName_ = cloudDirs[0]; - } - else - { - if (debug) - { - Info<< "... no clouds identified in " <<nl - << " " <<dbPtr_->timePath()/"lagrangian" << endl; - } + ++nClouds; } + regionInfoLagrangian_ += nClouds; + if (debug) { // just for debug info - getSelectedArrayEntries(arraySelection); + getSelectedArrayEntries(regionSelection); - Info<< "<end> Foam::vtkPV3Foam::updateInformationLagrangian" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateInfoLagrangian" << endl; } } -void Foam::vtkPV3Foam::updateInformationPatches() +void Foam::vtkPV3Foam::updateInfoPatches() { if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateInformationPatches" + Info<< "<beg> Foam::vtkPV3Foam::updateInfoPatches" << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection *arraySelection = reader_->GetRegionSelection(); - selectInfoPatches_ = arraySelection->GetNumberOfArrays(); + vtkDataArraySelection *regionSelection = reader_->GetRegionSelection(); + regionInfoPatches_ = regionSelection->GetNumberOfArrays(); int nPatches = 0; - if (meshPtr_) { const polyBoundaryMesh& patches = meshPtr_->boundaryMesh(); - forAll (patches, patchI) + forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; if (pp.size()) { - // Add patch to GUI region list - arraySelection->AddArray + // Add patch to GUI list + regionSelection->AddArray ( (pp.name() + " - patch").c_str() ); @@ -252,7 +237,7 @@ void Foam::vtkPV3Foam::updateInformationPatches() ); // Start regions at patches - forAll (patchEntries, entryI) + forAll(patchEntries, entryI) { label nFaces ( @@ -262,8 +247,8 @@ void Foam::vtkPV3Foam::updateInformationPatches() // Valid patch if nFace > 0 if (nFaces) { - // Add patch to GUI region list - arraySelection->AddArray + // Add patch to GUI list + regionSelection->AddArray ( (patchEntries[entryI].keyword() + " - patch").c_str() ); @@ -273,27 +258,32 @@ void Foam::vtkPV3Foam::updateInformationPatches() } } - selectInfoPatches_ += nPatches; + regionInfoPatches_ += nPatches; if (debug) { // just for debug info - getSelectedArrayEntries(arraySelection); + getSelectedArrayEntries(regionSelection); - Info<< "<end> Foam::vtkPV3Foam::updateInformationPatches" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateInfoPatches" << endl; } } -void Foam::vtkPV3Foam::updateInformationZones() +void Foam::vtkPV3Foam::updateInfoZones() { + if (!reader_->GetIncludeZones()) + { + return; + } + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateInformationZones" + Info<< "<beg> Foam::vtkPV3Foam::updateInfoZones" << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl; } - vtkDataArraySelection *arraySelection = reader_->GetRegionSelection(); + vtkDataArraySelection *regionSelection = reader_->GetRegionSelection(); wordList namesLst; @@ -309,13 +299,13 @@ void Foam::vtkPV3Foam::updateInformationZones() namesLst = readZoneNames("cellZones"); } - selectInfoCellZones_ = arraySelection->GetNumberOfArrays(); - forAll (namesLst, elemI) + regionInfoCellZones_ = regionSelection->GetNumberOfArrays(); + forAll(namesLst, elemI) { - arraySelection->AddArray((namesLst[elemI] + " - cellZone").c_str()); + regionSelection->AddArray((namesLst[elemI] + " - cellZone").c_str()); } - selectInfoCellZones_ += namesLst.size(); - zoneSuperCells_.setSize(selectInfoCellZones_.size()); + regionInfoCellZones_ += namesLst.size(); + zoneSuperCells_.setSize(regionInfoCellZones_.size()); // @@ -330,12 +320,15 @@ void Foam::vtkPV3Foam::updateInformationZones() namesLst = readZoneNames("faceZones"); } - selectInfoFaceZones_ = arraySelection->GetNumberOfArrays(); - forAll (namesLst, elemI) + regionInfoFaceZones_ = regionSelection->GetNumberOfArrays(); + forAll(namesLst, elemI) { - arraySelection->AddArray((namesLst[elemI] + " - faceZone").c_str()); + regionSelection->AddArray + ( + (namesLst[elemI] + " - faceZone").c_str() + ); } - selectInfoFaceZones_ += namesLst.size(); + regionInfoFaceZones_ += namesLst.size(); // @@ -350,32 +343,40 @@ void Foam::vtkPV3Foam::updateInformationZones() namesLst = readZoneNames("pointZones"); } - selectInfoPointZones_ = arraySelection->GetNumberOfArrays(); - forAll (namesLst, elemI) + regionInfoPointZones_ = regionSelection->GetNumberOfArrays(); + forAll(namesLst, elemI) { - arraySelection->AddArray((namesLst[elemI] + " - pointZone").c_str()); + regionSelection->AddArray + ( + (namesLst[elemI] + " - pointZone").c_str() + ); } - selectInfoPointZones_ += namesLst.size(); + regionInfoPointZones_ += namesLst.size(); if (debug) { // just for debug info - getSelectedArrayEntries(arraySelection); + getSelectedArrayEntries(regionSelection); - Info<< "<end> Foam::vtkPV3Foam::updateInformationZones" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateInfoZones" << endl; } } -void Foam::vtkPV3Foam::updateInformationSets() +void Foam::vtkPV3Foam::updateInfoSets() { + if (!reader_->GetIncludeSets()) + { + return; + } + if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateInformationSets" << endl; + Info<< "<beg> Foam::vtkPV3Foam::updateInfoSets" << endl; } - vtkDataArraySelection *arraySelection = reader_->GetRegionSelection(); + vtkDataArraySelection *regionSelection = reader_->GetRegionSelection(); // Add names of sets IOobjectList objects @@ -386,27 +387,27 @@ void Foam::vtkPV3Foam::updateInformationSets() ); - selectInfoCellSets_ = arraySelection->GetNumberOfArrays(); - selectInfoCellSets_ += addToSelection<cellSet> + regionInfoCellSets_ = regionSelection->GetNumberOfArrays(); + regionInfoCellSets_ += addToSelection<cellSet> ( - arraySelection, + regionSelection, objects, " - cellSet" ); - csetSuperCells_.setSize(selectInfoCellSets_.size()); + csetSuperCells_.setSize(regionInfoCellSets_.size()); - selectInfoFaceSets_ = arraySelection->GetNumberOfArrays(); - selectInfoFaceSets_ += addToSelection<faceSet> + regionInfoFaceSets_ = regionSelection->GetNumberOfArrays(); + regionInfoFaceSets_ += addToSelection<faceSet> ( - arraySelection, + regionSelection, objects, " - faceSet" ); - selectInfoPointSets_ = arraySelection->GetNumberOfArrays(); - selectInfoPointSets_ += addToSelection<pointSet> + regionInfoPointSets_ = regionSelection->GetNumberOfArrays(); + regionInfoPointSets_ += addToSelection<pointSet> ( - arraySelection, + regionSelection, objects, " - pointSet" ); @@ -414,82 +415,102 @@ void Foam::vtkPV3Foam::updateInformationSets() if (debug) { // just for debug info - getSelectedArrayEntries(arraySelection); + getSelectedArrayEntries(regionSelection); - Info<< "<end> Foam::vtkPV3Foam::updateInformationSets" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateInfoSets" << endl; } } -void Foam::vtkPV3Foam::updateInformationLagrangianFields() +void Foam::vtkPV3Foam::updateInfoLagrangianFields() { if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateInformationLagrangianFields" + Info<< "<beg> Foam::vtkPV3Foam::updateInfoLagrangianFields" << endl; } - vtkDataArraySelection *arraySelection = + vtkDataArraySelection *fieldSelection = reader_->GetLagrangianFieldSelection(); + vtkDataArraySelection *regionSelection = + reader_->GetRegionSelection(); + // preserve the enabled selections stringList selectedEntries = getSelectedArrayEntries ( - arraySelection, + fieldSelection, true ); - arraySelection->RemoveAllArrays(); + fieldSelection->RemoveAllArrays(); + + + // + // TODO - can currently only get fields from ONE cloud + // + + const selectionInfo& selector = regionInfoLagrangian_; + int regionId = selector.start(); + + if (!selector.size() || regionId < 0) + { + return; + } + + word cloudName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); - // TODO - currently hard-coded to ONE cloud IOobjectList objects ( dbPtr_(), dbPtr_().timeName(), - "lagrangian"/cloudName_ + "lagrangian"/cloudName ); addToSelection<IOField<label> > ( - arraySelection, + fieldSelection, objects ); addToSelection<IOField<scalar> > ( - arraySelection, + fieldSelection, objects ); addToSelection<IOField<vector> > ( - arraySelection, + fieldSelection, objects ); addToSelection<IOField<sphericalTensor> > ( - arraySelection, + fieldSelection, objects ); addToSelection<IOField<symmTensor> > ( - arraySelection, + fieldSelection, objects ); addToSelection<IOField<tensor> > ( - arraySelection, + fieldSelection, objects ); // restore the enabled selections setSelectedArrayEntries ( - arraySelection, + fieldSelection, selectedEntries ); if (debug) { - Info<< "<end> Foam::vtkPV3Foam::updateInformationLagrangianFields - " + Info<< "<end> Foam::vtkPV3Foam::updateInfoLagrangianFields - " << "lagrangian objects.size() = " << objects.size() << endl; } } diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformationFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H similarity index 78% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformationFields.H rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H index 601a7f5326d4e52d61842a2306cfcfcf8dfaf01c..540820907760d95f2bf902367dd1ebade5736749 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInformationFields.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H @@ -27,25 +27,25 @@ InClass \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamUpdateInformationFields_H -#define vtkPV3FoamUpdateInformationFields_H +#ifndef vtkPV3FoamUpdateInfoFields_H +#define vtkPV3FoamUpdateInfoFields_H // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<template<class> class patchType, class meshType> -void Foam::vtkPV3Foam::updateInformationFields +void Foam::vtkPV3Foam::updateInfoFields ( - vtkDataArraySelection *arraySelection + vtkDataArraySelection *select ) { if (debug) { - Info<< "<beg> Foam::vtkPV3Foam::updateInformationFields" << endl; + Info<< "<beg> Foam::vtkPV3Foam::updateInfoFields" << endl; } stringList selectedEntries; // enable 'p' and 'U' on the first call - if (arraySelection->GetNumberOfArrays() == 0 && !meshPtr_) + if (select->GetNumberOfArrays() == 0 && !meshPtr_) { selectedEntries.setSize(2); selectedEntries[0] = "p"; @@ -54,61 +54,55 @@ void Foam::vtkPV3Foam::updateInformationFields else { // preserve the enabled selections - selectedEntries = getSelectedArrayEntries - ( - arraySelection - ); + selectedEntries = getSelectedArrayEntries(select); } - arraySelection->RemoveAllArrays(); + select->RemoveAllArrays(); // Search for list of objects for this time IOobjectList objects(dbPtr_(), dbPtr_().timeName()); - // Populate the GUI volume/point field arrays //- Add volume fields to GUI addToSelection<GeometricField<scalar, patchType, meshType> > ( - arraySelection, + select, objects ); addToSelection<GeometricField<vector, patchType, meshType> > ( - arraySelection, + select, objects ); addToSelection<GeometricField<sphericalTensor, patchType, meshType> > ( - arraySelection, + select, objects ); addToSelection<GeometricField<symmTensor, patchType, meshType> > ( - arraySelection, + select, objects ); addToSelection<GeometricField<tensor, patchType, meshType> > ( - arraySelection, + select, objects ); // restore the enabled selections setSelectedArrayEntries ( - arraySelection, + select, selectedEntries ); if (debug) { - Info<< "<end> Foam::vtkPV3Foam::updateInformationFields" << endl; + Info<< "<end> Foam::vtkPV3Foam::updateInfoFields" << endl; } } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif - // ************************************************************************* // diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertVolFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H similarity index 62% rename from applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertVolFields.H rename to applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H index 7ed194bfa5b4dcf37edcaae2db2c30d564885fab..6413852bffdd995c26f56579364205d729b7e5fb 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamConvertVolFields.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H @@ -27,16 +27,15 @@ InClass \*---------------------------------------------------------------------------*/ -#ifndef vtkPV3FoamConvertVolFields_H -#define vtkPV3FoamConvertVolFields_H +#ifndef vtkPV3FoamVolFields_H +#define vtkPV3FoamVolFields_H // Foam includes #include "emptyFvPatchField.H" #include "wallPolyPatch.H" #include "faceSet.H" -#include "vtkPV3FoamConvertPatchFaceField.H" -#include "vtkPV3FoamConvertPatchPointField.H" -#include "vtkPV3FoamConvertFaceField.H" +#include "vtkPV3FoamFaceField.H" +#include "vtkPV3FoamPatchField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -47,10 +46,10 @@ void Foam::vtkPV3Foam::convertVolFields const volPointInterpolation& pInterp, const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList, const IOobjectList& objects, - vtkDataArraySelection *fieldSelection, vtkMultiBlockDataSet* output ) { + // field subset based on type IOobjectList fieldObjects ( objects.lookupClass @@ -59,37 +58,16 @@ void Foam::vtkPV3Foam::convertVolFields ) ); - label nFields = fieldSelection->GetNumberOfArrays(); const polyBoundaryMesh& patches = mesh.boundaryMesh(); + vtkDataArraySelection* regionSelection = reader_->GetRegionSelection(); - vtkDataArraySelection* arraySelector = reader_->GetRegionSelection(); - - for (label i=0; i<nFields; i++) + forAllIter(IOobjectList, fieldObjects, iter) { - const word fieldName = fieldSelection->GetArrayName(i); - - if - ( - !fieldSelection->GetArraySetting(i) - || !fieldObjects.found(fieldName)) - { - continue; - } - - if (debug) - { - Info<< "converting volume field: " << fieldName << endl; - } + word fieldName = iter()->name(); GeometricField<Type, fvPatchField, volMesh> tf ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ - ), + *iter(), mesh ); @@ -104,14 +82,14 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int regionId = selectInfoVolume_.start(); - regionId < selectInfoVolume_.end(); + int regionId = regionInfoVolume_.start(); + regionId < regionInfoVolume_.end(); ++regionId ) { - const label datasetId = selectedRegionDatasetIds_[regionId]; + const label datasetNo = regionDataset_[regionId]; - if (!selectedRegions_[regionId] || datasetId < 0) + if (!regionStatus_[regionId] || datasetNo < 0) { continue; } @@ -120,8 +98,8 @@ void Foam::vtkPV3Foam::convertVolFields ( tf, output, - selectInfoVolume_, - datasetId, + regionInfoVolume_, + datasetNo, superCells_ ); convertPointField @@ -129,8 +107,8 @@ void Foam::vtkPV3Foam::convertVolFields tptf(), tf, output, - selectInfoVolume_, - datasetId + regionInfoVolume_, + datasetNo ); } @@ -139,29 +117,25 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int regionId = selectInfoPatches_.start(); - regionId < selectInfoPatches_.end(); + int regionId = regionInfoPatches_.start(); + regionId < regionInfoPatches_.end(); ++regionId ) { - const label datasetId = selectedRegionDatasetIds_[regionId]; + word patchName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); - if (!selectedRegions_[regionId] || datasetId < 0) + const label datasetNo = regionDataset_[regionId]; + const label patchId = patches.findPatchID(patchName); + + if (!regionStatus_[regionId] || datasetNo < 0 || patchId < 0) { continue; } - word selectName = getFirstWord - ( - arraySelector->GetArrayName(regionId) - ); - - const label patchId = patches.findPatchID(selectName); - - const fvPatchField<Type>& ptf - ( - tf.boundaryField()[patchId] - ); + const fvPatchField<Type>& ptf = tf.boundaryField()[patchId]; if ( @@ -179,24 +153,24 @@ void Foam::vtkPV3Foam::convertVolFields tf.mesh().boundary() ); - convertPatchFaceField + convertPatchField ( tf.name(), fvPatchField<Type>(p, tf).patchInternalField()(), output, - selectInfoPatches_, - datasetId + regionInfoPatches_, + datasetNo ); } else { - convertPatchFaceField + convertPatchField ( tf.name(), ptf, output, - selectInfoPatches_, - datasetId + regionInfoPatches_, + datasetNo ); } @@ -205,8 +179,8 @@ void Foam::vtkPV3Foam::convertVolFields tf.name(), ppInterpList[patchId].faceToPointInterpolate(ptf)(), output, - selectInfoPatches_, - datasetId + regionInfoPatches_, + datasetNo ); } @@ -215,14 +189,14 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int regionId = selectInfoCellZones_.start(); - regionId < selectInfoCellZones_.end(); + int regionId = regionInfoCellZones_.start(); + regionId < regionInfoCellZones_.end(); ++regionId ) { - const label datasetId = selectedRegionDatasetIds_[regionId]; + const label datasetNo = regionDataset_[regionId]; - if (!selectedRegions_[regionId] || datasetId < 0) + if (!regionStatus_[regionId] || datasetNo < 0) { continue; } @@ -230,7 +204,7 @@ void Foam::vtkPV3Foam::convertVolFields if (debug) { Info<< "wish to convert cellzone: " - << getFirstWord(arraySelector->GetArrayName(regionId)) + << getFirstWord(regionSelection->GetArrayName(regionId)) << " regionId: " << regionId << " volume field: " << fieldName << endl; @@ -240,9 +214,9 @@ void Foam::vtkPV3Foam::convertVolFields ( tf, output, - selectInfoCellZones_, - datasetId, - zoneSuperCells_[datasetId] + regionInfoCellZones_, + datasetNo, + zoneSuperCells_[datasetNo] ); } @@ -251,14 +225,14 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int regionId = selectInfoCellSets_.start(); - regionId < selectInfoCellSets_.end(); + int regionId = regionInfoCellSets_.start(); + regionId < regionInfoCellSets_.end(); ++regionId ) { - const label datasetId = selectedRegionDatasetIds_[regionId]; + const label datasetNo = regionDataset_[regionId]; - if (!selectedRegions_[regionId] || datasetId < 0) + if (!regionStatus_[regionId] || datasetNo < 0) { continue; } @@ -266,7 +240,7 @@ void Foam::vtkPV3Foam::convertVolFields if (debug) { Info<< "wish to convert cellset: " - << getFirstWord(arraySelector->GetArrayName(regionId)) + << getFirstWord(regionSelection->GetArrayName(regionId)) << " regionId: " << regionId << " volume field: " << fieldName << endl; @@ -276,9 +250,9 @@ void Foam::vtkPV3Foam::convertVolFields ( tf, output, - selectInfoCellSets_, - datasetId, - csetSuperCells_[datasetId] + regionInfoCellSets_, + datasetNo, + csetSuperCells_[datasetNo] ); } @@ -287,14 +261,26 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int regionId = selectInfoFaceZones_.start(); - regionId < selectInfoFaceZones_.end(); + int regionId = regionInfoFaceZones_.start(); + regionId < regionInfoFaceZones_.end(); ++regionId ) { - const label datasetId = selectedRegionDatasetIds_[regionId]; + word zoneName = getFirstWord + ( + regionSelection->GetArrayName(regionId) + ); + const label datasetNo = regionDataset_[regionId]; - if (!selectedRegions_[regionId] || datasetId < 0) + if (!regionStatus_[regionId] || datasetNo < 0) + { + continue; + } + + const faceZoneMesh& zMesh = mesh.faceZones(); + const label zoneId = zMesh.findZoneID(zoneName); + + if (zoneId < 0) { continue; } @@ -302,23 +288,20 @@ void Foam::vtkPV3Foam::convertVolFields if (debug) { Info<< "wish to convert facezone: " - << getFirstWord(arraySelector->GetArrayName(regionId)) + << zoneName << " regionId: " << regionId << " volume field: " << fieldName << endl; } - const faceZoneMesh& fzMesh = mesh.faceZones(); - const label zoneI = regionId - selectInfoFaceZones_.start(); - convertFaceField ( tf, output, - selectInfoFaceZones_, - datasetId, + regionInfoFaceZones_, + datasetNo, mesh, - fzMesh[zoneI] + zMesh[zoneId] ); } @@ -327,21 +310,20 @@ void Foam::vtkPV3Foam::convertVolFields // for ( - int regionId = selectInfoFaceSets_.start(); - regionId < selectInfoFaceSets_.end(); + int regionId = regionInfoFaceSets_.start(); + regionId < regionInfoFaceSets_.end(); ++regionId ) { - const label datasetId = selectedRegionDatasetIds_[regionId]; - - if (!selectedRegions_[regionId] || datasetId < 0) + const label datasetNo = regionDataset_[regionId]; + if (!regionStatus_[regionId] || datasetNo < 0) { continue; } word selectName = getFirstWord ( - arraySelector->GetArrayName(regionId) + regionSelection->GetArrayName(regionId) ); if (debug) @@ -354,13 +336,12 @@ void Foam::vtkPV3Foam::convertVolFields const faceSet fSet(mesh, selectName); - convertFaceField ( tf, output, - selectInfoFaceSets_, - datasetId, + regionInfoFaceSets_, + datasetNo, mesh, fSet ); @@ -387,30 +368,30 @@ void Foam::vtkPV3Foam::convertVolField ); vtkFloatArray* celldata = vtkFloatArray::New(); - celldata->SetNumberOfTuples(superCells.size()); - celldata->SetNumberOfComponents(nComp); - celldata->Allocate(nComp*superCells.size()); - celldata->SetName(tf.name().c_str()); + celldata->SetNumberOfTuples( superCells.size() ); + celldata->SetNumberOfComponents( nComp ); + celldata->Allocate( nComp*superCells.size() ); + celldata->SetName( tf.name().c_str() ); if (debug) { - Info<< "converting vol<Type>Field: " << tf.name() << nl - << "field size = " << tf.size() << nl - << "nTuples = " << superCells.size() << nl - << "nComp = " << nComp << endl; + Info<< "convert volField: " + << tf.name() + << " size = " << tf.size() + << " nComp=" << nComp + << " nTuples = " << superCells.size() << endl; } float vec[nComp]; - - forAll(superCells, scI) + forAll(superCells, i) { - const Type& t = tf[superCells[scI]]; + const Type& t = tf[superCells[i]]; for (direction d=0; d<nComp; d++) { vec[d] = component(t, d); } - celldata->InsertTuple(scI, vec); + celldata->InsertTuple(i, vec); } vtkmesh->GetCellData()->AddArray(celldata);