CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Running, Solving & CFD (
-   -   I need explanations about fixedFluxPressure (

Cyp November 30, 2010 05:15

I need explanations about fixedFluxPressure

I had a look at the fixedFluxPressure boundary condition and I am not quite sure to well understand what this BC does.

I guess I have to use this BC if I want to evaluate the pressure according to a velocity input. Am I wrong ?

Furthermore, in the code source, one can read:

        gradient() = (phip - (patch().Sf() & Up))/patch().magSf()/rAp;
I do not succeed in linking this snippet with a mathematical formula...

All enlightments are welcome!

JR22 August 19, 2013 20:36

buoyantPressure vs. fixedFluxPressure
I realize this is an old thread, but it is still very relevant.

I was having terrible problems trying to get buoyantBoussinesqSimpleFoam to converge. I changed the p_rgh BC's from buoyantPressure to fixedFluxPressure and the model started to converge.


Sherlock_1812 August 1, 2014 04:42

Same question here. What is the difference between buoyantPressure and fixedFLuxPressure boundary conditions?

zandi October 16, 2014 02:23

OpenFAOM 2.3.0 doesn't have buoyantPressure BC
OpenFAOM version 2.3.0 doesn't have buoyantPressure libraries. Am I right?
what is the difference between buoyantPressure and fixedFluxPressure?
why fixedFluxPressure converge better? is it the only difference between them?
Please help:(

fabian_roesler October 16, 2014 03:46

OpenFOAM 2.2.2 has both boundary conditions. In newer Version, buoyantPressure boundary was dismissed. For clarification have a look into the code or into Doxygen.

From buoyantPressureFvPatchScalarField we learn that:
This boundary condition sets the pressure gradient appropriately for buoyant flow. If the variable name is one of pd, p_rgh or ph_rgh, we assume that the pressure variable is and the gradient set using:
Otherwise we assume that it is the static pressure, and the gradient calculated using:

From fixedFluxPressureFvPatchScalarField we see that:
This boundary condition adjusts the pressure gradient such that the flux on the boundary is that specified by the velocity boundary condition.
The predicted flux to be compensated by the pressure gradient is evaluated as, both of which are looked-up from the database, as is the pressure diffusivity used to calculate the gradient using:

fabian_roesler October 16, 2014 04:21

Some additional remarks:

The fixedFluxPressure boundary is known do have a better convergence. This is in my opinion due to the more pressure related calculation of the gradient:
phi and phiHbyA (predicted flux field) are directly linked to pressure equation. On a wall, the flux difference tends to zero and so the boundary condition turns to zeroGradient.
The buoyanPressure boundary is more the physical method to describe the pressure gradient with Archimedes' principle.
I hope my explanation is understandable and correct.



santiagomarquezd November 5, 2014 17:06

Hi folks, I'm dealing with fixedFluxPressure BCs also and this thread was helpful. Checking the code things have changed at least in FOAM 2.3.0. The class definition is now more simple



  125 void Foam::fixedFluxPressureFvPatchScalarField::updateCoeffs
  126 (
  127    const scalarField& snGradp
  128 )
  129 {
  130    if (updated())
  131    {
  132        return;
  133    }
  135    curTimeIndex_ = this->db().time().timeIndex();
  137    gradient() = snGradp;
  138    fixedGradientFvPatchScalarField::updateCoeffs();
  139 }

it only sets the proper gradient in line 137 and then calls the updateCoeffs() method from the fixedGradientFvPatchScalarField class (from which the present class inherits). This requires to set the value of snGradp which is done at solver level. For example, from pEqn.H of interFoam we have:


  27    // Update the fixedFluxPressure BCs to ensure flux consistency
  28    setSnGrad<fixedFluxPressureFvPatchScalarField>
  29    (
  30        p_rgh.boundaryField(),
  31        (
  32            phiHbyA.boundaryField()
  33          - (mesh.Sf().boundaryField() & U.boundaryField())
  34        )/(mesh.magSf().boundaryField()*rAUf.boundaryField())
  35    );

From the new code the gradient reads:

\vec{\nabla}p = \left(\vec{H}/a_P\cdot\vec{S}_f - \vec{U}\cdot\vec{S}_f\right)\frac{(a_P)_f}{||\vec{S}_f||}

Hope this helps for 2.3.0 users.


ssss April 14, 2015 16:46

I would like to comment out a bit, why does OpenFOAM use the expression given by santiagomarquezd (gracias por el análisis del código fuente) for the pressure surface normal gradient in the boundaries.

First of all we need to write down the momentum equation discretized using the Rhie-Chow interpolation method. This reads:

\vec{u}_f   = \left( \dfrac{\vec{h}}{a_p}\right)_f  - \left( \dfrac{1}{a_p}\right)_f   \nabla p_m

Where the f subscript means interpolate to the face, p_m is the variable p_rgh whose value is p_m=p-\rho \vec{g} \cdot \vec{h}, and the vector u is the velocity. Now multiply the equation by the face surface vector \vec{S}_f = ||S_f|| \cdot \vec{n} where the vector n is the surface normal:

\vec{u}_f \cdot \vec{S}_f   = \left( \dfrac{\vec{h}}{a_p}\right)_f \cdot  \vec{S}_f  - \left( \dfrac{1}{a_p}\right)_f   \nabla p_m \cdot  \vec{S_f}

Thus the following equation for the pressure surface gradient \nabla p_m \cdot \vec{n} can be obtained:

\nabla p_m \cdot \vec{n} =\left ( \left( \dfrac{\vec{h}}{a_p}\right)_f \cdot  \vec{S}_f - \vec{u}_f \cdot \vec{S}_f \right) \dfrac{a_p|_f}{||S_f||}

Hope this is useful for you foamers

All times are GMT -4. The time now is 10:42.