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 6e7a78ffe2..10873c3734 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 @@
+
+
+
+
+ Interpolate volume fields into point fields
+
+
+
diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx b/applications/utilities/postProcessing/graphics/PV3Readers/PV3FoamReader/PV3FoamReader/pqPV3FoamReaderPanel.cxx
index a3d800288b..66327dc6f5 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 35e3089b49..f7b057ecc7 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 f0b5da6261..a2671ddb9d 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 5d375545c5..da31ba6231 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 cad46ba215..7d9a481b49 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 >&,
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 7ab37db06f..9a869d37b5 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
(
- mesh, ppInterpList, objects, output
+ mesh, ppInterpList, objects, interpFields, output
);
convertVolFields
(
- mesh, ppInterpList, objects, output
+ mesh, ppInterpList, objects, interpFields, output
);
convertVolFields
(
- mesh, ppInterpList, objects, output
+ mesh, ppInterpList, objects, interpFields, output
);
convertVolFields
(
- mesh, ppInterpList, objects, output
+ mesh, ppInterpList, objects, interpFields, output
);
convertVolFields
(
- 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 f18d7053eb..a057afb511 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 >& ppInterpList,
const IOobjectList& objects,
+ const bool interpFields,
vtkMultiBlockDataSet* output
)
{
@@ -74,6 +75,19 @@ void Foam::vtkPV3Foam::convertVolFields
// Interpolated field (demand driven)
autoPtr > 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]
- );
}
}
}
diff --git a/bin/tools/foamConfigurePaths b/bin/tools/foamConfigurePaths
index cf1093d456..e027dca9fb 100755
--- a/bin/tools/foamConfigurePaths
+++ b/bin/tools/foamConfigurePaths
@@ -120,11 +120,17 @@ do
-archOption | --archOption)
[ "$#" -ge 2 ] || usage "'$1' option requires an argument"
archOption="$2"
- # replace WM_ARCH_OPTION=...
- _inlineSed \
- etc/bashrc \
- '/^[^#]/s@WM_ARCH_OPTION=.*@WM_ARCH_OPTION='"$archOption@" \
- "Replacing WM_ARCH_OPTION setting by '$archOption'"
+ current_archOption=`grep WM_ARCH_OPTION= etc/bashrc | sed "s/export WM_ARCH_OPTION=//"`
+ if [ "$archOption" != "$current_archOption" ]
+ then
+ # replace WM_ARCH_OPTION=...
+ _inlineSed \
+ etc/bashrc \
+ '/^[^#]/s@WM_ARCH_OPTION=.*@WM_ARCH_OPTION='"$archOption@" \
+ "Replacing WM_ARCH_OPTION setting by '$archOption'"
+ else
+ echo "WM_ARCH_OPTION already set to $archOption"
+ fi
shift 2
;;
-paraviewInstall | --paraviewInstall)
diff --git a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C
index 31729346e2..0eeb351cd4 100644
--- a/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/constraint/cyclicAMI/cyclicAMIFvPatchField.C
@@ -94,7 +94,7 @@ Foam::cyclicAMIFvPatchField::cyclicAMIFvPatchField
"cyclicAMIFvPatchField::cyclicAMIFvPatchField"
"("
"const fvPatch&, "
- "const Field&, "
+ "const DimensionedField&, "
"const dictionary&"
")",
dict
@@ -106,7 +106,7 @@ Foam::cyclicAMIFvPatchField::cyclicAMIFvPatchField
<< exit(FatalIOError);
}
- if (this->coupled())
+ if (!dict.found("value") && this->coupled())
{
this->evaluate(Pstream::blocking);
}
diff --git a/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.C b/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.C
index c058672144..e23c2d5153 100644
--- a/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.C
+++ b/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.C
@@ -367,6 +367,52 @@ Foam::scalar Foam::liquidProperties::D(scalar p, scalar T, scalar Wb) const
}
+Foam::scalar Foam::liquidProperties::pvInvert(scalar p)
+{
+ scalar T = Tc_;
+ scalar deltaT = 10.0;
+ scalar dp0 = pv(p, T) - p;
+
+
+ label n = 0;
+
+ while ((n < 200) && (mag(deltaT) > 1.0e-3))
+ {
+ n++;
+ scalar pBoil = pv(p, T);
+ scalar dp = pBoil - p;
+
+ if ((dp > 0.0) && (dp0 > 0.0))
+ {
+ T -= deltaT;
+ }
+ else
+ {
+ if ((dp < 0.0) && (dp0 < 0.0))
+ {
+ T += deltaT;
+ }
+ else
+ {
+ deltaT *= 0.5;
+ if ((dp > 0.0) && (dp0 < 0.0))
+ {
+ T -= deltaT;
+ }
+ else
+ {
+ T += deltaT;
+ }
+ }
+ }
+
+ dp0 = dp;
+ }
+
+ return T;
+}
+
+
void Foam::liquidProperties::writeData(Ostream& os) const
{
diff --git a/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.H b/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.H
index 8fa97a1e3e..b72826d5e5 100644
--- a/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.H
+++ b/src/thermophysicalModels/properties/liquidProperties/liquidProperties/liquidProperties.H
@@ -251,6 +251,10 @@ public:
//- Vapour diffussivity [m2/s] with specified binary pair
virtual scalar D(scalar p, scalar T, scalar Wb) const;
+ //- Invert the vapour pressure relationship to retrieve the
+ // boiling temperuture as a function of temperature
+ virtual scalar pvInvert(scalar p);
+
// I-O
diff --git a/tutorials/incompressible/pimpleFoam/TJunctionFan/0/p b/tutorials/incompressible/pimpleFoam/TJunctionFan/0/p
index e1512cda4f..dd968b84c5 100644
--- a/tutorials/incompressible/pimpleFoam/TJunctionFan/0/p
+++ b/tutorials/incompressible/pimpleFoam/TJunctionFan/0/p
@@ -10,6 +10,7 @@ FoamFile
version 2.0;
format ascii;
class volScalarField;
+ location "0";
object p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -23,36 +24,52 @@ boundaryField
inlet
{
type uniformTotalPressure;
+ rho none;
+ psi none;
+ gamma 1;
+ p0 40;
pressure table
(
(0 10)
(1 40)
);
- p0 40; // only used for restarts
- U U;
- phi phi;
- rho none;
- psi none;
- gamma 1;
value uniform 40;
}
-
outlet1
{
type fixedValue;
value uniform 10;
}
-
outlet2
{
type fixedValue;
value uniform 0;
}
-
+ baffles
+ {
+ type zeroGradient;
+ }
+ fan_half0
+ {
+ type fan;
+ patchType cyclic;
+ jump uniform 0;
+ f 2(100 -0.1);
+ value uniform 0;
+ }
+ fan_half1
+ {
+ type fan;
+ patchType cyclic;
+ jump uniform 0;
+ f 2(100 -0.1);
+ value uniform 0;
+ }
defaultFaces
{
type zeroGradient;
}
}
+
// ************************************************************************* //