diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index c7100518ab..1b9c242765 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -199,6 +199,7 @@ $(derivedFvPatchFields)/waveTransmissive/waveTransmissiveFvPatchFields.C
$(derivedFvPatchFields)/waveSurfacePressure/waveSurfacePressureFvPatchScalarField.C
$(derivedFvPatchFields)/interstitialInletVelocity/interstitialInletVelocityFvPatchVectorField.C
$(derivedFvPatchFields)/prghPressure/prghPressureFvPatchScalarField.C
+$(derivedFvPatchFields)/prghTotalPressure/prghTotalPressureFvPatchScalarField.C
fvsPatchFields = fields/fvsPatchFields
$(fvsPatchFields)/fvsPatchField/fvsPatchFields.C
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/prghTotalPressure/prghTotalPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/prghTotalPressure/prghTotalPressureFvPatchScalarField.C
new file mode 100644
index 0000000000..7b8789df44
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/prghTotalPressure/prghTotalPressureFvPatchScalarField.C
@@ -0,0 +1,213 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
+ \\/ 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 3 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, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "prghTotalPressureFvPatchScalarField.H"
+#include "addToRunTimeSelectionTable.H"
+#include "fvPatchFieldMapper.H"
+#include "volFields.H"
+#include "surfaceFields.H"
+#include "uniformDimensionedFields.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::prghTotalPressureFvPatchScalarField::
+prghTotalPressureFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF
+)
+:
+ fixedValueFvPatchScalarField(p, iF),
+ UName_("U"),
+ phiName_("phi"),
+ rhoName_("rho"),
+ p0_(p.size(), 0.0)
+{}
+
+
+Foam::prghTotalPressureFvPatchScalarField::
+prghTotalPressureFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ fixedValueFvPatchScalarField(p, iF),
+ UName_(dict.lookupOrDefault("U", "U")),
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rhoName", "rho")),
+ p0_("p0", dict, p.size())
+{
+ if (dict.found("value"))
+ {
+ fvPatchScalarField::operator=
+ (
+ scalarField("value", dict, p.size())
+ );
+ }
+ else
+ {
+ fvPatchField::operator=(p0_);
+ }
+}
+
+
+Foam::prghTotalPressureFvPatchScalarField::
+prghTotalPressureFvPatchScalarField
+(
+ const prghTotalPressureFvPatchScalarField& ptf,
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const fvPatchFieldMapper& mapper
+)
+:
+ fixedValueFvPatchScalarField(ptf, p, iF, mapper),
+ UName_(ptf.UName_),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_),
+ p0_(ptf.p0_, mapper)
+{}
+
+
+Foam::prghTotalPressureFvPatchScalarField::
+prghTotalPressureFvPatchScalarField
+(
+ const prghTotalPressureFvPatchScalarField& ptf
+)
+:
+ fixedValueFvPatchScalarField(ptf),
+ UName_(ptf.UName_),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_),
+ p0_(ptf.p0_)
+{}
+
+
+Foam::prghTotalPressureFvPatchScalarField::
+prghTotalPressureFvPatchScalarField
+(
+ const prghTotalPressureFvPatchScalarField& ptf,
+ const DimensionedField& iF
+)
+:
+ fixedValueFvPatchScalarField(ptf, iF),
+ UName_(ptf.UName_),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_),
+ p0_(ptf.p0_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::prghTotalPressureFvPatchScalarField::autoMap
+(
+ const fvPatchFieldMapper& m
+)
+{
+ fixedValueFvPatchScalarField::autoMap(m);
+ p0_.autoMap(m);
+}
+
+
+void Foam::prghTotalPressureFvPatchScalarField::rmap
+(
+ const fvPatchScalarField& ptf,
+ const labelList& addr
+)
+{
+ fixedValueFvPatchScalarField::rmap(ptf, addr);
+
+ const prghTotalPressureFvPatchScalarField& tiptf =
+ refCast(ptf);
+
+ p0_.rmap(tiptf.p0_, addr);
+}
+
+
+void Foam::prghTotalPressureFvPatchScalarField::updateCoeffs()
+{
+ if (updated())
+ {
+ return;
+ }
+
+ const scalarField& rhop =
+ patch().lookupPatchField(rhoName_);
+
+ const scalarField& phip =
+ patch().lookupPatchField(phiName_);
+
+ const vectorField& Up =
+ patch().lookupPatchField(UName_);
+
+ const uniformDimensionedVectorField& g =
+ db().lookupObject("g");
+
+ const uniformDimensionedScalarField& hRef =
+ db().lookupObject("hRef");
+
+ dimensionedScalar ghRef
+ (
+ mag(g.value()) > SMALL
+ ? g & (cmptMag(g.value())/mag(g.value()))*hRef
+ : dimensionedScalar("ghRef", g.dimensions()*dimLength, 0)
+ );
+
+ operator==
+ (
+ p0_
+ - 0.5*rhop*(1.0 - pos(phip))*magSqr(Up)
+ - rhop*((g.value() & patch().Cf()) - ghRef.value())
+ );
+
+ fixedValueFvPatchScalarField::updateCoeffs();
+}
+
+
+void Foam::prghTotalPressureFvPatchScalarField::write(Ostream& os) const
+{
+ fvPatchScalarField::write(os);
+ writeEntryIfDifferent(os, "U", "U", UName_);
+ writeEntryIfDifferent(os, "phi", "phi", phiName_);
+ writeEntryIfDifferent(os, "rho", "rho", rhoName_);
+ p0_.writeEntry("p0", os);
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ makePatchTypeField
+ (
+ fvPatchScalarField,
+ prghTotalPressureFvPatchScalarField
+ );
+}
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/prghTotalPressure/prghTotalPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/prghTotalPressure/prghTotalPressureFvPatchScalarField.H
new file mode 100644
index 0000000000..f809029261
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/prghTotalPressure/prghTotalPressureFvPatchScalarField.H
@@ -0,0 +1,243 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
+ \\/ 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 3 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, see .
+
+Class
+ Foam::prghTotalPressureFvPatchScalarField
+
+Group
+ grpGenericBoundaryConditions
+
+Description
+ This boundary condition provides static pressure condition for p_rgh,
+ calculated as:
+
+ \f[
+ p_rgh = p - \rho g (h - hRef)
+ \f]
+
+ where
+ \vartable
+ p_rgh | Pseudo hydrostatic pressure [Pa]
+ p | Static pressure [Pa]
+ h | Height in the opposite direction to gravity
+ hRef | Reference height in the opposite direction to gravity
+ \rho | density
+ g | acceleration due to gravity [m/s^2]
+ \endtable
+
+ \heading Patch usage
+
+ \table
+ Property | Description | Required | Default value
+ rhoName | rho field name | no | rho
+ p | static pressure | yes |
+ \endtable
+
+ Example of the boundary condition specification:
+ \verbatim
+ myPatch
+ {
+ type prghTotalPressure;
+ rhoName rho;
+ p uniform 0;
+ value uniform 0; // optional initial value
+ }
+ \endverbatim
+
+SeeAlso
+ Foam::fixedValueFvPatchScalarField
+
+SourceFiles
+ prghTotalPressureFvPatchScalarField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef prghTotalPressureFvPatchScalarField_H
+#define prghTotalPressureFvPatchScalarField_H
+
+#include "fixedValueFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class prghTotalPressureFvPatchScalarField Declaration
+\*---------------------------------------------------------------------------*/
+
+class prghTotalPressureFvPatchScalarField
+:
+ public fixedValueFvPatchScalarField
+{
+
+protected:
+
+ // Protected data
+
+ //- Name of the velocity field
+ word UName_;
+
+ //- Name of the flux transporting the field
+ word phiName_;
+
+ //- Name of phase-fraction field
+ word rhoName_;
+
+ //- Total pressure
+ scalarField p0_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("prghTotalPressure");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ prghTotalPressureFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ prghTotalPressureFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given
+ // prghTotalPressureFvPatchScalarField onto a new patch
+ prghTotalPressureFvPatchScalarField
+ (
+ const prghTotalPressureFvPatchScalarField&,
+ const fvPatch&,
+ const DimensionedField&,
+ const fvPatchFieldMapper&
+ );
+
+ //- Construct as copy
+ prghTotalPressureFvPatchScalarField
+ (
+ const prghTotalPressureFvPatchScalarField&
+ );
+
+ //- Construct and return a clone
+ virtual tmp clone() const
+ {
+ return tmp
+ (
+ new prghTotalPressureFvPatchScalarField(*this)
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ prghTotalPressureFvPatchScalarField
+ (
+ const prghTotalPressureFvPatchScalarField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual tmp clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return tmp
+ (
+ new prghTotalPressureFvPatchScalarField(*this, iF)
+ );
+ }
+
+
+ // Member functions
+
+ // Access
+
+ //- Return the rhoName
+ const word& rhoName() const
+ {
+ return rhoName_;
+ }
+
+ //- Return reference to the rhoName to allow adjustment
+ word& rhoName()
+ {
+ return rhoName_;
+ }
+
+ //- Return the total pressure
+ const scalarField& p0() const
+ {
+ return p0_;
+ }
+
+ //- Return reference to the total pressure to allow adjustment
+ scalarField& p0()
+ {
+ return p0_;
+ }
+
+
+ // Mapping functions
+
+ //- Map (and resize as needed) from self given a mapping object
+ virtual void autoMap
+ (
+ const fvPatchFieldMapper&
+ );
+
+ //- Reverse map the given fvPatchField onto this fvPatchField
+ virtual void rmap
+ (
+ const fvPatchScalarField&,
+ const labelList&
+ );
+
+
+ // Evaluation functions
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+
+ //- Write
+ virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/0/p_rgh b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/0/p_rgh
index de5ac9e437..d78578a440 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/0/p_rgh
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/0/p_rgh
@@ -22,19 +22,22 @@ boundaryField
{
inlet
{
- type fixedFluxPressure;
- value $internalField;
+ type fixedFluxPressure;
+ value $internalField;
}
outlet
{
- type prghPressure;
- p $internalField;
- value $internalField;
+ type prghTotalPressure;
+ p0 $internalField;
+ U U.air;
+ phi phi.air;
+ rho rho.air;
+ value $internalField;
}
walls
{
- type fixedFluxPressure;
- value $internalField;
+ type fixedFluxPressure;
+ value $internalField;
}
}