diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml index 6e7a78ffe2ffd3410147a39578ced919f21dcf4d..10873c3734edb07138a34f6ed21822ec831c7d30 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/PV3FoamReader_SM.xml @@ -69,11 +69,26 @@ </Documentation> </IntVectorProperty> + <!-- Interpolate Fields check-box --> + <IntVectorProperty + name="UiInterpolateVolFields" + command="SetInterpolateVolFields" + number_of_elements="1" + is_internal="1" + default_values="1" + animateable="0"> + <BooleanDomain name="bool"/> + <Documentation> + Interpolate volume fields into point fields + </Documentation> + </IntVectorProperty> + <!-- Extrapolate Patches check-box --> <IntVectorProperty - name="ExtrapolatePatches" + name="UiExtrapolatePatches" command="SetExtrapolatePatches" number_of_elements="1" + is_internal="1" default_values="0" animateable="0"> <BooleanDomain name="bool"/> diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx index a3d800288b4c15285886c1cf60b828dc115fedcf..66327dc6f5822e58c3785a32371b83c08d594599 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx @@ -59,7 +59,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel pqAutoGeneratedObjectPanel(proxy, p) { // create first sublayout (at top of the panel) - QGridLayout *form = new QGridLayout(); + QGridLayout* form = new QGridLayout(); this->PanelLayout->addLayout(form, 0, 0, 1, -1); vtkSMProperty* prop = 0; @@ -107,6 +107,9 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel ); } + QFrame* hline1 = new QFrame(this); + hline1->setFrameStyle(QFrame::HLine | QFrame::Sunken); + form->addWidget(hline1, 1, 0, 1, 2); // checkbox for caching mesh if ((prop = this->proxy()->GetProperty("UiCacheMesh")) != 0) @@ -124,7 +127,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel "Cache the fvMesh in memory." ); - form->addWidget(CacheMesh_, 1, 0, Qt::AlignLeft); + form->addWidget(CacheMesh_, 2, 0, Qt::AlignLeft); connect ( CacheMesh_, @@ -152,7 +155,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel ); // row/col 0,1 - form->addWidget(ShowPatchNames_, 1, 1, Qt::AlignLeft); + form->addWidget(ShowPatchNames_, 2, 1, Qt::AlignLeft); connect ( ShowPatchNames_, @@ -180,7 +183,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel ); // row/col 1,0 - form->addWidget(IncludeSets_, 2, 0, Qt::AlignLeft); + form->addWidget(IncludeSets_, 3, 0, Qt::AlignLeft); connect ( IncludeSets_, @@ -209,7 +212,7 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel ); // row/col 1,1 - form->addWidget(IncludeZones_, 2, 1, Qt::AlignLeft); + form->addWidget(IncludeZones_, 3, 1, Qt::AlignLeft); connect ( IncludeZones_, @@ -219,6 +222,63 @@ pqPV3FoamReaderPanel::pqPV3FoamReaderPanel ); } + // checkbox for vol field interpolation + if ((prop = this->proxy()->GetProperty("UiInterpolateVolFields")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + InterpolateVolFields_ = new QCheckBox("Interpolate volFields"); + InterpolateVolFields_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + InterpolateVolFields_->setToolTip + ( + "Interpolate volFields into pointFields" + ); + + // row/col 1,1 + form->addWidget(InterpolateVolFields_, 4, 0, Qt::AlignLeft); + connect + ( + InterpolateVolFields_, + SIGNAL(stateChanged(int)), + this, + SLOT(InterpolateVolFieldsToggled()) + ); + } + + // checkbox for extrapolate patches + if ((prop = this->proxy()->GetProperty("UiExtrapolatePatches")) != 0) + { + // immediate update on the Server Manager side + prop->SetImmediateUpdate(true); + + ExtrapolatePatches_ = new QCheckBox("Extrapolate Patches"); + ExtrapolatePatches_->setChecked + ( + vtkSMIntVectorProperty::SafeDownCast(prop)->GetElement(0) + ); + ExtrapolatePatches_->setToolTip + ( + "Extrapolate internalField to non-constraint patches" + ); + + // row/col 1,1 + form->addWidget(ExtrapolatePatches_, 4, 1, Qt::AlignLeft); + connect + ( + ExtrapolatePatches_, + SIGNAL(stateChanged(int)), + this, + SLOT(ExtrapolatePatchesToggled()) + ); + } + + QFrame* hline2 = new QFrame(this); + hline2->setFrameStyle(QFrame::HLine | QFrame::Sunken); + form->addWidget(hline2, 5, 0, 1, 2); } @@ -255,8 +315,7 @@ void pqPV3FoamReaderPanel::ZeroTimeToggled() this->proxy()->GetProperty("UiZeroTime") )->SetElement(0, ZeroTime_->isChecked()); - // update everything - RefreshPressed(); + this->setModified(); } @@ -306,7 +365,32 @@ void pqPV3FoamReaderPanel::IncludeZonesToggled() { this->proxy()->UpdatePropertyInformation(prop); } +} + + +void pqPV3FoamReaderPanel::ExtrapolatePatchesToggled() +{ + vtkSMProperty* prop; + + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiExtrapolatePatches") + )->SetElement(0, ExtrapolatePatches_->isChecked()); + + this->setModified(); +} + + +void pqPV3FoamReaderPanel::InterpolateVolFieldsToggled() +{ + vtkSMProperty* prop; + + vtkSMIntVectorProperty::SafeDownCast + ( + this->proxy()->GetProperty("UiInterpolateVolFields") + )->SetElement(0, InterpolateVolFields_->isChecked()); + this->setModified(); } diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h index 35e3089b49c1fa0afa368cf708f5b28ea3baf02a..f7b057ecc75abceca2f27bee71267476770a9464 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.h @@ -77,6 +77,13 @@ class pqPV3FoamReaderPanel //- IncludeZones checkbox QCheckBox* IncludeZones_; + //- InterpolateVolFields checkbox + QCheckBox* InterpolateVolFields_; + + //- ExtrapolatePatches checkbox + QCheckBox* ExtrapolatePatches_; + + protected slots: void CacheMeshToggled(); @@ -85,6 +92,8 @@ protected slots: void ShowPatchNamesToggled(); void IncludeSetsToggled(); void IncludeZonesToggled(); + void InterpolateVolFieldsToggled(); + void ExtrapolatePatchesToggled(); public: @@ -97,7 +106,6 @@ public: //- Destructor // virtual ~pqPV3FoamReaderPanel(); - }; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx index f0b5da6261c6bf708c3e35a0c6c90429996bc03b..a2671ddb9d41c6d849cff5bfce19cbcf6ed943b0 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.cxx @@ -85,6 +85,7 @@ vtkPV3FoamReader::vtkPV3FoamReader() IncludeSets = 0; IncludeZones = 0; ShowPatchNames = 0; + InterpolateVolFields = 1; UpdateGUI = 0; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h index 5d375545c5eb174f633ad5d024aca0b841b81425..da31ba6231bfa08c491b6ff662bd3ad6d5d0503b 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/vtkPV3FoamReader.h @@ -121,6 +121,11 @@ public: virtual void SetShowPatchNames(int); vtkGetMacro(ShowPatchNames, int); + // Description: + // OpenFOAM volField interpolation + vtkSetMacro(InterpolateVolFields, int); + vtkGetMacro(InterpolateVolFields, int); + // Description: // Get the current timestep int GetTimeStep(); @@ -170,6 +175,7 @@ public: void SelectionModified(); + protected: //- Construct null @@ -203,6 +209,7 @@ protected: //- The file name for this case char* FileName; + private: //- Disallow default bitwise copy construct @@ -224,6 +231,7 @@ private: int IncludeSets; int IncludeZones; int ShowPatchNames; + int InterpolateVolFields; //- Dummy variable/switch to invoke a reader update int UpdateGUI; diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H index cad46ba215a6248da900c49b43dd333e9306d350..7d9a481b49a232fb4d1600492d7612a62a71a5e8 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H @@ -505,6 +505,7 @@ class vtkPV3Foam const fvMesh&, const PtrList<PrimitivePatchInterpolation<primitivePatch> >&, const IOobjectList&, + const bool interpFields, vtkMultiBlockDataSet* output ); diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C index 7ab37db06f56c7041941cc416a7ec2af036cf7c3..9a869d37b58c505848e8827201960563af4cf845 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamFields.C @@ -120,25 +120,27 @@ void Foam::vtkPV3Foam::convertVolFields } + bool interpFields = reader_->GetInterpolateVolFields(); + convertVolFields<scalar> ( - mesh, ppInterpList, objects, output + mesh, ppInterpList, objects, interpFields, output ); convertVolFields<vector> ( - mesh, ppInterpList, objects, output + mesh, ppInterpList, objects, interpFields, output ); convertVolFields<sphericalTensor> ( - mesh, ppInterpList, objects, output + mesh, ppInterpList, objects, interpFields, output ); convertVolFields<symmTensor> ( - mesh, ppInterpList, objects, output + mesh, ppInterpList, objects, interpFields, output ); convertVolFields<tensor> ( - mesh, ppInterpList, objects, output + mesh, ppInterpList, objects, interpFields, output ); if (debug) diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H index f18d7053ebbea1aa685e52c5552aa54e68c79381..a057afb51189132108ea827eecc0af90aa95f619 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/vtkPV3Foam/vtkPV3FoamVolFields.H @@ -48,6 +48,7 @@ void Foam::vtkPV3Foam::convertVolFields const fvMesh& mesh, const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList, const IOobjectList& objects, + const bool interpFields, vtkMultiBlockDataSet* output ) { @@ -74,6 +75,19 @@ void Foam::vtkPV3Foam::convertVolFields // Interpolated field (demand driven) autoPtr<GeometricField<Type, pointPatchField, pointMesh> > ptfPtr; + if (interpFields) + { + if (debug) + { + Info<< "convertVolFieldBlock interpolating:" << tf.name() + << endl; + } + + ptfPtr.reset + ( + volPointInterpolation::New(tf.mesh()).interpolate(tf).ptr() + ); + } // Convert activated internalMesh regions @@ -154,14 +168,17 @@ void Foam::vtkPV3Foam::convertVolFields datasetNo ); - convertPatchPointField - ( - tf.name(), - ppInterpList[patchId].faceToPointInterpolate(tpptf)(), - output, - arrayRangePatches_, - datasetNo - ); + if (interpFields) + { + convertPatchPointField + ( + tf.name(), + ppInterpList[patchId].faceToPointInterpolate(tpptf)(), + output, + arrayRangePatches_, + datasetNo + ); + } } else { @@ -174,14 +191,17 @@ void Foam::vtkPV3Foam::convertVolFields datasetNo ); - convertPatchPointField - ( - tf.name(), - ppInterpList[patchId].faceToPointInterpolate(ptf)(), - output, - arrayRangePatches_, - datasetNo - ); + if (interpFields) + { + convertPatchPointField + ( + tf.name(), + ppInterpList[patchId].faceToPointInterpolate(ptf)(), + output, + arrayRangePatches_, + datasetNo + ); + } } } @@ -285,29 +305,18 @@ void Foam::vtkPV3Foam::convertVolFieldBlock decompLst[datasetNo] ); - if (!ptfPtr.valid()) + if (ptfPtr.valid()) { - if (debug) - { - Info<< "convertVolFieldBlock interpolating:" << tf.name() - << endl; - } - - ptfPtr.reset + convertPointField ( - volPointInterpolation::New(tf.mesh()).interpolate(tf).ptr() + ptfPtr(), + tf, + output, + range, + datasetNo, + decompLst[datasetNo] ); } - - convertPointField - ( - ptfPtr(), - tf, - output, - range, - datasetNo, - decompLst[datasetNo] - ); } } }